5 http://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands
9 from __future__ import absolute_import
11 from fabmetheus_utilities.geometry.creation import lineation
12 from fabmetheus_utilities.geometry.geometry_utilities import evaluate
13 from fabmetheus_utilities.vector3 import Vector3
14 from fabmetheus_utilities import svg_reader
18 __author__ = 'Enrique Perez (perez_enrique@yahoo.com)'
19 __credits__ = 'Art of Illusion <http://www.artofillusion.org/>'
20 __date__ = '$Date: 2008/02/05 $'
21 __license__ = 'GNU Affero General Public License http://www.gnu.org/licenses/agpl.html'
24 def getArcPath(elementNode):
25 "Get the arc path.rx ry x-axis-rotation large-arc-flag sweep-flag"
26 begin = elementNode.getPreviousVertex(Vector3())
27 end = evaluate.getVector3FromElementNode(elementNode)
28 largeArcFlag = evaluate.getEvaluatedBoolean(True, elementNode, 'largeArcFlag')
29 radius = lineation.getComplexByPrefix(elementNode, 'radius', complex(1.0, 1.0))
30 sweepFlag = evaluate.getEvaluatedBoolean(True, elementNode, 'sweepFlag')
31 xAxisRotation = math.radians(evaluate.getEvaluatedFloat(0.0, elementNode, 'xAxisRotation'))
32 arcComplexes = svg_reader.getArcComplexes(begin.dropAxis(), end.dropAxis(), largeArcFlag, radius, sweepFlag, xAxisRotation)
34 if len(arcComplexes) < 1:
36 incrementZ = (end.z - begin.z) / float(len(arcComplexes))
38 for pointIndex in xrange(len(arcComplexes)):
39 pointComplex = arcComplexes[pointIndex]
41 path.append(Vector3(pointComplex.real, pointComplex.imag, z))
46 def processElementNode(elementNode):
47 "Process the xml element."
48 elementNode.parentNode.xmlObject.vertexes += getArcPath(elementNode)