VoronoiToMeshEngine
Generate flat faces between adjacent regions of an image
Templates:
- ImageUC
- ImageUI
Target: image
namespace: sofa::component::engine
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 |
image | Voronoi image | 0 0 0 0 0 |
background | Optional Voronoi image of the background to surface details | 0 0 0 0 0 |
transform | 0 0 0 0 0 0 1 1 1 0 1 0 | |
position | output positions | |
edges | output edges | |
triangles | output triangles | |
minLength | minimum edge length in pixels | 2 |
Visualization | ||
showMesh | show reconstructed mesh | 0 |
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
VoronoiToMeshEngine.scn
<?xml version="1.0"?>
<Node name="root" gravity="0 0 0" dt="1" >
<Node name="plugins">
<RequiredPlugin name="Sofa.Component.IO.Mesh"/> <!-- Needed to use components [MeshOBJLoader] -->
<RequiredPlugin name="Sofa.Component.Setting"/> <!-- Needed to use components [BackgroundSetting] -->
<RequiredPlugin name="Sofa.GL.Component.Rendering3D"/> <!-- Needed to use components [OglModel] -->
<RequiredPlugin name="image"/> <!-- Needed to use components [ImageContainer ImageSampler MeshToImageEngine TransferFunction VoronoiToMeshEngine] -->
</Node>
<BackgroundSetting color="1 1 1"/>
<!--Simple flat outer shape (no need to sample the background)-->
<Node name="box" >
<MeshOBJLoader filename="mesh/cube.obj" triangulate="1" name="mesh" scale3d="3 0.5 3" translation="10 0 0" />
<MeshToImageEngine template="ImageUC" name="rasterizer" position="@mesh.position" triangles="@mesh.triangles" value="1" voxelSize="0.1" padSize="2" />
<ImageContainer template="ImageUC" name="image" src="@rasterizer"/>
<!-- <ImageViewer template="ImageUC" src="@image"/>-->
<ImageSampler name="sampler" template="ImageUC" src="@image" method="1" param="50" showSamplesScale="10" clearData="0"/>
<!-- <ImageViewer template="ImageUI" transform="@image.transform" image="@sampler.voronoi" plane="-1 10 -1"/>-->
<VoronoiToMeshEngine name="VoronoiToMesh" template="ImageUI" transform="@image.transform" image="@sampler.voronoi" showMesh="0" minLength="0.5" printLog="1"/>
<OglModel position="@VoronoiToMesh.position" edges="@VoronoiToMesh.edges" color="red" lineWidth="1" lineSmooth="1"/>
<OglModel position="@VoronoiToMesh.position" triangles="@VoronoiToMesh.triangles" color="5e-1 5e-1 10e-1 1e-1" lineWidth="1"/>
</Node>
<!--more complex outer shape -->
<Node name="gear" >
<MeshOBJLoader filename="mesh/gear0.obj" triangulate="1" name="mesh" />
<MeshToImageEngine template="ImageUC" name="rasterizer" position="@mesh.position" triangles="@mesh.triangles" value="1" voxelSize="0.12" padSize="2" />
<ImageContainer template="ImageUC" name="image" src="@rasterizer"/>
<!-- <ImageViewer template="ImageUC" src="@image"/>-->
<TransferFunction template="ImageUC,ImageUC" name="tf" inputImage="@image.image" param="0 1 1 0" />
<ImageContainer template="ImageUC" name="background" image="@tf.outputImage" transform="@image.transform"/>
<!-- <ImageViewer template="ImageUC" src="@background"/>-->
<ImageSampler name="sampler" template="ImageUC" src="@image" method="1" param="40" showSamplesScale="10" clearData="0"/>
<!-- <ImageViewer template="ImageUI" transform="@image.transform" image="@sampler.voronoi" plane="-1 10 -1"/>-->
<ImageSampler name="sampler_background" template="ImageUC" src="@background" method="1" param="150" clearData="0"/>
<VoronoiToMeshEngine name="VoronoiToMesh" template="ImageUI" transform="@image.transform" image="@sampler.voronoi" background="@sampler_background.voronoi" showMesh="0" minLength="0.5" printLog="1"/>
<OglModel position="@VoronoiToMesh.position" edges="@VoronoiToMesh.edges" color="red" lineWidth="1" lineSmooth="1"/>
<OglModel position="@VoronoiToMesh.position" triangles="@VoronoiToMesh.triangles" color="5e-1 5e-1 10e-1 1e-1" lineWidth="1"/>
</Node>
<!-- <ClipPlane normal="0 1 0" position="0 0 0"/>-->
</Node>
def createScene(root_node):
root = root_node.addChild('root', gravity="0 0 0", dt="1")
plugins = root.addChild('plugins')
plugins.addObject('RequiredPlugin', name="Sofa.Component.IO.Mesh")
plugins.addObject('RequiredPlugin', name="Sofa.Component.Setting")
plugins.addObject('RequiredPlugin', name="Sofa.GL.Component.Rendering3D")
plugins.addObject('RequiredPlugin', name="image")
root.addObject('BackgroundSetting', color="1 1 1")
box = root.addChild('box')
box.addObject('MeshOBJLoader', filename="mesh/cube.obj", triangulate="1", name="mesh", scale3d="3 0.5 3", translation="10 0 0")
box.addObject('MeshToImageEngine', template="ImageUC", name="rasterizer", position="@mesh.position", triangles="@mesh.triangles", value="1", voxelSize="0.1", padSize="2")
box.addObject('ImageContainer', template="ImageUC", name="image", src="@rasterizer")
box.addObject('ImageSampler', name="sampler", template="ImageUC", src="@image", method="1", param="50", showSamplesScale="10", clearData="0")
box.addObject('VoronoiToMeshEngine', name="VoronoiToMesh", template="ImageUI", transform="@image.transform", image="@sampler.voronoi", showMesh="0", minLength="0.5", printLog="1")
box.addObject('OglModel', position="@VoronoiToMesh.position", edges="@VoronoiToMesh.edges", color="red", lineWidth="1", lineSmooth="1")
box.addObject('OglModel', position="@VoronoiToMesh.position", triangles="@VoronoiToMesh.triangles", color="5e-1 5e-1 10e-1 1e-1", lineWidth="1")
gear = root.addChild('gear')
gear.addObject('MeshOBJLoader', filename="mesh/gear0.obj", triangulate="1", name="mesh")
gear.addObject('MeshToImageEngine', template="ImageUC", name="rasterizer", position="@mesh.position", triangles="@mesh.triangles", value="1", voxelSize="0.12", padSize="2")
gear.addObject('ImageContainer', template="ImageUC", name="image", src="@rasterizer")
gear.addObject('TransferFunction', template="ImageUC,ImageUC", name="tf", inputImage="@image.image", param="0 1 1 0")
gear.addObject('ImageContainer', template="ImageUC", name="background", image="@tf.outputImage", transform="@image.transform")
gear.addObject('ImageSampler', name="sampler", template="ImageUC", src="@image", method="1", param="40", showSamplesScale="10", clearData="0")
gear.addObject('ImageSampler', name="sampler_background", template="ImageUC", src="@background", method="1", param="150", clearData="0")
gear.addObject('VoronoiToMeshEngine', name="VoronoiToMesh", template="ImageUI", transform="@image.transform", image="@sampler.voronoi", background="@sampler_background.voronoi", showMesh="0", minLength="0.5", printLog="1")
gear.addObject('OglModel', position="@VoronoiToMesh.position", edges="@VoronoiToMesh.edges", color="red", lineWidth="1", lineSmooth="1")
gear.addObject('OglModel', position="@VoronoiToMesh.position", triangles="@VoronoiToMesh.triangles", color="5e-1 5e-1 10e-1 1e-1", lineWidth="1")