self.glCanvas.Refresh()\r
\r
def updateModelTransform(self, f=0):\r
- rotate = profile.getProfileSettingFloat('model_rotate_base') / 180.0 * math.pi\r
- scaleX = 1.0\r
- scaleY = 1.0\r
- scaleZ = 1.0\r
- if profile.getProfileSetting('flip_x') == 'True':\r
- scaleX = -scaleX\r
- if profile.getProfileSetting('flip_y') == 'True':\r
- scaleY = -scaleY\r
- if profile.getProfileSetting('flip_z') == 'True':\r
- scaleZ = -scaleZ\r
- swapXZ = profile.getProfileSetting('swap_xz') == 'True'\r
- swapYZ = profile.getProfileSetting('swap_yz') == 'True'\r
- mat00 = math.cos(rotate) * scaleX\r
- mat01 =-math.sin(rotate) * scaleY\r
- mat10 = math.sin(rotate) * scaleX\r
- mat11 = math.cos(rotate) * scaleY\r
- \r
if len(self.objectList) < 1 or self.objectList[0].mesh == None:\r
return\r
+ \r
+ rotate = profile.getProfileSettingFloat('model_rotate_base')\r
+ mirrorX = profile.getProfileSetting('flip_x') == 'True'\r
+ mirrorY = profile.getProfileSetting('flip_y') == 'True'\r
+ mirrorZ = profile.getProfileSetting('flip_z') == 'True'\r
+ swapXZ = profile.getProfileSetting('swap_xz') == 'True'\r
+ swapYZ = profile.getProfileSetting('swap_yz') == 'True'\r
\r
for obj in self.objectList:\r
if obj.mesh == None:\r
continue\r
- \r
- for i in xrange(0, len(obj.mesh.origonalVertexes)):\r
- x = obj.mesh.origonalVertexes[i].x\r
- y = obj.mesh.origonalVertexes[i].y\r
- z = obj.mesh.origonalVertexes[i].z\r
- if swapXZ:\r
- x, z = z, x\r
- if swapYZ:\r
- y, z = z, y\r
- obj.mesh.vertexes[i].x = x * mat00 + y * mat01\r
- obj.mesh.vertexes[i].y = x * mat10 + y * mat11\r
- obj.mesh.vertexes[i].z = z * scaleZ\r
-\r
- for face in obj.mesh.faces:\r
- v1 = face.v[0]\r
- v2 = face.v[1]\r
- v3 = face.v[2]\r
- face.normal = (v2 - v1).cross(v3 - v1)\r
- face.normal.normalize()\r
+ obj.mesh.setRotateMirror(rotate, mirrorX, mirrorY, mirrorZ, swapXZ, swapYZ)\r
\r
minV = self.objectList[0].mesh.getMinimum()\r
maxV = self.objectList[0].mesh.getMaximum()\r
return True\r
\r
def updateModelTransform(self):\r
- rotate = self.rotate / 180.0 * math.pi\r
- scaleX = 1.0\r
- scaleY = 1.0\r
- scaleZ = 1.0\r
- if self.flipX:\r
- scaleX = -scaleX\r
- if self.flipY:\r
- scaleY = -scaleY\r
- if self.flipZ:\r
- scaleZ = -scaleZ\r
- swapXZ = self.swapXZ\r
- swapYZ = self.swapYZ\r
- mat00 = math.cos(rotate) * scaleX\r
- mat01 =-math.sin(rotate) * scaleY\r
- mat10 = math.sin(rotate) * scaleX\r
- mat11 = math.cos(rotate) * scaleY\r
- \r
- for i in xrange(0, len(self.origonalVertexes)):\r
- x = self.origonalVertexes[i].x\r
- y = self.origonalVertexes[i].y\r
- z = self.origonalVertexes[i].z\r
- if swapXZ:\r
- x, z = z, x\r
- if swapYZ:\r
- y, z = z, y\r
- self.vertexes[i].x = x * mat00 + y * mat01\r
- self.vertexes[i].y = x * mat10 + y * mat11\r
- self.vertexes[i].z = z * scaleZ\r
-\r
- for face in self.faces:\r
- v1 = face.v[0]\r
- v2 = face.v[1]\r
- v3 = face.v[2]\r
- face.normal = (v2 - v1).cross(v3 - v1)\r
- face.normal.normalize()\r
-\r
- minZ = self.getMinimumZ()\r
- minV = self.getMinimum()\r
- maxV = self.getMaximum()\r
- for v in self.vertexes:\r
- v.z -= minZ\r
- v.x -= minV.x + (maxV.x - minV.x) / 2\r
- v.y -= minV.y + (maxV.y - minV.y) / 2\r
- self.getMinimumZ()\r
+ self.setRotateMirror(self.rotate, self.flipX, self.flipY, self.flipZ, self.swapXZ, self.swapYZ)\r
self.modelDirty = True\r
\r
def clone(self):\r
--- /dev/null
+from __future__ import absolute_import
+import __init__
+
+import sys
+import math
+import re
+import os
+import struct
+
+from util import util3d
+
+class meshFace(object):
+ def __init__(self, v0, v1, v2):
+ self.v = [v0, v1, v2]
+
+class mesh(object):
+ def __init__(self):
+ self.faces = []
+ self.vertexes = []
+
+ def addFace(self, v0, v1, v2):
+ self.faces.append(meshFace(v0, v1, v2))
+ self.vertexes.append(v0)
+ self.vertexes.append(v1)
+ self.vertexes.append(v2)
+
+ def _createOrigonalVertexCopy(self):
+ self.origonalVertexes = list(self.vertexes)
+ for i in xrange(0, len(self.origonalVertexes)):
+ self.origonalVertexes[i] = self.origonalVertexes[i].copy()
+ self.getMinimumZ()
+
+ def getMinimumZ(self):
+ minv = self.vertexes[0].copy()
+ maxv = self.vertexes[0].copy()
+ for v in self.vertexes:
+ minv.x = min(minv.x, v.x)
+ minv.y = min(minv.y, v.y)
+ minv.z = min(minv.z, v.z)
+ maxv.x = max(maxv.x, v.x)
+ maxv.y = max(maxv.y, v.y)
+ maxv.z = max(maxv.z, v.z)
+ self.min = minv
+ self.max = maxv
+ self.size = maxv - minv
+ return self.min.z
+
+ def getMaximum(self):
+ return self.max
+ def getMinimum(self):
+ return self.min
+ def getSize(self):
+ return self.size
+
+ def setRotateMirror(self, rotate, mirrorX, mirrorY, mirrorZ, swapXZ, swapYZ):
+ rotate = rotate / 180.0 * math.pi
+ scaleX = 1.0
+ scaleY = 1.0
+ scaleZ = 1.0
+ if mirrorX:
+ scaleX = -scaleX
+ if mirrorY:
+ scaleY = -scaleY
+ if mirrorZ:
+ scaleZ = -scaleZ
+ mat00 = math.cos(rotate) * scaleX
+ mat01 =-math.sin(rotate) * scaleY
+ mat10 = math.sin(rotate) * scaleX
+ mat11 = math.cos(rotate) * scaleY
+
+ for i in xrange(0, len(self.origonalVertexes)):
+ x = self.origonalVertexes[i].x
+ y = self.origonalVertexes[i].y
+ z = self.origonalVertexes[i].z
+ if swapXZ:
+ x, z = z, x
+ if swapYZ:
+ y, z = z, y
+ self.vertexes[i].x = x * mat00 + y * mat01
+ self.vertexes[i].y = x * mat10 + y * mat11
+ self.vertexes[i].z = z * scaleZ
+
+ for face in self.faces:
+ v1 = face.v[0]
+ v2 = face.v[1]
+ v3 = face.v[2]
+ face.normal = (v2 - v1).cross(v3 - v1)
+ face.normal.normalize()
+
+ minZ = self.getMinimumZ()
+ minV = self.getMinimum()
+ maxV = self.getMaximum()
+ for v in self.vertexes:
+ v.z -= minZ
+ v.x -= minV.x + (maxV.x - minV.x) / 2
+ v.y -= minV.y + (maxV.y - minV.y) / 2
+ self.getMinimumZ()
+
+if __name__ == '__main__':
+ for filename in sys.argv[1:]:
+ stlModel().load(filename)
import struct
from util import util3d
+from util import mesh
-class stlFace(object):
- def __init__(self, v0, v1, v2):
- self.v = [v0, v1, v2]
-
-class stlModel(object):
+class stlModel(mesh.mesh):
def __init__(self):
- self.faces = []
- self.vertexes = []
+ super(stlModel, self).__init__()
def load(self, filename):
f = open(filename, "rb")
cnt = 2
elif cnt == 2:
v2 = util3d.Vector3(float(data[1]), float(data[2]), float(data[3]))
- self.faces.append(stlFace(v0, v1, v2))
- self.vertexes.append(v0)
- self.vertexes.append(v1)
- self.vertexes.append(v2)
+ self.addFace(v0, v1, v2)
cnt = 0
def _loadBinary(self, f):
v0 = util3d.Vector3(data[3], data[4], data[5])
v1 = util3d.Vector3(data[6], data[7], data[8])
v2 = util3d.Vector3(data[9], data[10], data[11])
- self.faces.append(stlFace(v0, v1, v2))
- self.vertexes.append(v0)
- self.vertexes.append(v1)
- self.vertexes.append(v2)
-
- def _createOrigonalVertexCopy(self):
- self.origonalVertexes = list(self.vertexes)
- for i in xrange(0, len(self.origonalVertexes)):
- self.origonalVertexes[i] = self.origonalVertexes[i].copy()
- self.getMinimumZ()
-
- def getMinimumZ(self):
- minv = self.vertexes[0].copy()
- maxv = self.vertexes[0].copy()
- for v in self.vertexes:
- minv.x = min(minv.x, v.x)
- minv.y = min(minv.y, v.y)
- minv.z = min(minv.z, v.z)
- maxv.x = max(maxv.x, v.x)
- maxv.y = max(maxv.y, v.y)
- maxv.z = max(maxv.z, v.z)
- self.min = minv
- self.max = maxv
- self.size = maxv - minv
- return self.min.z
-
- def getMaximum(self):
- return self.max
- def getMinimum(self):
- return self.min
- def getSize(self):
- return self.size
+ self.addFace(v0, v1, v2)
if __name__ == '__main__':
for filename in sys.argv[1:]: