chiark / gitweb /
Add back the ultimaker platform, and made the platform mesh simpler.
[cura.git] / Cura / slice / cura_sf / fabmetheus_utilities / geometry / solids / cube.py
1 """
2 Boolean geometry cube.
3
4 """
5
6
7 from __future__ import absolute_import
8
9 from fabmetheus_utilities.geometry.creation import solid
10 from fabmetheus_utilities.geometry.geometry_utilities import evaluate
11 from fabmetheus_utilities.geometry.solids import triangle_mesh
12 from fabmetheus_utilities.vector3 import Vector3
13
14
15 __author__ = 'Enrique Perez (perez_enrique@yahoo.com)'
16 __credits__ = 'Nophead <http://hydraraptor.blogspot.com/>\nArt of Illusion <http://www.artofillusion.org/>'
17 __date__ = '$Date: 2008/21/04 $'
18 __license__ = 'GNU Affero General Public License http://www.gnu.org/licenses/agpl.html'
19
20
21 def addCube(elementNode, faces, inradius, vertexes):
22         'Add cube by inradius.'
23         square = [
24                 complex(-inradius.x, -inradius.y),
25                 complex(inradius.x, -inradius.y),
26                 complex(inradius.x, inradius.y),
27                 complex(-inradius.x, inradius.y)]
28         bottomTopSquare = triangle_mesh.getAddIndexedLoops(square, vertexes, [-inradius.z, inradius.z])
29         triangle_mesh.addPillarByLoops(faces, bottomTopSquare)
30
31 def getGeometryOutput(elementNode, inradius):
32         'Get cube triangle mesh by inradius.'
33         faces = []
34         vertexes = []
35         addCube(elementNode, faces, inradius, vertexes)
36         return {'trianglemesh' : {'vertex' : vertexes, 'face' : faces}}
37
38 def getNewDerivation(elementNode):
39         'Get new derivation.'
40         return CubeDerivation(elementNode)
41
42 def processElementNode(elementNode):
43         'Process the xml element.'
44         evaluate.processArchivable(Cube, elementNode)
45
46
47 class Cube(triangle_mesh.TriangleMesh):
48         'A cube object.'
49         def addXMLSection(self, depth, output):
50                 'Add the xml section for this object.'
51                 pass
52
53         def createShape(self):
54                 'Create the shape.'
55                 addCube(self.elementNode, self.faces, self.inradius, self.vertexes)
56
57         def setToElementNode(self, elementNode):
58                 'Set to elementNode.'
59                 attributes = elementNode.attributes
60                 self.elementNode = elementNode
61                 self.inradius = CubeDerivation(elementNode).inradius
62                 attributes['inradius.x'] = self.inradius.x
63                 attributes['inradius.y'] = self.inradius.y
64                 attributes['inradius.z'] = self.inradius.z
65                 if 'inradius' in attributes:
66                         del attributes['inradius']
67                 self.createShape()
68                 solid.processArchiveRemoveSolid(elementNode, self.getGeometryOutput())
69
70
71 class CubeDerivation(object):
72         "Class to hold cube variables."
73         def __init__(self, elementNode):
74                 'Set defaults.'
75                 self.inradius = evaluate.getVector3ByPrefixes(elementNode, ['demisize', 'inradius'], Vector3(1.0, 1.0, 1.0))
76                 self.inradius = evaluate.getVector3ByMultiplierPrefix(elementNode, 2.0, 'size', self.inradius)