Split brep with Breps

I am referring to this topic in R5:

Is it planned to implement this in RC in R6?


Hi Dmitriy,

No, there has not been anything done on this.

Other than you you describe splitting a single Brep with one or more Brep cutters, is there anything else we should know?

– Dale

Hi @dale
Actually, I have described this need in details in the linked post (year 2014).
Not sure if I should add smth here. I am looking for exact functionality as Split command in Rhino supporting split with multibreps.
I need to know if this is planned/not planned to be in RC in R6 - then I will need to spend time and write my own splitter with similar behavior.


I’ve logged this wish.


– Dale

@dale I think he can just make a single brep out of all the cutters by appending them using ON_Brep::Append(), then split with the result.

Hello @dale @chuck and @GregArden
I have recently done some testing with multibrep split (using Append method) but seems it doesn’t work for me.
Enclosed is an easy example, where I try to split a blue brep with green breps. In this particular case blue brep is a single-face brep or surface, but it should also work with such breps or?
If I use native Rhino Split command - everything works perfectly.

Your soonest attention is highly appreciated.
Split_Multi_20171001.3dm (44.6 KB)


Hi Dmitriy,

Appending the multiple Breps before using them to split something only makes sense when they don’t intersect each other.


Hello @chuck

Thanks for fast reply.

I understood from @GregArden that Append method can be used for all cases.
If not - what would be the equivalent of Brep.Split with multiple splitters, regardless if they intersect or not.


@Dmitriy Maybe I’m wrong about Append, but I don’t think so. I can dig into it tomorrow. My belief is that you would need to merge the intersecting cutters into a single BREP that includes the intersections as edges. (EDIT: You do, in fact, have to merge the BREPS if they intersect) If they do not intersect, then Append achieves the result. If they do intersect, then you would need to call the NonmanifoldMerge command on the cutters and then use the result of that as your single cutter.

It looks like there’s an SDK function to do this.

Combines two or more breps into one.
InBreps - [in] the breps to merge.
tolerance - [in] the tolerance to use when merging.
MergedBrep - [out] the resulting brep.
true if success.
false if unsuccessful.
Faces are split by intersection curves.
bool RhinoMergeBreps(
const ON_SimpleArray<const ON_Brep
>& InBreps,
double tolerance,
ON_Brep& MergedBrep