Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
102c7e35f9
1 changed files with 37 additions and 48 deletions
|
@ -112,19 +112,19 @@ class previewPanel(wx.Panel):
|
|||
|
||||
def OnMulXAddClick(self, e):
|
||||
profile.putProfileSetting('model_multiply_x', str(max(1, int(profile.getProfileSetting('model_multiply_x'))+1)))
|
||||
self.updateModelTransform()
|
||||
self.glCanvas.Refresh()
|
||||
|
||||
def OnMulXSubClick(self, e):
|
||||
profile.putProfileSetting('model_multiply_x', str(max(1, int(profile.getProfileSetting('model_multiply_x'))-1)))
|
||||
self.updateModelTransform()
|
||||
self.glCanvas.Refresh()
|
||||
|
||||
def OnMulYAddClick(self, e):
|
||||
profile.putProfileSetting('model_multiply_y', str(max(1, int(profile.getProfileSetting('model_multiply_y'))+1)))
|
||||
self.updateModelTransform()
|
||||
self.glCanvas.Refresh()
|
||||
|
||||
def OnMulYSubClick(self, e):
|
||||
profile.putProfileSetting('model_multiply_y', str(max(1, int(profile.getProfileSetting('model_multiply_y'))-1)))
|
||||
self.updateModelTransform()
|
||||
self.glCanvas.Refresh()
|
||||
|
||||
def OnScaleReset(self, e):
|
||||
self.scale.SetValue('1.0')
|
||||
|
@ -133,11 +133,9 @@ class previewPanel(wx.Panel):
|
|||
def OnScale(self, e):
|
||||
scale = 1.0
|
||||
if self.scale.GetValue() != '':
|
||||
scale = float(self.scale.GetValue())
|
||||
if scale <= 0.0:
|
||||
scale = 1.0
|
||||
scale = self.scale.GetValue()
|
||||
profile.putProfileSetting('model_scale', scale)
|
||||
self.updateModelTransform()
|
||||
self.glCanvas.Refresh()
|
||||
|
||||
def OnScaleMax(self, e):
|
||||
if self.triangleMesh == None:
|
||||
|
@ -153,7 +151,7 @@ class previewPanel(wx.Panel):
|
|||
scale = min(scaleX1, scaleY1, scaleX2, scaleY2, scaleZ)
|
||||
self.scale.SetValue(str(scale))
|
||||
profile.putProfileSetting('model_scale', self.scale.GetValue())
|
||||
self.updateModelTransform()
|
||||
self.glCanvas.Refresh()
|
||||
|
||||
def OnRotateReset(self, e):
|
||||
self.rotate.SetValue(0)
|
||||
|
@ -183,12 +181,10 @@ class previewPanel(wx.Panel):
|
|||
|
||||
def updateCenterX(self, x):
|
||||
self.machineCenter.x = x
|
||||
self.moveModel()
|
||||
self.glCanvas.Refresh()
|
||||
|
||||
def updateCenterY(self, y):
|
||||
self.machineCenter.y = y
|
||||
self.moveModel()
|
||||
self.glCanvas.Refresh()
|
||||
|
||||
def setViewMode(self, mode):
|
||||
|
@ -290,16 +286,10 @@ class previewPanel(wx.Panel):
|
|||
def updateModelTransform(self, f=0):
|
||||
if self.triangleMesh == None:
|
||||
return
|
||||
scale = 1.0
|
||||
rotate = 0.0
|
||||
try:
|
||||
scale = profile.getProfileSettingFloat('model_scale')
|
||||
rotate = profile.getProfileSettingFloat('model_rotate_base') / 180.0 * math.pi
|
||||
except:
|
||||
pass
|
||||
scaleX = scale
|
||||
scaleY = scale
|
||||
scaleZ = scale
|
||||
rotate = profile.getProfileSettingFloat('model_rotate_base') / 180.0 * math.pi
|
||||
scaleX = 1.0
|
||||
scaleY = 1.0
|
||||
scaleZ = 1.0
|
||||
if profile.getProfileSetting('flip_x') == 'True':
|
||||
scaleX = -scaleX
|
||||
if profile.getProfileSetting('flip_y') == 'True':
|
||||
|
@ -332,11 +322,6 @@ class previewPanel(wx.Panel):
|
|||
face.normal = (v2 - v1).cross(v3 - v1)
|
||||
face.normal.normalize()
|
||||
|
||||
self.moveModel()
|
||||
|
||||
def moveModel(self):
|
||||
if self.triangleMesh == None:
|
||||
return
|
||||
minZ = self.triangleMesh.getMinimumZ()
|
||||
min = self.triangleMesh.getMinimum()
|
||||
max = self.triangleMesh.getMaximum()
|
||||
|
@ -344,8 +329,6 @@ class previewPanel(wx.Panel):
|
|||
v.z -= minZ
|
||||
v.x -= min.x + (max.x - min.x) / 2
|
||||
v.y -= min.y + (max.y - min.y) / 2
|
||||
v.x += self.machineCenter.x
|
||||
v.y += self.machineCenter.y
|
||||
self.triangleMesh.getMinimumZ()
|
||||
self.modelDirty = True
|
||||
self.glCanvas.Refresh()
|
||||
|
@ -528,21 +511,12 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
|
|||
self.modelDisplayList = glGenLists(1);
|
||||
if self.parent.modelDirty:
|
||||
self.parent.modelDirty = False
|
||||
multiX = int(profile.getProfileSetting('model_multiply_x'))
|
||||
multiY = int(profile.getProfileSetting('model_multiply_y'))
|
||||
modelSize = self.parent.triangleMesh.getMaximum() - self.parent.triangleMesh.getMinimum()
|
||||
glNewList(self.modelDisplayList, GL_COMPILE)
|
||||
glPushMatrix()
|
||||
glTranslate(-(modelSize.x+10)*(multiX-1)/2,-(modelSize.y+10)*(multiY-1)/2, 0)
|
||||
for mx in xrange(0, multiX):
|
||||
for my in xrange(0, multiY):
|
||||
glPushMatrix()
|
||||
glTranslate((modelSize.x+10)*mx,(modelSize.y+10)*my, 0)
|
||||
opengl.DrawSTL(self.parent.triangleMesh)
|
||||
glPopMatrix()
|
||||
glPopMatrix()
|
||||
opengl.DrawSTL(self.parent.triangleMesh)
|
||||
glEndList()
|
||||
|
||||
glTranslate(self.parent.machineCenter.x, self.parent.machineCenter.y, 0)
|
||||
glEnable(GL_NORMALIZE)
|
||||
if self.viewMode == "Transparent" or self.viewMode == "Mixed":
|
||||
glLightfv(GL_LIGHT0, GL_DIFFUSE, [0.5, 0.4, 0.3, 1.0])
|
||||
glLightfv(GL_LIGHT0, GL_AMBIENT, [0.1, 0.1, 0.1, 0.0])
|
||||
|
@ -551,7 +525,7 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
|
|||
glDisable(GL_BLEND)
|
||||
glDisable(GL_LIGHTING)
|
||||
glColor3f(0,0,0)
|
||||
glCallList(self.modelDisplayList)
|
||||
self.drawModel()
|
||||
glColor3f(1,1,1)
|
||||
#After the black model is rendered, render the model again but now with lighting and no depth testing.
|
||||
glDisable(GL_DEPTH_TEST)
|
||||
|
@ -559,23 +533,23 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
|
|||
glEnable(GL_BLEND)
|
||||
glBlendFunc(GL_ONE, GL_ONE)
|
||||
glEnable(GL_LIGHTING)
|
||||
glCallList(self.modelDisplayList)
|
||||
self.drawModel()
|
||||
elif self.viewMode == "X-Ray":
|
||||
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE)
|
||||
glDisable(GL_DEPTH_TEST)
|
||||
glEnable(GL_STENCIL_TEST);
|
||||
glStencilFunc(GL_ALWAYS, 1, 1)
|
||||
glStencilOp(GL_INCR, GL_INCR, GL_INCR)
|
||||
glCallList(self.modelDisplayList)
|
||||
self.drawModel()
|
||||
glStencilOp (GL_KEEP, GL_KEEP, GL_KEEP);
|
||||
|
||||
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE)
|
||||
glStencilFunc(GL_EQUAL, 0, 1);
|
||||
glColor(1, 1, 1)
|
||||
glCallList(self.modelDisplayList)
|
||||
self.drawModel()
|
||||
glStencilFunc(GL_EQUAL, 1, 1);
|
||||
glColor(1, 0, 0)
|
||||
glCallList(self.modelDisplayList)
|
||||
self.drawModel()
|
||||
|
||||
glPushMatrix()
|
||||
glLoadIdentity()
|
||||
|
@ -605,18 +579,33 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
|
|||
glLightfv(GL_LIGHT0, GL_DIFFUSE, [1.0, 0.8, 0.6, 1.0])
|
||||
glLightfv(GL_LIGHT0, GL_AMBIENT, [0.2, 0.2, 0.2, 0.0])
|
||||
glEnable(GL_LIGHTING)
|
||||
glCallList(self.modelDisplayList)
|
||||
self.drawModel()
|
||||
|
||||
if self.viewMode == "Normal" or self.viewMode == "Transparent" or self.viewMode == "X-Ray":
|
||||
glDisable(GL_LIGHTING)
|
||||
glDisable(GL_DEPTH_TEST)
|
||||
glDisable(GL_BLEND)
|
||||
glColor3f(1,0,0)
|
||||
glTranslate(self.parent.machineCenter.x, self.parent.machineCenter.y, 0)
|
||||
glBegin(GL_LINES)
|
||||
for err in self.parent.errorList:
|
||||
glVertex3f(err[0].x, err[0].y, err[0].z)
|
||||
glVertex3f(err[1].x, err[1].y, err[1].z)
|
||||
glEnd()
|
||||
|
||||
glFlush()
|
||||
|
||||
def drawModel(self):
|
||||
multiX = int(profile.getProfileSetting('model_multiply_x'))
|
||||
multiY = int(profile.getProfileSetting('model_multiply_y'))
|
||||
modelScale = profile.getProfileSettingFloat('model_scale')
|
||||
modelSize = (self.parent.triangleMesh.getMaximum() - self.parent.triangleMesh.getMinimum()) * modelScale
|
||||
glPushMatrix()
|
||||
glTranslate(-(modelSize.x+10)*(multiX-1)/2,-(modelSize.y+10)*(multiY-1)/2, 0)
|
||||
for mx in xrange(0, multiX):
|
||||
for my in xrange(0, multiY):
|
||||
glPushMatrix()
|
||||
glTranslate((modelSize.x+10)*mx,(modelSize.y+10)*my, 0)
|
||||
glScalef(modelScale, modelScale, modelScale)
|
||||
glCallList(self.modelDisplayList)
|
||||
glPopMatrix()
|
||||
glPopMatrix()
|
||||
|
||||
|
|
Loading…
Reference in a new issue