BooleanOperations
Functions to corefine triangulated surface meshes and compute triangulated surface meshes of the union, difference and intersection of the bounded volumes.
Target: CGALPlugin
namespace: cgal
parents:
- DataEngine
Data
| Name | Description | Default value |
|---|---|---|
| name | object name | unnamed |
| printLog | if true, emits extra messages at runtime. | 0 |
| tags | list of the subsets the object belongs to | |
| bbox | this object bounding box | |
| componentState | The state of the component among (Dirty, Valid, Undefined, Loading, Invalid). | Undefined |
| listening | if true, handle the events, otherwise ignore the events | 0 |
| operation | Boolean operation | union |
| Inputs | ||
| position1 | Input positions of the first mesh | |
| position2 | Input positions of the second mesh | |
| triangles1 | Input triangles of the first mesh | |
| triangles2 | Input triangles of the second mesh | |
| computeDistrubution | If true, computes outputIndices1 and outputIndices2 | 1 |
| Outputs | ||
| outputPosition | Output positions of the surface mesh | |
| outputTriangles | Output triangles of the surface mesh | |
| outputPosition1 | Output positions of transformation on the first surface mesh | |
| outputTriangles1 | Output triangles of transformation on the first surface mesh | |
| outputPosition2 | Output positions of transformation on the second surface mesh | |
| outputTriangles2 | Output triangles of transformation on the second surface mesh | |
| outputIndices1 | Indices of the surface mesh points that are on the first object | |
| outputIndices2 | Indices of the surface mesh points that are on the second object | |
Links
| Name | Description | Destination type name |
|---|---|---|
| context | Graph Node containing this object (or BaseContext::getDefault() if no graph is used) | BaseContext |
| slaves | Sub-objects used internally by this object | BaseObject |
| master | nullptr for regular objects, or master object for which this object is one sub-objects | BaseObject |
Examples
BooleanOperations.scn
<?xml version="1.0"?>
<Node name="root" gravity="0 0 0" dt="1" >
<RequiredPlugin pluginName="CGALPlugin"/>
<RequiredPlugin pluginName='SofaOpenglVisual'/>
<VisualStyle displayFlags="showWireframe showVisual" />
<Node name="Mesh1">
<MeshOBJLoader name="loader" filename="mesh/cube.obj" translation="50 50 50" scale="50"/>
<OglModel src="@loader" color="1 0 0"/>
</Node>
<Node name="Mesh2">
<MeshOBJLoader name="loader" filename="mesh/sphere_05.obj"/>
<OglModel src="@loader" color="0 1 0"/>
</Node>
<Node name="Union">
<BooleanOperations name="engine" position1="@../Mesh1/loader.position" triangles1="@../Mesh1/loader.triangles"
position2="@../Mesh2/loader.position" triangles2="@../Mesh2/loader.triangles"
operation="union"/>
<MeshTopology position="@engine.outputPosition" triangles="@engine.outputTriangles"/>
<OglModel color="0 0 1" translation="200 0 0"/>
</Node>
<Node name="Intersection">
<BooleanOperations name="engine" position1="@../Mesh1/loader.position" triangles1="@../Mesh1/loader.triangles"
position2="@../Mesh2/loader.position" triangles2="@../Mesh2/loader.triangles"
operation="intersection"/>
<MeshTopology position="@engine.outputPosition" triangles="@engine.outputTriangles"/>
<OglModel color="0 0 1" translation="375 0 0"/>
</Node>
<Node name="Difference1">
<BooleanOperations name="engine" position1="@../Mesh1/loader.position" triangles1="@../Mesh1/loader.triangles"
position2="@../Mesh2/loader.position" triangles2="@../Mesh2/loader.triangles"
operation="difference"/>
<MeshTopology position="@engine.outputPosition" triangles="@engine.outputTriangles"/>
<OglModel color="0 0 1" translation="500 0 0"/>
</Node>
<Node name="Difference2">
<BooleanOperations name="engine" position1="@../Mesh2/loader.position" triangles1="@../Mesh2/loader.triangles"
position2="@../Mesh1/loader.position" triangles2="@../Mesh1/loader.triangles"
operation="difference"/>
<MeshTopology position="@engine.outputPosition" triangles="@engine.outputTriangles"/>
<OglModel color="0 0 1" translation="700 0 0"/>
</Node>
</Node>
def createScene(root_node):
root = root_node.addChild('root', gravity="0 0 0", dt="1")
root.addObject('RequiredPlugin', pluginName="CGALPlugin")
root.addObject('RequiredPlugin', pluginName="SofaOpenglVisual")
root.addObject('VisualStyle', displayFlags="showWireframe showVisual")
mesh1 = root.addChild('Mesh1')
mesh1.addObject('MeshOBJLoader', name="loader", filename="mesh/cube.obj", translation="50 50 50", scale="50")
mesh1.addObject('OglModel', src="@loader", color="1 0 0")
mesh2 = root.addChild('Mesh2')
mesh2.addObject('MeshOBJLoader', name="loader", filename="mesh/sphere_05.obj")
mesh2.addObject('OglModel', src="@loader", color="0 1 0")
union = root.addChild('Union')
union.addObject('BooleanOperations', name="engine", position1="@../Mesh1/loader.position", triangles1="@../Mesh1/loader.triangles", position2="@../Mesh2/loader.position", triangles2="@../Mesh2/loader.triangles", operation="union")
union.addObject('MeshTopology', position="@engine.outputPosition", triangles="@engine.outputTriangles")
union.addObject('OglModel', color="0 0 1", translation="200 0 0")
intersection = root.addChild('Intersection')
intersection.addObject('BooleanOperations', name="engine", position1="@../Mesh1/loader.position", triangles1="@../Mesh1/loader.triangles", position2="@../Mesh2/loader.position", triangles2="@../Mesh2/loader.triangles", operation="intersection")
intersection.addObject('MeshTopology', position="@engine.outputPosition", triangles="@engine.outputTriangles")
intersection.addObject('OglModel', color="0 0 1", translation="375 0 0")
difference1 = root.addChild('Difference1')
difference1.addObject('BooleanOperations', name="engine", position1="@../Mesh1/loader.position", triangles1="@../Mesh1/loader.triangles", position2="@../Mesh2/loader.position", triangles2="@../Mesh2/loader.triangles", operation="difference")
difference1.addObject('MeshTopology', position="@engine.outputPosition", triangles="@engine.outputTriangles")
difference1.addObject('OglModel', color="0 0 1", translation="500 0 0")
difference2 = root.addChild('Difference2')
difference2.addObject('BooleanOperations', name="engine", position1="@../Mesh2/loader.position", triangles1="@../Mesh2/loader.triangles", position2="@../Mesh1/loader.position", triangles2="@../Mesh1/loader.triangles", operation="difference")
difference2.addObject('MeshTopology', position="@engine.outputPosition", triangles="@engine.outputTriangles")
difference2.addObject('OglModel', color="0 0 1", translation="700 0 0")