RhinoCommon API
PlaneSurfaceCreateThroughBox Method (Plane, BoundingBox) |
Extends a plane into a plane surface so that the latter goes through a bounding box.
Namespace: Rhino.Geometry
Assembly: RhinoCommon (in RhinoCommon.dll)

public static PlaneSurface CreateThroughBox( Plane plane, BoundingBox box )
Public Shared Function CreateThroughBox ( plane As Plane, box As BoundingBox ) As PlaneSurface
Parameters
- plane
- Type: Rhino.GeometryPlane
An original plane value. - box
- Type: Rhino.GeometryBoundingBox
A box to use for extension boundary.
Return Value
Type: PlaneSurfaceA new plane surface on success, or null on error.

using Rhino; using Rhino.DocObjects; using Rhino.Commands; using Rhino.Input; using Rhino.Geometry; namespace examples_cs { public class SplitBrepsWithPlaneCommand : Rhino.Commands.Command { public override string EnglishName { get { return "csSplitBrepsWithPlane"; } } protected override Result RunCommand(RhinoDoc doc, RunMode mode) { //First, collect all the breps to split ObjRef[] obj_refs; var rc = RhinoGet.GetMultipleObjects("Select breps to split", false, ObjectType.Brep, out obj_refs); if (rc != Result.Success || obj_refs == null) return rc; // Get the final plane Plane plane; rc = RhinoGet.GetPlane(out plane); if (rc != Result.Success) return rc; //Iterate over all object references foreach (var obj_ref in obj_refs) { var brep = obj_ref.Brep(); var bbox = brep.GetBoundingBox(false); //Grow the boundingbox in all directions //If the boundingbox is flat (zero volume or even zero area) //then the CreateThroughBox method will fail. var min_point = bbox.Min; min_point.X -= 1.0; min_point.Y -= 1.0; min_point.Z -= 1.0; bbox.Min = min_point; var max_point = bbox.Max; max_point.X += 1.0; max_point.Y += 1.0; max_point.Z += 1.0; bbox.Max = max_point; var plane_surface = PlaneSurface.CreateThroughBox(plane, bbox); if (plane_surface == null) { //This is rare, it will most likely not happen unless either the plane or the boundingbox are invalid RhinoApp.WriteLine("Cutting plane could not be constructed."); } else { var breps = brep.Split(plane_surface.ToBrep(), doc.ModelAbsoluteTolerance); if (breps == null || breps.Length == 0) { RhinoApp.Write("Plane does not intersect brep (id:{0})", obj_ref.ObjectId); continue; } foreach (var brep_piece in breps) { doc.Objects.AddBrep(brep_piece); } doc.Objects.AddSurface(plane_surface); doc.Objects.Delete(obj_ref, false); } } doc.Views.Redraw(); return Result.Success; } } }
Imports Rhino Imports Rhino.DocObjects Imports Rhino.Commands Imports Rhino.Input Imports Rhino.Geometry Namespace examples_vb Public Class SplitBrepsWithPlaneCommand Inherits Rhino.Commands.Command Public Overrides ReadOnly Property EnglishName() As String Get Return "vbSplitBrepsWithPlane" End Get End Property Protected Overrides Function RunCommand(doc As RhinoDoc, mode As RunMode) As Result 'First, collect all the breps to split Dim obj_refs As ObjRef() = Nothing Dim rc = RhinoGet.GetMultipleObjects("Select breps to split", False, ObjectType.Brep, obj_refs) If rc <> Result.Success OrElse obj_refs Is Nothing Then Return rc End If ' Get the final plane Dim plane As Plane rc = RhinoGet.GetPlane(plane) If rc <> Result.Success Then Return rc End If 'Iterate over all object references For Each obj_ref As ObjRef In obj_refs Dim brep = obj_ref.Brep() Dim bbox = brep.GetBoundingBox(False) 'Grow the boundingbox in all directions 'If the boundingbox is flat (zero volume or even zero area) 'then the CreateThroughBox method will fail. Dim min_point = bbox.Min min_point.X -= 1.0 min_point.Y -= 1.0 min_point.Z -= 1.0 bbox.Min = min_point Dim max_point = bbox.Max max_point.X += 1.0 max_point.Y += 1.0 max_point.Z += 1.0 bbox.Max = max_point Dim plane_surface = PlaneSurface.CreateThroughBox(plane, bbox) If plane_surface Is Nothing Then 'This is rare, it will most likely not happen unless either the plane or the boundingbox are invalid RhinoApp.WriteLine("Cutting plane could not be constructed.") Else Dim breps = brep.Split(plane_surface.ToBrep(), doc.ModelAbsoluteTolerance) If breps Is Nothing OrElse breps.Length = 0 Then RhinoApp.Write("Plane does not intersect brep (id:{0})", obj_ref.ObjectId) Continue For End If For Each brep_piece As Brep In breps doc.Objects.AddBrep(brep_piece) Next doc.Objects.AddSurface(plane_surface) doc.Objects.Delete(obj_ref, False) End If Next doc.Views.Redraw() Return Result.Success End Function End Class End Namespace
from Rhino import * from Rhino.DocObjects import * from Rhino.Commands import * from Rhino.Input import * from Rhino.Geometry import * from scriptcontext import doc def RunCommand(): #First, collect all the breps to split rc, obj_refs = RhinoGet.GetMultipleObjects("Select breps to split", False, ObjectType.Brep) if rc <> Result.Success or obj_refs == None: return rc # Get the final plane rc, plane = RhinoGet.GetPlane() if rc <> Result.Success: return rc #Iterate over all object references for obj_ref in obj_refs: brep = obj_ref.Brep() bbox = brep.GetBoundingBox(False) #Grow the boundingbox in all directions #If the boundingbox is flat (zero volume or even zero area) #then the CreateThroughBox method will fail. min_point = bbox.Min min_point.X -= 1.0 min_point.Y -= 1.0 min_point.Z -= 1.0 bbox.Min = min_point max_point = bbox.Max max_point.X += 1.0 max_point.Y += 1.0 max_point.Z += 1.0 bbox.Max = max_point plane_surface = PlaneSurface.CreateThroughBox(plane, bbox) if plane_surface == None: #This is rare, it will most likely not happen unless either the plane or the boundingbox are invalid RhinoApp.WriteLine("Cutting plane could not be constructed.") else: breps = brep.Split(plane_surface.ToBrep(), doc.ModelAbsoluteTolerance) if breps == None or breps.Length == 0: RhinoApp.Write("Plane does not intersect brep (id:{0})", obj_ref.ObjectId) continue for brep_piece in breps: doc.Objects.AddBrep(brep_piece) doc.Objects.AddSurface(plane_surface) doc.Objects.Delete(obj_ref, False) doc.Views.Redraw() return Result.Success if __name__ == "__main__": RunCommand()

Rhino for Mac
Supported in: 5.4Rhino for Windows
Supported in: 6.8