chiark / gitweb /
Do less stuff in software, and more on the video card. Could be improved even more.
authordaid <daid303@gmail.com>
Wed, 18 Apr 2012 15:04:03 +0000 (17:04 +0200)
committerdaid <daid303@gmail.com>
Wed, 18 Apr 2012 15:04:03 +0000 (17:04 +0200)
Cura/gui/preview3d.py

index 19cb9ad66b2a4fce62d8f5e084b2310147b8af84..7e4ca6e89635e35ad3cd2cf4753ccbfae7942236 100644 (file)
@@ -137,7 +137,8 @@ class previewPanel(wx.Panel):
                        if scale <= 0.0:\r
                                scale = 1.0\r
                profile.putProfileSetting('model_scale', scale)\r
-               self.updateModelTransform()\r
+               self.modelDirty = True\r
+               self.glCanvas.Refresh()\r
        \r
        def OnScaleMax(self, e):\r
                if self.triangleMesh == None:\r
@@ -153,7 +154,8 @@ class previewPanel(wx.Panel):
                scale = min(scaleX1, scaleY1, scaleX2, scaleY2, scaleZ)\r
                self.scale.SetValue(str(scale))\r
                profile.putProfileSetting('model_scale', self.scale.GetValue())\r
-               self.updateModelTransform()\r
+               self.modelDirty = True\r
+               self.glCanvas.Refresh()\r
 \r
        def OnRotateReset(self, e):\r
                self.rotate.SetValue(0)\r
@@ -183,12 +185,10 @@ class previewPanel(wx.Panel):
 \r
        def updateCenterX(self, x):\r
                self.machineCenter.x = x\r
-               self.moveModel()\r
                self.glCanvas.Refresh()\r
 \r
        def updateCenterY(self, y):\r
                self.machineCenter.y = y\r
-               self.moveModel()\r
                self.glCanvas.Refresh()\r
        \r
        def setViewMode(self, mode):\r
@@ -290,16 +290,10 @@ class previewPanel(wx.Panel):
        def updateModelTransform(self, f=0):\r
                if self.triangleMesh == None:\r
                        return\r
-               scale = 1.0\r
-               rotate = 0.0\r
-               try:\r
-                       scale = profile.getProfileSettingFloat('model_scale')\r
-                       rotate = profile.getProfileSettingFloat('model_rotate_base') / 180.0 * math.pi\r
-               except:\r
-                       pass\r
-               scaleX = scale\r
-               scaleY = scale\r
-               scaleZ = scale\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
@@ -332,9 +326,6 @@ class previewPanel(wx.Panel):
                        face.normal = (v2 - v1).cross(v3 - v1)\r
                        face.normal.normalize()\r
 \r
-               self.moveModel()\r
-       \r
-       def moveModel(self):\r
                if self.triangleMesh == None:\r
                        return\r
                minZ = self.triangleMesh.getMinimumZ()\r
@@ -344,8 +335,6 @@ class previewPanel(wx.Panel):
                        v.z -= minZ\r
                        v.x -= min.x + (max.x - min.x) / 2\r
                        v.y -= min.y + (max.y - min.y) / 2\r
-                       v.x += self.machineCenter.x\r
-                       v.y += self.machineCenter.y\r
                self.triangleMesh.getMinimumZ()\r
                self.modelDirty = True\r
                self.glCanvas.Refresh()\r
@@ -530,7 +519,8 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                                self.parent.modelDirty = False\r
                                multiX = int(profile.getProfileSetting('model_multiply_x'))\r
                                multiY = int(profile.getProfileSetting('model_multiply_y'))\r
-                               modelSize = self.parent.triangleMesh.getMaximum() - self.parent.triangleMesh.getMinimum()\r
+                               modelScale = profile.getProfileSettingFloat('model_scale')\r
+                               modelSize = (self.parent.triangleMesh.getMaximum() - self.parent.triangleMesh.getMinimum()) * modelScale\r
                                glNewList(self.modelDisplayList, GL_COMPILE)\r
                                glPushMatrix()\r
                                glTranslate(-(modelSize.x+10)*(multiX-1)/2,-(modelSize.y+10)*(multiY-1)/2, 0)\r
@@ -538,11 +528,14 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                                        for my in xrange(0, multiY):\r
                                                glPushMatrix()\r
                                                glTranslate((modelSize.x+10)*mx,(modelSize.y+10)*my, 0)\r
+                                               glScalef(modelScale, modelScale, modelScale)\r
                                                opengl.DrawSTL(self.parent.triangleMesh)\r
                                                glPopMatrix()\r
                                glPopMatrix()\r
                                glEndList()\r
                        \r
+                       glTranslate(self.parent.machineCenter.x, self.parent.machineCenter.y, 0)\r
+                       glEnable(GL_NORMALIZE)\r
                        if self.viewMode == "Transparent" or self.viewMode == "Mixed":\r
                                glLightfv(GL_LIGHT0, GL_DIFFUSE,  [0.5, 0.4, 0.3, 1.0])\r
                                glLightfv(GL_LIGHT0, GL_AMBIENT,  [0.1, 0.1, 0.1, 0.0])\r
@@ -612,7 +605,6 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                                glDisable(GL_DEPTH_TEST)\r
                                glDisable(GL_BLEND)\r
                                glColor3f(1,0,0)\r
-                               glTranslate(self.parent.machineCenter.x, self.parent.machineCenter.y, 0)\r
                                glBegin(GL_LINES)\r
                                for err in self.parent.errorList:\r
                                        glVertex3f(err[0].x, err[0].y, err[0].z)\r