algorithmic modeling for Rhino
"Carve is a fast, robust constructive solid geometry library. (fork from https://code.google.com/p/carve/)"
"CarveSharp is a .NET wrapper for the fast and robust constructive solid geometry (CSG) library Carve. Using CarveSharp, you could easily pass triangular meshes and perform boolean operations on them (such as union, intersect, etc.). CarveSharp is targeted for .NET v4 and above (due to the use of parallel for loops for increased performance). It can be easily integrated into Unity by rewriting all Parallel.For loops as regular C# for loops (note that the performance may significantly decrease)."
CarveRhino and CarveGH are an adaptation of the two wonderful pieces of software described above, allowing the usage of the Carve library in Rhino and Grasshopper, respectively. At the moment, just the basic operation of Carve is exposed, and outputs a triangulated mesh. Although Carve supports N-gons, Rhino doesn't, so these are instead triangulated. Hopefully this will change in the future with N-gon support in Rhino. There seems to be a lot of functionality in Carve that is not being exploited, so hopefully this can provide a good enough starting point to have good, solid mesh booleans in Rhino.
The libs are provided as-is, with no guarantee of support for now, as I use them internally and do not intend to develop this into a shiny, polished plug-in. If there is enough interest, I can tidy up the code-base and upload it somewhere if someone more savvy than me wants to improve on it (and there is a LOT of room for that!).
CarveLibWrapper.dll - The actual wrapper for the Carve library.
CarveSharp.dll - The dotNET assembly which exposes Carve, using only basic types.
CarveRC.dll - CarveRhinoCommon, which provides basic conversion from Rhino types (Mesh) to Carve types.
CarveGH.gha - Grasshopper assembly which adds the 'Carve' component to Mesh -> Util.
CarveRhino.rhp - Rhino plug-in which adds the 'Carve' command to Rhino.
This is currently structured in this way to keep it modular and allow people to use any particular part of the wrapper, with or without RhinoCommon or GH, etc.
This would not have been possible without the work of Mehran Maghoumi who created the original CarveSharp wrapper (https://github.com/Maghoumi). I have basically just removed dependencies to OpenTK and CodeFullToolkit, slightly re-organized the code, exposed some more functionality, and provided interfaces to Rhino and GH.
UPDATE: Link to blog post is here.
I would if he let me ;)
Stop lobbying CITA people.
Tom nice one btw. I couldn't help it but comment on the CITA collective identity first.
Shut up, Marios. <3
Re Unity compatibility, there's experimental support for .NET 4.6 as of the 2017.1 release so parallel loops can be enjoyed by all.
Ah, those are commented out at the moment - I think I was trying to narrow down a crash or two - but I'll try to whack 'em back in. Missed you at DMS, Dave!
Very fast and clean! No naked edges in the examples I tried. Thank you.
I have 2 meshes that won't do boolean difference... the Carve component explodes the result (see image). It's odd because the Rhino command: booleanDifference works totally fine with this... I know the Carve Library is more robust than Rhino's boolean functions so not sure why it won't work? I've uploaded the files. it's A minus B.