void ofxSVG::setupShape(struct svgtiny_shape * shape, ofPath & path){ float * p = shape->path; path.setFilled(false); if(shape->fill != svgtiny_TRANSPARENT){ path.setFilled(true); path.setFillHexColor(shape->fill); ofColor color = path.getFillColor(); color.a = shape->opacity*255; path.setColor(color); path.setPolyWindingMode(OF_POLY_WINDING_ODD); } if(shape->stroke != svgtiny_TRANSPARENT){ path.setStrokeWidth(shape->stroke_width); path.setStrokeHexColor(shape->stroke); } for(int i = 0; i < (int)shape->path_length;){ if(p[i] == svgtiny_PATH_MOVE){ path.moveTo(p[i + 1], p[i + 2]); i += 3; } else if(p[i] == svgtiny_PATH_CLOSE){ path.close(); i += 1; } else if(p[i] == svgtiny_PATH_LINE){ path.lineTo(p[i + 1], p[i + 2]); i += 3; } else if(p[i] == svgtiny_PATH_BEZIER){ path.bezierTo(p[i + 1], p[i + 2], p[i + 3], p[i + 4], p[i + 5], p[i + 6]); i += 7; } else{ ofLogError("ofxSVG") << "setupShape(): SVG parse error"; i += 1; } } ofRectangle pathBoundingBox = getBoundingBoxOfPath(path); if(pathBoundingBox.getArea() != 0.0){ if(boundingBox.getArea() == 0.0){ boundingBox = pathBoundingBox; } else{ boundingBox.growToInclude(pathBoundingBox); } } }
void Svg::setupShape(struct svgtiny_shape * shape, ofPath & path){ float* p = shape->path; path.setFilled(false); if(shape->fill != svgtiny_TRANSPARENT){ path.setFilled(true); path.setFillHexColor(shape->fill); path.setPolyWindingMode(OF_POLY_WINDING_NONZERO); } if(shape->stroke != svgtiny_TRANSPARENT){ path.setStrokeWidth(shape->stroke_width); path.setStrokeHexColor(shape->stroke); } for(int i = 0; i < (int)shape->path_length;){ if(p[i] == svgtiny_PATH_MOVE){ path.moveTo(p[i + 1], p[i + 2]); i += 3; } else if(p[i] == svgtiny_PATH_CLOSE){ path.close(); i += 1; } else if(p[i] == svgtiny_PATH_LINE){ path.lineTo(p[i + 1], p[i + 2]); i += 3; } else if(p[i] == svgtiny_PATH_BEZIER){ path.bezierTo(p[i + 1], p[i + 2], p[i + 3], p[i + 4], p[i + 5], p[i + 6]); i += 7; } else{ ofLogError("Svg") << "setupShape(): SVG parse error"; i += 1; } } }