Esempio n. 1
0
    // Parse the file specified by the path parameter
    public void importSVG(string path)
    {
        SVGElement element = new SVGElement();
        TextAsset svgTextAsset = (TextAsset)Resources.Load("SVG/"+path); //load svg file as textasset
        string SVGData = svgTextAsset.text;

        // Remove superfluos characters
        SVGData = cleanString (SVGData);

        // Extract individual elements
        string[] SVGElements = SVGData.Split('<');
        // Parse each element according to its type
        for (int i = 0; i < SVGElements.Length - 1; i++)
        {
            // Extract element type
            string e = SVGElements[i].Split (' ')[0];
            // Ignore empty strings and end tags
            if(e.Length > 0 && e[0] == '/')
                continue;

            switch(e)
            {
            case "polygon":
                element = new SVGPolygon(SVGElements[i]);
                type = SVGType.polygon;
                break;
                //Not supported in sample
            /*case "path":
                element = new SVGPath(SVGElements[i]);
                type = SVGType.path;
                break;
            case "circle":
                element = new SVGCircle(SVGElements[i]);
                type = SVGType.circle;
                break;
            case "ellipse":
                element = new SVGEllipse(SVGElements[i]);
                type = SVGType.ellipse;
                break;
            case "rect":
                element = new SVGRect(SVGElements[i]);
                type = SVGType.rect;
                break;
            case "line":
                element = new SVGLine(SVGElements[i]);
                type = SVGType.line;
                break;
            case "text":
                element = new SVGText(SVGElements[i]);
                type = SVGType.text;
                break;*/
            default:
                if (!(String.IsNullOrEmpty(e) || e != "svg")) break;
                    Debug.Log ("Element '" + SVGElements[i] + "' not recognised");
                break;
            }

            // Access element points
            List<Vector2> points = element.points;

            // Move on if there is no mesh to generate
            if ((points.Count == 0 && type != SVGType.text) || type == SVGType.none)
            {
                continue;
            }

            // Call mesh creation functions

            // Text mesh
            if(type == SVGType.text)
            {
                createText (element.id, element.singlePoint, element.fill, element.opacity, element.textString, element.fontSize, element.fontType, i);
            }
            // Line mesh
            else if(type == SVGType.line)
            {
                createMesh (element.strokePoints, element.stroke, element.opacity, i, element.id);
            }
            // All others
            else
            {
                // Create primary mesh
                createMesh (element.points, element.fill, element.opacity, i+1, element.id);
                // Create stroke mesh only if there are enough points
                if(element.strokePoints.Count > 2)
                    createMesh (element.strokePoints, element.stroke, element.opacity, i, element.id);
            }
            // reset type to default
            type = SVGType.none;
        }
    }
Esempio n. 2
0
    // Parse the file specified by the path parameter
    public void importSVG(string path)
    {
        SVGElement element      = new SVGElement();
        TextAsset  svgTextAsset = (TextAsset)Resources.Load("SVG/" + path); //load svg file as textasset
        string     SVGData      = svgTextAsset.text;

        // Remove superfluos characters
        SVGData = cleanString(SVGData);

        // Extract individual elements
        string[] SVGElements = SVGData.Split('<');
        // Parse each element according to its type
        for (int i = 0; i < SVGElements.Length - 1; i++)
        {
            // Extract element type
            string e = SVGElements[i].Split(' ')[0];
            // Ignore empty strings and end tags
            if (e.Length > 0 && e[0] == '/')
            {
                continue;
            }

            switch (e)
            {
            case "polygon":
                element = new SVGPolygon(SVGElements[i]);
                type    = SVGType.polygon;
                break;

            //Not supported in sample

            /*case "path":
             *  element = new SVGPath(SVGElements[i]);
             *  type = SVGType.path;
             *  break;
             * case "circle":
             *  element = new SVGCircle(SVGElements[i]);
             *  type = SVGType.circle;
             *  break;
             * case "ellipse":
             *  element = new SVGEllipse(SVGElements[i]);
             *  type = SVGType.ellipse;
             *  break;
             * case "rect":
             *  element = new SVGRect(SVGElements[i]);
             *  type = SVGType.rect;
             *  break;
             * case "line":
             *  element = new SVGLine(SVGElements[i]);
             *  type = SVGType.line;
             *  break;
             * case "text":
             *  element = new SVGText(SVGElements[i]);
             *  type = SVGType.text;
             *  break;*/
            default:
                if (!(String.IsNullOrEmpty(e) || e != "svg"))
                {
                    break;
                }
                Debug.Log("Element '" + SVGElements[i] + "' not recognised");
                break;
            }

            // Access element points
            List <Vector2> points = element.points;

            // Move on if there is no mesh to generate
            if ((points.Count == 0 && type != SVGType.text) || type == SVGType.none)
            {
                continue;
            }

            // Call mesh creation functions

            // Text mesh
            if (type == SVGType.text)
            {
                createText(element.id, element.singlePoint, element.fill, element.opacity, element.textString, element.fontSize, element.fontType, i);
            }
            // Line mesh
            else if (type == SVGType.line)
            {
                createMesh(element.strokePoints, element.stroke, element.opacity, i, element.id);
            }
            // All others
            else
            {
                // Create primary mesh
                createMesh(element.points, element.fill, element.opacity, i + 1, element.id);
                // Create stroke mesh only if there are enough points
                if (element.strokePoints.Count > 2)
                {
                    createMesh(element.strokePoints, element.stroke, element.opacity, i, element.id);
                }
            }
            // reset type to default
            type = SVGType.none;
        }
    }