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
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
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
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