def process(self): if not any(socket.is_linked for socket in self.outputs): return face1_surfaces_s = self.inputs['SolidFace1'].sv_get() face1_surfaces_s = ensure_nesting_level(face1_surfaces_s, 2, data_types=(SvSurface, )) face2_surfaces_s = self.inputs['SolidFace2'].sv_get() face2_surfaces_s = ensure_nesting_level(face2_surfaces_s, 2, data_types=(SvSurface, )) solids_out = [] for face1_surfaces, face2_surfaces in zip_long_repeat( face1_surfaces_s, face2_surfaces_s): for face1_surface, face2_surface in zip_long_repeat( face1_surfaces, face2_surfaces): if not is_solid_face_surface(face1_surface): face1_surface = surface_to_freecad( face1_surface, make_face=True) # SvFreeCadNurbsSurface if not is_solid_face_surface(face2_surface): face2_surface = surface_to_freecad( face2_surface, make_face=True) # SvFreeCadNurbsSurface solid = self.make_solid(face1_surface, face2_surface) solids_out.append(solid) self.outputs['Solid'].sv_set(solids_out)
def process(self): if not any(socket.is_linked for socket in self.outputs): return face_surface_s = self.inputs['Profile'].sv_get() face_surface_s = ensure_nesting_level(face_surface_s, 2, data_types=(SvSurface, )) curve_s = self.inputs['Path'].sv_get() curve_s = ensure_nesting_level(curve_s, 2, data_types=(SvCurve, )) solid_out = [] for face_surfaces, curves in zip_long_repeat(face_surface_s, curve_s): for face_surface, curve in zip_long_repeat(face_surfaces, curves): if not is_solid_face_surface(face_surface): face_surface = surface_to_freecad(face_surface, make_face=True) curve = curve_to_freecad_nurbs(curve) if curve is None: raise Exception("Path curve is not a NURBS!") solid = self.make_solid(face_surface.face, curve.curve) solid_out.append(solid) self.outputs['Solid'].sv_set(solid_out)
def process(self): if not any(socket.is_linked for socket in self.outputs): return face_surfaces_s = self.inputs['SolidFace'].sv_get() face_surfaces_s = ensure_nesting_level(face_surfaces_s, 2, data_types=(SvSurface,)) offset_s = self.inputs['Offset'].sv_get() offset_s = ensure_nesting_level(offset_s, 2) tolerance_s = self.inputs['Tolerance'].sv_get() tolerance_s = ensure_nesting_level(tolerance_s, 2) solids_out = [] for face_surfaces, offsets, tolerances in zip_long_repeat(face_surfaces_s, offset_s, tolerance_s): #new_solids = [] for face_surface, offset, tolerance in zip_long_repeat(face_surfaces, offsets, tolerances): if not is_solid_face_surface(face_surface): # face_surface is an instance of SvSurface, # but not a instance of SvFreeCadNurbsSurface self.debug("Surface %s is not a face of a solid, will convert automatically", face_surface) face_surface = surface_to_freecad(face_surface, make_face=True) # SvFreeCadNurbsSurface continuity = face_surface.get_min_continuity() if continuity >= 0 and continuity < 1: raise Exception("This node requires at least C1 continuity of the surface; only C0 is guaranteed by surface's knotvector") fc_face = face_surface.face shape = fc_face.makeOffsetShape(offset, tolerance, fill=True) solids_out.append(shape) #solids_out.append(new_solids) self.outputs['Solid'].sv_set(solids_out)
def process(self): if not any(socket.is_linked for socket in self.outputs): return face_surfaces_s = self.inputs['SolidFace'].sv_get() face_surfaces_s = ensure_nesting_level(face_surfaces_s, 2, data_types=(SvSurface, )) offset_s = self.inputs['Vector'].sv_get() offset_s = ensure_nesting_level(offset_s, 3) solids_out = [] for face_surfaces, offsets in zip_long_repeat(face_surfaces_s, offset_s): #new_solids = [] for face_surface, offset in zip_long_repeat( face_surfaces, offsets): if not is_solid_face_surface(face_surface): # face_surface is an instance of SvSurface, # but not a instance of SvFreeCadNurbsSurface self.debug( "Surface %s is not a face of a solid, will convert automatically", face_surface) face_surface = surface_to_freecad( face_surface, make_face=True) # SvFreeCadNurbsSurface fc_face = face_surface.face fc_offset = Base.Vector(*offset) shape = fc_face.extrude(fc_offset) solids_out.append(shape) #solids_out.append(new_solids) self.outputs['Solid'].sv_set(solids_out)
def process(self): if not any(socket.is_linked for socket in self.outputs): return face_surfaces_s = self.inputs['SolidFaces'].sv_get() input_level = get_data_nesting_level(face_surfaces_s, data_types=(SvSurface, )) face_surfaces_s = ensure_nesting_level(face_surfaces_s, 3, data_types=(SvSurface, )) solids_out = [] for surfaces_i in face_surfaces_s: new_solids = [] for surfaces in surfaces_i: for i in range(len(surfaces)): if not is_solid_face_surface(surfaces[i]): surfaces[i] = surface_to_freecad(surfaces[i], make_face=True) solid = self.make_solid(surfaces) new_solids.append(solid) if input_level > 2: solids_out.append(new_solids) else: solids_out.extend(new_solids) self.outputs['Solid'].sv_set(solids_out)
def process(self): if not any(socket.is_linked for socket in self.outputs): return face_surfaces_s = self.inputs['SolidFace'].sv_get() face_surfaces_s = ensure_nesting_level(face_surfaces_s, 3, data_types=(SvSurface, )) solids_s = self.inputs['Solid'].sv_get() solids_s = ensure_nesting_level(solids_s, 2, data_types=(Part.Shape, )) solids_out = [] cut_faces_out = [] for solids, face_surfaces_i in zip_long_repeat(solids_s, face_surfaces_s): for solid, face_surfaces in zip_long_repeat( solids, face_surfaces_i): for i in range(len(face_surfaces)): if not is_solid_face_surface(face_surfaces[i]): face_surfaces[i] = surface_to_freecad( face_surfaces[i], make_face=True) # SvFreeCadNurbsSurface new_solids, cut_faces = make_solids(solid, face_surfaces) solids_out.append(new_solids) cut_faces_out.append(cut_faces) self.outputs['Solids'].sv_set(solids_out) if 'CutFaces' in self.outputs: self.outputs['CutFaces'].sv_set(cut_faces_out)
def process(self): if not any(socket.is_linked for socket in self.outputs): return curve_s = self.inputs['Curve'].sv_get() in_level = get_data_nesting_level(curve_s, data_types=(SvCurve,)) curve_s = ensure_nesting_level(curve_s, 2, data_types=(SvCurve,)) surface_s = self.inputs['Surface'].sv_get() surface_s = ensure_nesting_level(surface_s, 2, data_types=(SvSurface,)) point_s = self.inputs['Point'].sv_get() point_s = ensure_nesting_level(point_s, 3) vector_s = self.inputs['Vector'].sv_get() vector_s = ensure_nesting_level(vector_s, 3) edges_out = [] trims_out = [] for curves, face_surfaces, points, vectors in zip_long_repeat(curve_s, surface_s, point_s, vector_s): new_edges = [] new_trims = [] for curve, face_surface, point, vector in zip_long_repeat(curves, face_surfaces, points, vectors): if not is_solid_face_surface(face_surface): face_surface = surface_to_freecad(face_surface, make_face=True) # SvFreeCadNurbsSurface projection, trims = self.project(face_surface, curve, point, vector) new_edges.append(projection) new_trims.append(trims) if in_level == 1: edges_out.extend(new_edges) trims_out.extend(new_trims) else: # 2 edges_out.append(new_edges) trims_out.append(new_trims) self.outputs['Curves'].sv_set(edges_out) self.outputs['TrimCurves'].sv_set(trims_out)
def process(self): if not any(socket.is_linked for socket in self.outputs): return surface_in = self.inputs['SolidFace'].sv_get() sites_in = self.inputs['Sites'].sv_get() iterations_in = self.inputs['Iterations'].sv_get() thickness_in = self.inputs['Thickness'].sv_get() weights_in = self.inputs['Weights'].sv_get(default=[[None]]) surface_in = ensure_nesting_level(surface_in, 2, data_types=(SvSurface, )) input_level = get_data_nesting_level(sites_in) sites_in = ensure_nesting_level(sites_in, 4) iterations_in = ensure_nesting_level(iterations_in, 2) thickness_in = ensure_nesting_level(thickness_in, 2) if self.inputs['Weights'].is_linked: weights_in = ensure_nesting_level(weights_in, 2, data_types=(SvScalarField, )) nested_output = input_level > 3 verts_out = [] uvpoints_out = [] for params in zip_long_repeat(surface_in, sites_in, iterations_in, thickness_in, weights_in): new_verts = [] new_uvpoints = [] for surface, sites, iterations, thickness, weights in zip_long_repeat( *params): if is_solid_face_surface(surface): fc_face = surface.face else: fc_face = surface_to_freecad(surface, make_face=True).face uvpoints, sites = lloyd_on_fc_face(fc_face, sites, thickness, iterations, weight_field=weights) new_verts.append(sites) new_uvpoints.append(uvpoints) if nested_output: verts_out.append(new_verts) uvpoints_out.append(new_uvpoints) else: verts_out.extend(new_verts) uvpoints_out.extend(new_uvpoints) self.outputs['Sites'].sv_set(verts_out) self.outputs['UVPoints'].sv_set(uvpoints_out)
def to_solid(ob): if isinstance(ob, Part.Shape): return ob elif isinstance(ob, SvCurve): return [c.curve.toShape() for c in curve_to_freecad(ob)] elif isinstance(ob, SvSurface): if is_solid_face_surface(ob): return ob.face else: return surface_to_freecad(ob, make_face=True).face else: raise TypeError(f"Unknown data type in input: {ob}")
def process(self): if not any(socket.is_linked for socket in self.outputs): return face_surfaces_s = self.inputs['SolidFace'].sv_get() face_surfaces_s = ensure_nesting_level(face_surfaces_s, 2, data_types=(SvSurface, )) angle_s = self.inputs['Angle'].sv_get() angle_s = ensure_nesting_level(angle_s, 2) point_s = self.inputs['Point'].sv_get() point_s = ensure_nesting_level(point_s, 3) direction_s = self.inputs['Direction'].sv_get() direction_s = ensure_nesting_level(direction_s, 3) solids_out = [] for face_surfaces, angles, points, directions in zip_long_repeat( face_surfaces_s, angle_s, point_s, direction_s): #new_solids = [] for face_surface, angle, point, direction in zip_long_repeat( face_surfaces, angles, points, directions): if not is_solid_face_surface(face_surface): # face_surface is an instance of SvSurface, # but not a instance of SvFreeCadNurbsSurface self.debug( "Surface %s is not a face of a solid, will convert automatically", face_surface) face_surface = surface_to_freecad( face_surface, make_face=True) # SvFreeCadNurbsSurface fc_face = face_surface.face fc_point = Base.Vector(*point) fc_direction = Base.Vector(*direction) shape = fc_face.revolve(fc_point, fc_direction, angle) solids_out.append(shape) #solids_out.append(new_solids) self.outputs['Solid'].sv_set(solids_out)
def calc(face_surface): if not is_solid_face_surface(face_surface): face_surface = surface_to_freecad(face_surface, make_face=True) a = face_surface.face.Area return [a]
def process(self): if not any(socket.is_linked for socket in self.outputs): return surface_s = self.inputs['Surface'].sv_get() surface_s = ensure_nesting_level(surface_s, 2, data_types=(SvSurface,)) if self.inputs['Cut'].is_linked: curve_s = self.inputs['Cut'].sv_get() # List of curves per surface curve_s = ensure_nesting_level(curve_s, 3, data_types=(SvCurve,)) else: curve_s = [[[]]] point_s = self.inputs['Point'].sv_get() point_s = ensure_nesting_level(point_s, 3) vector_s = self.inputs['Vector'].sv_get() vector_s = ensure_nesting_level(vector_s, 3) tolerance = 10 ** (-self.accuracy) faces_out = [] trim_out = [] edges_out = [] for surfaces, curves_i, points, vectors in zip_long_repeat(surface_s, curve_s, point_s, vector_s): new_faces = [] new_trim = [] new_edges = [] for surface, curves, point, vector in zip_long_repeat(surfaces, curves_i, points, vectors): if is_solid_face_surface(surface): face_surface = surface else: face_surface = surface_to_freecad(surface) # SvFreeCadNurbsSurface self.info(f"Surface: {face_surface}, n curves: {len(curves)}") if curves: if self.close_wire: t1 = curves[0].get_u_bounds()[0] t2 = curves[-1].get_u_bounds()[-1] p1 = curves[0].evaluate(t1) p2 = curves[-1].evaluate(t2) if np.linalg.norm(p1 - p2) > tolerance: # if self.projection_type == 'UV': # fc_line = line2d(Base.Vector2d(p2), Base.Vector2d(p1)) # line = SvFreeCadCurve(fc_line, (0,1), ndim=2) # curves = curves + [line] # else: line = SvLine.from_two_points(p2, p1) curves = curves + [line] trims, edges, face = self.cut(face_surface, curves, point, vector) else: face = face_surface trims = [] edges = [] new_faces.append(face) new_trim.append(trims) new_edges.append(edges) faces_out.append(new_faces) trim_out.append(new_trim) edges_out.append(new_edges) self.outputs['SolidFace'].sv_set(faces_out) if 'UVCurves' in self.outputs: self.outputs['UVCurves'].sv_set(trim_out) if 'Edges' in self.outputs: self.outputs['Edges'].sv_set(edges_out)