M_Rhino_Geometry_Brep_CreateBooleanDifference_3 - mcneel/rhinocommon-api-docs GitHub Wiki
Compute the Solid Difference of two sets of Breps.
Namespace: Rhino.Geometry
Assembly: RhinoCommon (in RhinoCommon.dll) Version: Rhino 6.0
C#
public static Brep[] CreateBooleanDifference(
IEnumerable<Brep> firstSet,
IEnumerable<Brep> secondSet,
double tolerance,
bool manifoldOnly
)
VB
Public Shared Function CreateBooleanDifference (
firstSet As IEnumerable(Of Brep),
secondSet As IEnumerable(Of Brep),
tolerance As Double,
manifoldOnly As Boolean
) As Brep()
- firstSet
- Type: System.Collections.Generic.IEnumerable(Brep)
First set of Breps (the set to subtract from). - secondSet
- Type: System.Collections.Generic.IEnumerable(Brep)
Second set of Breps (the set to subtract). - tolerance
- Type: System.Double
Tolerance to use for difference operation. - manifoldOnly
- Type: System.Boolean
If true, non-manifold input breps are ignored.
Type: Brep[]
An array of Brep results or null on failure.
The solid orientation of the breps make a difference when calling this function
VB
Imports System.Collections.Generic
Partial Class Examples
Public Shared Function BooleanDifference(ByVal doc As Rhino.RhinoDoc) As Rhino.Commands.Result
Dim rc As Rhino.Commands.Result
Dim objrefs As Rhino.DocObjects.ObjRef() = Nothing
rc = Rhino.Input.RhinoGet.GetMultipleObjects("Select first set of polysurfaces", False, Rhino.DocObjects.ObjectType.PolysrfFilter, objrefs)
If rc <> Rhino.Commands.Result.Success Then
Return rc
End If
If objrefs Is Nothing OrElse objrefs.Length < 1 Then
Return Rhino.Commands.Result.Failure
End If
Dim in_breps0 As New List(Of Rhino.Geometry.Brep)()
For i As Integer = 0 To objrefs.Length - 1
Dim brep As Rhino.Geometry.Brep = objrefs(i).Brep()
If brep IsNot Nothing Then
in_breps0.Add(brep)
End If
Next
doc.Objects.UnselectAll()
rc = Rhino.Input.RhinoGet.GetMultipleObjects("Select second set of polysurfaces", False, Rhino.DocObjects.ObjectType.PolysrfFilter, objrefs)
If rc <> Rhino.Commands.Result.Success Then
Return rc
End If
If objrefs Is Nothing OrElse objrefs.Length < 1 Then
Return Rhino.Commands.Result.Failure
End If
Dim in_breps1 As New List(Of Rhino.Geometry.Brep)()
For i As Integer = 0 To objrefs.Length - 1
Dim brep As Rhino.Geometry.Brep = objrefs(i).Brep()
If brep IsNot Nothing Then
in_breps1.Add(brep)
End If
Next
Dim tolerance As Double = doc.ModelAbsoluteTolerance
Dim breps As Rhino.Geometry.Brep() = Rhino.Geometry.Brep.CreateBooleanDifference(in_breps0, in_breps1, tolerance)
If breps.Length < 1 Then
Return Rhino.Commands.Result.[Nothing]
End If
For i As Integer = 0 To breps.Length - 1
doc.Objects.AddBrep(breps(i))
Next
doc.Views.Redraw()
Return Rhino.Commands.Result.Success
End Function
End Class
C#
using System.Collections.Generic;
using Rhino.Commands;
partial class Examples
{
public static Rhino.Commands.Result BooleanDifference(Rhino.RhinoDoc doc)
{
Rhino.DocObjects.ObjRef[] objrefs;
Result rc = Rhino.Input.RhinoGet.GetMultipleObjects("Select first set of polysurfaces",
false, Rhino.DocObjects.ObjectType.PolysrfFilter, out objrefs);
if (rc != Rhino.Commands.Result.Success)
return rc;
if (objrefs == null || objrefs.Length < 1)
return Rhino.Commands.Result.Failure;
List<Rhino.Geometry.Brep> in_breps0 = new List<Rhino.Geometry.Brep>();
for (int i = 0; i < objrefs.Length; i++)
{
Rhino.Geometry.Brep brep = objrefs[i].Brep();
if (brep != null)
in_breps0.Add(brep);
}
doc.Objects.UnselectAll();
rc = Rhino.Input.RhinoGet.GetMultipleObjects("Select second set of polysurfaces",
false, Rhino.DocObjects.ObjectType.PolysrfFilter, out objrefs);
if (rc != Rhino.Commands.Result.Success)
return rc;
if (objrefs == null || objrefs.Length < 1)
return Rhino.Commands.Result.Failure;
List<Rhino.Geometry.Brep> in_breps1 = new List<Rhino.Geometry.Brep>();
for (int i = 0; i < objrefs.Length; i++)
{
Rhino.Geometry.Brep brep = objrefs[i].Brep();
if (brep != null)
in_breps1.Add(brep);
}
double tolerance = doc.ModelAbsoluteTolerance;
Rhino.Geometry.Brep[] breps = Rhino.Geometry.Brep.CreateBooleanDifference(in_breps0, in_breps1, tolerance);
if (breps.Length < 1)
return Rhino.Commands.Result.Nothing;
for (int i = 0; i < breps.Length; i++)
doc.Objects.AddBrep(breps[i]);
doc.Views.Redraw();
return Rhino.Commands.Result.Success;
}
}
Python
import Rhino
import scriptcontext
def BooleanDifference():
filter = Rhino.DocObjects.ObjectType.PolysrfFilter
rc, objrefs = Rhino.Input.RhinoGet.GetMultipleObjects("Select first set of polysurfaces", False, filter)
if rc != Rhino.Commands.Result.Success: return rc
if not objrefs: return Rhino.Commands.Result.Failure
in_breps0 = []
for objref in objrefs:
brep = objref.Brep()
if brep: in_breps0.append(brep)
scriptcontext.doc.Objects.UnselectAll()
rc, objrefs = Rhino.Input.RhinoGet.GetMultipleObjects("Select second set of polysurfaces", False, filter)
if rc != Rhino.Commands.Result.Success: return rc
if not objrefs: return Rhino.Commands.Result.Failure
in_breps1 = []
for objref in objrefs:
brep = objref.Brep()
if brep: in_breps1.append(brep)
tolerance = scriptcontext.doc.ModelAbsoluteTolerance
breps = Rhino.Geometry.Brep.CreateBooleanDifference(in_breps0, in_breps1, tolerance)
if not breps: return Rhino.Commands.Result.Nothing
for brep in breps: scriptcontext.doc.Objects.AddBrep(brep)
scriptcontext.doc.Views.Redraw()
return Rhino.Commands.Result.Success
if __name__=="__main__":
BooleanDifference()
Supported in: 6.0.16224.21491
Brep Class
CreateBooleanDifference Overload
Rhino.Geometry Namespace