Пример #1
0
        def process(self):
            if not any(socket.is_linked for socket in self.outputs):
                return

            solids = self.inputs['Solid'].sv_get()

            def get_faces(solid):
                face_surface = []
                outer_wires = []
                trims = []
                for f in solid.Faces:
                    surface = SvSolidFaceSurface(f)
                    if self.nurbs_output:
                        out_surface = SvNurbsSurface.get(surface)
                        if out_surface is None:
                            out_surface = surface
                    else:
                        out_surface = surface
                    face_surface.append(out_surface)
                    outer_wire = []
                    face_trims = []
                    for e in f.OuterWire.Edges:
                        try:
                            if self.nurbs_output:
                                outer_wire.append(SvSolidEdgeCurve(e).to_nurbs())
                            else:
                                outer_wire.append(SvSolidEdgeCurve(e))
                        except TypeError:
                            pass
                        trim,m,M = f.curveOnSurface(e)
                        if self.nurbs_output:
                            trim = trim.toBSpline(m,M)
                            trim = SvFreeCadNurbsCurve(trim, ndim=2)
                        else:
                            #trim = trim.trim(m, M)
                            trim = SvFreeCadCurve(trim, (m,M), ndim=2)
                        face_trims.append(trim)

                    outer_wires.append(outer_wire)
                    trims.append(face_trims)

                return face_surface, outer_wires, trims

            faces_out, wires_out, trims_out = map_unzip_recursirve(get_faces, solids, data_types=(Part.Shape,))
            if self.flat_output:
                faces_out = flatten_data(faces_out, data_types=(SvSurface,))
                wires_out = flatten_data(wires_out, target_level=2, data_types=(SvCurve,))
                trims_out = flatten_data(trims_out, target_level=2, data_types=(SvCurve,))

            self.outputs['Solid Faces'].sv_set(faces_out)
            self.outputs['Outer Wire'].sv_set(wires_out)
            if 'TrimCurves' in self.outputs:
                self.outputs['TrimCurves'].sv_set(trims_out)
Пример #2
0
        def execute(self, context):
            node = self.get_node(context)
            if not node: return {'CANCELLED'}

            if not node.inputs['Folder Path'].is_linked:
                self.report({'WARNING'}, "Folder path is not specified")
                return {'FINISHED'}
            if not node.inputs['Solids'].is_linked:
                self.report({'WARNING'},
                            "Object to be exported is not specified")
                return {'FINISHED'}

            folder_path = node.inputs[0].sv_get()[0][0]
            objects = node.inputs['Solids'].sv_get()
            #objects = flatten_data(objects, data_types=(Part.Shape, SvCurve, SvSurface))
            base_name = node.base_name
            if not base_name:
                base_name = "sv_solid"
            for i, shape in enumerate(objects):
                #shape = map_recursive(to_solid, object, data_types=(Part.Shape, SvCurve, SvSurface))
                debug("Exporting", shape)
                if isinstance(shape, (list, tuple)):
                    shape = flatten_data(shape, data_types=(Part.Shape, ))
                if isinstance(shape, (list, tuple)):
                    debug("Make compound:", shape)
                    shape = Part.Compound(shape)
                file_path = folder_path + base_name + "_" + "%05d" % i

                if node.mode == "BREP":
                    file_path += ".brp"
                    shape.exportBrep(file_path)
                elif node.mode == "IGES":
                    file_path += ".igs"
                    shape.exportIges(file_path)
                else:
                    file_path += ".stp"
                    shape.exportStep(file_path)
                self.report({'INFO'}, f"Saved object #{i} to {file_path}")

            return {'FINISHED'}
Пример #3
0
 def do_flatten(self, data):
     return flatten_data(data, 1, data_types=(TriangleMesh, ))
Пример #4
0
 def do_flatten(self, data):
     return flatten_data(data, 1, data_types=(PointCloud, ))
Пример #5
0
 def do_simplify(self, data):
     return flatten_data(data, 2, data_types=(dict, ))
Пример #6
0
 def do_simplify(self, data):
     return flatten_data(data, 2)
Пример #7
0
 def do_flatten(self, data):
     return flatten_data(data, 1, data_types=(dict, ))
Пример #8
0
 def do_flatten(self, data):
     return flatten_data(data, 1, data_types=(Quaternion, ))
Пример #9
0
 def do_flatten(self, data):
     return flatten_data(data, 1)
Пример #10
0
 def do_flatten(self, data):
     return flatten_data(data, 1, data_types=(Matrix, ))
Пример #11
0
 def do_flatten(self, data):
     from sverchok.dependencies import FreeCAD
     import Part
     return flatten_data(data, 1, data_types=(Part.Shape, ))
Пример #12
0
 def do_flatten(self, data):
     return flatten_data(data, 1, data_types=(SvVectorField, ))
Пример #13
0
 def do_flatten(self, data):
     return flatten_data(data, 1, data_types=(SvCurve, ))
Пример #14
0
 def do_flatten(self, data):
     return flatten_data(data, 1, data_types=(SvSurface, ))