chiark / gitweb /
Add back the ultimaker platform, and made the platform mesh simpler.
[cura.git] / Cura / slice / cura_sf / fabmetheus_utilities / geometry / geometry_tools / path_elements / arc.py
1 """
2 Arc vertexes.
3
4 From:
5 http://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands
6
7 """
8
9 from __future__ import absolute_import
10
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
15 import math
16
17
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'
22
23
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)
33         path = []
34         if len(arcComplexes) < 1:
35                 return []
36         incrementZ = (end.z - begin.z) / float(len(arcComplexes))
37         z = begin.z
38         for pointIndex in xrange(len(arcComplexes)):
39                 pointComplex = arcComplexes[pointIndex]
40                 z += incrementZ
41                 path.append(Vector3(pointComplex.real, pointComplex.imag, z))
42         if len(path) > 0:
43                 path[-1] = end
44         return path
45
46 def processElementNode(elementNode):
47         "Process the xml element."
48         elementNode.parentNode.xmlObject.vertexes += getArcPath(elementNode)