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)
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'}
def do_flatten(self, data): return flatten_data(data, 1, data_types=(TriangleMesh, ))
def do_flatten(self, data): return flatten_data(data, 1, data_types=(PointCloud, ))
def do_simplify(self, data): return flatten_data(data, 2, data_types=(dict, ))
def do_simplify(self, data): return flatten_data(data, 2)
def do_flatten(self, data): return flatten_data(data, 1, data_types=(dict, ))
def do_flatten(self, data): return flatten_data(data, 1, data_types=(Quaternion, ))
def do_flatten(self, data): return flatten_data(data, 1)
def do_flatten(self, data): return flatten_data(data, 1, data_types=(Matrix, ))
def do_flatten(self, data): from sverchok.dependencies import FreeCAD import Part return flatten_data(data, 1, data_types=(Part.Shape, ))
def do_flatten(self, data): return flatten_data(data, 1, data_types=(SvVectorField, ))
def do_flatten(self, data): return flatten_data(data, 1, data_types=(SvCurve, ))
def do_flatten(self, data): return flatten_data(data, 1, data_types=(SvSurface, ))