chiark / gitweb /
Rotate/scale now work in the project planner!.
authordaid303 <daid303@gmail.com>
Mon, 28 Jan 2013 10:58:53 +0000 (11:58 +0100)
committerdaid303 <daid303@gmail.com>
Mon, 28 Jan 2013 10:58:53 +0000 (11:58 +0100)
Cura/gui/preview3d.py
Cura/gui/projectPlanner.py
Cura/gui/util/previewTools.py
Cura/slice/cura_sf/skeinforge_application/skeinforge_utilities/skeinforge_craft.py
Cura/util/mesh.py

index a71b716ada341c67809acadd456d73c736c12a12..4f63f0f124f3c659b1ddcf5fc09726a551a5071a 100644 (file)
@@ -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):
index 38f870c677ebe06976c65804ed0c0bc2b1416eec..77d46374bd43183098551166c5746ae1b9193f04 100644 (file)
@@ -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):
index c6eded8fc9bb47fb0e43f81b43e96cceaf519d0e..553ead0a52392ee2172ed9f8e004d951eae18d37 100644 (file)
@@ -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:
index 83a5c8bed0f370281747df24f87561af10476f21..6135785fcb2a75c46e49656466068147aa818a72 100644 (file)
@@ -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
 
index d013d5973f09757c0a59946c7443057cdd4eae46..ad1a768bd2de71056277a8857d5c440eef181bd4 100644 (file)
@@ -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