Exemplo n.º 1
0
def GetSolidAroundLine(line, radius):
    rad = math.pi * 2.0 / 3.0
    triangle1 = []
    triangle1.append((math.cos(0) * radius, math.sin(0) * radius, 0.0))
    triangle1.append((math.cos(rad) * radius, math.sin(rad) * radius, 0.0))
    triangle1.append(
        (math.cos(2 * rad) * radius, math.sin(2 * rad) * radius, 0.0))
    dirOfLine = geo2.Vec3Normalize(geo2.Vec3Subtract(line[1], line[0]))
    if abs(geo2.Vec3Dot((0.0, 0.0, 1.0), dirOfLine)) != 1.0:
        rot = geo2.QuaternionRotationArc((0.0, 0.0, 1.0), dirOfLine)
    else:
        rot = geo2.QuaternionIdentity()
    rot = geo2.MatrixRotationQuaternion(rot)
    t1 = geo2.MatrixTranslation(*line[0])
    t2 = geo2.MatrixTranslation(*line[1])
    compA = geo2.MatrixMultiply(rot, t1)
    compB = geo2.MatrixMultiply(rot, t2)
    startTri = geo2.Vec3TransformCoordArray(triangle1, compA)
    endTri = geo2.Vec3TransformCoordArray(triangle1, compB)
    triangles = [
        startTri[1], endTri[0], startTri[0], endTri[1], endTri[0], startTri[1],
        startTri[2], endTri[1], startTri[1], endTri[2], endTri[1], startTri[2],
        startTri[0], endTri[2], startTri[2], endTri[0], endTri[2], startTri[0]
    ]
    return triangles
Exemplo n.º 2
0
 def GenGeometry(self):
     """
     Generates the geometry for the scaling tool.
     """
     scalingGeo = dungeonEditorToolGeometry.geometry(self.primitiveScene)
     wBox = dungeonEditorToolGeometry.area('w',
                                           dungeonEditorToolGeometry.CYAN)
     wBox.AddToSolidSet(dungeonEditorToolGeometry.CUBE_TRIS)
     xBox = dungeonEditorToolGeometry.area('x',
                                           dungeonEditorToolGeometry.RED)
     transform = geo2.MatrixTranslation(1.0, 0.0, 0.0)
     x_tris = geo2.Vec3TransformCoordArray(
         dungeonEditorToolGeometry.CUBE_TRIS, transform)
     xBox.AddToSolidSet(x_tris)
     xBox.AddToLineSet(((0.0, 0.0, 0.0), (1.0, 0.0, 0.0)))
     transform = geo2.MatrixTranslation(0.0, 1.0, 0.0)
     y_tris = geo2.Vec3TransformCoordArray(
         dungeonEditorToolGeometry.CUBE_TRIS, transform)
     yBox = dungeonEditorToolGeometry.area('y',
                                           dungeonEditorToolGeometry.GREEN)
     yBox.AddToSolidSet(y_tris)
     yBox.AddToLineSet(((0.0, 0.0, 0.0), (0.0, 1.0, 0.0)))
     transform = geo2.MatrixTranslation(0.0, 0.0, 1.0)
     z_tris = geo2.Vec3TransformCoordArray(
         dungeonEditorToolGeometry.CUBE_TRIS, transform)
     zBox = dungeonEditorToolGeometry.area('z',
                                           dungeonEditorToolGeometry.BLUE)
     zBox.AddToSolidSet(z_tris)
     zBox.AddToLineSet(((0.0, 0.0, 0.0), (0.0, 0.0, 1.0)))
     scalingGeo.AppendArea(xBox)
     scalingGeo.AppendArea(yBox)
     scalingGeo.AppendArea(zBox)
     scalingGeo.AppendArea(wBox)
     return scalingGeo
Exemplo n.º 3
0
 def GenGeometry(self):
     rotateMat = geo2.MatrixRotationZ(-math.pi / 2.0)
     transform = geo2.MatrixTranslation(0.0, 1.0, 0.0)
     transform = geo2.MatrixMultiply(transform, rotateMat)
     c_tris = geo2.Vec3TransformCoordArray(dungeonEditorToolGeometry.CONE_TRIS, transform)
     xTransAreaCone = dungeonEditorToolGeometry.area('x', dungeonEditorToolGeometry.RED)
     xTransAreaCone.AddToSolidSet(c_tris)
     xTransAreaAxis = dungeonEditorToolGeometry.area('x', dungeonEditorToolGeometry.RED)
     xTransAreaAxis.AddToLineSet([(0.0, 0.0, 0.0), (1.0, 0.0, 0.0)])
     t = dungeonEditorToolGeometry.GetSolidAroundLine([(0.3, 0.0, 0.0), (1.0, 0.0, 0.0)], 0.08)
     xTransAreaAxis.AddToPickingSet(t)
     transform = geo2.MatrixTranslation(0.0, 1.0, 0.0)
     c_tris = geo2.Vec3TransformCoordArray(dungeonEditorToolGeometry.CONE_TRIS, transform)
     yTransAreaCone = dungeonEditorToolGeometry.area('y', dungeonEditorToolGeometry.GREEN)
     yTransAreaCone.AddToSolidSet(c_tris)
     yTransAreaAxis = dungeonEditorToolGeometry.area('y', dungeonEditorToolGeometry.GREEN)
     yTransAreaAxis.AddToLineSet([(0.0, 0.0, 0.0), (0.0, 1.0, 0.0)])
     t = dungeonEditorToolGeometry.GetSolidAroundLine([(0.0, 0.3, 0.0), (0.0, 1.0, 0.0)], 0.08)
     yTransAreaAxis.AddToPickingSet(t)
     transform = geo2.MatrixTranslation(0.0, 1.0, 0.0)
     rotateMat = geo2.MatrixRotationX(math.pi / 2.0)
     transform = geo2.MatrixMultiply(transform, rotateMat)
     c_tris = geo2.Vec3TransformCoordArray(dungeonEditorToolGeometry.CONE_TRIS, transform)
     zTransAreaCone = dungeonEditorToolGeometry.area('z', dungeonEditorToolGeometry.BLUE)
     zTransAreaCone.AddToSolidSet(c_tris)
     zTransAreaAxis = dungeonEditorToolGeometry.area('z', dungeonEditorToolGeometry.BLUE)
     zTransAreaAxis.AddToLineSet([(0.0, 0.0, 0.0), (0.0, 0.0, 1.0)])
     t = dungeonEditorToolGeometry.GetSolidAroundLine([(0.0, 0.0, 0.3), (0.0, 0.0, 1.0)], 0.08)
     zTransAreaAxis.AddToPickingSet(t)
     wTransAreaPlane = dungeonEditorToolGeometry.area('w', dungeonEditorToolGeometry.CYAN)
     wTransAreaPlane.AddToLineSet(dungeonEditorToolGeometry.CIRCLE_POINTS_QUART)
     wTransAreaPlane._lineset.viewOriented = True
     picking_tris = dungeonEditorToolGeometry.GenCircleTriangles(0.25)
     if not trinity.IsRightHanded():
         picking_tris.reverse()
     wTransAreaPlane.AddToPickingSet(picking_tris)
     translationGeo = dungeonEditorToolGeometry.geometry(self.primitiveScene)
     translationGeo.AppendArea(wTransAreaPlane)
     translationGeo.AppendArea(xTransAreaCone)
     translationGeo.AppendArea(xTransAreaAxis)
     translationGeo.AppendArea(yTransAreaCone)
     translationGeo.AppendArea(yTransAreaAxis)
     translationGeo.AppendArea(zTransAreaCone)
     translationGeo.AppendArea(zTransAreaAxis)
     self.cones.append(xTransAreaCone)
     self.cones.append(yTransAreaCone)
     self.cones.append(zTransAreaCone)
     self.axes.append(xTransAreaAxis)
     self.axes.append(yTransAreaAxis)
     self.axes.append(zTransAreaAxis)
     return translationGeo
Exemplo n.º 4
0
 def GenGeometry(self):
     """
     Generates the geometry for the rotation tool.
     """
     xCircleAreas = []
     yCircleAreas = []
     zCircleAreas = []
     if not trinity.IsRightHanded():
         effectPath = 'res:/Graphics/Effect/Managed/Utility/LinesRotationToolLH.fx'
     else:
         effectPath = 'res:/Graphics/Effect/Managed/Utility/LinesRotationTool.fx'
     unit_circle = dungeonEditorToolGeometry.GenCirclePoints(1.0, 60)
     mat = geo2.MatrixRotationY(math.pi / 2)
     x_circle = geo2.Vec3TransformCoordArray(unit_circle, mat)
     xRotationHandleCircle = dungeonEditorToolGeometry.area(
         'x', dungeonEditorToolGeometry.RED)
     xRotationHandleCircle.AddToLineSet(x_circle, True)
     xRotationHandleCircle._lineset.effect.effectFilePath = effectPath
     mat = geo2.MatrixRotationX(math.pi / 2)
     y_circle = geo2.Vec3TransformCoordArray(unit_circle, mat)
     yRotationHandleCircle = dungeonEditorToolGeometry.area(
         'y', dungeonEditorToolGeometry.GREEN)
     yRotationHandleCircle.AddToLineSet(y_circle, True)
     yRotationHandleCircle._lineset.effect.effectFilePath = effectPath
     zRotationHandleCircle = dungeonEditorToolGeometry.area(
         'z', dungeonEditorToolGeometry.BLUE)
     zRotationHandleCircle.AddToLineSet(unit_circle, True)
     zRotationHandleCircle._lineset.effect.effectFilePath = effectPath
     w_circle = dungeonEditorToolGeometry.GenCirclePoints(1.2, 60)
     wArea = dungeonEditorToolGeometry.area('w',
                                            dungeonEditorToolGeometry.CYAN)
     wArea.AddToLineSet(w_circle, True)
     wArea._lineset.viewOriented = True
     wwArea = dungeonEditorToolGeometry.area(
         'ww', dungeonEditorToolGeometry.LIGHT_GRAY)
     wwArea.AddToLineSet(dungeonEditorToolGeometry.GenCirclePoints(1.0, 60))
     wwArea._lineset.viewOriented = True
     picking_tris = dungeonEditorToolGeometry.GenCircleTriangles(1.0, 60)
     if not trinity.IsRightHanded():
         picking_tris.reverse()
     wwArea.AddToPickingSet(picking_tris)
     rotationGeo = dungeonEditorToolGeometry.geometry(self.primitiveScene)
     rotationGeo.AppendArea(xRotationHandleCircle)
     rotationGeo.AppendArea(yRotationHandleCircle)
     rotationGeo.AppendArea(zRotationHandleCircle)
     rotationGeo.AppendArea(wArea)
     rotationGeo.AppendArea(wwArea)
     return rotationGeo