// 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; } }
// 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; } }