Triangulating a Surface Mesh

Do you only need adaptive remeshing of the surface mesh? Then you don’t need volumetric mesher at all. What is your goal? What are you going to use the mesh for?

My apologies, I will try to explain myself the best I can:

  • Users will design devices (vtk) that will then go through Cleaver in order to produces meshes for 2D/3D FEM.
  • If users cho0se 2D FEM I only look at a specific 2D surface, while if they chose 3D FEM a volumetric mesh is used. I would like to use Cleaver for both applications.

Currently I am having trouble adjusting the amount of elements Cleaver produces, as shown above. I am able to control the accuracy of the mesh, but would also like to control the amount of elements created (fineness) and apply boundary conditions that increase the density of elements(fineness) if possible.

You can control element sizes as described in Cleaver documentation. I haven’t tried this, but based on the documentation my understanding is that you can even specify a sizing field ( --sizing_field argument), which allows you to designate regions where you want the mesh to be finer or coarser. You may also experiment with the mesh generation parameters using GUI application that can be downloaded from Cleaver’s website.

1 Like

If I created a surface mesh using vtkGeometryFilter can I use that as input for Cleaver or do I need convert my surface mesh file (.vtk) to NRRD format? Could Slicer help with this conversion process?

I am confused as to what type of input Cleaver takes, as finding detailed Cleaver documentation seems impossible.

How did you create that surface? What is your input? Normally you would only need vtkGeometryFilter to create a surface mesh from a volumetric mesh using Cleaver - but if you already had a volumetric mesh then why would you create it again?

Cleaver’s input is binary or fractional labelmap volume (.nrrd). Note that .vtk file can contain anything (surface mesh - polydata, volumetric mesh - unstructured grid, image volume, etc.).

I was going from volume to surface to volume because my original format is vtkUnstrucredGrid(.vtk file) and I need to get to NRRD.

What would be the best way to go from my original format to binary/fractional labelmap volume?

Could you draw a simple diagram of your full processing workflow, including indication of where your inputs come from and where the outputs go?

cap

The only thing I am unsure about is if I can use Cleaver for 2D Models

Thank you, this helps. What is in Model Creation step’s VTK unstructured grid? Are you working with simple geometric primitives only (or you also import some complex shape from 3D scans, etc.)? What do you mean by “Discretised mesh”?

  • The unGrid is created purely from simple 2D VTK Cells
  • By Discretised I mean a Mesh that is suitable for FEM, with nodes created from partitioned geometry that are collectively sufficient to serve as the domain of analysis for the model

In Slicer, we rarely work with 2D structures (because real life is mostly 3D) and we usually have very complex geometries (from imaging data). If you only need triangulation of simple geometry then you may be able to get that by using a few simple VTK filters, such as vtkDelaunay2D.

Though they are created from 2D Cells, my 3D models can become quite complex; they also contain different types of materials. This is why I am interested in Cleaver, I really like what the latice cleaving method outputs.

In terms of my 2D models, does Cleaver support 2D input? I have read some of Ross Whitaker’s papers, and 2D examples are talked about.

I don’t know if Cleaver supports 2D meshes. You can ask Cleaver developers about it.

Hi Christopher,

For Cleaver-specific questions, there is also a separate project that supports Cleaver. Would you willing to push your 2D question to that list:

https://www.sci.utah.edu/software/cleaver.html

Regards.

My apologies for all of the confusion caused in this thread (I am a c++ dev that has ben thrown into sci vis), let me try to clarify everything so that people can still find this useful:


I will stop straying to Cleaver specific discourse(that mailing list is dead and not working, I can not find a single place to discus Cleaver or any doc besides the src).


Does this mean that Cleaver/SegMesher is only used to generate Volumetric Meshes, and that since I already have one all I need to do is subdivide it?

What do you mean by complex geometries, i.e. geometries that are too complex to simply subdivide in a manner such as above?

@Ross could you tell where exactly Cleaver users/developers can be reached?

It depends on what exactly you would like to do. Maybe you can use your mesh as is, or try simple tetrahedralization, maybe uniform subdivision. Cleaver does complete remeshing, with adaptive adjustment of element sizes, which is useful for finite element analysis.

For example, what you create by segmenting complex anatomical structures.