Пример #1
0
    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
Пример #2
0
 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()
Пример #3
0
 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()
Пример #4
0
    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)
Пример #5
0
    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
Пример #6
0
    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)