from __future__ import division\r
\r
-import sys\r
-import math\r
-import threading\r
-import re\r
-import time\r
-import os\r
+import sys, math, threading, re, time, os\r
\r
from wx import glcanvas\r
import wx\r
self.rotateReset = toolbarUtil.NormalButton(self.toolbar2, self.OnRotateReset, 'object-rotate.png', 'Reset model rotation')\r
self.rotate = wx.SpinCtrl(self.toolbar2, -1, profile.getProfileSetting('model_rotate_base'), size=(21*3,21), style=wx.SP_WRAP|wx.SP_ARROW_KEYS)\r
self.rotate.SetRange(0, 360)\r
- self.Bind(wx.EVT_TEXT, self.OnRotate)\r
+ self.rotate.Bind(wx.EVT_TEXT, self.OnRotate)\r
self.toolbar2.AddControl(self.rotate)\r
\r
self.toolbar2.Realize()\r
self.glCanvas.Refresh()\r
\r
def OnLayerNrChange(self, e):\r
- self.gcodeDirty = True\r
self.glCanvas.Refresh()\r
\r
def updateCenterX(self):\r
self.offsetY = 0\r
self.view3D = True\r
self.gcodeDisplayList = None\r
+ self.gcodeDisplayListCount = 0\r
self.objColor = [[1.0, 0.8, 0.6, 1.0], [0.2, 1.0, 0.1, 1.0], [1.0, 0.2, 0.1, 1.0], [0.1, 0.2, 1.0, 1.0]]\r
\r
def OnMouseMotion(self,e):\r
opengl.DrawMachine(machineSize)\r
\r
if self.parent.gcode != None:\r
- if self.gcodeDisplayList == None:\r
- self.gcodeDisplayList = glGenLists(1);\r
if self.parent.gcodeDirty:\r
+ if self.gcodeDisplayListCount < len(self.parent.gcode.layerList) or self.gcodeDisplayList == None:\r
+ if self.gcodeDisplayList != None:\r
+ glDeleteLists(self.gcodeDisplayList, self.gcodeDisplayListCount)\r
+ self.gcodeDisplayList = glGenLists(len(self.parent.gcode.layerList));\r
+ self.gcodeDisplayListCount = len(self.parent.gcode.layerList)\r
self.parent.gcodeDirty = False\r
- glNewList(self.gcodeDisplayList, GL_COMPILE)\r
prevLayerZ = 0.0\r
curLayerZ = 0.0\r
\r
layerThickness = 0.0\r
- filamentRadius = float(profile.getProfileSetting('filament_diameter')) / 2\r
+ filamentRadius = profile.getProfileSettingFloat('filament_diameter') / 2\r
filamentArea = math.pi * filamentRadius * filamentRadius\r
- lineWidth = float(profile.getProfileSetting('nozzle_size')) / 2 / 10\r
+ lineWidth = profile.getProfileSettingFloat('nozzle_size') / 2 / 10\r
\r
curLayerNum = 0\r
for layer in self.parent.gcode.layerList:\r
+ glNewList(self.gcodeDisplayList + curLayerNum, GL_COMPILE)\r
+ glDisable(GL_CULL_FACE)\r
curLayerZ = layer[0].list[1].z\r
layerThickness = curLayerZ - prevLayerZ\r
prevLayerZ = layer[-1].list[-1].z\r
for path in layer:\r
c = 1.0\r
- if curLayerNum != self.parent.layerSpin.GetValue():\r
- if curLayerNum < self.parent.layerSpin.GetValue():\r
- c = 0.9 - (self.parent.layerSpin.GetValue() - curLayerNum) * 0.1\r
- if c < 0.4:\r
- c = 0.4\r
- else:\r
- break\r
+ #if curLayerNum != self.parent.layerSpin.GetValue():\r
+ # if curLayerNum < self.parent.layerSpin.GetValue():\r
+ # c = 0.9 - (self.parent.layerSpin.GetValue() - curLayerNum) * 0.1\r
+ # if c < 0.4:\r
+ # c = 0.4\r
+ # else:\r
+ # break\r
if path.type == 'move':\r
glColor3f(0,0,c)\r
if path.type == 'extrude':\r
glVertex3f(v.x, v.y, v.z)\r
glEnd()\r
curLayerNum += 1\r
- glEndList()\r
+ glEnable(GL_CULL_FACE)\r
+ glEndList()\r
if self.viewMode == "GCode" or self.viewMode == "Mixed":\r
- glCallList(self.gcodeDisplayList)\r
+ glEnable(GL_COLOR_MATERIAL)\r
+ glEnable(GL_LIGHTING)\r
+ glLightfv(GL_LIGHT0, GL_DIFFUSE, [0,0,0,0])\r
+ for i in xrange(0, self.parent.layerSpin.GetValue() + 1):\r
+ c = 1.0\r
+ if i < self.parent.layerSpin.GetValue():\r
+ c = 0.9 - (self.parent.layerSpin.GetValue() - i) * 0.1\r
+ if c < 0.4:\r
+ c = (0.4 + c) / 2\r
+ if c < 0.1:\r
+ c = 0.1\r
+ glLightfv(GL_LIGHT0, GL_AMBIENT, [c,c,c,c])\r
+ glCallList(self.gcodeDisplayList + i)\r
+ glDisable(GL_COLOR_MATERIAL)\r
+ glDisable(GL_LIGHTING)\r
\r
glTranslate(self.parent.machineCenter.x, self.parent.machineCenter.y, 0)\r
for obj in self.parent.objectList:\r