Click or drag to resize

PlaneSurfaceCreateThroughBox Method (Plane, BoundingBox)

Create a plane that contains the intersection of a bounding box.

Namespace:  Rhino.Geometry
Assembly:  RhinoCommon (in RhinoCommon.dll)
Since: 5.0
Syntax
public static PlaneSurface CreateThroughBox(
	Plane plane,
	BoundingBox box
)

Parameters

plane
Type: Rhino.GeometryPlane
An original plane value.
box
Type: Rhino.GeometryBoundingBox
A box to use for extension boundary.

Return Value

Type: PlaneSurface
A new plane surface on success, or null on error.
Examples
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;
    }
  }
}
Python
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()
See Also