Is this an issue?
How can I apply the extrude to all sub-surfaces in the polysurface without exploading?
Is this an issue?
[Python] How can I access sub-surfaces inside a polysurface?
import Rhino.Geometry as rg a =  for face in x.Faces: normal = face.NormalAt(0,0) centroid = rg.AreaMassProperties.Compute(face).Centroid profile = rg.Line(centroid, centroid+normal*y).ToNurbsCurve() a.append(face.CreateExtrusion(profile, False))
IVELIN PEYCHEV.gh (13.5 KB)
@Mahdiyar, do you read minds
I was about to ask (create a new thread) about how can I do an extrude by a vector instead a line.
You probably can’t, since the
CreateExtrusion method, needs a path curve to extrude along, called “profile” in @Mahdiyar’s code.
public Brep CreateExtrusion( Curve pathCurve, bool cap )
However, the profile line is created with a vector. This vector is the
normal scaled by
y. It is then added to the centroid, to produce the path curve end point at the peak of the vector.
You could refractor the code like this:
import Rhino.Geometry as rg a =  for face in x.Faces: normal = face.NormalAt(0,0) centroid = rg.AreaMassProperties.Compute(face).Centroid # path curve start point vec = normal * y # scaled normal vector end_pt = vec + centroid # path curve end point path_crv = rg.Line(centroid, end_pt).ToNurbsCurve() a.append(face.CreateExtrusion(path_crv, False)) # True for caps
You could also convert the face to a surface - face.ToNurbsSurface() - then use Surface.CreateExtrusion() which takes a vector. However, there is no option to cap in this case. You could also get the edges of the surface (if no holes) and use Extrusion.Create() which does have the Cap option.
in case I prefer this approach, how can I get this face in RhinoScriptSyntax to extrude it with rs.ExtrudeSurface?
def ExtrudeSurface(surface, curve, cap=True): """Create surface by extruding along a path curve Parameters: surface (guid): identifier of the surface to extrude curve (guid): identifier of the path curve cap (bool, optional): extrusion is capped at both ends Returns: guid: identifier of new surface on success Example: import rhinoscriptsyntax as rs surface = rs.AddSrfPt([(0,0,0), (5,0,0), (5,5,0), (0,5,0)]) curve = rs.AddLine((5,0,0), (10,0,10)) rs.ExtrudeSurface(surface, curve) See Also: ExtrudeCurve ExtrudeCurvePoint ExtrudeCurveStraight """ brep = rhutil.coercebrep(surface, True) curve = rhutil.coercecurve(curve, -1, True) newbrep = brep.Faces.CreateExtrusion(curve, cap) if newbrep: rc = scriptcontext.doc.Objects.AddBrep(newbrep) scriptcontext.doc.Views.Redraw() return rc