self.yaw = 30
self.pitch = 60
self.zoom = 300
- self.offsetX = 0
- self.offsetY = 0
+ self.viewTarget = [parent.machineCenter.x, parent.machineCenter.y, 0.0]
self.view3D = True
self.gcodeDisplayList = None
self.gcodeDisplayListMade = None
if self.parent.objectsMaxV is not None and self.viewport is not None and self.viewMode != 'GCode' and self.viewMode != 'Mixed':
p0 = opengl.unproject(e.GetX(), self.viewport[1] + self.viewport[3] - e.GetY(), 0, self.modelMatrix, self.projMatrix, self.viewport)
p1 = opengl.unproject(e.GetX(), self.viewport[1] + self.viewport[3] - e.GetY(), 1, self.modelMatrix, self.projMatrix, self.viewport)
+ p0 -= self.viewTarget
+ p1 -= self.viewTarget
if not e.Dragging() or self.dragType != 'tool':
self.parent.tool.OnMouseMove(p0, p1)
if self.pitch < 10:
self.pitch = 10
else:
- self.offsetX += float(e.GetX() - self.oldX) * self.zoom / self.GetSize().GetHeight() * 2
- self.offsetY -= float(e.GetY() - self.oldY) * self.zoom / self.GetSize().GetHeight() * 2
+ self.viewTarget[0] -= float(e.GetX() - self.oldX) * self.zoom / self.GetSize().GetHeight() * 2
+ self.viewTarget[1] += float(e.GetY() - self.oldY) * self.zoom / self.GetSize().GetHeight() * 2
elif self.dragType == 'tool':
self.parent.tool.OnDrag(p0, p1)
def getObjectMatrix(self):
return self.parent.matrix
+ def getObjectCenterPos(self):
+ return [self.parent.machineCenter.x, self.parent.machineCenter.y, self.parent.objectsSize[2] / 2]
+
def OnMouseWheel(self,e):
self.zoom *= 1.0 - float(e.GetWheelRotation() / e.GetWheelDelta()) / 10.0
if self.zoom < 1.0:
glTranslate(0,0,-self.zoom)
glRotate(-self.pitch, 1,0,0)
glRotate(self.yaw, 0,0,1)
+
if self.viewMode == "GCode" or self.viewMode == "Mixed":
if self.parent.gcode is not None and len(self.parent.gcode.layerList) > self.parent.layerSpin.GetValue() and len(self.parent.gcode.layerList[self.parent.layerSpin.GetValue()]) > 0:
- glTranslate(0,0,-self.parent.gcode.layerList[self.parent.layerSpin.GetValue()][0].list[-1].z)
+ self.viewTarget[2] = self.parent.gcode.layerList[self.parent.layerSpin.GetValue()][0].list[-1].z
else:
if self.parent.objectsMaxV is not None:
- glTranslate(0,0,-self.parent.objectsSize[2] / 2)
- else:
- glTranslate(self.offsetX, self.offsetY, 0)
+ self.viewTarget = self.getObjectCenterPos()
+ glTranslate(-self.viewTarget[0], -self.viewTarget[1], -self.viewTarget[2])
self.viewport = glGetIntegerv(GL_VIEWPORT)
self.modelMatrix = glGetDoublev(GL_MODELVIEW_MATRIX)
self.projMatrix = glGetDoublev(GL_PROJECTION_MATRIX)
- glTranslate(-self.parent.machineCenter.x, -self.parent.machineCenter.y, 0)
-
self.OnDraw()
def OnDraw(self):
if not self.parent.alwaysAutoPlace and not self.view3D:
p0 = opengl.unproject(e.GetX(), self.viewport[1] + self.viewport[3] - e.GetY(), 0, self.modelMatrix, self.projMatrix, self.viewport)
p1 = opengl.unproject(e.GetX(), self.viewport[1] + self.viewport[3] - e.GetY(), 1, self.modelMatrix, self.projMatrix, self.viewport)
+ p0 -= self.viewTarget
+ p1 -= self.viewTarget
+ p0 -= self.getObjectCenterPos() - self.viewTarget
+ p1 -= self.getObjectCenterPos() - self.viewTarget
cursorZ0 = p0 - (p1 - p0) * (p0[2] / (p1[2] - p0[2]))
for item in self.parent.list:
if self.viewport is not None:
p0 = opengl.unproject(e.GetX(), self.viewport[1] + self.viewport[3] - e.GetY(), 0, self.modelMatrix, self.projMatrix, self.viewport)
p1 = opengl.unproject(e.GetX(), self.viewport[1] + self.viewport[3] - e.GetY(), 1, self.modelMatrix, self.projMatrix, self.viewport)
+ p0 -= self.viewTarget
+ p1 -= self.viewTarget
+ p0 -= self.getObjectCenterPos() - self.viewTarget
+ p1 -= self.getObjectCenterPos() - self.viewTarget
if not e.Dragging() or self.dragType != 'tool':
self.parent.tool.OnMouseMove(p0, p1)
if self.allowDrag and e.Dragging() and e.LeftIsDown():
glTranslate(0,0,-self.zoom)
glRotate(-self.pitch, 1,0,0)
glRotate(self.yaw, 0,0,1)
- else:
- glTranslate(self.offsetX, self.offsetY, 0.0)
+ self.viewTarget = self.parent.machineSize / 2
+ self.viewTarget[2] = 0
+ glTranslate(-self.viewTarget[0], -self.viewTarget[1], -self.viewTarget[2])
self.viewport = glGetIntegerv(GL_VIEWPORT)
self.modelMatrix = glGetDoublev(GL_MODELVIEW_MATRIX)
self.projMatrix = glGetDoublev(GL_PROJECTION_MATRIX)
- glTranslate(-self.parent.machineSize[0]/2, -self.parent.machineSize[1]/2, 0)
-
self.OnDraw()
def OnDraw(self):
glDisable(GL_LIGHTING)
if not self.parent.alwaysAutoPlace:
+ glLineWidth(1)
if self.parent.selection == item:
if item.gotHit:
glColor3f(1.0,0.0,0.3)
if self.parent.selection is not None:
glPushMatrix()
- #glTranslate(self.parent.selection.centerY, self.parent.selection.centerX, self.parent.selection.getSize()[2]/2)
- glTranslate(205/2, 205/2, self.parent.selection.getSize()[2]/2)
+ glTranslate(self.parent.selection.centerX, self.parent.selection.centerY, self.parent.selection.getSize()[2]/2)
self.parent.tool.OnDraw()
glPopMatrix()
return 0.0
def getObjectMatrix(self):
return self.parent.selection.matrix
+ def getObjectCenterPos(self):
+ if self.parent.selection is None:
+ return [0,0,0]
+ return [self.parent.selection.centerX, self.parent.selection.centerY, self.getObjectSize()[2] / 2]
class ProjectSliceProgressWindow(wx.Frame):
def __init__(self, sliceCommand, resultFilename, fileCount):
self.dragEndAngle = None
def _ProjectToPlanes(self, p0, p1):
- pp0 = p0 - [0,0,self.parent.getObjectSize()[2]/2]
- pp1 = p1 - [0,0,self.parent.getObjectSize()[2]/2]
- cursorX0 = pp0 - (pp1 - pp0) * (pp0[0] / (pp1[0] - pp0[0]))
- cursorY0 = pp0 - (pp1 - pp0) * (pp0[1] / (pp1[1] - pp0[1]))
- cursorZ0 = pp0 - (pp1 - pp0) * (pp0[2] / (pp1[2] - pp0[2]))
+ cursorX0 = p0 - (p1 - p0) * (p0[0] / (p1[0] - p0[0]))
+ cursorY0 = p0 - (p1 - p0) * (p0[1] / (p1[1] - p0[1]))
+ cursorZ0 = p0 - (p1 - p0) * (p0[2] / (p1[2] - p0[2]))
cursorYZ = math.sqrt((cursorX0[1] * cursorX0[1]) + (cursorX0[2] * cursorX0[2]))
cursorXZ = math.sqrt((cursorY0[0] * cursorY0[0]) + (cursorY0[2] * cursorY0[2]))
cursorXY = math.sqrt((cursorZ0[0] * cursorZ0[0]) + (cursorZ0[1] * cursorZ0[1]))
return numpy.linalg.norm(numpy.cross((p0 - p1), (p0 - p2))) / numpy.linalg.norm(p2 - p1)
def _traceNodes(self, p0, p1):
- pp0 = p0 - [0,0,self.parent.getObjectSize()[2]/2]
- pp1 = p1 - [0,0,self.parent.getObjectSize()[2]/2]
s = self._nodeSize()
- if self._pointDist(numpy.array([0,0,0],numpy.float32), pp0, pp1) < s * 2:
+ if self._pointDist(numpy.array([0,0,0],numpy.float32), p0, p1) < s * 2:
return 1
- if self._pointDist(numpy.array([s*15,0,0],numpy.float32), pp0, pp1) < s * 2:
+ if self._pointDist(numpy.array([s*15,0,0],numpy.float32), p0, p1) < s * 2:
return 2
- if self._pointDist(numpy.array([0,s*15,0],numpy.float32), pp0, pp1) < s * 2:
+ if self._pointDist(numpy.array([0,s*15,0],numpy.float32), p0, p1) < s * 2:
return 3
- if self._pointDist(numpy.array([0,0,s*15],numpy.float32), pp0, pp1) < s * 2:
+ if self._pointDist(numpy.array([0,0,s*15],numpy.float32), p0, p1) < s * 2:
return 4
return None
def OnDrag(self, p0, p1):
s = self._nodeSize()
- pp0 = p0 - [0,0,self.parent.getObjectSize()[2]/2]
- pp1 = p1 - [0,0,self.parent.getObjectSize()[2]/2]
endPoint = [1,1,1]
if self.node == 2:
endPoint = [1,0,0]
endPoint = [0,1,0]
elif self.node == 4:
endPoint = [0,0,1]
- scale = self._lineLineCrossingDistOnLine(pp0, pp1, numpy.array([0,0,0], numpy.float32), numpy.array(endPoint, numpy.float32)) / 15.0 / s
+ scale = self._lineLineCrossingDistOnLine(p0, p1, numpy.array([0,0,0], numpy.float32), numpy.array(endPoint, numpy.float32)) / 15.0 / s
if not wx.GetKeyState(wx.WXK_SHIFT):
scale = round(scale * 10) / 10
if scale < 0:
print(fileName)
return ''
if gcodec.isProcedureDone( text, procedure ):
- print('%s procedure took %s (%d).' % (procedure.capitalize(), euclidean.getDurationString(time.time() - lastProcedureTime)), len(text))
+ print('%s procedure took %s (%d).' % (procedure.capitalize(), euclidean.getDurationString(time.time() - lastProcedureTime), len(text)))
lastProcedureTime = time.time()
return text
#Calculate the boundery circle
center = self.transformedMin + self.transformedSize / 2.0
- self.bounderyCircleSize = round(math.sqrt(numpy.max(((transformedVertexes[::,0] - center[0]) * (transformedVertexes[::,0] - center[0])) + ((transformedVertexes[::,1] - center[1]) * (transformedVertexes[::,1] - center[1])))), 3)
+ self.bounderyCircleSize = round(math.sqrt(numpy.max(((transformedVertexes[::,0] - center[0]) * (transformedVertexes[::,0] - center[0])) + ((transformedVertexes[::,1] - center[1]) * (transformedVertexes[::,1] - center[1])) + ((transformedVertexes[::,2] - center[2]) * (transformedVertexes[::,2] - center[2])))), 3)
def getMaximum(self):
return self.transformedMax