def OnDraw(self): s = self._nodeSize() sx = s * 15 sy = s * 15 sz = s * 15 if self.node == 2 and self.scale is not None: sx *= self.scale if self.node == 3 and self.scale is not None: sy *= self.scale if self.node == 4 and self.scale is not None: sz *= self.scale objMatrix = self.parent.getObjectMatrix() scaleX = numpy.linalg.norm(objMatrix[::, 0].getA().flatten()) scaleY = numpy.linalg.norm(objMatrix[::, 1].getA().flatten()) scaleZ = numpy.linalg.norm(objMatrix[::, 2].getA().flatten()) if self.scale is not None: scaleX *= self.scale scaleY *= self.scale scaleZ *= self.scale glDisable(GL_LIGHTING) glDisable(GL_DEPTH_TEST) glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) glColor3ub(0, 0, 0) size = self.parent.getObjectSize() radius = self.parent.getObjectBoundaryCircle() if self.scale is not None: radius *= self.scale glPushMatrix() glTranslate(0, 0, size[2] / 2 + 5) glRotate(-self.parent.yaw, 0, 0, 1) if self.parent.pitch < 80: glTranslate(0, radius + 5, 0) elif self.parent.pitch < 100: glTranslate(0, (radius + 5) * (90 - self.parent.pitch) / 10, 0) else: glTranslate(0, -(radius + 5), 0) if self.parent.tempMatrix is not None: size = (numpy.matrix([size]) * self.parent.tempMatrix).getA().flatten() opengl.glDrawStringCenter("W, D, H: %0.1f, %0.1f, %0.1f mm" % (size[0], size[1], size[2])) glPopMatrix() glLineWidth(1) glBegin(GL_LINES) glColor3ub(128, 0, 0) glVertex3f(0, 0, 0) glVertex3f(sx, 0, 0) glColor3ub(128, 128, 0) glVertex3f(0, 0, 0) glVertex3f(0, sy, 0) glColor3ub(0, 128, 0) glVertex3f(0, 0, 0) glVertex3f(0, 0, sz) glEnd() glLineWidth(2) if self.node == 1: glColor3ub(255, 255, 255) else: glColor3ub(192, 192, 192) opengl.DrawBox([-s, -s, -s], [s, s, s]) if self.node == 1: glColor3ub(0, 0, 0) opengl.glDrawStringCenter("%0.2f" % ((scaleX + scaleY + scaleZ) / 3.0)) if self.node == 2: glColor3ub(255, 64, 64) else: glColor3ub(128, 0, 0) glPushMatrix() glTranslatef(sx, 0, 0) opengl.DrawBox([-s, -s, -s], [s, s, s]) if self.node == 2: glColor3ub(0, 0, 0) opengl.glDrawStringCenter("%0.2f" % (scaleX)) glPopMatrix() if self.node == 3: glColor3ub(255, 255, 0) else: glColor3ub(128, 128, 0) glPushMatrix() glTranslatef(0, sy, 0) opengl.DrawBox([-s, -s, -s], [s, s, s]) if self.node == 3: glColor3ub(0, 0, 0) opengl.glDrawStringCenter("%0.2f" % (scaleY)) glPopMatrix() if self.node == 4: glColor3ub(64, 255, 64) else: glColor3ub(0, 128, 0) glPushMatrix() glTranslatef(0, 0, sz) opengl.DrawBox([-s, -s, -s], [s, s, s]) if self.node == 4: glColor3ub(0, 0, 0) opengl.glDrawStringCenter("%0.2f" % (scaleZ)) glPopMatrix() glEnable(GL_DEPTH_TEST) glColor(255, 255, 255) size = size / 2 size += 0.01 glLineWidth(1) glBegin(GL_LINES) glVertex3f(size[0], size[1], size[2]) glVertex3f(size[0], size[1], size[2] / 4 * 3) glVertex3f(size[0], size[1], size[2]) glVertex3f(size[0], size[1] / 4 * 3, size[2]) glVertex3f(size[0], size[1], size[2]) glVertex3f(size[0] / 4 * 3, size[1], size[2]) glVertex3f(-size[0], size[1], size[2]) glVertex3f(-size[0], size[1], size[2] / 4 * 3) glVertex3f(-size[0], size[1], size[2]) glVertex3f(-size[0], size[1] / 4 * 3, size[2]) glVertex3f(-size[0], size[1], size[2]) glVertex3f(-size[0] / 4 * 3, size[1], size[2]) glVertex3f(size[0], -size[1], size[2]) glVertex3f(size[0], -size[1], size[2] / 4 * 3) glVertex3f(size[0], -size[1], size[2]) glVertex3f(size[0], -size[1] / 4 * 3, size[2]) glVertex3f(size[0], -size[1], size[2]) glVertex3f(size[0] / 4 * 3, -size[1], size[2]) glVertex3f(-size[0], -size[1], size[2]) glVertex3f(-size[0], -size[1], size[2] / 4 * 3) glVertex3f(-size[0], -size[1], size[2]) glVertex3f(-size[0], -size[1] / 4 * 3, size[2]) glVertex3f(-size[0], -size[1], size[2]) glVertex3f(-size[0] / 4 * 3, -size[1], size[2]) glVertex3f(size[0], size[1], -size[2]) glVertex3f(size[0], size[1], -size[2] / 4 * 3) glVertex3f(size[0], size[1], -size[2]) glVertex3f(size[0], size[1] / 4 * 3, -size[2]) glVertex3f(size[0], size[1], -size[2]) glVertex3f(size[0] / 4 * 3, size[1], -size[2]) glVertex3f(-size[0], size[1], -size[2]) glVertex3f(-size[0], size[1], -size[2] / 4 * 3) glVertex3f(-size[0], size[1], -size[2]) glVertex3f(-size[0], size[1] / 4 * 3, -size[2]) glVertex3f(-size[0], size[1], -size[2]) glVertex3f(-size[0] / 4 * 3, size[1], -size[2]) glVertex3f(size[0], -size[1], -size[2]) glVertex3f(size[0], -size[1], -size[2] / 4 * 3) glVertex3f(size[0], -size[1], -size[2]) glVertex3f(size[0], -size[1] / 4 * 3, -size[2]) glVertex3f(size[0], -size[1], -size[2]) glVertex3f(size[0] / 4 * 3, -size[1], -size[2]) glVertex3f(-size[0], -size[1], -size[2]) glVertex3f(-size[0], -size[1], -size[2] / 4 * 3) glVertex3f(-size[0], -size[1], -size[2]) glVertex3f(-size[0], -size[1] / 4 * 3, -size[2]) glVertex3f(-size[0], -size[1], -size[2]) glVertex3f(-size[0] / 4 * 3, -size[1], -size[2]) glEnd() glEnable(GL_DEPTH_TEST)
def OnDraw(self): machineSize = self.parent.machineSize extraSizeMin, extraSizeMax = self.parent.getExtraHeadSize() for item in self.parent.list: item.validPlacement = True item.gotHit = False for idx1 in xrange(0, len(self.parent.list)): item = self.parent.list[idx1] iMin1 = -item.getSize() / 2 + numpy.array([ item.centerX, item.centerY, 0 ]) - extraSizeMin #- self.parent.extruderOffset[item.extruder] iMax1 = item.getSize() / 2 + numpy.array([ item.centerX, item.centerY, 0 ]) + extraSizeMax #- self.parent.extruderOffset[item.extruder] if iMin1[0] < -self.parent.headSizeMin[0] or iMin1[ 1] < -self.parent.headSizeMin[1]: item.validPlacement = False if iMax1[0] > machineSize[0] + self.parent.headSizeMax[0] or iMax1[ 1] > machineSize[1] + self.parent.headSizeMax[1]: item.validPlacement = False for idx2 in xrange(0, idx1): item2 = self.parent.list[idx2] iMin2 = -item2.getSize() / 2 + numpy.array( [item2.centerX, item2.centerY, 0]) iMax2 = item2.getSize() / 2 + numpy.array( [item2.centerX, item2.centerY, 0]) if item != item2 and iMax1[0] >= iMin2[0] and iMin1[0] <= iMax2[ 0] and iMax1[1] >= iMin2[1] and iMin1[1] <= iMax2[1]: item.validPlacement = False item2.gotHit = True seenSelected = False for item in self.parent.list: if item == self.parent.selection: seenSelected = True if item.modelDisplayList is None: item.modelDisplayList = glGenLists(1) if item.modelDirty: item.modelDirty = False glNewList(item.modelDisplayList, GL_COMPILE) opengl.DrawMesh(item.mesh) glEndList() if item.validPlacement: if self.parent.selection == item: glLightfv(GL_LIGHT0, GL_DIFFUSE, map(lambda x: x + 0.2, self.objColor)) glLightfv(GL_LIGHT0, GL_AMBIENT, map(lambda x: x / 2, self.objColor)) else: glLightfv(GL_LIGHT0, GL_DIFFUSE, self.objColor) glLightfv(GL_LIGHT0, GL_AMBIENT, map(lambda x: x / 2, self.objColor)) else: if self.parent.selection == item: glLightfv(GL_LIGHT0, GL_DIFFUSE, [1.0, 0.0, 0.0, 0.0]) glLightfv(GL_LIGHT0, GL_AMBIENT, [0.2, 0.0, 0.0, 0.0]) else: glLightfv(GL_LIGHT0, GL_DIFFUSE, [1.0, 0.0, 0.0, 0.0]) glLightfv(GL_LIGHT0, GL_AMBIENT, [0.2, 0.0, 0.0, 0.0]) glPushMatrix() glEnable(GL_LIGHTING) glTranslate(item.centerX, item.centerY, 0) vMin = item.getMinimum() vMax = item.getMaximum() offset = -vMin - (vMax - vMin) / 2 matrix = opengl.convert3x3MatrixTo4x4(item.matrix) glPushMatrix() glTranslate(0, 0, item.getSize()[2] / 2) if self.tempMatrix is not None and item == self.parent.selection: tempMatrix = opengl.convert3x3MatrixTo4x4(self.tempMatrix) glMultMatrixf(tempMatrix) glTranslate(0, 0, -item.getSize()[2] / 2) glTranslate(offset[0], offset[1], -vMin[2]) glMultMatrixf(matrix) glCallList(item.modelDisplayList) glPopMatrix() vMin = -item.getSize() / 2 vMax = item.getSize() / 2 vMax[2] -= vMin[2] vMin[2] = 0 vMinHead = vMin - extraSizeMin # - self.parent.extruderOffset[item.extruder] vMaxHead = vMax + extraSizeMax # - self.parent.extruderOffset[item.extruder] 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) else: glColor3f(1.0, 0.0, 1.0) opengl.DrawBox(vMin, vMax) if item.gotHit: glColor3f(1.0, 0.3, 0.0) else: glColor3f(1.0, 1.0, 0.0) opengl.DrawBox(vMinHead, vMaxHead) elif seenSelected: if item.gotHit: glColor3f(0.5, 0.0, 0.1) else: glColor3f(0.5, 0.0, 0.5) opengl.DrawBox(vMinHead, vMaxHead) else: if item.gotHit: glColor3f(0.7, 0.1, 0.0) else: glColor3f(0.7, 0.7, 0.0) opengl.DrawBox(vMin, vMax) glPopMatrix() opengl.DrawMachine( util3d.Vector3(machineSize[0], machineSize[1], machineSize[2])) if self.parent.selection is not None: glPushMatrix() glTranslate(self.parent.selection.centerX, self.parent.selection.centerY, self.parent.selection.getSize()[2] / 2) self.parent.tool.OnDraw() glPopMatrix()