I am trying to solve the problem below via a python script. I have a lot (600+) of these situation where I have as input surfaces and I would have to remove areas from these surfaces:
However I can’t find an easy way to do it via scripting, making the red contours solids and then booleaning them out of the initial surface seems to fail, also I would need to do this on a lot of elements, anyone could suggest a smart way to do it?
e.g. script not working and potentially too slow:
import rhinoscriptsyntax as rs
surface = rs.GetObject("srf", 8)
cutpieces = rs.GetObjects("curves")
path = rs.AddLine([0,0,0],[3,0,0])
solids = []
for cutpiece in cutpieces:
newsolid = rs.ExtrudeCurve(cutpiece, path)
rs.CapPlanarHoles(newsolid)
rs.MoveObject(newsolid, [-1.5,0,0])
solids.append(newsolid)
rs.BooleanDifference(surface,solids)
Hi revink
You can try this code.I also recommend using Grasshopper. If you must run it in Rhino, you can also use the GrasshopperPlayer command (rhino7.0) to run the GH file.
import rhinoscriptsyntax as rs
import Rhino.Geometry as rg
import scriptcontext as sc
import Rhino.RhinoDoc as rr
tol = rr.ActiveDoc.ModelAbsoluteTolerance
surface = rs.GetObject("srf", rs.filter.surface)
if surface:
curves = rs.GetObjects("curves",rs.filter.curve)
if curves:
surface_geo = rs.coercebrep(surface)
curves_geos = [rs.coercecurve(guid) for guid in curves]
bool_curves = rg.Curve.CreateBooleanUnion(curves_geos)
if (bool_curves and surface_geo):
bool_breps2 = rg.Brep.CreatePlanarBreps(bool_curves)
brep3 = rg.Brep.CreateBooleanDifference([surface_geo],bool_breps2,tol)
if brep3:
for brep in brep3:
sc.doc.Objects.AddBrep(brep)
rs.DeleteObject(surface)
rs.DeleteObjects(curves)
sc.doc.Views.Redraw()
Thanks Naruto, this seems to work great. Do you think it can be tweaked to subtract areas from a mesh as well? I can’t seem to make it work (but not very good with rhino common)