def makeSolid(self, generator, faces, material, temp=False, color=None): solid = Solid(generator.getNextID()) solid.setTemporary(temp) if color is not None: solid.setColor(color) for arr in faces: face = SolidFace(generator.getNextFaceID(), Plane.fromVertices(arr[0], arr[1], arr[2]), solid) face.setMaterial(material) for vert in arr: face.vertices.append(SolidVertex(vert, face)) solid.faces.append(face) face.alignTextureToFace() if temp: face.setPreviewState() face.generate() if not temp: solid.setToSolidOrigin() solid.generateFaces() solid.recalcBoundingBox() else: solid.reparentTo(base.render) return solid
def flip(self): self.vertices.reverse() self.plane = Plane.fromVertices(self.vertices[0].pos, self.vertices[1].pos, self.vertices[2].pos) if self.hasGeometry: self.regenerateGeometry()
def xform(self, mat): for vert in self.vertices: vert.xform(mat) self.plane = Plane.fromVertices(self.vertices[0].pos, self.vertices[1].pos, self.vertices[2].pos) self.calcTextureCoordinates(True) if self.hasGeometry: self.regenerateGeometry()
def readKeyValues(self, kv): self.id = int(self.id) base.document.reserveFaceID(self.id) p0 = Point3() p1 = Point3() p2 = Point3() kv.parsePlanePoints(kv.getValue("plane"), p0, p1, p2) self.plane = Plane.fromVertices(p0, p1, p2) self.material.readKeyValues(kv) self.setMaterial(self.material.material)
def confirmClip(self): if self.point1 is None or self.point2 is None or self.point3 is None: self.reset() return clipPlane = Plane.fromVertices(self.point1, self.point2, self.point3) side = ClipSide(self.side) self.reset() solids = [] for obj in base.selectionMgr.selectedObjects: if obj.ObjectName == "solid": solids.append(obj) base.actionMgr.performAction( "Clip %i solid(s)" % len(solids), Clip(solids, clipPlane, side != ClipSide.Back, side != ClipSide.Front)) self.side = side
def updateClipPlane(self): self.clearClipPlane() if self.point1 == self.point2 or self.point1 == self.point3 or self.point2 == self.point3: return plane = Plane.fromVertices(self.point1, self.point2, self.point3) tempGen = IDGenerator() for obj in base.selectionMgr.selectedObjects: if obj.ObjectName != "solid": continue ret, back, front = obj.split(plane, tempGen, True) if ret: front.np.reparentTo(self.doc.render) back.np.reparentTo(self.doc.render) self.tempSolids.append((obj, front, back)) # Hide the original solid obj.np.stash() self.updateClipSide(self.side)