Does this do what you’re looking for?
solidCutter.py (1023 Bytes)
import rhinoscriptsyntax as rs
toCut = rs.GetObjects("Select Solids to Cut", filter = rs.filter.polysurface)
wire = rs.GetObject("Select Closed Planar Curve as Cutter", filter = rs.filter.curve)
if toCut is not None:
rs.EnableRedraw(False)
try:
centroidPt = rs.CurveAreaCentroid(wire)[0]
basePlane = rs.CurvePlane(wire)
except:
print("Cutting object must be closed planar curve")
for target in toCut:
bb = rs.BoundingBox(target)
l = (rs.Distance(bb[0], bb[6]))*2+rs.Distance(bb[0],centroidPt)
extrudUp = rs.ExtrudeCurveStraight(wire, centroidPt, rs.PointAdd(centroidPt, basePlane.ZAxis*l))
extrudDown = rs.ExtrudeCurveStraight(wire, centroidPt, rs.PointAdd(centroidPt, basePlane.ZAxis*l*-1))
extruds = rs.JoinSurfaces([extrudUp, extrudDown])
rs.CapPlanarHoles(extruds)
trimmed = rs.BooleanIntersection(target, extruds)
rs.DeleteObjects([extrudUp, extrudDown, extruds])
rs.EnableRedraw(True)