From 6b942139cafd07c9e2d6504dab5c9d0641b40c52 Mon Sep 17 00:00:00 2001 From: daid303 Date: Mon, 28 Jan 2013 11:58:53 +0100 Subject: [PATCH] Rotate/scale now work in the project planner!. --- Cura/gui/preview3d.py | 22 ++++++++++-------- Cura/gui/projectPlanner.py | 23 ++++++++++++++----- Cura/gui/util/previewTools.py | 22 +++++++----------- .../skeinforge_utilities/skeinforge_craft.py | 2 +- Cura/util/mesh.py | 2 +- 5 files changed, 39 insertions(+), 32 deletions(-) diff --git a/Cura/gui/preview3d.py b/Cura/gui/preview3d.py index a71b716a..4f63f0f1 100644 --- a/Cura/gui/preview3d.py +++ b/Cura/gui/preview3d.py @@ -451,8 +451,7 @@ class PreviewGLCanvas(openglGui.glGuiPanel): 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 @@ -474,6 +473,8 @@ class PreviewGLCanvas(openglGui.glGuiPanel): 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) @@ -494,8 +495,8 @@ class PreviewGLCanvas(openglGui.glGuiPanel): 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) @@ -530,6 +531,9 @@ class PreviewGLCanvas(openglGui.glGuiPanel): 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: @@ -544,21 +548,19 @@ class PreviewGLCanvas(openglGui.glGuiPanel): 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): diff --git a/Cura/gui/projectPlanner.py b/Cura/gui/projectPlanner.py index 38f870c6..77d46374 100644 --- a/Cura/gui/projectPlanner.py +++ b/Cura/gui/projectPlanner.py @@ -603,6 +603,10 @@ class PreviewGLCanvas(openglGui.glGuiPanel): 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: @@ -617,6 +621,10 @@ class PreviewGLCanvas(openglGui.glGuiPanel): 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(): @@ -679,15 +687,14 @@ class PreviewGLCanvas(openglGui.glGuiPanel): 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): @@ -770,6 +777,7 @@ class PreviewGLCanvas(openglGui.glGuiPanel): 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) @@ -800,8 +808,7 @@ class PreviewGLCanvas(openglGui.glGuiPanel): 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() @@ -815,6 +822,10 @@ class PreviewGLCanvas(openglGui.glGuiPanel): 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): diff --git a/Cura/gui/util/previewTools.py b/Cura/gui/util/previewTools.py index c6eded8f..553ead0a 100644 --- a/Cura/gui/util/previewTools.py +++ b/Cura/gui/util/previewTools.py @@ -91,11 +91,9 @@ class toolRotate(object): 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])) @@ -270,16 +268,14 @@ class toolScale(object): 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 @@ -312,8 +308,6 @@ class toolScale(object): 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] @@ -321,7 +315,7 @@ class toolScale(object): 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: diff --git a/Cura/slice/cura_sf/skeinforge_application/skeinforge_utilities/skeinforge_craft.py b/Cura/slice/cura_sf/skeinforge_application/skeinforge_utilities/skeinforge_craft.py index 83a5c8be..6135785f 100644 --- a/Cura/slice/cura_sf/skeinforge_application/skeinforge_utilities/skeinforge_craft.py +++ b/Cura/slice/cura_sf/skeinforge_application/skeinforge_utilities/skeinforge_craft.py @@ -45,7 +45,7 @@ def getChainTextFromProcedures(fileName, procedures, text): 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 diff --git a/Cura/util/mesh.py b/Cura/util/mesh.py index d013d597..ad1a768b 100644 --- a/Cura/util/mesh.py +++ b/Cura/util/mesh.py @@ -39,7 +39,7 @@ class mesh(object): #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 -- 2.30.2