7 from __future__ import absolute_import
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
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'
21 def addCube(elementNode, faces, inradius, vertexes):
22 'Add cube by inradius.'
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)
31 def getGeometryOutput(elementNode, inradius):
32 'Get cube triangle mesh by inradius.'
35 addCube(elementNode, faces, inradius, vertexes)
36 return {'trianglemesh' : {'vertex' : vertexes, 'face' : faces}}
38 def getNewDerivation(elementNode):
40 return CubeDerivation(elementNode)
42 def processElementNode(elementNode):
43 'Process the xml element.'
44 evaluate.processArchivable(Cube, elementNode)
47 class Cube(triangle_mesh.TriangleMesh):
49 def addXMLSection(self, depth, output):
50 'Add the xml section for this object.'
53 def createShape(self):
55 addCube(self.elementNode, self.faces, self.inradius, self.vertexes)
57 def setToElementNode(self, 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']
68 solid.processArchiveRemoveSolid(elementNode, self.getGeometryOutput())
71 class CubeDerivation(object):
72 "Class to hold cube variables."
73 def __init__(self, elementNode):
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)