Example #1
0
    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)
Example #2
0
    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()