<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.slicer.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bpaniagua</id>
	<title>Slicer Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.slicer.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Bpaniagua"/>
	<link rel="alternate" type="text/html" href="https://www.slicer.org/wiki/Special:Contributions/Bpaniagua"/>
	<updated>2026-05-31T04:32:34Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.33.0</generator>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61215</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61215"/>
		<updated>2019-06-10T15:11:09Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: /* Initial discussions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* Martin Styner&lt;br /&gt;
* Benjamin Wilson (Kitware Summer intern 2019)&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
* [http://insight-journal.org/browse/publication/106 KWMeshVisu]: Legacy mesh viewer from the Styner Lab.&lt;br /&gt;
* Types of Mesh Operations:&lt;br /&gt;
** Multiple Mesh (2+) &lt;br /&gt;
** Single Mesh&lt;br /&gt;
** MeshToVolume&lt;br /&gt;
** MeshScalar to Mesh&lt;br /&gt;
** MeshScalar to MeshScalar&lt;br /&gt;
** MeshScalar Operation&lt;br /&gt;
** Mutliple MeshScalar&lt;br /&gt;
&lt;br /&gt;
== Initial discussions ==&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
We would like to add a parameter node so if you save the scene and reload then all the node and parameter selections that you have made are not lost&lt;br /&gt;
Enclose all functionality in C++ little CLIs that can be called from the python infrastructure, so they can be used from any modules&lt;br /&gt;
Do the same thing for the functionality in MeshMath, creating independent CLIs and modules&lt;br /&gt;
&lt;br /&gt;
=== Current MeshMath functionality ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! Type&lt;br /&gt;
! Keep&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| subtract&lt;br /&gt;
| Subtract mesh from inputmesh, write a KWMeshVisu readable text file&lt;br /&gt;
| PairWiseMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]]&lt;br /&gt;
|-&lt;br /&gt;
| magnitude&lt;br /&gt;
| Magnitude of the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&lt;br /&gt;
| ?&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| It seems this is very specific to a certain application&lt;br /&gt;
|-&lt;br /&gt;
| scaleMVA&lt;br /&gt;
| Scales the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&lt;br /&gt;
| ?&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| It seems this is very specific to a certain application&lt;br /&gt;
|-&lt;br /&gt;
| scaleMesh&lt;br /&gt;
| Scales the input mesh file&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| avgMesh&lt;br /&gt;
| Compute the average mesh from inputmesh file1, file2...&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ave&lt;br /&gt;
| Compute the average vector field from file1, file2... generated with -substract&lt;br /&gt;
| MultipleMesh / ScalarMesh Operator&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
|-&lt;br /&gt;
| normave&lt;br /&gt;
| Works as the \&amp;quot;-ave\&amp;quot; option, but the average vector are projected on the normal at each point&lt;br /&gt;
| MultipleMesh / ScalarMesh Operator&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
|-&lt;br /&gt;
| InvVect&lt;br /&gt;
| Invert all the vectors created with the -substract option and write a KWMeshVisu readable file&lt;br /&gt;
| MeshScalar Operation &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| magdir&lt;br /&gt;
| Compute the signed magnitude of each of the vector from the vector field.(+ if in the normal direction, - otherwise)&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
|-&lt;br /&gt;
| magNormdir&lt;br /&gt;
| Compute the signed magnitude of the normal projection of the vector field&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
|-&lt;br /&gt;
| applyVec&lt;br /&gt;
| Deforme the mesh according to the vector field specified as input &lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| meshValues&lt;br /&gt;
| Find the points and cells in a mesh. The outputfile is a textfile with the values&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Export through CSV&lt;br /&gt;
|-&lt;br /&gt;
| avgGaussMesh&lt;br /&gt;
| &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt; ... -gaussMeshPara &amp;lt;mean&amp;gt;,&amp;lt;stdev&amp;gt;,&amp;lt;val1&amp;gt;,&amp;lt;val2&amp;gt;,... Compute the gaussian average for mesh files. The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| avgGaussKWM&lt;br /&gt;
| Compute the gaussian average for KWMeshVisu files. The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| See &amp;quot;ave&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| alignMesh&lt;br /&gt;
| Align all of the meshes to the inputmesh (== MeshFile0) using Procrustes alignment [-scalingOn]&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Fix the scaling, give an option to export the scaling factors associated with the mesh (so it can be reverted via scaleMesh)&lt;br /&gt;
|-&lt;br /&gt;
| alignMeshICP&lt;br /&gt;
| Align all of the meshes to the inputmesh (== MeshFile0) using IterativeClosestPoints (no correspondence required)&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BadTriangle&lt;br /&gt;
| Find the bad triangles in a Mesh. The &amp;lt;thresh value&amp;gt; is the value of the threshFactor to calculate the standard deviation for the bad triangles. The output is a KWMeshVisu text file with the values of the average of the triangles of the mesh&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Probably not keep since this is the same than &amp;quot;Clean&amp;quot; in the SurfaceToolbox&lt;br /&gt;
|-&lt;br /&gt;
| extraction&lt;br /&gt;
| To extract an attribute.The Input is the Mesh, the extractFilename is the attribute image and the Output is a KWMeshVisu text file with the attribute extraction [-extractClosest]: extract closest attribute [-nn]: nearest neighbor interpolation (default: linear)&lt;br /&gt;
| MeshToVolume&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| value&lt;br /&gt;
| Extract the 5th column from a textfile and write a KWMeshVisu file with the values obtained&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into &amp;quot;import from file&amp;quot; or something similar. This new operation would import a scalar field from a csv file into a mesh&lt;br /&gt;
|-&lt;br /&gt;
| subKWM&lt;br /&gt;
| Difference between 2 KWMeshVisu files&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| See &amp;quot;ave&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| MaxColor&lt;br /&gt;
| Compare each point in every files, find a max for every points, keep 5% near the max, the other values will be 0&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Transform this into a Threshold scalar map&lt;br /&gt;
|-&lt;br /&gt;
| dist_absolute&lt;br /&gt;
| Absolute distance map between KWMeshVisu files&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Transform this into something better, something that can operate over several scalar maps&lt;br /&gt;
|-&lt;br /&gt;
| dist_relative&lt;br /&gt;
| Relative distance map between KWMeshVisu files (values between -1 &amp;amp; 1)&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Transform this into something better, &amp;quot;normalize scalar map&amp;quot;, and give the option to set up the range&lt;br /&gt;
|-&lt;br /&gt;
| label&lt;br /&gt;
| Separate every labels, find the mean...&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This will be changed into a different module. The module will list all the scalar fields in the Mesh&lt;br /&gt;
|-&lt;br /&gt;
| color -val &amp;lt;number_of_label&amp;gt;,&amp;lt;value_label&amp;gt;&lt;br /&gt;
| To change the value of labels to see the evolution with KWMeshVisu.&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This will not be kept as it has legacy operations&lt;br /&gt;
|-&lt;br /&gt;
| first &amp;lt;textfile&amp;gt; &lt;br /&gt;
| Convert a column file into a line file with a comma between each value.&lt;br /&gt;
| Random&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This will not be kept as it should not be here.&lt;br /&gt;
|-&lt;br /&gt;
| MC2Origin &lt;br /&gt;
| Convert a column file into a line file with a comma between each value.&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| avg/median/min/max/per1/per99OneKWM &lt;br /&gt;
| Obtain descriptive statistics from scalar fields in a single VTK mesh&lt;br /&gt;
| SingleMesh / ScalarMesh Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, arguments should be the scalar field name and the operation to perform. Might revisit later, most of this functionality is in MeshStatistics&lt;br /&gt;
|-&lt;br /&gt;
| FillHole&lt;br /&gt;
| Fills up a hole in a open mesh.&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Slight change it should close all the open holes until there are no more &lt;br /&gt;
|-&lt;br /&gt;
| BordersOut&lt;br /&gt;
| Outputs the borders of a mesh (if there)&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| isOpen&lt;br /&gt;
| Gives back an integer defining whether the mesh is open or not&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Probably not keep, will revisit later&lt;br /&gt;
|-&lt;br /&gt;
| CleanMesh&lt;br /&gt;
| Re-mesh the input mesh and gives back a new clean mesh without degenerated triangles&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Already in the surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| SmoothMesh&lt;br /&gt;
| Gives back a Laplacian smoothed surface&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Already in the surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| FilterNormals&lt;br /&gt;
| Changes homogeneously normals of the polygons in a mesh&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Already in the surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| StatsROI&lt;br /&gt;
| Process a KWMeshVisu file, given a ROI Mask&lt;br /&gt;
| MeshScalar operation &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Already in Slicer through Pick and Pain and MeshStatistics&lt;br /&gt;
|-&lt;br /&gt;
| KWMToPolyData&lt;br /&gt;
| Writes a KWM scalar field (N Dimensions) into a PolyData Field Data Scalar to visualize in Slicer&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, the scalar field can be input in a csv, it does not need to be a KWM file&lt;br /&gt;
|-&lt;br /&gt;
| FSAscData&lt;br /&gt;
| Extracts a curvature/thickness etc information from a FreeSurfer style scalar file and adds it as attribute to the vtk mesh for visualization. FS format is line-by-line, no header, with each line 'point-id vertex-x vertex-y vertex-z scalar-prop&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Check in with @styner to see if he can provide data to test this, or if he wants to keep it&lt;br /&gt;
|-&lt;br /&gt;
| surfaceArea&lt;br /&gt;
| Computes surface area in a txt file&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, we should create an option to extract vtkMassProperties from a single Mesh including surface area and volume&lt;br /&gt;
|-&lt;br /&gt;
| variance/mean/attSTD&lt;br /&gt;
| Compute variance across population of scalar fields&lt;br /&gt;
| Multiple MeshScalar (multiple Mesh) &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, we should compute variance in a scalar field given the scalar field name and a collection of meshes&lt;br /&gt;
|-&lt;br /&gt;
| GetCurvatures&lt;br /&gt;
| Gets an assorted set of curvature measurements:&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, embed the attributes as scalar fields in the mesh &lt;br /&gt;
|-&lt;br /&gt;
| particleConsistency&lt;br /&gt;
| Generates new particle files where fliped particles does not appear&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| ShapeWorks functionality, do not keep&lt;br /&gt;
|-&lt;br /&gt;
| GetDirectionFeatures&lt;br /&gt;
| Generates three KWM loadable files that have directionality features with respect to X, Y and Z directions&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| closestPoint&lt;br /&gt;
| Computes interpolated attribute file (output file) for second mesh using closest point interpolation between two input meshes&lt;br /&gt;
| Multiple Mesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications. Two meshes, one target and one source with the source having the scalar field that needs to be transferred into target&lt;br /&gt;
|-&lt;br /&gt;
| extractVertices&lt;br /&gt;
| Extract points and write 3 different files listing respectively X, Y and Z values&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications. Provide a point and a scalar field and values for that point will be output&lt;br /&gt;
|-&lt;br /&gt;
| cart2bary&lt;br /&gt;
| Project each point in &amp;lt;vtkPointFileIn&amp;gt; onto the &amp;lt;inputmesh&amp;gt; and then calculate the Barycentric coordinate of the projected point, output to &amp;lt;OutputFileName&amp;gt;&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications. Check in with @styner&lt;br /&gt;
|-&lt;br /&gt;
| VTKtoLpts&lt;br /&gt;
| Create a particle file out of a triangulated VTK mesh&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| ShapeWorks functionality, do not keep&lt;br /&gt;
|-&lt;br /&gt;
| relaxPolygons&lt;br /&gt;
| Mesh relaxation based in vtkWindowedSincPolyDataFilter&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Check with @lasso to see if this is already included into the Surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| decimateMesh&lt;br /&gt;
| Mesh decimation, reducing the number of points. Target reduction is a value from 0..1 that indicates in what % vertices should be reduced&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Do not keep, already included into the Surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| listPointData&lt;br /&gt;
| lists info about all the VTK point Data in the vtk file&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Probably keep, but functionality slightly overlaps with other functionality that will be improved when ported. Will revisit later.&lt;br /&gt;
|-&lt;br /&gt;
| pointDataOP&lt;br /&gt;
| threshold or subtract data&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| translateMesh&lt;br /&gt;
| translates a mesh for a given amount&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| lookupPointData&lt;br /&gt;
| substitutes scalar values in a given scalar field based on an input lookup&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| volumePolyData&lt;br /&gt;
| provides volume count for the PolyData through the std output. NOTE: Only in closed surfaces.&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep altogether with the surface area functionality described above (vtkMassProperties)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61187</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61187"/>
		<updated>2019-05-29T20:25:20Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: /* Team */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* Martin Styner&lt;br /&gt;
* Benjamin Wilson (Kitware Summer intern 2019)&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
* [http://insight-journal.org/browse/publication/106 KWMeshVisu]: Legacy mesh viewer from the Styner Lab.&lt;br /&gt;
* Types of Mesh Operations:&lt;br /&gt;
** Multiple Mesh (2+) &lt;br /&gt;
** Single Mesh&lt;br /&gt;
** MeshToVolume&lt;br /&gt;
** MeshScalar to Mesh&lt;br /&gt;
** MeshScalar to MeshScalar&lt;br /&gt;
** MeshScalar Operation&lt;br /&gt;
** Mutliple MeshScalar&lt;br /&gt;
&lt;br /&gt;
== Initial discussions ==&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
=== Current MeshMath functionality ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! Type&lt;br /&gt;
! Keep&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| subtract&lt;br /&gt;
| Subtract mesh from inputmesh, write a KWMeshVisu readable text file&lt;br /&gt;
| PairWiseMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]]&lt;br /&gt;
|-&lt;br /&gt;
| magnitude&lt;br /&gt;
| Magnitude of the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&lt;br /&gt;
| ?&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| It seems this is very specific to a certain application&lt;br /&gt;
|-&lt;br /&gt;
| scaleMVA&lt;br /&gt;
| Scales the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&lt;br /&gt;
| ?&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| It seems this is very specific to a certain application&lt;br /&gt;
|-&lt;br /&gt;
| scaleMesh&lt;br /&gt;
| Scales the input mesh file&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| avgMesh&lt;br /&gt;
| Compute the average mesh from inputmesh file1, file2...&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ave&lt;br /&gt;
| Compute the average vector field from file1, file2... generated with -substract&lt;br /&gt;
| MultipleMesh / ScalarMesh Operator&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
|-&lt;br /&gt;
| normave&lt;br /&gt;
| Works as the \&amp;quot;-ave\&amp;quot; option, but the average vector are projected on the normal at each point&lt;br /&gt;
| MultipleMesh / ScalarMesh Operator&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
|-&lt;br /&gt;
| InvVect&lt;br /&gt;
| Invert all the vectors created with the -substract option and write a KWMeshVisu readable file&lt;br /&gt;
| MeshScalar Operation &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| magdir&lt;br /&gt;
| Compute the signed magnitude of each of the vector from the vector field.(+ if in the normal direction, - otherwise)&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
|-&lt;br /&gt;
| magNormdir&lt;br /&gt;
| Compute the signed magnitude of the normal projection of the vector field&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
|-&lt;br /&gt;
| applyVec&lt;br /&gt;
| Deforme the mesh according to the vector field specified as input &lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| meshValues&lt;br /&gt;
| Find the points and cells in a mesh. The outputfile is a textfile with the values&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Export through CSV&lt;br /&gt;
|-&lt;br /&gt;
| avgGaussMesh&lt;br /&gt;
| &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt; ... -gaussMeshPara &amp;lt;mean&amp;gt;,&amp;lt;stdev&amp;gt;,&amp;lt;val1&amp;gt;,&amp;lt;val2&amp;gt;,... Compute the gaussian average for mesh files. The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| avgGaussKWM&lt;br /&gt;
| Compute the gaussian average for KWMeshVisu files. The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| See &amp;quot;ave&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| alignMesh&lt;br /&gt;
| Align all of the meshes to the inputmesh (== MeshFile0) using Procrustes alignment [-scalingOn]&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Fix the scaling, give an option to export the scaling factors associated with the mesh (so it can be reverted via scaleMesh)&lt;br /&gt;
|-&lt;br /&gt;
| alignMeshICP&lt;br /&gt;
| Align all of the meshes to the inputmesh (== MeshFile0) using IterativeClosestPoints (no correspondence required)&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BadTriangle&lt;br /&gt;
| Find the bad triangles in a Mesh. The &amp;lt;thresh value&amp;gt; is the value of the threshFactor to calculate the standard deviation for the bad triangles. The output is a KWMeshVisu text file with the values of the average of the triangles of the mesh&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Probably not keep since this is the same than &amp;quot;Clean&amp;quot; in the SurfaceToolbox&lt;br /&gt;
|-&lt;br /&gt;
| extraction&lt;br /&gt;
| To extract an attribute.The Input is the Mesh, the extractFilename is the attribute image and the Output is a KWMeshVisu text file with the attribute extraction [-extractClosest]: extract closest attribute [-nn]: nearest neighbor interpolation (default: linear)&lt;br /&gt;
| MeshToVolume&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| value&lt;br /&gt;
| Extract the 5th column from a textfile and write a KWMeshVisu file with the values obtained&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into &amp;quot;import from file&amp;quot; or something similar. This new operation would import a scalar field from a csv file into a mesh&lt;br /&gt;
|-&lt;br /&gt;
| subKWM&lt;br /&gt;
| Difference between 2 KWMeshVisu files&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| See &amp;quot;ave&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| MaxColor&lt;br /&gt;
| Compare each point in every files, find a max for every points, keep 5% near the max, the other values will be 0&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Transform this into a Threshold scalar map&lt;br /&gt;
|-&lt;br /&gt;
| dist_absolute&lt;br /&gt;
| Absolute distance map between KWMeshVisu files&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Transform this into something better, something that can operate over several scalar maps&lt;br /&gt;
|-&lt;br /&gt;
| dist_relative&lt;br /&gt;
| Relative distance map between KWMeshVisu files (values between -1 &amp;amp; 1)&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Transform this into something better, &amp;quot;normalize scalar map&amp;quot;, and give the option to set up the range&lt;br /&gt;
|-&lt;br /&gt;
| label&lt;br /&gt;
| Separate every labels, find the mean...&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This will be changed into a different module. The module will list all the scalar fields in the Mesh&lt;br /&gt;
|-&lt;br /&gt;
| color -val &amp;lt;number_of_label&amp;gt;,&amp;lt;value_label&amp;gt;&lt;br /&gt;
| To change the value of labels to see the evolution with KWMeshVisu.&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This will not be kept as it has legacy operations&lt;br /&gt;
|-&lt;br /&gt;
| first &amp;lt;textfile&amp;gt; &lt;br /&gt;
| Convert a column file into a line file with a comma between each value.&lt;br /&gt;
| Random&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This will not be kept as it should not be here.&lt;br /&gt;
|-&lt;br /&gt;
| MC2Origin &lt;br /&gt;
| Convert a column file into a line file with a comma between each value.&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| avg/median/min/max/per1/per99OneKWM &lt;br /&gt;
| Obtain descriptive statistics from scalar fields in a single VTK mesh&lt;br /&gt;
| SingleMesh / ScalarMesh Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, arguments should be the scalar field name and the operation to perform. Might revisit later, most of this functionality is in MeshStatistics&lt;br /&gt;
|-&lt;br /&gt;
| FillHole&lt;br /&gt;
| Fills up a hole in a open mesh.&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Slight change it should close all the open holes until there are no more &lt;br /&gt;
|-&lt;br /&gt;
| BordersOut&lt;br /&gt;
| Outputs the borders of a mesh (if there)&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| isOpen&lt;br /&gt;
| Gives back an integer defining whether the mesh is open or not&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Probably not keep, will revisit later&lt;br /&gt;
|-&lt;br /&gt;
| CleanMesh&lt;br /&gt;
| Re-mesh the input mesh and gives back a new clean mesh without degenerated triangles&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Already in the surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| SmoothMesh&lt;br /&gt;
| Gives back a Laplacian smoothed surface&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Already in the surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| FilterNormals&lt;br /&gt;
| Changes homogeneously normals of the polygons in a mesh&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Already in the surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| StatsROI&lt;br /&gt;
| Process a KWMeshVisu file, given a ROI Mask&lt;br /&gt;
| MeshScalar operation &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Already in Slicer through Pick and Pain and MeshStatistics&lt;br /&gt;
|-&lt;br /&gt;
| KWMToPolyData&lt;br /&gt;
| Writes a KWM scalar field (N Dimensions) into a PolyData Field Data Scalar to visualize in Slicer&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, the scalar field can be input in a csv, it does not need to be a KWM file&lt;br /&gt;
|-&lt;br /&gt;
| FSAscData&lt;br /&gt;
| Extracts a curvature/thickness etc information from a FreeSurfer style scalar file and adds it as attribute to the vtk mesh for visualization. FS format is line-by-line, no header, with each line 'point-id vertex-x vertex-y vertex-z scalar-prop&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Check in with @styner to see if he can provide data to test this, or if he wants to keep it&lt;br /&gt;
|-&lt;br /&gt;
| surfaceArea&lt;br /&gt;
| Computes surface area in a txt file&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, we should create an option to extract vtkMassProperties from a single Mesh including surface area and volume&lt;br /&gt;
|-&lt;br /&gt;
| variance/mean/attSTD&lt;br /&gt;
| Compute variance across population of scalar fields&lt;br /&gt;
| Multiple MeshScalar (multiple Mesh) &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, we should compute variance in a scalar field given the scalar field name and a collection of meshes&lt;br /&gt;
|-&lt;br /&gt;
| GetCurvatures&lt;br /&gt;
| Gets an assorted set of curvature measurements:&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, embed the attributes as scalar fields in the mesh &lt;br /&gt;
|-&lt;br /&gt;
| particleConsistency&lt;br /&gt;
| Generates new particle files where fliped particles does not appear&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| ShapeWorks functionality, do not keep&lt;br /&gt;
|-&lt;br /&gt;
| GetDirectionFeatures&lt;br /&gt;
| Generates three KWM loadable files that have directionality features with respect to X, Y and Z directions&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| closestPoint&lt;br /&gt;
| Computes interpolated attribute file (output file) for second mesh using closest point interpolation between two input meshes&lt;br /&gt;
| Multiple Mesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications. Two meshes, one target and one source with the source having the scalar field that needs to be transferred into target&lt;br /&gt;
|-&lt;br /&gt;
| extractVertices&lt;br /&gt;
| Extract points and write 3 different files listing respectively X, Y and Z values&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications. Provide a point and a scalar field and values for that point will be output&lt;br /&gt;
|-&lt;br /&gt;
| cart2bary&lt;br /&gt;
| Project each point in &amp;lt;vtkPointFileIn&amp;gt; onto the &amp;lt;inputmesh&amp;gt; and then calculate the Barycentric coordinate of the projected point, output to &amp;lt;OutputFileName&amp;gt;&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications. Check in with @styner&lt;br /&gt;
|-&lt;br /&gt;
| VTKtoLpts&lt;br /&gt;
| Create a particle file out of a triangulated VTK mesh&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| ShapeWorks functionality, do not keep&lt;br /&gt;
|-&lt;br /&gt;
| relaxPolygons&lt;br /&gt;
| Mesh relaxation based in vtkWindowedSincPolyDataFilter&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Check with @lasso to see if this is already included into the Surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| decimateMesh&lt;br /&gt;
| Mesh decimation, reducing the number of points. Target reduction is a value from 0..1 that indicates in what % vertices should be reduced&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Do not keep, already included into the Surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| listPointData&lt;br /&gt;
| lists info about all the VTK point Data in the vtk file&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Probably keep, but functionality slightly overlaps with other functionality that will be improved when ported. Will revisit later.&lt;br /&gt;
|-&lt;br /&gt;
| pointDataOP&lt;br /&gt;
| threshold or subtract data&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| translateMesh&lt;br /&gt;
| translates a mesh for a given amount&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| lookupPointData&lt;br /&gt;
| substitutes scalar values in a given scalar field based on an input lookup&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| volumePolyData&lt;br /&gt;
| provides volume count for the PolyData through the std output. NOTE: Only in closed surfaces.&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep altogether with the surface area functionality described above (vtkMassProperties)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61184</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61184"/>
		<updated>2019-05-29T20:12:27Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: /* Team */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* Martin Styner&lt;br /&gt;
* TBD engineer&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
* [http://insight-journal.org/browse/publication/106 KWMeshVisu]: Legacy mesh viewer from the Styner Lab.&lt;br /&gt;
* Types of Mesh Operations:&lt;br /&gt;
** Multiple Mesh (2+) &lt;br /&gt;
** Single Mesh&lt;br /&gt;
** MeshToVolume&lt;br /&gt;
** MeshScalar to Mesh&lt;br /&gt;
** MeshScalar to MeshScalar&lt;br /&gt;
** MeshScalar Operation&lt;br /&gt;
** Mutliple MeshScalar&lt;br /&gt;
&lt;br /&gt;
== Initial discussions ==&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
=== Current MeshMath functionality ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! Type&lt;br /&gt;
! Keep&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| subtract&lt;br /&gt;
| Subtract mesh from inputmesh, write a KWMeshVisu readable text file&lt;br /&gt;
| PairWiseMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]]&lt;br /&gt;
|-&lt;br /&gt;
| magnitude&lt;br /&gt;
| Magnitude of the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&lt;br /&gt;
| ?&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| It seems this is very specific to a certain application&lt;br /&gt;
|-&lt;br /&gt;
| scaleMVA&lt;br /&gt;
| Scales the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&lt;br /&gt;
| ?&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| It seems this is very specific to a certain application&lt;br /&gt;
|-&lt;br /&gt;
| scaleMesh&lt;br /&gt;
| Scales the input mesh file&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| avgMesh&lt;br /&gt;
| Compute the average mesh from inputmesh file1, file2...&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ave&lt;br /&gt;
| Compute the average vector field from file1, file2... generated with -substract&lt;br /&gt;
| MultipleMesh / ScalarMesh Operator&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
|-&lt;br /&gt;
| normave&lt;br /&gt;
| Works as the \&amp;quot;-ave\&amp;quot; option, but the average vector are projected on the normal at each point&lt;br /&gt;
| MultipleMesh / ScalarMesh Operator&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
|-&lt;br /&gt;
| InvVect&lt;br /&gt;
| Invert all the vectors created with the -substract option and write a KWMeshVisu readable file&lt;br /&gt;
| MeshScalar Operation &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| magdir&lt;br /&gt;
| Compute the signed magnitude of each of the vector from the vector field.(+ if in the normal direction, - otherwise)&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
|-&lt;br /&gt;
| magNormdir&lt;br /&gt;
| Compute the signed magnitude of the normal projection of the vector field&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
|-&lt;br /&gt;
| applyVec&lt;br /&gt;
| Deforme the mesh according to the vector field specified as input &lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| meshValues&lt;br /&gt;
| Find the points and cells in a mesh. The outputfile is a textfile with the values&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Export through CSV&lt;br /&gt;
|-&lt;br /&gt;
| avgGaussMesh&lt;br /&gt;
| &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt; ... -gaussMeshPara &amp;lt;mean&amp;gt;,&amp;lt;stdev&amp;gt;,&amp;lt;val1&amp;gt;,&amp;lt;val2&amp;gt;,... Compute the gaussian average for mesh files. The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| avgGaussKWM&lt;br /&gt;
| Compute the gaussian average for KWMeshVisu files. The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| See &amp;quot;ave&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| alignMesh&lt;br /&gt;
| Align all of the meshes to the inputmesh (== MeshFile0) using Procrustes alignment [-scalingOn]&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Fix the scaling, give an option to export the scaling factors associated with the mesh (so it can be reverted via scaleMesh)&lt;br /&gt;
|-&lt;br /&gt;
| alignMeshICP&lt;br /&gt;
| Align all of the meshes to the inputmesh (== MeshFile0) using IterativeClosestPoints (no correspondence required)&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BadTriangle&lt;br /&gt;
| Find the bad triangles in a Mesh. The &amp;lt;thresh value&amp;gt; is the value of the threshFactor to calculate the standard deviation for the bad triangles. The output is a KWMeshVisu text file with the values of the average of the triangles of the mesh&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Probably not keep since this is the same than &amp;quot;Clean&amp;quot; in the SurfaceToolbox&lt;br /&gt;
|-&lt;br /&gt;
| extraction&lt;br /&gt;
| To extract an attribute.The Input is the Mesh, the extractFilename is the attribute image and the Output is a KWMeshVisu text file with the attribute extraction [-extractClosest]: extract closest attribute [-nn]: nearest neighbor interpolation (default: linear)&lt;br /&gt;
| MeshToVolume&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| value&lt;br /&gt;
| Extract the 5th column from a textfile and write a KWMeshVisu file with the values obtained&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into &amp;quot;import from file&amp;quot; or something similar. This new operation would import a scalar field from a csv file into a mesh&lt;br /&gt;
|-&lt;br /&gt;
| subKWM&lt;br /&gt;
| Difference between 2 KWMeshVisu files&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| See &amp;quot;ave&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| MaxColor&lt;br /&gt;
| Compare each point in every files, find a max for every points, keep 5% near the max, the other values will be 0&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Transform this into a Threshold scalar map&lt;br /&gt;
|-&lt;br /&gt;
| dist_absolute&lt;br /&gt;
| Absolute distance map between KWMeshVisu files&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Transform this into something better, something that can operate over several scalar maps&lt;br /&gt;
|-&lt;br /&gt;
| dist_relative&lt;br /&gt;
| Relative distance map between KWMeshVisu files (values between -1 &amp;amp; 1)&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Transform this into something better, &amp;quot;normalize scalar map&amp;quot;, and give the option to set up the range&lt;br /&gt;
|-&lt;br /&gt;
| label&lt;br /&gt;
| Separate every labels, find the mean...&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This will be changed into a different module. The module will list all the scalar fields in the Mesh&lt;br /&gt;
|-&lt;br /&gt;
| -color -val &amp;lt;number_of_label&amp;gt;,&amp;lt;value_label&amp;gt;&lt;br /&gt;
| To change the value of labels to see the evolution with KWMeshVisu.&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This will not be kept as it has legacy operations&lt;br /&gt;
|-&lt;br /&gt;
| -first &amp;lt;textfile&amp;gt; &lt;br /&gt;
| Convert a column file into a line file with a comma between each value.&lt;br /&gt;
| Random&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This will not be kept as it should not be here.&lt;br /&gt;
|-&lt;br /&gt;
| -MC2Origin &lt;br /&gt;
| Convert a column file into a line file with a comma between each value.&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| -avg/median/min/max/per1/per99OneKWM &lt;br /&gt;
| Obtain descriptive statistics from scalar fields in a single VTK mesh&lt;br /&gt;
| SingleMesh / ScalarMesh Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, arguments should be the scalar field name and the operation to perform. Might revisit later, most of this functionality is in MeshStatistics&lt;br /&gt;
|-&lt;br /&gt;
| -FillHole&lt;br /&gt;
|  Fills up a hole in a open mesh.&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Slight change it should close all the open holes until there are no more &lt;br /&gt;
|-&lt;br /&gt;
| -BordersOut&lt;br /&gt;
|  Outputs the borders of a mesh (if there)&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| -isOpen&lt;br /&gt;
|  Gives back an integer defining whether the mesh is open or not&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Probably not keep, will revisit later&lt;br /&gt;
|-&lt;br /&gt;
| -CleanMesh&lt;br /&gt;
|  Re-mesh the input mesh and gives back a new clean mesh without degenerated triangles&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Already in the surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| -SmoothMesh&lt;br /&gt;
|  Gives back a Laplacian smoothed surface&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Already in the surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| -FilterNormals&lt;br /&gt;
|  Changes homogeneously normals of the polygons in a mesh&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Already in the surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| -StatsROI&lt;br /&gt;
|  Process a KWMeshVisu file, given a ROI Mask&lt;br /&gt;
| MeshScalar operation &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Already in Slicer through Pick and Pain and MeshStatistics&lt;br /&gt;
|-&lt;br /&gt;
| -KWMToPolyData&lt;br /&gt;
|  Writes a KWM scalar field (N Dimensions) into a PolyData Field Data Scalar to visualize in Slicer&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, the scalar field can be input in a csv, it does not need to be a KWM file&lt;br /&gt;
|-&lt;br /&gt;
| -FSAscData&lt;br /&gt;
|  Extracts a curvature/thickness etc information from a FreeSurfer style scalar file and adds it as attribute to the vtk mesh for visualization. FS format is line-by-line, no header, with each line 'point-id vertex-x vertex-y vertex-z scalar-prop&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Check in with @styner to see if he can provide data to test this, or if he wants to keep it&lt;br /&gt;
|-&lt;br /&gt;
| -surfaceArea&lt;br /&gt;
|  Computes surface area in a txt file&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, we should create an option to extract vtkMassProperties from a single Mesh including surface area and volume&lt;br /&gt;
|-&lt;br /&gt;
| -variance/mean/attSTD&lt;br /&gt;
|  Compute variance across population of scalar fields&lt;br /&gt;
| Multiple MeshScalar (multiple Mesh) &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, we should compute variance in a scalar field given the scalar field name and a collection of meshes&lt;br /&gt;
|-&lt;br /&gt;
| -GetCurvatures&lt;br /&gt;
|  Gets an assorted set of curvature measurements:&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, embed the attributes as scalar fields in the mesh &lt;br /&gt;
|-&lt;br /&gt;
| -particleConsistency&lt;br /&gt;
|  Generates new particle files where fliped particles does not appear&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| ShapeWorks functionality, do not keep&lt;br /&gt;
|-&lt;br /&gt;
| -GetDirectionFeatures&lt;br /&gt;
|  Generates three KWM loadable files that have directionality features with respect to X, Y and Z directions&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| -closestPoint&lt;br /&gt;
|  Computes interpolated attribute file (output file) for second mesh using closest point interpolation between two input meshes&lt;br /&gt;
| Multiple Mesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications. Two meshes, one target and one source with the source having the scalar field that needs to be transferred into target&lt;br /&gt;
|-&lt;br /&gt;
| -extractVertices&lt;br /&gt;
| Extract points and write 3 different files listing respectively X, Y and Z values&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications. Provide a point and a scalar field and values for that point will be output&lt;br /&gt;
|-&lt;br /&gt;
| -cart2bary&lt;br /&gt;
| Project each point in &amp;lt;vtkPointFileIn&amp;gt; onto the &amp;lt;inputmesh&amp;gt; and then calculate the Barycentric coordinate of the projected point, output to &amp;lt;OutputFileName&amp;gt;&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications. Check in with @styner&lt;br /&gt;
|-&lt;br /&gt;
| -VTKtoLpts&lt;br /&gt;
| Create a particle file out of a triangulated VTK mesh&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| ShapeWorks functionality, do not keep&lt;br /&gt;
|-&lt;br /&gt;
| -relaxPolygons&lt;br /&gt;
| Mesh relaxation based in vtkWindowedSincPolyDataFilter&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Check with @lasso to see if this is already included into the Surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| -decimateMesh&lt;br /&gt;
|  Mesh decimation, reducing the number of points. Target reduction is a value from 0..1 that indicates in what % vertices should be reduced&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Do not keep, already included into the Surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| -listPointData&lt;br /&gt;
|  lists info about all the VTK point Data in the vtk file&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Probably keep, but functionality slightly overlaps with other functionality that will be improved when ported. Will revisit later.&lt;br /&gt;
|-&lt;br /&gt;
| -pointDataOP&lt;br /&gt;
|  threshold or subtract data&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| -translateMesh&lt;br /&gt;
|  translates a mesh for a given amount&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| -lookupPointData&lt;br /&gt;
|  substitutes scalar values in a given scalar field based on an input lookup&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| -volumePolyData&lt;br /&gt;
|  provides volume count for the PolyData through the std output. NOTE: Only in closed surfaces.&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep altogether with the surface area functionality described above (vtkMassProperties)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61183</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61183"/>
		<updated>2019-05-29T20:12:06Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* TBD engineer&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
* [http://insight-journal.org/browse/publication/106 KWMeshVisu]: Legacy mesh viewer from the Styner Lab.&lt;br /&gt;
* Types of Mesh Operations:&lt;br /&gt;
** Multiple Mesh (2+) &lt;br /&gt;
** Single Mesh&lt;br /&gt;
** MeshToVolume&lt;br /&gt;
** MeshScalar to Mesh&lt;br /&gt;
** MeshScalar to MeshScalar&lt;br /&gt;
** MeshScalar Operation&lt;br /&gt;
** Mutliple MeshScalar&lt;br /&gt;
&lt;br /&gt;
== Initial discussions ==&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
=== Current MeshMath functionality ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! Type&lt;br /&gt;
! Keep&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| subtract&lt;br /&gt;
| Subtract mesh from inputmesh, write a KWMeshVisu readable text file&lt;br /&gt;
| PairWiseMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]]&lt;br /&gt;
|-&lt;br /&gt;
| magnitude&lt;br /&gt;
| Magnitude of the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&lt;br /&gt;
| ?&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| It seems this is very specific to a certain application&lt;br /&gt;
|-&lt;br /&gt;
| scaleMVA&lt;br /&gt;
| Scales the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&lt;br /&gt;
| ?&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| It seems this is very specific to a certain application&lt;br /&gt;
|-&lt;br /&gt;
| scaleMesh&lt;br /&gt;
| Scales the input mesh file&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| avgMesh&lt;br /&gt;
| Compute the average mesh from inputmesh file1, file2...&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ave&lt;br /&gt;
| Compute the average vector field from file1, file2... generated with -substract&lt;br /&gt;
| MultipleMesh / ScalarMesh Operator&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
|-&lt;br /&gt;
| normave&lt;br /&gt;
| Works as the \&amp;quot;-ave\&amp;quot; option, but the average vector are projected on the normal at each point&lt;br /&gt;
| MultipleMesh / ScalarMesh Operator&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
|-&lt;br /&gt;
| InvVect&lt;br /&gt;
| Invert all the vectors created with the -substract option and write a KWMeshVisu readable file&lt;br /&gt;
| MeshScalar Operation &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| magdir&lt;br /&gt;
| Compute the signed magnitude of each of the vector from the vector field.(+ if in the normal direction, - otherwise)&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
|-&lt;br /&gt;
| magNormdir&lt;br /&gt;
| Compute the signed magnitude of the normal projection of the vector field&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
|-&lt;br /&gt;
| applyVec&lt;br /&gt;
| Deforme the mesh according to the vector field specified as input &lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| meshValues&lt;br /&gt;
| Find the points and cells in a mesh. The outputfile is a textfile with the values&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Export through CSV&lt;br /&gt;
|-&lt;br /&gt;
| avgGaussMesh&lt;br /&gt;
| &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt; ... -gaussMeshPara &amp;lt;mean&amp;gt;,&amp;lt;stdev&amp;gt;,&amp;lt;val1&amp;gt;,&amp;lt;val2&amp;gt;,... Compute the gaussian average for mesh files. The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| avgGaussKWM&lt;br /&gt;
| Compute the gaussian average for KWMeshVisu files. The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| See &amp;quot;ave&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| alignMesh&lt;br /&gt;
| Align all of the meshes to the inputmesh (== MeshFile0) using Procrustes alignment [-scalingOn]&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Fix the scaling, give an option to export the scaling factors associated with the mesh (so it can be reverted via scaleMesh)&lt;br /&gt;
|-&lt;br /&gt;
| alignMeshICP&lt;br /&gt;
| Align all of the meshes to the inputmesh (== MeshFile0) using IterativeClosestPoints (no correspondence required)&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BadTriangle&lt;br /&gt;
| Find the bad triangles in a Mesh. The &amp;lt;thresh value&amp;gt; is the value of the threshFactor to calculate the standard deviation for the bad triangles. The output is a KWMeshVisu text file with the values of the average of the triangles of the mesh&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Probably not keep since this is the same than &amp;quot;Clean&amp;quot; in the SurfaceToolbox&lt;br /&gt;
|-&lt;br /&gt;
| extraction&lt;br /&gt;
| To extract an attribute.The Input is the Mesh, the extractFilename is the attribute image and the Output is a KWMeshVisu text file with the attribute extraction [-extractClosest]: extract closest attribute [-nn]: nearest neighbor interpolation (default: linear)&lt;br /&gt;
| MeshToVolume&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| value&lt;br /&gt;
| Extract the 5th column from a textfile and write a KWMeshVisu file with the values obtained&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into &amp;quot;import from file&amp;quot; or something similar. This new operation would import a scalar field from a csv file into a mesh&lt;br /&gt;
|-&lt;br /&gt;
| subKWM&lt;br /&gt;
| Difference between 2 KWMeshVisu files&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| See &amp;quot;ave&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| MaxColor&lt;br /&gt;
| Compare each point in every files, find a max for every points, keep 5% near the max, the other values will be 0&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Transform this into a Threshold scalar map&lt;br /&gt;
|-&lt;br /&gt;
| dist_absolute&lt;br /&gt;
| Absolute distance map between KWMeshVisu files&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Transform this into something better, something that can operate over several scalar maps&lt;br /&gt;
|-&lt;br /&gt;
| dist_relative&lt;br /&gt;
| Relative distance map between KWMeshVisu files (values between -1 &amp;amp; 1)&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Transform this into something better, &amp;quot;normalize scalar map&amp;quot;, and give the option to set up the range&lt;br /&gt;
|-&lt;br /&gt;
| label&lt;br /&gt;
| Separate every labels, find the mean...&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This will be changed into a different module. The module will list all the scalar fields in the Mesh&lt;br /&gt;
|-&lt;br /&gt;
| -color -val &amp;lt;number_of_label&amp;gt;,&amp;lt;value_label&amp;gt;&lt;br /&gt;
| To change the value of labels to see the evolution with KWMeshVisu.&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This will not be kept as it has legacy operations&lt;br /&gt;
|-&lt;br /&gt;
| -first &amp;lt;textfile&amp;gt; &lt;br /&gt;
| Convert a column file into a line file with a comma between each value.&lt;br /&gt;
| Random&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This will not be kept as it should not be here.&lt;br /&gt;
|-&lt;br /&gt;
| -MC2Origin &lt;br /&gt;
| Convert a column file into a line file with a comma between each value.&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| -avg/median/min/max/per1/per99OneKWM &lt;br /&gt;
| Obtain descriptive statistics from scalar fields in a single VTK mesh&lt;br /&gt;
| SingleMesh / ScalarMesh Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, arguments should be the scalar field name and the operation to perform. Might revisit later, most of this functionality is in MeshStatistics&lt;br /&gt;
|-&lt;br /&gt;
| -FillHole&lt;br /&gt;
|  Fills up a hole in a open mesh.&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Slight change it should close all the open holes until there are no more &lt;br /&gt;
|-&lt;br /&gt;
| -BordersOut&lt;br /&gt;
|  Outputs the borders of a mesh (if there)&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| -isOpen&lt;br /&gt;
|  Gives back an integer defining whether the mesh is open or not&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Probably not keep, will revisit later&lt;br /&gt;
|-&lt;br /&gt;
| -CleanMesh&lt;br /&gt;
|  Re-mesh the input mesh and gives back a new clean mesh without degenerated triangles&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Already in the surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| -SmoothMesh&lt;br /&gt;
|  Gives back a Laplacian smoothed surface&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Already in the surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| -FilterNormals&lt;br /&gt;
|  Changes homogeneously normals of the polygons in a mesh&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Already in the surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| -StatsROI&lt;br /&gt;
|  Process a KWMeshVisu file, given a ROI Mask&lt;br /&gt;
| MeshScalar operation &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Already in Slicer through Pick and Pain and MeshStatistics&lt;br /&gt;
|-&lt;br /&gt;
| -KWMToPolyData&lt;br /&gt;
|  Writes a KWM scalar field (N Dimensions) into a PolyData Field Data Scalar to visualize in Slicer&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, the scalar field can be input in a csv, it does not need to be a KWM file&lt;br /&gt;
|-&lt;br /&gt;
| -FSAscData&lt;br /&gt;
|  Extracts a curvature/thickness etc information from a FreeSurfer style scalar file and adds it as attribute to the vtk mesh for visualization. FS format is line-by-line, no header, with each line 'point-id vertex-x vertex-y vertex-z scalar-prop&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Check in with @styner to see if he can provide data to test this, or if he wants to keep it&lt;br /&gt;
|-&lt;br /&gt;
| -surfaceArea&lt;br /&gt;
|  Computes surface area in a txt file&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, we should create an option to extract vtkMassProperties from a single Mesh including surface area and volume&lt;br /&gt;
|-&lt;br /&gt;
| -variance/mean/attSTD&lt;br /&gt;
|  Compute variance across population of scalar fields&lt;br /&gt;
| Multiple MeshScalar (multiple Mesh) &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, we should compute variance in a scalar field given the scalar field name and a collection of meshes&lt;br /&gt;
|-&lt;br /&gt;
| -GetCurvatures&lt;br /&gt;
|  Gets an assorted set of curvature measurements:&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, embed the attributes as scalar fields in the mesh &lt;br /&gt;
|-&lt;br /&gt;
| -particleConsistency&lt;br /&gt;
|  Generates new particle files where fliped particles does not appear&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| ShapeWorks functionality, do not keep&lt;br /&gt;
|-&lt;br /&gt;
| -GetDirectionFeatures&lt;br /&gt;
|  Generates three KWM loadable files that have directionality features with respect to X, Y and Z directions&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| -closestPoint&lt;br /&gt;
|  Computes interpolated attribute file (output file) for second mesh using closest point interpolation between two input meshes&lt;br /&gt;
| Multiple Mesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications. Two meshes, one target and one source with the source having the scalar field that needs to be transferred into target&lt;br /&gt;
|-&lt;br /&gt;
| -extractVertices&lt;br /&gt;
| Extract points and write 3 different files listing respectively X, Y and Z values&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications. Provide a point and a scalar field and values for that point will be output&lt;br /&gt;
|-&lt;br /&gt;
| -cart2bary&lt;br /&gt;
| Project each point in &amp;lt;vtkPointFileIn&amp;gt; onto the &amp;lt;inputmesh&amp;gt; and then calculate the Barycentric coordinate of the projected point, output to &amp;lt;OutputFileName&amp;gt;&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications. Check in with @styner&lt;br /&gt;
|-&lt;br /&gt;
| -VTKtoLpts&lt;br /&gt;
| Create a particle file out of a triangulated VTK mesh&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| ShapeWorks functionality, do not keep&lt;br /&gt;
|-&lt;br /&gt;
| -relaxPolygons&lt;br /&gt;
| Mesh relaxation based in vtkWindowedSincPolyDataFilter&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Check with @lasso to see if this is already included into the Surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| -decimateMesh&lt;br /&gt;
|  Mesh decimation, reducing the number of points. Target reduction is a value from 0..1 that indicates in what % vertices should be reduced&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Do not keep, already included into the Surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| -listPointData&lt;br /&gt;
|  lists info about all the VTK point Data in the vtk file&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Probably keep, but functionality slightly overlaps with other functionality that will be improved when ported. Will revisit later.&lt;br /&gt;
|-&lt;br /&gt;
| -pointDataOP&lt;br /&gt;
|  threshold or subtract data&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| -translateMesh&lt;br /&gt;
|  translates a mesh for a given amount&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| -lookupPointData&lt;br /&gt;
|  substitutes scalar values in a given scalar field based on an input lookup&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| -volumePolyData&lt;br /&gt;
|  provides volume count for the PolyData through the std output. NOTE: Only in closed surfaces.&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep altogether with the surface area functionality described above (vtkMassProperties)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61182</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61182"/>
		<updated>2019-05-29T19:48:28Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* TBD engineer&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
* [http://insight-journal.org/browse/publication/106 KWMeshVisu]: Legacy mesh viewer from the Styner Lab.&lt;br /&gt;
* Types of Mesh Operations:&lt;br /&gt;
** Multiple Mesh (2+) &lt;br /&gt;
** Single Mesh&lt;br /&gt;
** MeshToVolume&lt;br /&gt;
** MeshScalar to Mesh&lt;br /&gt;
** MeshScalar to MeshScalar&lt;br /&gt;
** MeshScalar Operation&lt;br /&gt;
** Mutliple MeshScalar&lt;br /&gt;
&lt;br /&gt;
== Initial discussions ==&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
=== Current MeshMath functionality ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! Type&lt;br /&gt;
! Keep&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| subtract&lt;br /&gt;
| Subtract mesh from inputmesh, write a KWMeshVisu readable text file&lt;br /&gt;
| PairWiseMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]]&lt;br /&gt;
|-&lt;br /&gt;
| magnitude&lt;br /&gt;
| Magnitude of the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&lt;br /&gt;
| ?&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| It seems this is very specific to a certain application&lt;br /&gt;
|-&lt;br /&gt;
| scaleMVA&lt;br /&gt;
| Scales the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&lt;br /&gt;
| ?&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| It seems this is very specific to a certain application&lt;br /&gt;
|-&lt;br /&gt;
| scaleMesh&lt;br /&gt;
| Scales the input mesh file&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| avgMesh&lt;br /&gt;
| Compute the average mesh from inputmesh file1, file2...&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ave&lt;br /&gt;
| Compute the average vector field from file1, file2... generated with -substract&lt;br /&gt;
| MultipleMesh / ScalarMesh Operator&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
|-&lt;br /&gt;
| normave&lt;br /&gt;
| Works as the \&amp;quot;-ave\&amp;quot; option, but the average vector are projected on the normal at each point&lt;br /&gt;
| MultipleMesh / ScalarMesh Operator&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
|-&lt;br /&gt;
| InvVect&lt;br /&gt;
| Invert all the vectors created with the -substract option and write a KWMeshVisu readable file&lt;br /&gt;
| MeshScalar Operation &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| magdir&lt;br /&gt;
| Compute the signed magnitude of each of the vector from the vector field.(+ if in the normal direction, - otherwise)&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
|-&lt;br /&gt;
| magNormdir&lt;br /&gt;
| Compute the signed magnitude of the normal projection of the vector field&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
|-&lt;br /&gt;
| applyVec&lt;br /&gt;
| Deforme the mesh according to the vector field specified as input &lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| meshValues&lt;br /&gt;
| Find the points and cells in a mesh. The outputfile is a textfile with the values&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Export through CSV&lt;br /&gt;
|-&lt;br /&gt;
| avgGaussMesh&lt;br /&gt;
| &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt; ... -gaussMeshPara &amp;lt;mean&amp;gt;,&amp;lt;stdev&amp;gt;,&amp;lt;val1&amp;gt;,&amp;lt;val2&amp;gt;,... Compute the gaussian average for mesh files. The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| avgGaussKWM&lt;br /&gt;
| Compute the gaussian average for KWMeshVisu files. The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| See &amp;quot;ave&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| alignMesh&lt;br /&gt;
| Align all of the meshes to the inputmesh (== MeshFile0) using Procrustes alignment [-scalingOn]&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Fix the scaling, give an option to export the scaling factors associated with the mesh (so it can be reverted via scaleMesh)&lt;br /&gt;
|-&lt;br /&gt;
| alignMeshICP&lt;br /&gt;
| Align all of the meshes to the inputmesh (== MeshFile0) using IterativeClosestPoints (no correspondence required)&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BadTriangle&lt;br /&gt;
| Find the bad triangles in a Mesh. The &amp;lt;thresh value&amp;gt; is the value of the threshFactor to calculate the standard deviation for the bad triangles. The output is a KWMeshVisu text file with the values of the average of the triangles of the mesh&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Probably not keep since this is the same than &amp;quot;Clean&amp;quot; in the SurfaceToolbox&lt;br /&gt;
|-&lt;br /&gt;
| extraction&lt;br /&gt;
| To extract an attribute.The Input is the Mesh, the extractFilename is the attribute image and the Output is a KWMeshVisu text file with the attribute extraction [-extractClosest]: extract closest attribute [-nn]: nearest neighbor interpolation (default: linear)&lt;br /&gt;
| MeshToVolume&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| value&lt;br /&gt;
| Extract the 5th column from a textfile and write a KWMeshVisu file with the values obtained&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into &amp;quot;import from file&amp;quot; or something similar. This new operation would import a scalar field from a csv file into a mesh&lt;br /&gt;
|-&lt;br /&gt;
| subKWM&lt;br /&gt;
| Difference between 2 KWMeshVisu files&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| See &amp;quot;ave&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| MaxColor&lt;br /&gt;
| Compare each point in every files, find a max for every points, keep 5% near the max, the other values will be 0&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Transform this into a Threshold scalar map&lt;br /&gt;
|-&lt;br /&gt;
| dist_absolute&lt;br /&gt;
| Absolute distance map between KWMeshVisu files&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Transform this into something better, something that can operate over several scalar maps&lt;br /&gt;
|-&lt;br /&gt;
| dist_relative&lt;br /&gt;
| Relative distance map between KWMeshVisu files (values between -1 &amp;amp; 1)&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Transform this into something better, &amp;quot;normalize scalar map&amp;quot;, and give the option to set up the range&lt;br /&gt;
|-&lt;br /&gt;
| label&lt;br /&gt;
| Separate every labels, find the mean...&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This will be changed into a different module. The module will list all the scalar fields in the Mesh&lt;br /&gt;
|-&lt;br /&gt;
| -color -val &amp;lt;number_of_label&amp;gt;,&amp;lt;value_label&amp;gt;&lt;br /&gt;
| To change the value of labels to see the evolution with KWMeshVisu.&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This will not be kept as it has legacy operations&lt;br /&gt;
|-&lt;br /&gt;
| -first &amp;lt;textfile&amp;gt; &lt;br /&gt;
| Convert a column file into a line file with a comma between each value.&lt;br /&gt;
| Random&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This will not be kept as it should not be here.&lt;br /&gt;
|-&lt;br /&gt;
| -MC2Origin &lt;br /&gt;
| Convert a column file into a line file with a comma between each value.&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| -avg/median/min/max/per1/per99OneKWM &lt;br /&gt;
| Obtain descriptive statistics from scalar fields in a single VTK mesh&lt;br /&gt;
| SingleMesh / ScalarMesh Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, arguments should be the scalar field name and the operation to perform. Might revisit later, most of this functionality is in MeshStatistics&lt;br /&gt;
|-&lt;br /&gt;
| -FillHole&lt;br /&gt;
|  Fills up a hole in a open mesh.&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Slight change it should close all the open holes until there are no more &lt;br /&gt;
|-&lt;br /&gt;
| -BordersOut&lt;br /&gt;
|  Outputs the borders of a mesh (if there)&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| -isOpen&lt;br /&gt;
|  Gives back an integer defining whether the mesh is open or not&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Probably not keep, will revisit later&lt;br /&gt;
|-&lt;br /&gt;
| -CleanMesh&lt;br /&gt;
|  Re-mesh the input mesh and gives back a new clean mesh without degenerated triangles&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Already in the surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| -SmoothMesh&lt;br /&gt;
|  Gives back a Laplacian smoothed surface&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Already in the surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| -FilterNormals&lt;br /&gt;
|  Changes homogeneously normals of the polygons in a mesh&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Already in the surface toolbox&lt;br /&gt;
|-&lt;br /&gt;
| -StatsROI&lt;br /&gt;
|  Process a KWMeshVisu file, given a ROI Mask&lt;br /&gt;
| MeshScalar operation &lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Already in Slicer through Pick and Pain and MeshStatistics&lt;br /&gt;
|-&lt;br /&gt;
| -KWMToPolyData&lt;br /&gt;
|  Writes a KWM scalar field (N Dimensions) into a PolyData Field Data Scalar to visualize in Slicer&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, the scalar field can be input in a csv, it does not need to be a KWM file&lt;br /&gt;
|-&lt;br /&gt;
| -FSAscData&lt;br /&gt;
|  Extracts a curvature/thickness etc information from a FreeSurfer style scalar file and adds it as attribute to the vtk mesh for visualization. FS format is line-by-line, no header, with each line 'point-id vertex-x vertex-y vertex-z scalar-prop&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Check in with @styner to see if he can provide data to test this, or if he wants to keep it&lt;br /&gt;
|-&lt;br /&gt;
| -surfaceArea&lt;br /&gt;
|  Computes surface area in a txt file&lt;br /&gt;
| SingleMesh &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, we should create an option to extract vtkMassProperties from a single Mesh including surface area and volume&lt;br /&gt;
|-&lt;br /&gt;
| -variance&lt;br /&gt;
|  Compute variance across population of scalar fields&lt;br /&gt;
| Multiple MeshScalar (multiple Mesh) &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, we should compute variance in a scalar field given the scalar field name and a collection of meshes&lt;br /&gt;
|-&lt;br /&gt;
| -GetCurvatures&lt;br /&gt;
|  Gets an assorted set of curvature measurements:&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Keep with modifications, embed the attributes as scalar fields in the mesh &lt;br /&gt;
|-&lt;br /&gt;
| -particleConsistency&lt;br /&gt;
|  Generates new particle files where fliped particles does not appear&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| ShapeWorks functionality, do not keep&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    // bp2010 GetDirectionFeatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -GetDirectionFeatures ... Generates three KWM loadable files that have directionality features with respect to X, Y and Z directions&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetDirectionFeatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -closestPoint &amp;lt;InputAttributeFile1&amp;gt; &amp;lt;InputMesh2&amp;gt;   Computes interpolated attribute file (output file) for second mesh using closest point interpolation between two input meshes&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -extractVertices &amp;lt;YLocationAttributeFile.txt&amp;gt; &amp;lt;ZLocationAttributeFile.txt&amp;gt;  Extract points and write 3 different files listing respectively X, Y and Z values&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -mean &amp;lt;AttributeFile2&amp;gt; &amp;lt;AttributeFile3&amp;gt;... Compute mean scalar attribute file (assuming same number of vertices)&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //cx2011 cart2bary&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -cart2bary &amp;lt;vtkPointFileIn&amp;gt; Project each point in &amp;lt;vtkPointFileIn&amp;gt; onto the &amp;lt;inputmesh&amp;gt; and then calculate the Barycentric coordinate of the projected point, output to &amp;lt;OutputFileName&amp;gt;&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
    //bp2011&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -attSTD &amp;lt;attribute_file2&amp;gt; &amp;lt;attribute_file2&amp;gt; ...&amp;lt;attribute_fileN&amp;gt; ... Compute std for a collection of vector or scalar files&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -VTKtolpts  ... Create a particle file out of a triangulated VTK mesh&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2012&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -relaxPolygons iterations... Mesh relaxation based in vtkWindowedSincPolyDataFilter&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -decimateMesh &amp;lt;target reduction&amp;gt; ... Mesh decimation, reducing the number of points. Target reduction is a value from 0..1 that indicates in what % vertices should be reduced&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //mst2013&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -listPointData    lists info about all the VTK point Data in the vtk file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -PointDataOp &amp;lt;name&amp;gt; &amp;lt;op&amp;gt; &amp;lt;val&amp;gt;   &amp;lt;name&amp;gt;: name of point data, &amp;quot; &amp;lt;&amp;lt; std::endl&lt;br /&gt;
	      &amp;lt;&amp;lt; &amp;quot;     &amp;lt;op&amp;gt;: [threshBelow | sub]  threshBelow: set to 0 all data below &amp;lt;value&amp;gt;, sub: subtract value&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2013&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -translateMesh &amp;lt;tx_DimX&amp;gt; &amp;lt;tx_DimY&amp;gt; &amp;lt;tx_DimZ&amp;gt; ,  translates a mesh for a given amount &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2015&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -lookupPointData &amp;lt;csv_lookup&amp;gt; &amp;lt;scalar_field_name&amp;gt;,  substitutes scalar values in a given scalar field based on an input lookup &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2016&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -volumePolyData,  provides volume count for the PolyData through the std output. NOTE: Only in closed surfaces.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    &lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -verbose                   Verbose output&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    return 0;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/SampleDataModuleImprovements&amp;diff=61179</id>
		<title>Documentation/Labs/SampleDataModuleImprovements</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/SampleDataModuleImprovements&amp;diff=61179"/>
		<updated>2019-05-29T18:23:42Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: /* Initial discussions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we are working on improving the Sample Data module as a way to help new SALT users jump-start using our software.&lt;br /&gt;
The first person to suggest this was [https://github.com/Kitware/SlicerSALT/issues/119 Andras Lasso]&lt;br /&gt;
&lt;br /&gt;
The plan involves:&lt;br /&gt;
# Improving the infrastructure of the Sample Data module, so it is possible to hide the default datasets in the Module.&lt;br /&gt;
# Improve the infrastructure of the Sample Data module so it can be included in modules as a tab&lt;br /&gt;
# Add custom datasets to the Sample Data Module in SALT&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Mateo Lopez (UNC)&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Initial discussions ==&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/SampleDataModuleImprovements&amp;diff=61178</id>
		<title>Documentation/Labs/SampleDataModuleImprovements</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/SampleDataModuleImprovements&amp;diff=61178"/>
		<updated>2019-05-29T18:21:13Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: Created page with &amp;quot; == Overview ==  As part of the SALT project we are working on improving the Sample Data module as a way to help new SALT users jump-start using our software. The first person...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we are working on improving the Sample Data module as a way to help new SALT users jump-start using our software.&lt;br /&gt;
The first person to suggest this was [https://github.com/Kitware/SlicerSALT/issues/119 Andras Lasso]&lt;br /&gt;
&lt;br /&gt;
The plan involves:&lt;br /&gt;
# Improving the infrastructure of the Sample Data module, so it is possible to hide the default datasets in the Module.&lt;br /&gt;
# Improve the infrastructure of the Sample Data module so it can be included in modules as a tab&lt;br /&gt;
# Add custom datasets to the Sample Data Module in SALT&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Mateo Lopez (UNC)&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Initial discussions ==&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs&amp;diff=61177</id>
		<title>Documentation/Labs</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs&amp;diff=61177"/>
		<updated>2019-05-29T18:13:00Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the place where we will keep track of our experiments and projects.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= On-going =&lt;br /&gt;
&lt;br /&gt;
== Roadmap ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/Slicer5-roadmap|Slicer 5]]&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/NrrdReading_Writing_Optimizations|NrrdReading_Writing_Optimizations]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/OpenGLFilters|OpenGLFilters]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/DeprecatedModules|DeprecatedModules extension]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/FHSCompliantDirectoryStructure|FHS compliant directory structure]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/FiberTractMeasurementAndVisualization|Fiber Tract measurement and visualization]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/VTKWidgets|VTK Widgets improvements]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/CLIInfrastructureCleanupAndRefactoring|CLI infrastructure cleanup and refactoring]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/UpgradingCompilerInfrastructure|Upgrading Compiler Infrastructure]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/ViewInfrastructureImprovements| View Infrastructure Improvements]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/CDash Improvements|CDash Improvements]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/SlicerBridge|SlicerBridge]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[{{FULLPAGENAME}}/Display2dText|Display 2D text in viewers]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[{{FULLPAGENAME}}/CI-and-NightlyPackagesGeneration|Continuous Integration and Nightly packages build infrastructure]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/ParameterSerializer|Parameter Serializer support for CLIs]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Augmented Reality and Virtual Reality support|Augmented Reality and Virtual Reality support]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Infrastucture Status|Infrastucture Status]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Improving Slicer Packages Download Experience|Improving Slicer Packages Download experience]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Sequences|Sequences]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Improving Markups|Improving Markups]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Surface Toolbox update|Surface Toolbox update]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/SampleDataModuleImprovements|Sample Data Module Improvements]]&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/VTK-Orientation|Design: Addition of orientation to VTK data structures]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/VTK-String|Design: Make VTK strings encoding aware]]&lt;br /&gt;
&lt;br /&gt;
== Python ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/CallingPythonMethodsFromCpp|Calling Python methods from Cpp]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/IPython|IPython]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/PythonCondaBuild|Python conda build]]&lt;br /&gt;
&lt;br /&gt;
== Compilers &amp;amp; IDE ==&lt;br /&gt;
* Modernize to c++11&lt;br /&gt;
&lt;br /&gt;
'''The use of auto''' &lt;br /&gt;
&lt;br /&gt;
  run-clang-tidy.py -checks=-*,modernize-use-auto  -header-filter=.* -fix &lt;br /&gt;
&lt;br /&gt;
The automatic fix use auto in cases where static_cast is used:&lt;br /&gt;
&lt;br /&gt;
  - int a = static_cast&amp;lt;int&amp;gt;(something);&lt;br /&gt;
  + auto a = static_cast&amp;lt;int&amp;gt;(something);&lt;br /&gt;
&lt;br /&gt;
No much gain on this particular case, however, when using iterators and other verbose types, it really helps readability.&lt;br /&gt;
&lt;br /&gt;
The change should be discussed with the main developers to reach a consensus. VTK and ITK are using auto in a lot of cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Move not implemented constructors and assignment operators to the public interface''' &lt;br /&gt;
&lt;br /&gt;
Now that we use = delete, we don't need the constructors and assignment operator to be in the private interface.&lt;br /&gt;
Moving them to the public interface is better. Including better integrations with IDE's.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other modernizers'''&lt;br /&gt;
  clang-tidy --list-checks -checks='*' | grep &amp;quot;modernize&amp;quot;&lt;br /&gt;
    modernize-avoid-bind&lt;br /&gt;
    modernize-deprecated-headers&lt;br /&gt;
    modernize-loop-convert&lt;br /&gt;
    modernize-make-shared&lt;br /&gt;
    modernize-make-unique&lt;br /&gt;
    modernize-pass-by-value&lt;br /&gt;
    modernize-raw-string-literal&lt;br /&gt;
    modernize-redundant-void-arg&lt;br /&gt;
    modernize-replace-auto-ptr&lt;br /&gt;
    modernize-replace-random-shuffle&lt;br /&gt;
    modernize-return-braced-init-list&lt;br /&gt;
    modernize-shrink-to-fit&lt;br /&gt;
    modernize-unary-static-assert&lt;br /&gt;
    modernize-use-auto # ToDiscuss&lt;br /&gt;
    modernize-use-bool-literals&lt;br /&gt;
    modernize-use-default-member-init&lt;br /&gt;
    modernize-use-emplace # easy!&lt;br /&gt;
    modernize-use-equals-default # DONE&lt;br /&gt;
    modernize-use-equals-delete # DONE&lt;br /&gt;
    modernize-use-noexcept &lt;br /&gt;
    modernize-use-nullptr # DONE&lt;br /&gt;
    modernize-use-override # DONE&lt;br /&gt;
    modernize-use-transparent-functors&lt;br /&gt;
    modernize-use-uncaught-exceptions&lt;br /&gt;
    modernize-use-using # Better style, to discuss.&lt;br /&gt;
&lt;br /&gt;
Check https://github.com/InsightSoftwareConsortium/ITK/tree/master/Utilities/ITKv5Preparation for a list of commands used in the &lt;br /&gt;
ITKv5 transition.&lt;br /&gt;
&lt;br /&gt;
== Virtual Machines ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/GPU Virtualization|GPU Virtualization]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/DocumentationImprovments|Documentation Improvements (Wiki, website, ...)]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/ModulesAndEvents|Intermediate documentation for developers]]&lt;br /&gt;
&lt;br /&gt;
== Tutorials ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/IPythonSlicerTutorials|IPython Slicer Tutorials]]&lt;br /&gt;
&lt;br /&gt;
== Source code management ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/TransitionToGit|Transition to GitHub as authoritative version control system]]&lt;br /&gt;
&lt;br /&gt;
== Extension ==&lt;br /&gt;
&lt;br /&gt;
* [[{{FULLPAGENAME}}/ExtensionsFrameworkRoadmap|Extensions Framework Roadmap]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/CustomSlicerGenerator|Custom Slicer Generator]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/ExtensionsMetadata|Improving Extensions Metadata]]&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/FlyThroughNavigation|Fly-through Navigation]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/AutomaticUpdateAndInstallationFramework|Automatic Update and Installation Framework]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/ApplicationUsageAnalytics|Application usage analytics]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Plotting2DLineSegments|Plotting 2D Line Segments]]&lt;br /&gt;
&lt;br /&gt;
== Packaging ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/HomebrewCask|Homebrew Cask]&lt;br /&gt;
&lt;br /&gt;
= Completed =&lt;br /&gt;
&lt;br /&gt;
* [[Slicer4:Developers|Developer Projects]]&lt;br /&gt;
&lt;br /&gt;
== Extension ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/EasyExtensionContribution|Easy Extension Contribution]] - See [[Documentation/Nightly/Developers/ExtensionWizard|ExtensionWizard]]&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/StartupTimeImprovement|Slicer startup time improvement]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/CMake-ified Python|CMake-ified Python]] - See [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21911 r21911], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21912 r21912], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21913 r21913]&lt;br /&gt;
* [[{{FULLPAGENAME}}/NonlinearTransforms|Full support for non-linear transforms]]&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/Qt5-and-VTK8|Migration to Qt5 and VTK8]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/OpenCV|Integration with OpenCV]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/ITKv4|ITKv4]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Qt484|Qt484]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/VTK6|VTK6]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/VTK7|VTK7]]&lt;br /&gt;
&lt;br /&gt;
== Python ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/Pip|Pip]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/DevelopmentWithGit|Development with Git]] - See [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21863 r21863], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21867 r21867], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21869 r21869], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21879 r21879], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21891 r21891]&lt;br /&gt;
* [[{{FULLPAGENAME}}/PythonObserverCallbacks|Python observer callbacks]]&lt;br /&gt;
&lt;br /&gt;
== Compilers &amp;amp; IDE ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/Ninja|Ninja]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/VS2012|VS2012]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/NUMPY171|Support for Numpy 1.7.1]]&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/SimpleFilters|Simple Filters]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Editor|Editor]]&lt;br /&gt;
&lt;br /&gt;
== Tutorials testing ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/TutorialTesting/4.3-Release|4.3 Release]]&lt;br /&gt;
&lt;br /&gt;
== Debug ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/BRAINS_and_ITKv4_issue|BRAINS and ITKv4 issue]]&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/Segmentations|Segmentations]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/MultiDimensional Data Management|MultiDimensional Data Management]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/DICOMExport|DICOM Export]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/SliceViewAnnotations|Slice View Annotations]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/SubjectHierarchy|Subject hierarchy module and plugins]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/I18N|Internationalization]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Units|Units]]&lt;br /&gt;
* [https://github.com/TubeTK/SlicerExecutionModel/wiki/SlicerExecutionModel-Parameter-Serialization SlicerExecutionModel Parameter Serialization]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Abandoned =&lt;br /&gt;
&lt;br /&gt;
* [[{{FULLPAGENAME}}/SlicerConfigAndUseSlicerTweaks|SlicerConfig and UseSlicer Tweaks]]&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61098</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61098"/>
		<updated>2019-04-26T19:24:32Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: /* Current MeshMath functionality */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* TBD engineer&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
* [http://insight-journal.org/browse/publication/106 KWMeshVisu]: Legacy mesh viewer from the Styner Lab.&lt;br /&gt;
* Types of Mesh Operations:&lt;br /&gt;
** Multiple Mesh (2+) &lt;br /&gt;
** Single Mesh&lt;br /&gt;
** MeshToVolume&lt;br /&gt;
** MeshScalar to Mesh&lt;br /&gt;
** MeshScalar to MeshScalar&lt;br /&gt;
** MeshScalar Operation&lt;br /&gt;
&lt;br /&gt;
== Initial discussions ==&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
=== Current MeshMath functionality ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! Type&lt;br /&gt;
! Keep&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| subtract&lt;br /&gt;
| Subtract mesh from inputmesh, write a KWMeshVisu readable text file&lt;br /&gt;
| PairWiseMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]]&lt;br /&gt;
|-&lt;br /&gt;
| magnitude&lt;br /&gt;
| Magnitude of the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&lt;br /&gt;
| ?&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| It seems this is very specific to a certain application&lt;br /&gt;
|-&lt;br /&gt;
| scaleMVA&lt;br /&gt;
| Scales the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&lt;br /&gt;
| ?&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| It seems this is very specific to a certain application&lt;br /&gt;
|-&lt;br /&gt;
| scaleMesh&lt;br /&gt;
| Scales the input mesh file&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| avgMesh&lt;br /&gt;
| Compute the average mesh from inputmesh file1, file2...&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ave&lt;br /&gt;
| Compute the average vector field from file1, file2... generated with -substract&lt;br /&gt;
| MultipleMesh / ScalarMesh Operator&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
|-&lt;br /&gt;
| normave&lt;br /&gt;
| Works as the \&amp;quot;-ave\&amp;quot; option, but the average vector are projected on the normal at each point&lt;br /&gt;
| MultipleMesh / ScalarMesh Operator&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
|-&lt;br /&gt;
| InvVect&lt;br /&gt;
| Invert all the vectors created with the -substract option and write a KWMeshVisu readable file&lt;br /&gt;
| MeshScalar Operation &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| magdir&lt;br /&gt;
| Compute the signed magnitude of each of the vector from the vector field.(+ if in the normal direction, - otherwise)&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
|-&lt;br /&gt;
| magNormdir&lt;br /&gt;
| Compute the signed magnitude of the normal projection of the vector field&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
|-&lt;br /&gt;
| applyVec&lt;br /&gt;
| Deforme the mesh according to the vector field specified as input &lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| meshValues&lt;br /&gt;
| Find the points and cells in a mesh. The outputfile is a textfile with the values&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Export through CSV&lt;br /&gt;
|-&lt;br /&gt;
| avgGaussMesh&lt;br /&gt;
| &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt; ... -gaussMeshPara &amp;lt;mean&amp;gt;,&amp;lt;stdev&amp;gt;,&amp;lt;val1&amp;gt;,&amp;lt;val2&amp;gt;,... Compute the gaussian average for mesh files. The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| avgGaussKWM&lt;br /&gt;
| Compute the gaussian average for KWMeshVisu files. The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| See &amp;quot;ave&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| alignMesh&lt;br /&gt;
| Align all of the meshes to the inputmesh (== MeshFile0) using Procrustes alignment [-scalingOn]&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Fix the scaling, give an option to export the scaling factors associated with the mesh (so it can be reverted via scaleMesh)&lt;br /&gt;
|-&lt;br /&gt;
| alignMeshICP&lt;br /&gt;
| Align all of the meshes to the inputmesh (== MeshFile0) using IterativeClosestPoints (no correspondence required)&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BadTriangle&lt;br /&gt;
| Find the bad triangles in a Mesh. The &amp;lt;thresh value&amp;gt; is the value of the threshFactor to calculate the standard deviation for the bad triangles. The output is a KWMeshVisu text file with the values of the average of the triangles of the mesh&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Probably not keep since this is the same than &amp;quot;Clean&amp;quot; in the SurfaceToolbox&lt;br /&gt;
|-&lt;br /&gt;
| extraction&lt;br /&gt;
| To extract an attribute.The Input is the Mesh, the extractFilename is the attribute image and the Output is a KWMeshVisu text file with the attribute extraction [-extractClosest]: extract closest attribute [-nn]: nearest neighbor interpolation (default: linear)&lt;br /&gt;
| MeshToVolume&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| value&lt;br /&gt;
| Extract the 5th column from a textfile and write a KWMeshVisu file with the values obtained&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into &amp;quot;import from file&amp;quot; or something similar. This new operation would import a scalar field from a csv file into a mesh&lt;br /&gt;
|-&lt;br /&gt;
| subKWM&lt;br /&gt;
| Difference between 2 KWMeshVisu files&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| See &amp;quot;ave&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| MaxColor&lt;br /&gt;
| Compare each point in every files, find a max for every points, keep 5% near the max, the other values will be 0&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Transform this into a Threshold scalar map&lt;br /&gt;
|-&lt;br /&gt;
| dist_absolute&lt;br /&gt;
| Absolute distance map between KWMeshVisu files&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Transform this into something better, something that can operate over several scalar maps&lt;br /&gt;
|-&lt;br /&gt;
| dist_relative&lt;br /&gt;
| Relative distance map between KWMeshVisu files (values between -1 &amp;amp; 1)&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Transform this into something better, &amp;quot;normalize scalar map&amp;quot;, and give the option to set up the range&lt;br /&gt;
|-&lt;br /&gt;
| label&lt;br /&gt;
| Separate every labels, find the mean...&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Is this for volumes? Figure out what this does from @styner&lt;br /&gt;
|-&lt;br /&gt;
| label&lt;br /&gt;
| Separate every labels, find the mean...&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Is this for volumes? Figure out what this does from @styner&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -color -val &amp;lt;number_of_label&amp;gt;,&amp;lt;value_label&amp;gt;... -oldval &amp;lt;number_of_old_label&amp;gt;,&amp;lt;old_value_label&amp;gt;...&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  To change the value of labels to see the evolution with KWMeshVisu. &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Value_label is when the label grow up. &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Old_value_label is for the label wich has already grown up.&amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -first &amp;lt;textfile&amp;gt;...   Convert a column file into a line file with a comma between each value&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // cchou MC2Origin&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -MC2Origin       Translate the Center of Mass to the Origin&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsKWM&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -avgOneKWM       Computes the avg of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -medianOneKWM    Computes the min of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -minOneKWM       Computes the min of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -maxOneKWM       Computes the max of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -per1OneKWM      Computes the 1% percentile of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -per99OneKWM     Computes the 99% percentile of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsKWM&lt;br /&gt;
    // bp2009 FillHole&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -FillHole        Fills up a hole in a open mesh.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;      If more than one hole exists, this operation might have to be repeated.&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 FillHole&lt;br /&gt;
    // bp2009 BordersOut&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -BordersOut      Outputs the borders of a mesh (if there).&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 BordersOut&lt;br /&gt;
    // bp2009 IsOpen&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -IsOpen          Gives back an integer defining whether the mesh is open or not&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 IsOpen&lt;br /&gt;
    // bp2009 CleanMesh&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -CleanMesh       Re-mesh the input mesh and gives back a new clean mesh without degenerated triangles&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 CleanMesh&lt;br /&gt;
    // bp2009 SmoothMesh&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -SmoothMesh iterations    Gives back a Laplacian smoothed surface&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;          Iterations defines how many times the Laplacian is applied.&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 SmoothMesh&lt;br /&gt;
    // bp2009 FilterNormals&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -FilterNormals direction &amp;lt;MeshFileVTK&amp;gt; &amp;lt;MeshFileVTKOut&amp;gt;  ... Changes homogeneously normals of the polygons in a mesh&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;               direction= [1] normals outwards [-1] normals inwards&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 FilterNormals&lt;br /&gt;
    // bp2009 StatsROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -statsROI &amp;lt;txtROIFileIn&amp;gt;   Process a KWMeshVisu file, given a ROI Mask&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;       Outputs a new KWMeshVisu only with the info in the mask&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsROI&lt;br /&gt;
    // bp2009 KWMtoPolyData&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -KWMtoPolyData &amp;lt;txtFileIn&amp;gt; &amp;lt;nameScalarField&amp;gt;   Writes a KWM scalar field (N Dimensions) into a PolyData Field Data Scalar to visualize in Slicer&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 KWMtoPolyData&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -FSAscData &amp;lt;FreeSurferASCIIfile&amp;gt; &amp;lt;nameScalarField&amp;gt;   Extracts a curvature/thickness etc information from a FreeSurfer style scalar file and adds it as attribute to the vtk mesh for visualization. FS format is line-by-line, no header, with each line 'point-id vertex-x vertex-y vertex-z scalar-prop' &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // styner2015 FSAscData&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -significanceLevel &amp;lt;double&amp;gt; the min Pvalue for the Pval ColorMap &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
    // bp2009 ProcessROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -processROI &amp;lt;txtROIFileIn&amp;gt; &amp;lt;MeshFileIn&amp;gt;  ... [TEMP - do not know where to put this]&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;   Gets stats for a distances ROI map&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 ProcessROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -surfaceArea &amp;lt;AttributeFile&amp;gt;   Computes surface area in a txt file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -lobarSurfaceArea &amp;lt;ParcellationAttributeFile&amp;gt;   Computes lobar surface area (output: csv file)&amp;quot;&amp;lt;&amp;lt;std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -variance &amp;lt;AttributeFile2&amp;gt; &amp;lt;AttributeFile3&amp;gt;...   Compute variance across population&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetCurvatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -GetCurvatures &amp;lt;txtFileOut_C&amp;gt; &amp;lt;txtFileOut_S&amp;gt; &amp;lt;txtFileOut_Gauss&amp;gt; &amp;lt;txtFileOut_mean&amp;gt;... Gets an assorted set of curvature measurements:&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;   Koenderink curvature values for an input mesh (shape index = S, curvedness = C), Gaussian Curvature and Mean Curvature&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetCurvatures&lt;br /&gt;
    // bp2010 particleConsistency&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -particleConsistency &amp;lt;vtkFileIn_1&amp;gt; &amp;lt;lptsFileIn_1&amp;gt; ... &amp;lt;vtkFileIn_n&amp;gt; &amp;lt;lptsFileIn_n&amp;gt; ... Generates new particle files where fliped particles does not appear&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 particleConsistency&lt;br /&gt;
    // bp2010 GetDirectionFeatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -GetDirectionFeatures ... Generates three KWM loadable files that have directionality features with respect to X, Y and Z directions&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetDirectionFeatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -closestPoint &amp;lt;InputAttributeFile1&amp;gt; &amp;lt;InputMesh2&amp;gt;   Computes interpolated attribute file (output file) for second mesh using closest point interpolation between two input meshes&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -extractVertices &amp;lt;YLocationAttributeFile.txt&amp;gt; &amp;lt;ZLocationAttributeFile.txt&amp;gt;  Extract points and write 3 different files listing respectively X, Y and Z values&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -mean &amp;lt;AttributeFile2&amp;gt; &amp;lt;AttributeFile3&amp;gt;... Compute mean scalar attribute file (assuming same number of vertices)&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //cx2011 cart2bary&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -cart2bary &amp;lt;vtkPointFileIn&amp;gt; Project each point in &amp;lt;vtkPointFileIn&amp;gt; onto the &amp;lt;inputmesh&amp;gt; and then calculate the Barycentric coordinate of the projected point, output to &amp;lt;OutputFileName&amp;gt;&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
    //bp2011&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -attSTD &amp;lt;attribute_file2&amp;gt; &amp;lt;attribute_file2&amp;gt; ...&amp;lt;attribute_fileN&amp;gt; ... Compute std for a collection of vector or scalar files&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -VTKtolpts  ... Create a particle file out of a triangulated VTK mesh&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2012&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -relaxPolygons iterations... Mesh relaxation based in vtkWindowedSincPolyDataFilter&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -decimateMesh &amp;lt;target reduction&amp;gt; ... Mesh decimation, reducing the number of points. Target reduction is a value from 0..1 that indicates in what % vertices should be reduced&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //mst2013&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -listPointData    lists info about all the VTK point Data in the vtk file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -PointDataOp &amp;lt;name&amp;gt; &amp;lt;op&amp;gt; &amp;lt;val&amp;gt;   &amp;lt;name&amp;gt;: name of point data, &amp;quot; &amp;lt;&amp;lt; std::endl&lt;br /&gt;
	      &amp;lt;&amp;lt; &amp;quot;     &amp;lt;op&amp;gt;: [threshBelow | sub]  threshBelow: set to 0 all data below &amp;lt;value&amp;gt;, sub: subtract value&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2013&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -translateMesh &amp;lt;tx_DimX&amp;gt; &amp;lt;tx_DimY&amp;gt; &amp;lt;tx_DimZ&amp;gt; ,  translates a mesh for a given amount &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2015&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -lookupPointData &amp;lt;csv_lookup&amp;gt; &amp;lt;scalar_field_name&amp;gt;,  substitutes scalar values in a given scalar field based on an input lookup &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2016&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -volumePolyData,  provides volume count for the PolyData through the std output. NOTE: Only in closed surfaces.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    &lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -verbose                   Verbose output&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    return 0;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61097</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61097"/>
		<updated>2019-04-26T18:54:19Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: /* Current MeshMath functionality */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* TBD engineer&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
* [http://insight-journal.org/browse/publication/106 KWMeshVisu]: Legacy mesh viewer from the Styner Lab.&lt;br /&gt;
* Types of Mesh Operations:&lt;br /&gt;
** Multiple Mesh (2+) &lt;br /&gt;
** Single Mesh&lt;br /&gt;
** MeshToVolume&lt;br /&gt;
** MeshScalar to Mesh&lt;br /&gt;
** MeshScalar to MeshScalar&lt;br /&gt;
** MeshScalar Operation&lt;br /&gt;
&lt;br /&gt;
== Initial discussions ==&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
=== Current MeshMath functionality ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! Type&lt;br /&gt;
! Keep&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| subtract&lt;br /&gt;
| Subtract mesh from inputmesh, write a KWMeshVisu readable text file&lt;br /&gt;
| PairWiseMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]]&lt;br /&gt;
|-&lt;br /&gt;
| magnitude&lt;br /&gt;
| Magnitude of the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&lt;br /&gt;
| ?&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| It seems this is very specific to a certain application&lt;br /&gt;
|-&lt;br /&gt;
| scaleMVA&lt;br /&gt;
| Scales the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&lt;br /&gt;
| ?&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| It seems this is very specific to a certain application&lt;br /&gt;
|-&lt;br /&gt;
| scaleMesh&lt;br /&gt;
| Scales the input mesh file&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| avgMesh&lt;br /&gt;
| Compute the average mesh from inputmesh file1, file2...&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ave&lt;br /&gt;
| Compute the average vector field from file1, file2... generated with -substract&lt;br /&gt;
| MultipleMesh / ScalarMesh Operator&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
|-&lt;br /&gt;
| normave&lt;br /&gt;
| Works as the \&amp;quot;-ave\&amp;quot; option, but the average vector are projected on the normal at each point&lt;br /&gt;
| MultipleMesh / ScalarMesh Operator&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
|-&lt;br /&gt;
| InvVect&lt;br /&gt;
| Invert all the vectors created with the -substract option and write a KWMeshVisu readable file&lt;br /&gt;
| MeshScalar Operation &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| magdir&lt;br /&gt;
| Compute the signed magnitude of each of the vector from the vector field.(+ if in the normal direction, - otherwise)&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
|-&lt;br /&gt;
| magNormdir&lt;br /&gt;
| Compute the signed magnitude of the normal projection of the vector field&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
|-&lt;br /&gt;
| applyVec&lt;br /&gt;
| Deforme the mesh according to the vector field specified as input &lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| meshValues&lt;br /&gt;
| Find the points and cells in a mesh. The outputfile is a textfile with the values&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Export through CSV&lt;br /&gt;
|-&lt;br /&gt;
| avgGaussMesh&lt;br /&gt;
| &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt; ... -gaussMeshPara &amp;lt;mean&amp;gt;,&amp;lt;stdev&amp;gt;,&amp;lt;val1&amp;gt;,&amp;lt;val2&amp;gt;,... Compute the gaussian average for mesh files. The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| avgGaussKWM&lt;br /&gt;
| Compute the gaussian average for KWMeshVisu files. The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| See &amp;quot;ave&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| alignMesh&lt;br /&gt;
| Align all of the meshes to the inputmesh (== MeshFile0) using Procrustes alignment [-scalingOn]&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Fix the scaling, give an option to export the scaling factors associated with the mesh (so it can be reverted via scaleMesh)&lt;br /&gt;
|-&lt;br /&gt;
| alignMeshICP&lt;br /&gt;
| Align all of the meshes to the inputmesh (== MeshFile0) using IterativeClosestPoints (no correspondence required)&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| BadTriangle&lt;br /&gt;
| Find the bad triangles in a Mesh. The &amp;lt;thresh value&amp;gt; is the value of the threshFactor to calculate the standard deviation for the bad triangles. The output is a KWMeshVisu text file with the values of the average of the triangles of the mesh&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| Probably not keep since this is the same than &amp;quot;Clean&amp;quot; in the SurfaceToolbox&lt;br /&gt;
|-&lt;br /&gt;
| extraction&lt;br /&gt;
| To extract an attribute.The Input is the Mesh, the extractFilename is the attribute image and the Output is a KWMeshVisu text file with the attribute extraction [-extractClosest]: extract closest attribute [-nn]: nearest neighbor interpolation (default: linear)&lt;br /&gt;
| Si&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -extraction extractFilename [-extractClosest] [-nn]&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;  &lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -value &amp;lt;file1&amp;gt; &amp;lt;file2&amp;gt;... &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot;  Extract the 5th column from a textfile and write a KWMeshVisu file with the values obtained&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -subKWM &amp;lt;textname&amp;gt;       Difference between 2 KWMeshVisu files&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -MaxColor &amp;lt;textfile&amp;gt;...  Compare each point in every files, find a max for every points, keep 5% near the max, the other values will be 0&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -dist_absolute &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;...  -result_absolute &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;... Absolute distance map between KWMeshVisu files&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -dist_relative &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;...  -result_relative &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;... Relative distance map between KWMeshVisu files (values between -1 &amp;amp; 1)&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -label &amp;lt;textfile&amp;gt;      Separate every labels, find the mean...&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -color -val &amp;lt;number_of_label&amp;gt;,&amp;lt;value_label&amp;gt;... -oldval &amp;lt;number_of_old_label&amp;gt;,&amp;lt;old_value_label&amp;gt;...&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  To change the value of labels to see the evolution with KWMeshVisu. &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Value_label is when the label grow up. &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Old_value_label is for the label wich has already grown up.&amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -first &amp;lt;textfile&amp;gt;...   Convert a column file into a line file with a comma between each value&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // cchou MC2Origin&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -MC2Origin       Translate the Center of Mass to the Origin&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsKWM&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -avgOneKWM       Computes the avg of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -medianOneKWM    Computes the min of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -minOneKWM       Computes the min of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -maxOneKWM       Computes the max of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -per1OneKWM      Computes the 1% percentile of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -per99OneKWM     Computes the 99% percentile of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsKWM&lt;br /&gt;
    // bp2009 FillHole&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -FillHole        Fills up a hole in a open mesh.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;      If more than one hole exists, this operation might have to be repeated.&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 FillHole&lt;br /&gt;
    // bp2009 BordersOut&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -BordersOut      Outputs the borders of a mesh (if there).&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 BordersOut&lt;br /&gt;
    // bp2009 IsOpen&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -IsOpen          Gives back an integer defining whether the mesh is open or not&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 IsOpen&lt;br /&gt;
    // bp2009 CleanMesh&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -CleanMesh       Re-mesh the input mesh and gives back a new clean mesh without degenerated triangles&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 CleanMesh&lt;br /&gt;
    // bp2009 SmoothMesh&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -SmoothMesh iterations    Gives back a Laplacian smoothed surface&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;          Iterations defines how many times the Laplacian is applied.&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 SmoothMesh&lt;br /&gt;
    // bp2009 FilterNormals&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -FilterNormals direction &amp;lt;MeshFileVTK&amp;gt; &amp;lt;MeshFileVTKOut&amp;gt;  ... Changes homogeneously normals of the polygons in a mesh&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;               direction= [1] normals outwards [-1] normals inwards&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 FilterNormals&lt;br /&gt;
    // bp2009 StatsROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -statsROI &amp;lt;txtROIFileIn&amp;gt;   Process a KWMeshVisu file, given a ROI Mask&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;       Outputs a new KWMeshVisu only with the info in the mask&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsROI&lt;br /&gt;
    // bp2009 KWMtoPolyData&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -KWMtoPolyData &amp;lt;txtFileIn&amp;gt; &amp;lt;nameScalarField&amp;gt;   Writes a KWM scalar field (N Dimensions) into a PolyData Field Data Scalar to visualize in Slicer&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 KWMtoPolyData&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -FSAscData &amp;lt;FreeSurferASCIIfile&amp;gt; &amp;lt;nameScalarField&amp;gt;   Extracts a curvature/thickness etc information from a FreeSurfer style scalar file and adds it as attribute to the vtk mesh for visualization. FS format is line-by-line, no header, with each line 'point-id vertex-x vertex-y vertex-z scalar-prop' &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // styner2015 FSAscData&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -significanceLevel &amp;lt;double&amp;gt; the min Pvalue for the Pval ColorMap &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
    // bp2009 ProcessROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -processROI &amp;lt;txtROIFileIn&amp;gt; &amp;lt;MeshFileIn&amp;gt;  ... [TEMP - do not know where to put this]&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;   Gets stats for a distances ROI map&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 ProcessROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -surfaceArea &amp;lt;AttributeFile&amp;gt;   Computes surface area in a txt file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -lobarSurfaceArea &amp;lt;ParcellationAttributeFile&amp;gt;   Computes lobar surface area (output: csv file)&amp;quot;&amp;lt;&amp;lt;std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -variance &amp;lt;AttributeFile2&amp;gt; &amp;lt;AttributeFile3&amp;gt;...   Compute variance across population&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetCurvatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -GetCurvatures &amp;lt;txtFileOut_C&amp;gt; &amp;lt;txtFileOut_S&amp;gt; &amp;lt;txtFileOut_Gauss&amp;gt; &amp;lt;txtFileOut_mean&amp;gt;... Gets an assorted set of curvature measurements:&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;   Koenderink curvature values for an input mesh (shape index = S, curvedness = C), Gaussian Curvature and Mean Curvature&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetCurvatures&lt;br /&gt;
    // bp2010 particleConsistency&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -particleConsistency &amp;lt;vtkFileIn_1&amp;gt; &amp;lt;lptsFileIn_1&amp;gt; ... &amp;lt;vtkFileIn_n&amp;gt; &amp;lt;lptsFileIn_n&amp;gt; ... Generates new particle files where fliped particles does not appear&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 particleConsistency&lt;br /&gt;
    // bp2010 GetDirectionFeatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -GetDirectionFeatures ... Generates three KWM loadable files that have directionality features with respect to X, Y and Z directions&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetDirectionFeatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -closestPoint &amp;lt;InputAttributeFile1&amp;gt; &amp;lt;InputMesh2&amp;gt;   Computes interpolated attribute file (output file) for second mesh using closest point interpolation between two input meshes&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -extractVertices &amp;lt;YLocationAttributeFile.txt&amp;gt; &amp;lt;ZLocationAttributeFile.txt&amp;gt;  Extract points and write 3 different files listing respectively X, Y and Z values&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -mean &amp;lt;AttributeFile2&amp;gt; &amp;lt;AttributeFile3&amp;gt;... Compute mean scalar attribute file (assuming same number of vertices)&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //cx2011 cart2bary&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -cart2bary &amp;lt;vtkPointFileIn&amp;gt; Project each point in &amp;lt;vtkPointFileIn&amp;gt; onto the &amp;lt;inputmesh&amp;gt; and then calculate the Barycentric coordinate of the projected point, output to &amp;lt;OutputFileName&amp;gt;&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
    //bp2011&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -attSTD &amp;lt;attribute_file2&amp;gt; &amp;lt;attribute_file2&amp;gt; ...&amp;lt;attribute_fileN&amp;gt; ... Compute std for a collection of vector or scalar files&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -VTKtolpts  ... Create a particle file out of a triangulated VTK mesh&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2012&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -relaxPolygons iterations... Mesh relaxation based in vtkWindowedSincPolyDataFilter&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -decimateMesh &amp;lt;target reduction&amp;gt; ... Mesh decimation, reducing the number of points. Target reduction is a value from 0..1 that indicates in what % vertices should be reduced&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //mst2013&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -listPointData    lists info about all the VTK point Data in the vtk file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -PointDataOp &amp;lt;name&amp;gt; &amp;lt;op&amp;gt; &amp;lt;val&amp;gt;   &amp;lt;name&amp;gt;: name of point data, &amp;quot; &amp;lt;&amp;lt; std::endl&lt;br /&gt;
	      &amp;lt;&amp;lt; &amp;quot;     &amp;lt;op&amp;gt;: [threshBelow | sub]  threshBelow: set to 0 all data below &amp;lt;value&amp;gt;, sub: subtract value&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2013&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -translateMesh &amp;lt;tx_DimX&amp;gt; &amp;lt;tx_DimY&amp;gt; &amp;lt;tx_DimZ&amp;gt; ,  translates a mesh for a given amount &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2015&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -lookupPointData &amp;lt;csv_lookup&amp;gt; &amp;lt;scalar_field_name&amp;gt;,  substitutes scalar values in a given scalar field based on an input lookup &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2016&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -volumePolyData,  provides volume count for the PolyData through the std output. NOTE: Only in closed surfaces.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    &lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -verbose                   Verbose output&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    return 0;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61096</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61096"/>
		<updated>2019-04-26T18:48:02Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: /* Current MeshMath functionality */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* TBD engineer&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
* [http://insight-journal.org/browse/publication/106 KWMeshVisu]: Legacy mesh viewer from the Styner Lab.&lt;br /&gt;
* Types of Mesh Operations:&lt;br /&gt;
** Multiple Mesh (2+) &lt;br /&gt;
** Single Mesh&lt;br /&gt;
** MeshToVolume&lt;br /&gt;
** MeshScalar to Mesh&lt;br /&gt;
** MeshScalar to MeshScalar&lt;br /&gt;
** MeshScalar Operation&lt;br /&gt;
&lt;br /&gt;
== Initial discussions ==&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
=== Current MeshMath functionality ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! Type&lt;br /&gt;
! Keep&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| subtract&lt;br /&gt;
| Subtract mesh from inputmesh, write a KWMeshVisu readable text file&lt;br /&gt;
| PairWiseMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]]&lt;br /&gt;
|-&lt;br /&gt;
| magnitude&lt;br /&gt;
| Magnitude of the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&lt;br /&gt;
| ?&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| It seems this is very specific to a certain application&lt;br /&gt;
|-&lt;br /&gt;
| scaleMVA&lt;br /&gt;
| Scales the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&lt;br /&gt;
| ?&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| It seems this is very specific to a certain application&lt;br /&gt;
|-&lt;br /&gt;
| scaleMesh&lt;br /&gt;
| Scales the input mesh file&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| avgMesh&lt;br /&gt;
| Compute the average mesh from inputmesh file1, file2...&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ave&lt;br /&gt;
| Compute the average vector field from file1, file2... generated with -substract&lt;br /&gt;
| MultipleMesh / ScalarMesh Operator&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
|-&lt;br /&gt;
| normave&lt;br /&gt;
| Works as the \&amp;quot;-ave\&amp;quot; option, but the average vector are projected on the normal at each point&lt;br /&gt;
| MultipleMesh / ScalarMesh Operator&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
|-&lt;br /&gt;
| InvVect&lt;br /&gt;
| Invert all the vectors created with the -substract option and write a KWMeshVisu readable file&lt;br /&gt;
| MeshScalar Operation &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| magdir&lt;br /&gt;
| Compute the signed magnitude of each of the vector from the vector field.(+ if in the normal direction, - otherwise)&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
|-&lt;br /&gt;
| magNormdir&lt;br /&gt;
| Compute the signed magnitude of the normal projection of the vector field&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
|-&lt;br /&gt;
| applyVec&lt;br /&gt;
| Deforme the mesh according to the vector field specified as input &lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| meshValues&lt;br /&gt;
| Find the points and cells in a mesh. The outputfile is a textfile with the values&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Export through CSV&lt;br /&gt;
|-&lt;br /&gt;
| avgGaussMesh&lt;br /&gt;
| &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt; ... -gaussMeshPara &amp;lt;mean&amp;gt;,&amp;lt;stdev&amp;gt;,&amp;lt;val1&amp;gt;,&amp;lt;val2&amp;gt;,... Compute the gaussian average for mesh files. The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| avgGaussKWM&lt;br /&gt;
| Compute the gaussian average for KWMeshVisu files. The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&lt;br /&gt;
| MeshScalar Operation&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| See &amp;quot;ave&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| alignMesh&lt;br /&gt;
| Align all of the meshes to the inputmesh (== MeshFile0) using Procrustes alignment [-scalingOn]&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Fix the scaling, give an option to export the scaling factors associated with the mesh (so it can be reverted via scaleMesh)&lt;br /&gt;
|-&lt;br /&gt;
| alignMeshICP&lt;br /&gt;
| Align all of the meshes to the inputmesh (== MeshFile0) using IterativeClosestPoints (no correspondence required)&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -alignMesh &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt;...  &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; endl;&lt;br /&gt;
    //bp 2016&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -alignMeshICP &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt;...  &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; endl;&lt;br /&gt;
    //bp 2016&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -BadTriangle &amp;lt;thresh value&amp;gt; [-correctMesh correctFilename] &amp;quot;  &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;  Find the bad triangles in a Mesh. The &amp;lt;thresh value&amp;gt; is the value of the threshFactor to calculate the standard deviation for the bad triangles. The output is a KWMeshVisu text file with the values of the average of the triangles of the mesh &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  To have a new Mesh with the correct triangles -correctMesh &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -extraction extractFilename [-extractClosest] [-nn]&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;  To extract an attribute.The Input is the Mesh, the extractFilename is the attribute image and the Output is a KWMeshVisu text file with the attribute extraction&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  [-extractClosest]: extract closest attribute&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  [-nn]: nearest neighbor interpolation (default: linear)&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -value &amp;lt;file1&amp;gt; &amp;lt;file2&amp;gt;... &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot;  Extract the 5th column from a textfile and write a KWMeshVisu file with the values obtained&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -subKWM &amp;lt;textname&amp;gt;       Difference between 2 KWMeshVisu files&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -MaxColor &amp;lt;textfile&amp;gt;...  Compare each point in every files, find a max for every points, keep 5% near the max, the other values will be 0&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -dist_absolute &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;...  -result_absolute &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;... Absolute distance map between KWMeshVisu files&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -dist_relative &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;...  -result_relative &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;... Relative distance map between KWMeshVisu files (values between -1 &amp;amp; 1)&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -label &amp;lt;textfile&amp;gt;      Separate every labels, find the mean...&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -color -val &amp;lt;number_of_label&amp;gt;,&amp;lt;value_label&amp;gt;... -oldval &amp;lt;number_of_old_label&amp;gt;,&amp;lt;old_value_label&amp;gt;...&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  To change the value of labels to see the evolution with KWMeshVisu. &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Value_label is when the label grow up. &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Old_value_label is for the label wich has already grown up.&amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -first &amp;lt;textfile&amp;gt;...   Convert a column file into a line file with a comma between each value&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // cchou MC2Origin&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -MC2Origin       Translate the Center of Mass to the Origin&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsKWM&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -avgOneKWM       Computes the avg of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -medianOneKWM    Computes the min of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -minOneKWM       Computes the min of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -maxOneKWM       Computes the max of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -per1OneKWM      Computes the 1% percentile of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -per99OneKWM     Computes the 99% percentile of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsKWM&lt;br /&gt;
    // bp2009 FillHole&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -FillHole        Fills up a hole in a open mesh.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;      If more than one hole exists, this operation might have to be repeated.&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 FillHole&lt;br /&gt;
    // bp2009 BordersOut&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -BordersOut      Outputs the borders of a mesh (if there).&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 BordersOut&lt;br /&gt;
    // bp2009 IsOpen&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -IsOpen          Gives back an integer defining whether the mesh is open or not&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 IsOpen&lt;br /&gt;
    // bp2009 CleanMesh&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -CleanMesh       Re-mesh the input mesh and gives back a new clean mesh without degenerated triangles&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 CleanMesh&lt;br /&gt;
    // bp2009 SmoothMesh&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -SmoothMesh iterations    Gives back a Laplacian smoothed surface&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;          Iterations defines how many times the Laplacian is applied.&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 SmoothMesh&lt;br /&gt;
    // bp2009 FilterNormals&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -FilterNormals direction &amp;lt;MeshFileVTK&amp;gt; &amp;lt;MeshFileVTKOut&amp;gt;  ... Changes homogeneously normals of the polygons in a mesh&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;               direction= [1] normals outwards [-1] normals inwards&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 FilterNormals&lt;br /&gt;
    // bp2009 StatsROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -statsROI &amp;lt;txtROIFileIn&amp;gt;   Process a KWMeshVisu file, given a ROI Mask&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;       Outputs a new KWMeshVisu only with the info in the mask&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsROI&lt;br /&gt;
    // bp2009 KWMtoPolyData&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -KWMtoPolyData &amp;lt;txtFileIn&amp;gt; &amp;lt;nameScalarField&amp;gt;   Writes a KWM scalar field (N Dimensions) into a PolyData Field Data Scalar to visualize in Slicer&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 KWMtoPolyData&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -FSAscData &amp;lt;FreeSurferASCIIfile&amp;gt; &amp;lt;nameScalarField&amp;gt;   Extracts a curvature/thickness etc information from a FreeSurfer style scalar file and adds it as attribute to the vtk mesh for visualization. FS format is line-by-line, no header, with each line 'point-id vertex-x vertex-y vertex-z scalar-prop' &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // styner2015 FSAscData&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -significanceLevel &amp;lt;double&amp;gt; the min Pvalue for the Pval ColorMap &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
    // bp2009 ProcessROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -processROI &amp;lt;txtROIFileIn&amp;gt; &amp;lt;MeshFileIn&amp;gt;  ... [TEMP - do not know where to put this]&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;   Gets stats for a distances ROI map&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 ProcessROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -surfaceArea &amp;lt;AttributeFile&amp;gt;   Computes surface area in a txt file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -lobarSurfaceArea &amp;lt;ParcellationAttributeFile&amp;gt;   Computes lobar surface area (output: csv file)&amp;quot;&amp;lt;&amp;lt;std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -variance &amp;lt;AttributeFile2&amp;gt; &amp;lt;AttributeFile3&amp;gt;...   Compute variance across population&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetCurvatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -GetCurvatures &amp;lt;txtFileOut_C&amp;gt; &amp;lt;txtFileOut_S&amp;gt; &amp;lt;txtFileOut_Gauss&amp;gt; &amp;lt;txtFileOut_mean&amp;gt;... Gets an assorted set of curvature measurements:&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;   Koenderink curvature values for an input mesh (shape index = S, curvedness = C), Gaussian Curvature and Mean Curvature&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetCurvatures&lt;br /&gt;
    // bp2010 particleConsistency&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -particleConsistency &amp;lt;vtkFileIn_1&amp;gt; &amp;lt;lptsFileIn_1&amp;gt; ... &amp;lt;vtkFileIn_n&amp;gt; &amp;lt;lptsFileIn_n&amp;gt; ... Generates new particle files where fliped particles does not appear&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 particleConsistency&lt;br /&gt;
    // bp2010 GetDirectionFeatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -GetDirectionFeatures ... Generates three KWM loadable files that have directionality features with respect to X, Y and Z directions&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetDirectionFeatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -closestPoint &amp;lt;InputAttributeFile1&amp;gt; &amp;lt;InputMesh2&amp;gt;   Computes interpolated attribute file (output file) for second mesh using closest point interpolation between two input meshes&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -extractVertices &amp;lt;YLocationAttributeFile.txt&amp;gt; &amp;lt;ZLocationAttributeFile.txt&amp;gt;  Extract points and write 3 different files listing respectively X, Y and Z values&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -mean &amp;lt;AttributeFile2&amp;gt; &amp;lt;AttributeFile3&amp;gt;... Compute mean scalar attribute file (assuming same number of vertices)&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //cx2011 cart2bary&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -cart2bary &amp;lt;vtkPointFileIn&amp;gt; Project each point in &amp;lt;vtkPointFileIn&amp;gt; onto the &amp;lt;inputmesh&amp;gt; and then calculate the Barycentric coordinate of the projected point, output to &amp;lt;OutputFileName&amp;gt;&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
    //bp2011&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -attSTD &amp;lt;attribute_file2&amp;gt; &amp;lt;attribute_file2&amp;gt; ...&amp;lt;attribute_fileN&amp;gt; ... Compute std for a collection of vector or scalar files&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -VTKtolpts  ... Create a particle file out of a triangulated VTK mesh&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2012&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -relaxPolygons iterations... Mesh relaxation based in vtkWindowedSincPolyDataFilter&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -decimateMesh &amp;lt;target reduction&amp;gt; ... Mesh decimation, reducing the number of points. Target reduction is a value from 0..1 that indicates in what % vertices should be reduced&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //mst2013&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -listPointData    lists info about all the VTK point Data in the vtk file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -PointDataOp &amp;lt;name&amp;gt; &amp;lt;op&amp;gt; &amp;lt;val&amp;gt;   &amp;lt;name&amp;gt;: name of point data, &amp;quot; &amp;lt;&amp;lt; std::endl&lt;br /&gt;
	      &amp;lt;&amp;lt; &amp;quot;     &amp;lt;op&amp;gt;: [threshBelow | sub]  threshBelow: set to 0 all data below &amp;lt;value&amp;gt;, sub: subtract value&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2013&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -translateMesh &amp;lt;tx_DimX&amp;gt; &amp;lt;tx_DimY&amp;gt; &amp;lt;tx_DimZ&amp;gt; ,  translates a mesh for a given amount &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2015&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -lookupPointData &amp;lt;csv_lookup&amp;gt; &amp;lt;scalar_field_name&amp;gt;,  substitutes scalar values in a given scalar field based on an input lookup &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2016&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -volumePolyData,  provides volume count for the PolyData through the std output. NOTE: Only in closed surfaces.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    &lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -verbose                   Verbose output&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    return 0;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61095</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61095"/>
		<updated>2019-04-26T18:42:38Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: /* Current MeshMath functionality */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* TBD engineer&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
* [http://insight-journal.org/browse/publication/106 KWMeshVisu]: Legacy mesh viewer from the Styner Lab.&lt;br /&gt;
* Types of Mesh Operations:&lt;br /&gt;
** Multiple Mesh (2+) &lt;br /&gt;
** Single Mesh&lt;br /&gt;
** MeshToVolume&lt;br /&gt;
** MeshScalar to Mesh&lt;br /&gt;
** MeshScalar to MeshScalar&lt;br /&gt;
** MeshScalar Operation&lt;br /&gt;
&lt;br /&gt;
== Initial discussions ==&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
=== Current MeshMath functionality ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! Type&lt;br /&gt;
! Keep&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| subtract&lt;br /&gt;
| Subtract mesh from inputmesh, write a KWMeshVisu readable text file&lt;br /&gt;
| PairWiseMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]]&lt;br /&gt;
|-&lt;br /&gt;
| magnitude&lt;br /&gt;
| Magnitude of the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&lt;br /&gt;
| ?&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| It seems this is very specific to a certain application&lt;br /&gt;
|-&lt;br /&gt;
| scaleMVA&lt;br /&gt;
| Scales the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&lt;br /&gt;
| ?&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| It seems this is very specific to a certain application&lt;br /&gt;
|-&lt;br /&gt;
| scaleMesh&lt;br /&gt;
| Scales the input mesh file&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| avgMesh&lt;br /&gt;
| Compute the average mesh from inputmesh file1, file2...&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ave&lt;br /&gt;
| Compute the average vector field from file1, file2... generated with -substract&lt;br /&gt;
| MultipleMesh / ScalarMesh Operator&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
|-&lt;br /&gt;
| normave&lt;br /&gt;
| Works as the \&amp;quot;-ave\&amp;quot; option, but the average vector are projected on the normal at each point&lt;br /&gt;
| MultipleMesh / ScalarMesh Operator&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
|-&lt;br /&gt;
| InvVect&lt;br /&gt;
| Invert all the vectors created with the -substract option and write a KWMeshVisu readable file&lt;br /&gt;
| MeshScalar Operation &lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| magdir&lt;br /&gt;
| Compute the signed magnitude of each of the vector from the vector field.(+ if in the normal direction, - otherwise)&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
|-&lt;br /&gt;
| magNormdir&lt;br /&gt;
| Compute the signed magnitude of the normal projection of the vector field&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
|-&lt;br /&gt;
| applyVec&lt;br /&gt;
| Deforme the mesh according to the vector field specified as input &lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| meshValues&lt;br /&gt;
| Find the points and cells in a mesh. The outputfile is a textfile with the values&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| Export through CSV&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;                 &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Type: Single Mesh&lt;br /&gt;
* To-do: KEEP. Export through CSV&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; avgGaussMesh &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt; ... -gaussMeshPara &amp;lt;mean&amp;gt;,&amp;lt;stdev&amp;gt;,&amp;lt;val1&amp;gt;,&amp;lt;val2&amp;gt;,... Compute the gaussian average for mesh files.&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Type: Multiple Mesh&lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;   The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -avgGaussKWM &amp;lt;txtfile1&amp;gt; &amp;lt;txtfile2&amp;gt;... -gaussKWMPara &amp;lt;mean&amp;gt;,&amp;lt;stdev&amp;gt;,&amp;lt;val1&amp;gt;,&amp;lt;val2&amp;gt;,... &amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Compute the gaussian average for KWMeshVisu files.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;  The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -alignMesh &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt;... Align all of the meshes to the inputmesh (== MeshFile0) using Procrustes alignment [-scalingOn] &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; endl;&lt;br /&gt;
    //bp 2016&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -alignMeshICP &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt;... Align all of the meshes to the inputmesh (== MeshFile0) using IterativeClosestPoints (no correspondence required) &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; endl;&lt;br /&gt;
    //bp 2016&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -BadTriangle &amp;lt;thresh value&amp;gt; [-correctMesh correctFilename] &amp;quot;  &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;  Find the bad triangles in a Mesh. The &amp;lt;thresh value&amp;gt; is the value of the threshFactor to calculate the standard deviation for the bad triangles. The output is a KWMeshVisu text file with the values of the average of the triangles of the mesh &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  To have a new Mesh with the correct triangles -correctMesh &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -extraction extractFilename [-extractClosest] [-nn]&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;  To extract an attribute.The Input is the Mesh, the extractFilename is the attribute image and the Output is a KWMeshVisu text file with the attribute extraction&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  [-extractClosest]: extract closest attribute&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  [-nn]: nearest neighbor interpolation (default: linear)&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -value &amp;lt;file1&amp;gt; &amp;lt;file2&amp;gt;... &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot;  Extract the 5th column from a textfile and write a KWMeshVisu file with the values obtained&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -subKWM &amp;lt;textname&amp;gt;       Difference between 2 KWMeshVisu files&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -MaxColor &amp;lt;textfile&amp;gt;...  Compare each point in every files, find a max for every points, keep 5% near the max, the other values will be 0&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -dist_absolute &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;...  -result_absolute &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;... Absolute distance map between KWMeshVisu files&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -dist_relative &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;...  -result_relative &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;... Relative distance map between KWMeshVisu files (values between -1 &amp;amp; 1)&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -label &amp;lt;textfile&amp;gt;      Separate every labels, find the mean...&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -color -val &amp;lt;number_of_label&amp;gt;,&amp;lt;value_label&amp;gt;... -oldval &amp;lt;number_of_old_label&amp;gt;,&amp;lt;old_value_label&amp;gt;...&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  To change the value of labels to see the evolution with KWMeshVisu. &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Value_label is when the label grow up. &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Old_value_label is for the label wich has already grown up.&amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -first &amp;lt;textfile&amp;gt;...   Convert a column file into a line file with a comma between each value&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // cchou MC2Origin&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -MC2Origin       Translate the Center of Mass to the Origin&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsKWM&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -avgOneKWM       Computes the avg of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -medianOneKWM    Computes the min of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -minOneKWM       Computes the min of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -maxOneKWM       Computes the max of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -per1OneKWM      Computes the 1% percentile of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -per99OneKWM     Computes the 99% percentile of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsKWM&lt;br /&gt;
    // bp2009 FillHole&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -FillHole        Fills up a hole in a open mesh.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;      If more than one hole exists, this operation might have to be repeated.&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 FillHole&lt;br /&gt;
    // bp2009 BordersOut&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -BordersOut      Outputs the borders of a mesh (if there).&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 BordersOut&lt;br /&gt;
    // bp2009 IsOpen&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -IsOpen          Gives back an integer defining whether the mesh is open or not&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 IsOpen&lt;br /&gt;
    // bp2009 CleanMesh&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -CleanMesh       Re-mesh the input mesh and gives back a new clean mesh without degenerated triangles&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 CleanMesh&lt;br /&gt;
    // bp2009 SmoothMesh&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -SmoothMesh iterations    Gives back a Laplacian smoothed surface&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;          Iterations defines how many times the Laplacian is applied.&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 SmoothMesh&lt;br /&gt;
    // bp2009 FilterNormals&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -FilterNormals direction &amp;lt;MeshFileVTK&amp;gt; &amp;lt;MeshFileVTKOut&amp;gt;  ... Changes homogeneously normals of the polygons in a mesh&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;               direction= [1] normals outwards [-1] normals inwards&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 FilterNormals&lt;br /&gt;
    // bp2009 StatsROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -statsROI &amp;lt;txtROIFileIn&amp;gt;   Process a KWMeshVisu file, given a ROI Mask&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;       Outputs a new KWMeshVisu only with the info in the mask&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsROI&lt;br /&gt;
    // bp2009 KWMtoPolyData&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -KWMtoPolyData &amp;lt;txtFileIn&amp;gt; &amp;lt;nameScalarField&amp;gt;   Writes a KWM scalar field (N Dimensions) into a PolyData Field Data Scalar to visualize in Slicer&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 KWMtoPolyData&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -FSAscData &amp;lt;FreeSurferASCIIfile&amp;gt; &amp;lt;nameScalarField&amp;gt;   Extracts a curvature/thickness etc information from a FreeSurfer style scalar file and adds it as attribute to the vtk mesh for visualization. FS format is line-by-line, no header, with each line 'point-id vertex-x vertex-y vertex-z scalar-prop' &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // styner2015 FSAscData&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -significanceLevel &amp;lt;double&amp;gt; the min Pvalue for the Pval ColorMap &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
    // bp2009 ProcessROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -processROI &amp;lt;txtROIFileIn&amp;gt; &amp;lt;MeshFileIn&amp;gt;  ... [TEMP - do not know where to put this]&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;   Gets stats for a distances ROI map&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 ProcessROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -surfaceArea &amp;lt;AttributeFile&amp;gt;   Computes surface area in a txt file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -lobarSurfaceArea &amp;lt;ParcellationAttributeFile&amp;gt;   Computes lobar surface area (output: csv file)&amp;quot;&amp;lt;&amp;lt;std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -variance &amp;lt;AttributeFile2&amp;gt; &amp;lt;AttributeFile3&amp;gt;...   Compute variance across population&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetCurvatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -GetCurvatures &amp;lt;txtFileOut_C&amp;gt; &amp;lt;txtFileOut_S&amp;gt; &amp;lt;txtFileOut_Gauss&amp;gt; &amp;lt;txtFileOut_mean&amp;gt;... Gets an assorted set of curvature measurements:&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;   Koenderink curvature values for an input mesh (shape index = S, curvedness = C), Gaussian Curvature and Mean Curvature&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetCurvatures&lt;br /&gt;
    // bp2010 particleConsistency&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -particleConsistency &amp;lt;vtkFileIn_1&amp;gt; &amp;lt;lptsFileIn_1&amp;gt; ... &amp;lt;vtkFileIn_n&amp;gt; &amp;lt;lptsFileIn_n&amp;gt; ... Generates new particle files where fliped particles does not appear&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 particleConsistency&lt;br /&gt;
    // bp2010 GetDirectionFeatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -GetDirectionFeatures ... Generates three KWM loadable files that have directionality features with respect to X, Y and Z directions&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetDirectionFeatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -closestPoint &amp;lt;InputAttributeFile1&amp;gt; &amp;lt;InputMesh2&amp;gt;   Computes interpolated attribute file (output file) for second mesh using closest point interpolation between two input meshes&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -extractVertices &amp;lt;YLocationAttributeFile.txt&amp;gt; &amp;lt;ZLocationAttributeFile.txt&amp;gt;  Extract points and write 3 different files listing respectively X, Y and Z values&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -mean &amp;lt;AttributeFile2&amp;gt; &amp;lt;AttributeFile3&amp;gt;... Compute mean scalar attribute file (assuming same number of vertices)&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //cx2011 cart2bary&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -cart2bary &amp;lt;vtkPointFileIn&amp;gt; Project each point in &amp;lt;vtkPointFileIn&amp;gt; onto the &amp;lt;inputmesh&amp;gt; and then calculate the Barycentric coordinate of the projected point, output to &amp;lt;OutputFileName&amp;gt;&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
    //bp2011&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -attSTD &amp;lt;attribute_file2&amp;gt; &amp;lt;attribute_file2&amp;gt; ...&amp;lt;attribute_fileN&amp;gt; ... Compute std for a collection of vector or scalar files&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -VTKtolpts  ... Create a particle file out of a triangulated VTK mesh&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2012&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -relaxPolygons iterations... Mesh relaxation based in vtkWindowedSincPolyDataFilter&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -decimateMesh &amp;lt;target reduction&amp;gt; ... Mesh decimation, reducing the number of points. Target reduction is a value from 0..1 that indicates in what % vertices should be reduced&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //mst2013&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -listPointData    lists info about all the VTK point Data in the vtk file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -PointDataOp &amp;lt;name&amp;gt; &amp;lt;op&amp;gt; &amp;lt;val&amp;gt;   &amp;lt;name&amp;gt;: name of point data, &amp;quot; &amp;lt;&amp;lt; std::endl&lt;br /&gt;
	      &amp;lt;&amp;lt; &amp;quot;     &amp;lt;op&amp;gt;: [threshBelow | sub]  threshBelow: set to 0 all data below &amp;lt;value&amp;gt;, sub: subtract value&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2013&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -translateMesh &amp;lt;tx_DimX&amp;gt; &amp;lt;tx_DimY&amp;gt; &amp;lt;tx_DimZ&amp;gt; ,  translates a mesh for a given amount &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2015&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -lookupPointData &amp;lt;csv_lookup&amp;gt; &amp;lt;scalar_field_name&amp;gt;,  substitutes scalar values in a given scalar field based on an input lookup &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2016&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -volumePolyData,  provides volume count for the PolyData through the std output. NOTE: Only in closed surfaces.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    &lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -verbose                   Verbose output&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    return 0;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61094</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61094"/>
		<updated>2019-04-26T18:37:30Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: /* Current MeshMath functionality */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* TBD engineer&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
* [http://insight-journal.org/browse/publication/106 KWMeshVisu]: Legacy mesh viewer from the Styner Lab.&lt;br /&gt;
* Types of Mesh Operations:&lt;br /&gt;
** Multiple Mesh (2+) &lt;br /&gt;
** Single Mesh&lt;br /&gt;
** MeshToVolume&lt;br /&gt;
** MeshScalar to Mesh&lt;br /&gt;
** MeshScalar to MeshScalar&lt;br /&gt;
** MeshScalar Operation&lt;br /&gt;
&lt;br /&gt;
== Initial discussions ==&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
=== Current MeshMath functionality ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Description&lt;br /&gt;
! Type&lt;br /&gt;
! Keep&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| subtract&lt;br /&gt;
| Subtract mesh from inputmesh, write a KWMeshVisu readable text file&lt;br /&gt;
| PairWiseMesh&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]]&lt;br /&gt;
|-&lt;br /&gt;
| magnitude&lt;br /&gt;
| Magnitude of the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&lt;br /&gt;
| ?&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| It seems this is very specific to a certain application&lt;br /&gt;
|-&lt;br /&gt;
| scaleMVA&lt;br /&gt;
| Scales the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&lt;br /&gt;
| ?&lt;br /&gt;
| {{Not Done}}&lt;br /&gt;
| It seems this is very specific to a certain application&lt;br /&gt;
|-&lt;br /&gt;
| scaleMesh&lt;br /&gt;
| Scales the input mesh file&lt;br /&gt;
| SingleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| avgMesh&lt;br /&gt;
| Compute the average mesh from inputmesh file1, file2...&lt;br /&gt;
| MultipleMesh&lt;br /&gt;
| {{Done}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; ave : Compute the average vector field from file1, file2... generated with -substract&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: Multiple Mesh (also MeshScalar Operation) &lt;br /&gt;
* To-do: KEEP. Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; normave : Works as the \&amp;quot;-ave\&amp;quot; option, but the average vector are projected on the normal at each point&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: Multiple Mesh (also MeshScalar Operation) &lt;br /&gt;
* To-do: KEEP. Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging/projecting into normals and creating a new scalar map. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; InvVect:     Invert all the vectors created with the -substract option and write a KWMeshVisu readable file&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: MeshScalar Operation &lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; magdir &amp;lt;VectorFile&amp;gt;  Compute the signed magnitude of each of the vector from the vector field.(+ if in the normal direction, - otherwise)&amp;lt;/big&amp;gt; \&lt;br /&gt;
&lt;br /&gt;
* Type: Single Mesh&lt;br /&gt;
* To-do: NOT KEEP. This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; magNormDir &amp;lt;VectorFile&amp;gt; Compute the signed magnitude of the normal projection of the vector field&amp;quot;   &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Type: Single Mesh&lt;br /&gt;
* To-do: NOT KEEP. This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; applyVec &amp;lt;VectorFile&amp;gt; Deforme the mesh according to the vector field specified as input &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Type: Single Mesh&lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; meshValues                Find the points and cells in a mesh. The outputfile is a textfile with the values &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Type: Single Mesh&lt;br /&gt;
* To-do: KEEP. Export through CSV&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; avgGaussMesh &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt; ... -gaussMeshPara &amp;lt;mean&amp;gt;,&amp;lt;stdev&amp;gt;,&amp;lt;val1&amp;gt;,&amp;lt;val2&amp;gt;,... Compute the gaussian average for mesh files.&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Type: Multiple Mesh&lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;   The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -avgGaussKWM &amp;lt;txtfile1&amp;gt; &amp;lt;txtfile2&amp;gt;... -gaussKWMPara &amp;lt;mean&amp;gt;,&amp;lt;stdev&amp;gt;,&amp;lt;val1&amp;gt;,&amp;lt;val2&amp;gt;,... &amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Compute the gaussian average for KWMeshVisu files.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;  The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -alignMesh &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt;... Align all of the meshes to the inputmesh (== MeshFile0) using Procrustes alignment [-scalingOn] &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; endl;&lt;br /&gt;
    //bp 2016&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -alignMeshICP &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt;... Align all of the meshes to the inputmesh (== MeshFile0) using IterativeClosestPoints (no correspondence required) &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; endl;&lt;br /&gt;
    //bp 2016&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -BadTriangle &amp;lt;thresh value&amp;gt; [-correctMesh correctFilename] &amp;quot;  &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;  Find the bad triangles in a Mesh. The &amp;lt;thresh value&amp;gt; is the value of the threshFactor to calculate the standard deviation for the bad triangles. The output is a KWMeshVisu text file with the values of the average of the triangles of the mesh &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  To have a new Mesh with the correct triangles -correctMesh &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -extraction extractFilename [-extractClosest] [-nn]&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;  To extract an attribute.The Input is the Mesh, the extractFilename is the attribute image and the Output is a KWMeshVisu text file with the attribute extraction&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  [-extractClosest]: extract closest attribute&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  [-nn]: nearest neighbor interpolation (default: linear)&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -value &amp;lt;file1&amp;gt; &amp;lt;file2&amp;gt;... &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot;  Extract the 5th column from a textfile and write a KWMeshVisu file with the values obtained&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -subKWM &amp;lt;textname&amp;gt;       Difference between 2 KWMeshVisu files&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -MaxColor &amp;lt;textfile&amp;gt;...  Compare each point in every files, find a max for every points, keep 5% near the max, the other values will be 0&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -dist_absolute &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;...  -result_absolute &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;... Absolute distance map between KWMeshVisu files&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -dist_relative &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;...  -result_relative &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;... Relative distance map between KWMeshVisu files (values between -1 &amp;amp; 1)&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -label &amp;lt;textfile&amp;gt;      Separate every labels, find the mean...&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -color -val &amp;lt;number_of_label&amp;gt;,&amp;lt;value_label&amp;gt;... -oldval &amp;lt;number_of_old_label&amp;gt;,&amp;lt;old_value_label&amp;gt;...&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  To change the value of labels to see the evolution with KWMeshVisu. &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Value_label is when the label grow up. &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Old_value_label is for the label wich has already grown up.&amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -first &amp;lt;textfile&amp;gt;...   Convert a column file into a line file with a comma between each value&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // cchou MC2Origin&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -MC2Origin       Translate the Center of Mass to the Origin&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsKWM&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -avgOneKWM       Computes the avg of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -medianOneKWM    Computes the min of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -minOneKWM       Computes the min of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -maxOneKWM       Computes the max of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -per1OneKWM      Computes the 1% percentile of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -per99OneKWM     Computes the 99% percentile of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsKWM&lt;br /&gt;
    // bp2009 FillHole&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -FillHole        Fills up a hole in a open mesh.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;      If more than one hole exists, this operation might have to be repeated.&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 FillHole&lt;br /&gt;
    // bp2009 BordersOut&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -BordersOut      Outputs the borders of a mesh (if there).&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 BordersOut&lt;br /&gt;
    // bp2009 IsOpen&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -IsOpen          Gives back an integer defining whether the mesh is open or not&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 IsOpen&lt;br /&gt;
    // bp2009 CleanMesh&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -CleanMesh       Re-mesh the input mesh and gives back a new clean mesh without degenerated triangles&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 CleanMesh&lt;br /&gt;
    // bp2009 SmoothMesh&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -SmoothMesh iterations    Gives back a Laplacian smoothed surface&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;          Iterations defines how many times the Laplacian is applied.&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 SmoothMesh&lt;br /&gt;
    // bp2009 FilterNormals&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -FilterNormals direction &amp;lt;MeshFileVTK&amp;gt; &amp;lt;MeshFileVTKOut&amp;gt;  ... Changes homogeneously normals of the polygons in a mesh&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;               direction= [1] normals outwards [-1] normals inwards&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 FilterNormals&lt;br /&gt;
    // bp2009 StatsROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -statsROI &amp;lt;txtROIFileIn&amp;gt;   Process a KWMeshVisu file, given a ROI Mask&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;       Outputs a new KWMeshVisu only with the info in the mask&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsROI&lt;br /&gt;
    // bp2009 KWMtoPolyData&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -KWMtoPolyData &amp;lt;txtFileIn&amp;gt; &amp;lt;nameScalarField&amp;gt;   Writes a KWM scalar field (N Dimensions) into a PolyData Field Data Scalar to visualize in Slicer&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 KWMtoPolyData&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -FSAscData &amp;lt;FreeSurferASCIIfile&amp;gt; &amp;lt;nameScalarField&amp;gt;   Extracts a curvature/thickness etc information from a FreeSurfer style scalar file and adds it as attribute to the vtk mesh for visualization. FS format is line-by-line, no header, with each line 'point-id vertex-x vertex-y vertex-z scalar-prop' &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // styner2015 FSAscData&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -significanceLevel &amp;lt;double&amp;gt; the min Pvalue for the Pval ColorMap &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
    // bp2009 ProcessROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -processROI &amp;lt;txtROIFileIn&amp;gt; &amp;lt;MeshFileIn&amp;gt;  ... [TEMP - do not know where to put this]&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;   Gets stats for a distances ROI map&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 ProcessROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -surfaceArea &amp;lt;AttributeFile&amp;gt;   Computes surface area in a txt file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -lobarSurfaceArea &amp;lt;ParcellationAttributeFile&amp;gt;   Computes lobar surface area (output: csv file)&amp;quot;&amp;lt;&amp;lt;std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -variance &amp;lt;AttributeFile2&amp;gt; &amp;lt;AttributeFile3&amp;gt;...   Compute variance across population&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetCurvatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -GetCurvatures &amp;lt;txtFileOut_C&amp;gt; &amp;lt;txtFileOut_S&amp;gt; &amp;lt;txtFileOut_Gauss&amp;gt; &amp;lt;txtFileOut_mean&amp;gt;... Gets an assorted set of curvature measurements:&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;   Koenderink curvature values for an input mesh (shape index = S, curvedness = C), Gaussian Curvature and Mean Curvature&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetCurvatures&lt;br /&gt;
    // bp2010 particleConsistency&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -particleConsistency &amp;lt;vtkFileIn_1&amp;gt; &amp;lt;lptsFileIn_1&amp;gt; ... &amp;lt;vtkFileIn_n&amp;gt; &amp;lt;lptsFileIn_n&amp;gt; ... Generates new particle files where fliped particles does not appear&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 particleConsistency&lt;br /&gt;
    // bp2010 GetDirectionFeatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -GetDirectionFeatures ... Generates three KWM loadable files that have directionality features with respect to X, Y and Z directions&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetDirectionFeatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -closestPoint &amp;lt;InputAttributeFile1&amp;gt; &amp;lt;InputMesh2&amp;gt;   Computes interpolated attribute file (output file) for second mesh using closest point interpolation between two input meshes&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -extractVertices &amp;lt;YLocationAttributeFile.txt&amp;gt; &amp;lt;ZLocationAttributeFile.txt&amp;gt;  Extract points and write 3 different files listing respectively X, Y and Z values&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -mean &amp;lt;AttributeFile2&amp;gt; &amp;lt;AttributeFile3&amp;gt;... Compute mean scalar attribute file (assuming same number of vertices)&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //cx2011 cart2bary&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -cart2bary &amp;lt;vtkPointFileIn&amp;gt; Project each point in &amp;lt;vtkPointFileIn&amp;gt; onto the &amp;lt;inputmesh&amp;gt; and then calculate the Barycentric coordinate of the projected point, output to &amp;lt;OutputFileName&amp;gt;&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
    //bp2011&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -attSTD &amp;lt;attribute_file2&amp;gt; &amp;lt;attribute_file2&amp;gt; ...&amp;lt;attribute_fileN&amp;gt; ... Compute std for a collection of vector or scalar files&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -VTKtolpts  ... Create a particle file out of a triangulated VTK mesh&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2012&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -relaxPolygons iterations... Mesh relaxation based in vtkWindowedSincPolyDataFilter&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -decimateMesh &amp;lt;target reduction&amp;gt; ... Mesh decimation, reducing the number of points. Target reduction is a value from 0..1 that indicates in what % vertices should be reduced&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //mst2013&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -listPointData    lists info about all the VTK point Data in the vtk file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -PointDataOp &amp;lt;name&amp;gt; &amp;lt;op&amp;gt; &amp;lt;val&amp;gt;   &amp;lt;name&amp;gt;: name of point data, &amp;quot; &amp;lt;&amp;lt; std::endl&lt;br /&gt;
	      &amp;lt;&amp;lt; &amp;quot;     &amp;lt;op&amp;gt;: [threshBelow | sub]  threshBelow: set to 0 all data below &amp;lt;value&amp;gt;, sub: subtract value&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2013&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -translateMesh &amp;lt;tx_DimX&amp;gt; &amp;lt;tx_DimY&amp;gt; &amp;lt;tx_DimZ&amp;gt; ,  translates a mesh for a given amount &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2015&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -lookupPointData &amp;lt;csv_lookup&amp;gt; &amp;lt;scalar_field_name&amp;gt;,  substitutes scalar values in a given scalar field based on an input lookup &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2016&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -volumePolyData,  provides volume count for the PolyData through the std output. NOTE: Only in closed surfaces.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    &lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -verbose                   Verbose output&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    return 0;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61093</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61093"/>
		<updated>2019-04-26T18:27:27Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: /* Current MeshMath functionality */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* TBD engineer&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
* [http://insight-journal.org/browse/publication/106 KWMeshVisu]: Legacy mesh viewer from the Styner Lab.&lt;br /&gt;
* Types of Mesh Operations:&lt;br /&gt;
** Multiple Mesh (2+) &lt;br /&gt;
** Single Mesh&lt;br /&gt;
** MeshToVolume&lt;br /&gt;
** MeshScalar to Mesh&lt;br /&gt;
** MeshScalar to MeshScalar&lt;br /&gt;
** MeshScalar Operation&lt;br /&gt;
&lt;br /&gt;
== Initial discussions ==&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
=== Current MeshMath functionality ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; subtract: Subtract mesh from inputmesh, write a KWMeshVisu readable text file&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: Multiple Mesh&lt;br /&gt;
* To-do: NOT KEEP. This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; magnitude: Magnitude of the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: ?&lt;br /&gt;
* To-do: NOT KEEP. It seems this is very specific to a certain application&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; scaleMVA: Scales the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: ?&lt;br /&gt;
* To-do: NOT KEEP. It seems this is very specific to a certain application&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; scaleMesh : Scales the input mesh file&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: SingleMesh &lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; avgMesh : Compute the average mesh from inputmesh file1, file2...&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: Multiple Mesh &lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; ave : Compute the average vector field from file1, file2... generated with -substract&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: Multiple Mesh (also MeshScalar Operation) &lt;br /&gt;
* To-do: KEEP. Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; normave : Works as the \&amp;quot;-ave\&amp;quot; option, but the average vector are projected on the normal at each point&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: Multiple Mesh (also MeshScalar Operation) &lt;br /&gt;
* To-do: KEEP. Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging/projecting into normals and creating a new scalar map. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; InvVect:     Invert all the vectors created with the -substract option and write a KWMeshVisu readable file&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: MeshScalar Operation &lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; magdir &amp;lt;VectorFile&amp;gt;  Compute the signed magnitude of each of the vector from the vector field.(+ if in the normal direction, - otherwise)&amp;lt;/big&amp;gt; \&lt;br /&gt;
&lt;br /&gt;
* Type: Single Mesh&lt;br /&gt;
* To-do: NOT KEEP. This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; magNormDir &amp;lt;VectorFile&amp;gt; Compute the signed magnitude of the normal projection of the vector field&amp;quot;   &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Type: Single Mesh&lt;br /&gt;
* To-do: NOT KEEP. This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; applyVec &amp;lt;VectorFile&amp;gt; Deforme the mesh according to the vector field specified as input &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Type: Single Mesh&lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; meshValues                Find the points and cells in a mesh. The outputfile is a textfile with the values &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Type: Single Mesh&lt;br /&gt;
* To-do: KEEP. Export through CSV&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; avgGaussMesh &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt; ... -gaussMeshPara &amp;lt;mean&amp;gt;,&amp;lt;stdev&amp;gt;,&amp;lt;val1&amp;gt;,&amp;lt;val2&amp;gt;,... Compute the gaussian average for mesh files.&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Type: Multiple Mesh&lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;   The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -avgGaussKWM &amp;lt;txtfile1&amp;gt; &amp;lt;txtfile2&amp;gt;... -gaussKWMPara &amp;lt;mean&amp;gt;,&amp;lt;stdev&amp;gt;,&amp;lt;val1&amp;gt;,&amp;lt;val2&amp;gt;,... &amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Compute the gaussian average for KWMeshVisu files.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;  The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -alignMesh &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt;... Align all of the meshes to the inputmesh (== MeshFile0) using Procrustes alignment [-scalingOn] &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; endl;&lt;br /&gt;
    //bp 2016&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -alignMeshICP &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt;... Align all of the meshes to the inputmesh (== MeshFile0) using IterativeClosestPoints (no correspondence required) &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; endl;&lt;br /&gt;
    //bp 2016&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -BadTriangle &amp;lt;thresh value&amp;gt; [-correctMesh correctFilename] &amp;quot;  &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;  Find the bad triangles in a Mesh. The &amp;lt;thresh value&amp;gt; is the value of the threshFactor to calculate the standard deviation for the bad triangles. The output is a KWMeshVisu text file with the values of the average of the triangles of the mesh &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  To have a new Mesh with the correct triangles -correctMesh &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -extraction extractFilename [-extractClosest] [-nn]&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;  To extract an attribute.The Input is the Mesh, the extractFilename is the attribute image and the Output is a KWMeshVisu text file with the attribute extraction&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  [-extractClosest]: extract closest attribute&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  [-nn]: nearest neighbor interpolation (default: linear)&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -value &amp;lt;file1&amp;gt; &amp;lt;file2&amp;gt;... &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot;  Extract the 5th column from a textfile and write a KWMeshVisu file with the values obtained&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -subKWM &amp;lt;textname&amp;gt;       Difference between 2 KWMeshVisu files&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -MaxColor &amp;lt;textfile&amp;gt;...  Compare each point in every files, find a max for every points, keep 5% near the max, the other values will be 0&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -dist_absolute &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;...  -result_absolute &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;... Absolute distance map between KWMeshVisu files&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -dist_relative &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;...  -result_relative &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;... Relative distance map between KWMeshVisu files (values between -1 &amp;amp; 1)&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -label &amp;lt;textfile&amp;gt;      Separate every labels, find the mean...&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -color -val &amp;lt;number_of_label&amp;gt;,&amp;lt;value_label&amp;gt;... -oldval &amp;lt;number_of_old_label&amp;gt;,&amp;lt;old_value_label&amp;gt;...&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  To change the value of labels to see the evolution with KWMeshVisu. &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Value_label is when the label grow up. &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Old_value_label is for the label wich has already grown up.&amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -first &amp;lt;textfile&amp;gt;...   Convert a column file into a line file with a comma between each value&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // cchou MC2Origin&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -MC2Origin       Translate the Center of Mass to the Origin&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsKWM&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -avgOneKWM       Computes the avg of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -medianOneKWM    Computes the min of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -minOneKWM       Computes the min of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -maxOneKWM       Computes the max of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -per1OneKWM      Computes the 1% percentile of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -per99OneKWM     Computes the 99% percentile of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsKWM&lt;br /&gt;
    // bp2009 FillHole&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -FillHole        Fills up a hole in a open mesh.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;      If more than one hole exists, this operation might have to be repeated.&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 FillHole&lt;br /&gt;
    // bp2009 BordersOut&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -BordersOut      Outputs the borders of a mesh (if there).&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 BordersOut&lt;br /&gt;
    // bp2009 IsOpen&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -IsOpen          Gives back an integer defining whether the mesh is open or not&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 IsOpen&lt;br /&gt;
    // bp2009 CleanMesh&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -CleanMesh       Re-mesh the input mesh and gives back a new clean mesh without degenerated triangles&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 CleanMesh&lt;br /&gt;
    // bp2009 SmoothMesh&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -SmoothMesh iterations    Gives back a Laplacian smoothed surface&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;          Iterations defines how many times the Laplacian is applied.&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 SmoothMesh&lt;br /&gt;
    // bp2009 FilterNormals&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -FilterNormals direction &amp;lt;MeshFileVTK&amp;gt; &amp;lt;MeshFileVTKOut&amp;gt;  ... Changes homogeneously normals of the polygons in a mesh&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;               direction= [1] normals outwards [-1] normals inwards&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 FilterNormals&lt;br /&gt;
    // bp2009 StatsROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -statsROI &amp;lt;txtROIFileIn&amp;gt;   Process a KWMeshVisu file, given a ROI Mask&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;       Outputs a new KWMeshVisu only with the info in the mask&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsROI&lt;br /&gt;
    // bp2009 KWMtoPolyData&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -KWMtoPolyData &amp;lt;txtFileIn&amp;gt; &amp;lt;nameScalarField&amp;gt;   Writes a KWM scalar field (N Dimensions) into a PolyData Field Data Scalar to visualize in Slicer&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 KWMtoPolyData&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -FSAscData &amp;lt;FreeSurferASCIIfile&amp;gt; &amp;lt;nameScalarField&amp;gt;   Extracts a curvature/thickness etc information from a FreeSurfer style scalar file and adds it as attribute to the vtk mesh for visualization. FS format is line-by-line, no header, with each line 'point-id vertex-x vertex-y vertex-z scalar-prop' &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // styner2015 FSAscData&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -significanceLevel &amp;lt;double&amp;gt; the min Pvalue for the Pval ColorMap &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
    // bp2009 ProcessROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -processROI &amp;lt;txtROIFileIn&amp;gt; &amp;lt;MeshFileIn&amp;gt;  ... [TEMP - do not know where to put this]&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;   Gets stats for a distances ROI map&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 ProcessROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -surfaceArea &amp;lt;AttributeFile&amp;gt;   Computes surface area in a txt file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -lobarSurfaceArea &amp;lt;ParcellationAttributeFile&amp;gt;   Computes lobar surface area (output: csv file)&amp;quot;&amp;lt;&amp;lt;std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -variance &amp;lt;AttributeFile2&amp;gt; &amp;lt;AttributeFile3&amp;gt;...   Compute variance across population&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetCurvatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -GetCurvatures &amp;lt;txtFileOut_C&amp;gt; &amp;lt;txtFileOut_S&amp;gt; &amp;lt;txtFileOut_Gauss&amp;gt; &amp;lt;txtFileOut_mean&amp;gt;... Gets an assorted set of curvature measurements:&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;   Koenderink curvature values for an input mesh (shape index = S, curvedness = C), Gaussian Curvature and Mean Curvature&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetCurvatures&lt;br /&gt;
    // bp2010 particleConsistency&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -particleConsistency &amp;lt;vtkFileIn_1&amp;gt; &amp;lt;lptsFileIn_1&amp;gt; ... &amp;lt;vtkFileIn_n&amp;gt; &amp;lt;lptsFileIn_n&amp;gt; ... Generates new particle files where fliped particles does not appear&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 particleConsistency&lt;br /&gt;
    // bp2010 GetDirectionFeatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -GetDirectionFeatures ... Generates three KWM loadable files that have directionality features with respect to X, Y and Z directions&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetDirectionFeatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -closestPoint &amp;lt;InputAttributeFile1&amp;gt; &amp;lt;InputMesh2&amp;gt;   Computes interpolated attribute file (output file) for second mesh using closest point interpolation between two input meshes&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -extractVertices &amp;lt;YLocationAttributeFile.txt&amp;gt; &amp;lt;ZLocationAttributeFile.txt&amp;gt;  Extract points and write 3 different files listing respectively X, Y and Z values&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -mean &amp;lt;AttributeFile2&amp;gt; &amp;lt;AttributeFile3&amp;gt;... Compute mean scalar attribute file (assuming same number of vertices)&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //cx2011 cart2bary&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -cart2bary &amp;lt;vtkPointFileIn&amp;gt; Project each point in &amp;lt;vtkPointFileIn&amp;gt; onto the &amp;lt;inputmesh&amp;gt; and then calculate the Barycentric coordinate of the projected point, output to &amp;lt;OutputFileName&amp;gt;&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
    //bp2011&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -attSTD &amp;lt;attribute_file2&amp;gt; &amp;lt;attribute_file2&amp;gt; ...&amp;lt;attribute_fileN&amp;gt; ... Compute std for a collection of vector or scalar files&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -VTKtolpts  ... Create a particle file out of a triangulated VTK mesh&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2012&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -relaxPolygons iterations... Mesh relaxation based in vtkWindowedSincPolyDataFilter&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -decimateMesh &amp;lt;target reduction&amp;gt; ... Mesh decimation, reducing the number of points. Target reduction is a value from 0..1 that indicates in what % vertices should be reduced&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //mst2013&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -listPointData    lists info about all the VTK point Data in the vtk file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -PointDataOp &amp;lt;name&amp;gt; &amp;lt;op&amp;gt; &amp;lt;val&amp;gt;   &amp;lt;name&amp;gt;: name of point data, &amp;quot; &amp;lt;&amp;lt; std::endl&lt;br /&gt;
	      &amp;lt;&amp;lt; &amp;quot;     &amp;lt;op&amp;gt;: [threshBelow | sub]  threshBelow: set to 0 all data below &amp;lt;value&amp;gt;, sub: subtract value&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2013&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -translateMesh &amp;lt;tx_DimX&amp;gt; &amp;lt;tx_DimY&amp;gt; &amp;lt;tx_DimZ&amp;gt; ,  translates a mesh for a given amount &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2015&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -lookupPointData &amp;lt;csv_lookup&amp;gt; &amp;lt;scalar_field_name&amp;gt;,  substitutes scalar values in a given scalar field based on an input lookup &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2016&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -volumePolyData,  provides volume count for the PolyData through the std output. NOTE: Only in closed surfaces.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    &lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -verbose                   Verbose output&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    return 0;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61091</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61091"/>
		<updated>2019-04-26T18:23:18Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: /* Current MeshMath functionality */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* TBD engineer&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
* [http://insight-journal.org/browse/publication/106 KWMeshVisu]: Legacy mesh viewer from the Styner Lab.&lt;br /&gt;
* Types of Mesh Operations:&lt;br /&gt;
** Multiple Mesh (2+) &lt;br /&gt;
** Single Mesh&lt;br /&gt;
** MeshToVolume&lt;br /&gt;
** MeshScalar to Mesh&lt;br /&gt;
** MeshScalar to MeshScalar&lt;br /&gt;
** MeshScalar Operation&lt;br /&gt;
&lt;br /&gt;
== Initial discussions ==&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
=== Current MeshMath functionality ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; subtract: Subtract mesh from inputmesh, write a KWMeshVisu readable text file&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: Multiple Mesh&lt;br /&gt;
* To-do: NOT KEEP. This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; magnitude: Magnitude of the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: ?&lt;br /&gt;
* To-do: NOT KEEP. It seems this is very specific to a certain application&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; scaleMVA: Scales the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: ?&lt;br /&gt;
* To-do: NOT KEEP. It seems this is very specific to a certain application&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; scaleMesh : Scales the input mesh file&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: SingleMesh &lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; avgMesh : Compute the average mesh from inputmesh file1, file2...&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: Multiple Mesh &lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; ave : Compute the average vector field from file1, file2... generated with -substract&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: Multiple Mesh (also MeshScalar Operation) &lt;br /&gt;
* To-do: KEEP. Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; normave : Works as the \&amp;quot;-ave\&amp;quot; option, but the average vector are projected on the normal at each point&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: Multiple Mesh (also MeshScalar Operation) &lt;br /&gt;
* To-do: KEEP. Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging/projecting into normals and creating a new scalar map. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; InvVect:     Invert all the vectors created with the -substract option and write a KWMeshVisu readable file&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: MeshScalar Operation &lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
magdir &amp;lt;VectorFile&amp;gt;  Compute the signed magnitude of each of the vector from the vector field.(+ if in the normal direction, - otherwise)&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -magNormDir &amp;lt;VectorFile&amp;gt; Compute the signed magnitude of the normal projection of the vector field&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -applyVec &amp;lt;VectorFile&amp;gt; Deforme the mesh according to the vector field specified as input&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -meshValues                Find the points and cells in a mesh. The outputfile is a textfile with the values&amp;quot;&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -avgGaussMesh &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt; ... -gaussMeshPara &amp;lt;mean&amp;gt;,&amp;lt;stdev&amp;gt;,&amp;lt;val1&amp;gt;,&amp;lt;val2&amp;gt;,... &amp;quot;&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;   Compute the gaussian average for mesh files.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;   The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -avgGaussKWM &amp;lt;txtfile1&amp;gt; &amp;lt;txtfile2&amp;gt;... -gaussKWMPara &amp;lt;mean&amp;gt;,&amp;lt;stdev&amp;gt;,&amp;lt;val1&amp;gt;,&amp;lt;val2&amp;gt;,... &amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Compute the gaussian average for KWMeshVisu files.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;  The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -alignMesh &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt;... Align all of the meshes to the inputmesh (== MeshFile0) using Procrustes alignment [-scalingOn] &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; endl;&lt;br /&gt;
    //bp 2016&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -alignMeshICP &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt;... Align all of the meshes to the inputmesh (== MeshFile0) using IterativeClosestPoints (no correspondence required) &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; endl;&lt;br /&gt;
    //bp 2016&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -BadTriangle &amp;lt;thresh value&amp;gt; [-correctMesh correctFilename] &amp;quot;  &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;  Find the bad triangles in a Mesh. The &amp;lt;thresh value&amp;gt; is the value of the threshFactor to calculate the standard deviation for the bad triangles. The output is a KWMeshVisu text file with the values of the average of the triangles of the mesh &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  To have a new Mesh with the correct triangles -correctMesh &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -extraction extractFilename [-extractClosest] [-nn]&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;  To extract an attribute.The Input is the Mesh, the extractFilename is the attribute image and the Output is a KWMeshVisu text file with the attribute extraction&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  [-extractClosest]: extract closest attribute&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  [-nn]: nearest neighbor interpolation (default: linear)&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -value &amp;lt;file1&amp;gt; &amp;lt;file2&amp;gt;... &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot;  Extract the 5th column from a textfile and write a KWMeshVisu file with the values obtained&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -subKWM &amp;lt;textname&amp;gt;       Difference between 2 KWMeshVisu files&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -MaxColor &amp;lt;textfile&amp;gt;...  Compare each point in every files, find a max for every points, keep 5% near the max, the other values will be 0&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -dist_absolute &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;...  -result_absolute &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;... Absolute distance map between KWMeshVisu files&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -dist_relative &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;...  -result_relative &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;... Relative distance map between KWMeshVisu files (values between -1 &amp;amp; 1)&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -label &amp;lt;textfile&amp;gt;      Separate every labels, find the mean...&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -color -val &amp;lt;number_of_label&amp;gt;,&amp;lt;value_label&amp;gt;... -oldval &amp;lt;number_of_old_label&amp;gt;,&amp;lt;old_value_label&amp;gt;...&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  To change the value of labels to see the evolution with KWMeshVisu. &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Value_label is when the label grow up. &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Old_value_label is for the label wich has already grown up.&amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -first &amp;lt;textfile&amp;gt;...   Convert a column file into a line file with a comma between each value&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // cchou MC2Origin&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -MC2Origin       Translate the Center of Mass to the Origin&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsKWM&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -avgOneKWM       Computes the avg of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -medianOneKWM    Computes the min of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -minOneKWM       Computes the min of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -maxOneKWM       Computes the max of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -per1OneKWM      Computes the 1% percentile of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -per99OneKWM     Computes the 99% percentile of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsKWM&lt;br /&gt;
    // bp2009 FillHole&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -FillHole        Fills up a hole in a open mesh.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;      If more than one hole exists, this operation might have to be repeated.&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 FillHole&lt;br /&gt;
    // bp2009 BordersOut&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -BordersOut      Outputs the borders of a mesh (if there).&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 BordersOut&lt;br /&gt;
    // bp2009 IsOpen&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -IsOpen          Gives back an integer defining whether the mesh is open or not&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 IsOpen&lt;br /&gt;
    // bp2009 CleanMesh&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -CleanMesh       Re-mesh the input mesh and gives back a new clean mesh without degenerated triangles&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 CleanMesh&lt;br /&gt;
    // bp2009 SmoothMesh&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -SmoothMesh iterations    Gives back a Laplacian smoothed surface&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;          Iterations defines how many times the Laplacian is applied.&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 SmoothMesh&lt;br /&gt;
    // bp2009 FilterNormals&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -FilterNormals direction &amp;lt;MeshFileVTK&amp;gt; &amp;lt;MeshFileVTKOut&amp;gt;  ... Changes homogeneously normals of the polygons in a mesh&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;               direction= [1] normals outwards [-1] normals inwards&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 FilterNormals&lt;br /&gt;
    // bp2009 StatsROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -statsROI &amp;lt;txtROIFileIn&amp;gt;   Process a KWMeshVisu file, given a ROI Mask&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;       Outputs a new KWMeshVisu only with the info in the mask&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsROI&lt;br /&gt;
    // bp2009 KWMtoPolyData&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -KWMtoPolyData &amp;lt;txtFileIn&amp;gt; &amp;lt;nameScalarField&amp;gt;   Writes a KWM scalar field (N Dimensions) into a PolyData Field Data Scalar to visualize in Slicer&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 KWMtoPolyData&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -FSAscData &amp;lt;FreeSurferASCIIfile&amp;gt; &amp;lt;nameScalarField&amp;gt;   Extracts a curvature/thickness etc information from a FreeSurfer style scalar file and adds it as attribute to the vtk mesh for visualization. FS format is line-by-line, no header, with each line 'point-id vertex-x vertex-y vertex-z scalar-prop' &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // styner2015 FSAscData&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -significanceLevel &amp;lt;double&amp;gt; the min Pvalue for the Pval ColorMap &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
    // bp2009 ProcessROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -processROI &amp;lt;txtROIFileIn&amp;gt; &amp;lt;MeshFileIn&amp;gt;  ... [TEMP - do not know where to put this]&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;   Gets stats for a distances ROI map&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 ProcessROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -surfaceArea &amp;lt;AttributeFile&amp;gt;   Computes surface area in a txt file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -lobarSurfaceArea &amp;lt;ParcellationAttributeFile&amp;gt;   Computes lobar surface area (output: csv file)&amp;quot;&amp;lt;&amp;lt;std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -variance &amp;lt;AttributeFile2&amp;gt; &amp;lt;AttributeFile3&amp;gt;...   Compute variance across population&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetCurvatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -GetCurvatures &amp;lt;txtFileOut_C&amp;gt; &amp;lt;txtFileOut_S&amp;gt; &amp;lt;txtFileOut_Gauss&amp;gt; &amp;lt;txtFileOut_mean&amp;gt;... Gets an assorted set of curvature measurements:&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;   Koenderink curvature values for an input mesh (shape index = S, curvedness = C), Gaussian Curvature and Mean Curvature&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetCurvatures&lt;br /&gt;
    // bp2010 particleConsistency&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -particleConsistency &amp;lt;vtkFileIn_1&amp;gt; &amp;lt;lptsFileIn_1&amp;gt; ... &amp;lt;vtkFileIn_n&amp;gt; &amp;lt;lptsFileIn_n&amp;gt; ... Generates new particle files where fliped particles does not appear&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 particleConsistency&lt;br /&gt;
    // bp2010 GetDirectionFeatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -GetDirectionFeatures ... Generates three KWM loadable files that have directionality features with respect to X, Y and Z directions&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetDirectionFeatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -closestPoint &amp;lt;InputAttributeFile1&amp;gt; &amp;lt;InputMesh2&amp;gt;   Computes interpolated attribute file (output file) for second mesh using closest point interpolation between two input meshes&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -extractVertices &amp;lt;YLocationAttributeFile.txt&amp;gt; &amp;lt;ZLocationAttributeFile.txt&amp;gt;  Extract points and write 3 different files listing respectively X, Y and Z values&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -mean &amp;lt;AttributeFile2&amp;gt; &amp;lt;AttributeFile3&amp;gt;... Compute mean scalar attribute file (assuming same number of vertices)&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //cx2011 cart2bary&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -cart2bary &amp;lt;vtkPointFileIn&amp;gt; Project each point in &amp;lt;vtkPointFileIn&amp;gt; onto the &amp;lt;inputmesh&amp;gt; and then calculate the Barycentric coordinate of the projected point, output to &amp;lt;OutputFileName&amp;gt;&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
    //bp2011&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -attSTD &amp;lt;attribute_file2&amp;gt; &amp;lt;attribute_file2&amp;gt; ...&amp;lt;attribute_fileN&amp;gt; ... Compute std for a collection of vector or scalar files&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -VTKtolpts  ... Create a particle file out of a triangulated VTK mesh&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2012&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -relaxPolygons iterations... Mesh relaxation based in vtkWindowedSincPolyDataFilter&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -decimateMesh &amp;lt;target reduction&amp;gt; ... Mesh decimation, reducing the number of points. Target reduction is a value from 0..1 that indicates in what % vertices should be reduced&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //mst2013&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -listPointData    lists info about all the VTK point Data in the vtk file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -PointDataOp &amp;lt;name&amp;gt; &amp;lt;op&amp;gt; &amp;lt;val&amp;gt;   &amp;lt;name&amp;gt;: name of point data, &amp;quot; &amp;lt;&amp;lt; std::endl&lt;br /&gt;
	      &amp;lt;&amp;lt; &amp;quot;     &amp;lt;op&amp;gt;: [threshBelow | sub]  threshBelow: set to 0 all data below &amp;lt;value&amp;gt;, sub: subtract value&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2013&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -translateMesh &amp;lt;tx_DimX&amp;gt; &amp;lt;tx_DimY&amp;gt; &amp;lt;tx_DimZ&amp;gt; ,  translates a mesh for a given amount &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2015&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -lookupPointData &amp;lt;csv_lookup&amp;gt; &amp;lt;scalar_field_name&amp;gt;,  substitutes scalar values in a given scalar field based on an input lookup &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2016&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -volumePolyData,  provides volume count for the PolyData through the std output. NOTE: Only in closed surfaces.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    &lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -verbose                   Verbose output&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    return 0;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61090</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61090"/>
		<updated>2019-04-26T18:22:31Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* TBD engineer&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
* [http://insight-journal.org/browse/publication/106 KWMeshVisu]: Legacy mesh viewer from the Styner Lab.&lt;br /&gt;
* Types of Mesh Operations:&lt;br /&gt;
** Multiple Mesh (2+) &lt;br /&gt;
** Single Mesh&lt;br /&gt;
** MeshToVolume&lt;br /&gt;
** MeshScalar to Mesh&lt;br /&gt;
** MeshScalar to MeshScalar&lt;br /&gt;
** MeshScalar Operation&lt;br /&gt;
&lt;br /&gt;
== Initial discussions ==&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
=== Current MeshMath functionality ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; subtract: &amp;quot;Subtract mesh from inputmesh, write a KWMeshVisu readable text file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: Multiple Mesh&lt;br /&gt;
* To-do: NOT KEEP. This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; magnitude: &amp;quot;Magnitude of the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: ?&lt;br /&gt;
* To-do: NOT KEEP. It seems this is very specific to a certain application&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; scaleMVA: &amp;quot;Scales the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: ?&lt;br /&gt;
* To-do: NOT KEEP. It seems this is very specific to a certain application&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; scaleMesh : &amp;quot;Scales the input mesh file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: SingleMesh &lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; avgMesh : &amp;quot;Compute the average mesh from inputmesh file1, file2...&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: Multiple Mesh &lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; ave : &amp;quot;Compute the average vector field from file1, file2... generated with -substract&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: Multiple Mesh (also MeshScalar Operation) &lt;br /&gt;
* To-do: KEEP. Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; normave : &amp;quot;Works as the \&amp;quot;-ave\&amp;quot; option, but the average vector are projected on the normal at each point &amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: Multiple Mesh (also MeshScalar Operation) &lt;br /&gt;
* To-do: KEEP. Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging/projecting into normals and creating a new scalar map. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; InvVect:     Invert all the vectors created with the -substract option and write a KWMeshVisu readable file&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: MeshScalar Operation &lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
magdir &amp;lt;VectorFile&amp;gt;  Compute the signed magnitude of each of the vector from the vector field.(+ if in the normal direction, - otherwise)&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -magNormDir &amp;lt;VectorFile&amp;gt; Compute the signed magnitude of the normal projection of the vector field&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -applyVec &amp;lt;VectorFile&amp;gt; Deforme the mesh according to the vector field specified as input&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -meshValues                Find the points and cells in a mesh. The outputfile is a textfile with the values&amp;quot;&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -avgGaussMesh &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt; ... -gaussMeshPara &amp;lt;mean&amp;gt;,&amp;lt;stdev&amp;gt;,&amp;lt;val1&amp;gt;,&amp;lt;val2&amp;gt;,... &amp;quot;&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;   Compute the gaussian average for mesh files.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;   The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -avgGaussKWM &amp;lt;txtfile1&amp;gt; &amp;lt;txtfile2&amp;gt;... -gaussKWMPara &amp;lt;mean&amp;gt;,&amp;lt;stdev&amp;gt;,&amp;lt;val1&amp;gt;,&amp;lt;val2&amp;gt;,... &amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Compute the gaussian average for KWMeshVisu files.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;  The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -alignMesh &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt;... Align all of the meshes to the inputmesh (== MeshFile0) using Procrustes alignment [-scalingOn] &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; endl;&lt;br /&gt;
    //bp 2016&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -alignMeshICP &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt;... Align all of the meshes to the inputmesh (== MeshFile0) using IterativeClosestPoints (no correspondence required) &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; endl;&lt;br /&gt;
    //bp 2016&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -BadTriangle &amp;lt;thresh value&amp;gt; [-correctMesh correctFilename] &amp;quot;  &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;  Find the bad triangles in a Mesh. The &amp;lt;thresh value&amp;gt; is the value of the threshFactor to calculate the standard deviation for the bad triangles. The output is a KWMeshVisu text file with the values of the average of the triangles of the mesh &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  To have a new Mesh with the correct triangles -correctMesh &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -extraction extractFilename [-extractClosest] [-nn]&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;  To extract an attribute.The Input is the Mesh, the extractFilename is the attribute image and the Output is a KWMeshVisu text file with the attribute extraction&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  [-extractClosest]: extract closest attribute&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  [-nn]: nearest neighbor interpolation (default: linear)&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -value &amp;lt;file1&amp;gt; &amp;lt;file2&amp;gt;... &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot;  Extract the 5th column from a textfile and write a KWMeshVisu file with the values obtained&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -subKWM &amp;lt;textname&amp;gt;       Difference between 2 KWMeshVisu files&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -MaxColor &amp;lt;textfile&amp;gt;...  Compare each point in every files, find a max for every points, keep 5% near the max, the other values will be 0&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -dist_absolute &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;...  -result_absolute &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;... Absolute distance map between KWMeshVisu files&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -dist_relative &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;...  -result_relative &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;... Relative distance map between KWMeshVisu files (values between -1 &amp;amp; 1)&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -label &amp;lt;textfile&amp;gt;      Separate every labels, find the mean...&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -color -val &amp;lt;number_of_label&amp;gt;,&amp;lt;value_label&amp;gt;... -oldval &amp;lt;number_of_old_label&amp;gt;,&amp;lt;old_value_label&amp;gt;...&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  To change the value of labels to see the evolution with KWMeshVisu. &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Value_label is when the label grow up. &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Old_value_label is for the label wich has already grown up.&amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -first &amp;lt;textfile&amp;gt;...   Convert a column file into a line file with a comma between each value&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // cchou MC2Origin&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -MC2Origin       Translate the Center of Mass to the Origin&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsKWM&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -avgOneKWM       Computes the avg of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -medianOneKWM    Computes the min of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -minOneKWM       Computes the min of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -maxOneKWM       Computes the max of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -per1OneKWM      Computes the 1% percentile of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -per99OneKWM     Computes the 99% percentile of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsKWM&lt;br /&gt;
    // bp2009 FillHole&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -FillHole        Fills up a hole in a open mesh.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;      If more than one hole exists, this operation might have to be repeated.&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 FillHole&lt;br /&gt;
    // bp2009 BordersOut&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -BordersOut      Outputs the borders of a mesh (if there).&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 BordersOut&lt;br /&gt;
    // bp2009 IsOpen&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -IsOpen          Gives back an integer defining whether the mesh is open or not&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 IsOpen&lt;br /&gt;
    // bp2009 CleanMesh&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -CleanMesh       Re-mesh the input mesh and gives back a new clean mesh without degenerated triangles&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 CleanMesh&lt;br /&gt;
    // bp2009 SmoothMesh&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -SmoothMesh iterations    Gives back a Laplacian smoothed surface&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;          Iterations defines how many times the Laplacian is applied.&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 SmoothMesh&lt;br /&gt;
    // bp2009 FilterNormals&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -FilterNormals direction &amp;lt;MeshFileVTK&amp;gt; &amp;lt;MeshFileVTKOut&amp;gt;  ... Changes homogeneously normals of the polygons in a mesh&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;               direction= [1] normals outwards [-1] normals inwards&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 FilterNormals&lt;br /&gt;
    // bp2009 StatsROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -statsROI &amp;lt;txtROIFileIn&amp;gt;   Process a KWMeshVisu file, given a ROI Mask&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;       Outputs a new KWMeshVisu only with the info in the mask&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsROI&lt;br /&gt;
    // bp2009 KWMtoPolyData&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -KWMtoPolyData &amp;lt;txtFileIn&amp;gt; &amp;lt;nameScalarField&amp;gt;   Writes a KWM scalar field (N Dimensions) into a PolyData Field Data Scalar to visualize in Slicer&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 KWMtoPolyData&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -FSAscData &amp;lt;FreeSurferASCIIfile&amp;gt; &amp;lt;nameScalarField&amp;gt;   Extracts a curvature/thickness etc information from a FreeSurfer style scalar file and adds it as attribute to the vtk mesh for visualization. FS format is line-by-line, no header, with each line 'point-id vertex-x vertex-y vertex-z scalar-prop' &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // styner2015 FSAscData&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -significanceLevel &amp;lt;double&amp;gt; the min Pvalue for the Pval ColorMap &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
    // bp2009 ProcessROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -processROI &amp;lt;txtROIFileIn&amp;gt; &amp;lt;MeshFileIn&amp;gt;  ... [TEMP - do not know where to put this]&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;   Gets stats for a distances ROI map&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 ProcessROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -surfaceArea &amp;lt;AttributeFile&amp;gt;   Computes surface area in a txt file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -lobarSurfaceArea &amp;lt;ParcellationAttributeFile&amp;gt;   Computes lobar surface area (output: csv file)&amp;quot;&amp;lt;&amp;lt;std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -variance &amp;lt;AttributeFile2&amp;gt; &amp;lt;AttributeFile3&amp;gt;...   Compute variance across population&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetCurvatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -GetCurvatures &amp;lt;txtFileOut_C&amp;gt; &amp;lt;txtFileOut_S&amp;gt; &amp;lt;txtFileOut_Gauss&amp;gt; &amp;lt;txtFileOut_mean&amp;gt;... Gets an assorted set of curvature measurements:&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;   Koenderink curvature values for an input mesh (shape index = S, curvedness = C), Gaussian Curvature and Mean Curvature&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetCurvatures&lt;br /&gt;
    // bp2010 particleConsistency&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -particleConsistency &amp;lt;vtkFileIn_1&amp;gt; &amp;lt;lptsFileIn_1&amp;gt; ... &amp;lt;vtkFileIn_n&amp;gt; &amp;lt;lptsFileIn_n&amp;gt; ... Generates new particle files where fliped particles does not appear&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 particleConsistency&lt;br /&gt;
    // bp2010 GetDirectionFeatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -GetDirectionFeatures ... Generates three KWM loadable files that have directionality features with respect to X, Y and Z directions&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetDirectionFeatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -closestPoint &amp;lt;InputAttributeFile1&amp;gt; &amp;lt;InputMesh2&amp;gt;   Computes interpolated attribute file (output file) for second mesh using closest point interpolation between two input meshes&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -extractVertices &amp;lt;YLocationAttributeFile.txt&amp;gt; &amp;lt;ZLocationAttributeFile.txt&amp;gt;  Extract points and write 3 different files listing respectively X, Y and Z values&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -mean &amp;lt;AttributeFile2&amp;gt; &amp;lt;AttributeFile3&amp;gt;... Compute mean scalar attribute file (assuming same number of vertices)&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //cx2011 cart2bary&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -cart2bary &amp;lt;vtkPointFileIn&amp;gt; Project each point in &amp;lt;vtkPointFileIn&amp;gt; onto the &amp;lt;inputmesh&amp;gt; and then calculate the Barycentric coordinate of the projected point, output to &amp;lt;OutputFileName&amp;gt;&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
    //bp2011&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -attSTD &amp;lt;attribute_file2&amp;gt; &amp;lt;attribute_file2&amp;gt; ...&amp;lt;attribute_fileN&amp;gt; ... Compute std for a collection of vector or scalar files&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -VTKtolpts  ... Create a particle file out of a triangulated VTK mesh&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2012&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -relaxPolygons iterations... Mesh relaxation based in vtkWindowedSincPolyDataFilter&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -decimateMesh &amp;lt;target reduction&amp;gt; ... Mesh decimation, reducing the number of points. Target reduction is a value from 0..1 that indicates in what % vertices should be reduced&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //mst2013&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -listPointData    lists info about all the VTK point Data in the vtk file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -PointDataOp &amp;lt;name&amp;gt; &amp;lt;op&amp;gt; &amp;lt;val&amp;gt;   &amp;lt;name&amp;gt;: name of point data, &amp;quot; &amp;lt;&amp;lt; std::endl&lt;br /&gt;
	      &amp;lt;&amp;lt; &amp;quot;     &amp;lt;op&amp;gt;: [threshBelow | sub]  threshBelow: set to 0 all data below &amp;lt;value&amp;gt;, sub: subtract value&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2013&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -translateMesh &amp;lt;tx_DimX&amp;gt; &amp;lt;tx_DimY&amp;gt; &amp;lt;tx_DimZ&amp;gt; ,  translates a mesh for a given amount &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2015&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -lookupPointData &amp;lt;csv_lookup&amp;gt; &amp;lt;scalar_field_name&amp;gt;,  substitutes scalar values in a given scalar field based on an input lookup &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2016&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -volumePolyData,  provides volume count for the PolyData through the std output. NOTE: Only in closed surfaces.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    &lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -verbose                   Verbose output&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    return 0;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61089</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61089"/>
		<updated>2019-04-26T18:21:19Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* TBD engineer&lt;br /&gt;
&lt;br /&gt;
=== Definitions ===&lt;br /&gt;
* [http://insight-journal.org/browse/publication/106 KWMeshVisu]: Legacy mesh viewer from the Styner Lab.&lt;br /&gt;
* Types of Mesh Operations:&lt;br /&gt;
** Multiple Mesh (2+) &lt;br /&gt;
** Single Mesh&lt;br /&gt;
** MeshToVolume&lt;br /&gt;
** MeshScalar to Mesh&lt;br /&gt;
** MeshScalar to MeshScalar&lt;br /&gt;
** MeshScalar Operation&lt;br /&gt;
&lt;br /&gt;
=== Initial discussions ===&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
== Current MeshMath functionality ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; subtract: &amp;quot;Subtract mesh from inputmesh, write a KWMeshVisu readable text file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: Multiple Mesh&lt;br /&gt;
* To-do: NOT KEEP. This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; magnitude: &amp;quot;Magnitude of the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: ?&lt;br /&gt;
* To-do: NOT KEEP. It seems this is very specific to a certain application&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; scaleMVA: &amp;quot;Scales the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: ?&lt;br /&gt;
* To-do: NOT KEEP. It seems this is very specific to a certain application&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; scaleMesh : &amp;quot;Scales the input mesh file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: SingleMesh &lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; avgMesh : &amp;quot;Compute the average mesh from inputmesh file1, file2...&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: Multiple Mesh &lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; ave : &amp;quot;Compute the average vector field from file1, file2... generated with -substract&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: Multiple Mesh (also MeshScalar Operation) &lt;br /&gt;
* To-do: KEEP. Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; normave : &amp;quot;Works as the \&amp;quot;-ave\&amp;quot; option, but the average vector are projected on the normal at each point &amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: Multiple Mesh (also MeshScalar Operation) &lt;br /&gt;
* To-do: KEEP. Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging/projecting into normals and creating a new scalar map. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; InvVect:     Invert all the vectors created with the -substract option and write a KWMeshVisu readable file&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: MeshScalar Operation &lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
magdir &amp;lt;VectorFile&amp;gt;  Compute the signed magnitude of each of the vector from the vector field.(+ if in the normal direction, - otherwise)&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -magNormDir &amp;lt;VectorFile&amp;gt; Compute the signed magnitude of the normal projection of the vector field&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -applyVec &amp;lt;VectorFile&amp;gt; Deforme the mesh according to the vector field specified as input&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -meshValues                Find the points and cells in a mesh. The outputfile is a textfile with the values&amp;quot;&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -avgGaussMesh &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt; ... -gaussMeshPara &amp;lt;mean&amp;gt;,&amp;lt;stdev&amp;gt;,&amp;lt;val1&amp;gt;,&amp;lt;val2&amp;gt;,... &amp;quot;&amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;   Compute the gaussian average for mesh files.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;   The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -avgGaussKWM &amp;lt;txtfile1&amp;gt; &amp;lt;txtfile2&amp;gt;... -gaussKWMPara &amp;lt;mean&amp;gt;,&amp;lt;stdev&amp;gt;,&amp;lt;val1&amp;gt;,&amp;lt;val2&amp;gt;,... &amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Compute the gaussian average for KWMeshVisu files.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;  The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -alignMesh &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt;... Align all of the meshes to the inputmesh (== MeshFile0) using Procrustes alignment [-scalingOn] &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; endl;&lt;br /&gt;
    //bp 2016&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -alignMeshICP &amp;lt;Meshfile1&amp;gt; &amp;lt;Meshfile2&amp;gt;... Align all of the meshes to the inputmesh (== MeshFile0) using IterativeClosestPoints (no correspondence required) &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; endl;&lt;br /&gt;
    //bp 2016&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -BadTriangle &amp;lt;thresh value&amp;gt; [-correctMesh correctFilename] &amp;quot;  &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;  Find the bad triangles in a Mesh. The &amp;lt;thresh value&amp;gt; is the value of the threshFactor to calculate the standard deviation for the bad triangles. The output is a KWMeshVisu text file with the values of the average of the triangles of the mesh &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  To have a new Mesh with the correct triangles -correctMesh &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -extraction extractFilename [-extractClosest] [-nn]&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;  To extract an attribute.The Input is the Mesh, the extractFilename is the attribute image and the Output is a KWMeshVisu text file with the attribute extraction&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  [-extractClosest]: extract closest attribute&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  [-nn]: nearest neighbor interpolation (default: linear)&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -value &amp;lt;file1&amp;gt; &amp;lt;file2&amp;gt;... &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot;  Extract the 5th column from a textfile and write a KWMeshVisu file with the values obtained&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -subKWM &amp;lt;textname&amp;gt;       Difference between 2 KWMeshVisu files&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -MaxColor &amp;lt;textfile&amp;gt;...  Compare each point in every files, find a max for every points, keep 5% near the max, the other values will be 0&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -dist_absolute &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;...  -result_absolute &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;... Absolute distance map between KWMeshVisu files&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -dist_relative &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;...  -result_relative &amp;lt;textfile&amp;gt;,&amp;lt;textfile&amp;gt;... Relative distance map between KWMeshVisu files (values between -1 &amp;amp; 1)&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -label &amp;lt;textfile&amp;gt;      Separate every labels, find the mean...&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -color -val &amp;lt;number_of_label&amp;gt;,&amp;lt;value_label&amp;gt;... -oldval &amp;lt;number_of_old_label&amp;gt;,&amp;lt;old_value_label&amp;gt;...&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  To change the value of labels to see the evolution with KWMeshVisu. &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Value_label is when the label grow up. &amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;  Old_value_label is for the label wich has already grown up.&amp;quot; &amp;lt;&amp;lt;  std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -first &amp;lt;textfile&amp;gt;...   Convert a column file into a line file with a comma between each value&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // cchou MC2Origin&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -MC2Origin       Translate the Center of Mass to the Origin&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsKWM&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -avgOneKWM       Computes the avg of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -medianOneKWM    Computes the min of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -minOneKWM       Computes the min of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -maxOneKWM       Computes the max of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -per1OneKWM      Computes the 1% percentile of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -per99OneKWM     Computes the 99% percentile of an input KWMeshVisu readable file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsKWM&lt;br /&gt;
    // bp2009 FillHole&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -FillHole        Fills up a hole in a open mesh.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;      If more than one hole exists, this operation might have to be repeated.&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 FillHole&lt;br /&gt;
    // bp2009 BordersOut&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -BordersOut      Outputs the borders of a mesh (if there).&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 BordersOut&lt;br /&gt;
    // bp2009 IsOpen&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -IsOpen          Gives back an integer defining whether the mesh is open or not&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 IsOpen&lt;br /&gt;
    // bp2009 CleanMesh&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt; &amp;quot; -CleanMesh       Re-mesh the input mesh and gives back a new clean mesh without degenerated triangles&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 CleanMesh&lt;br /&gt;
    // bp2009 SmoothMesh&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -SmoothMesh iterations    Gives back a Laplacian smoothed surface&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;          Iterations defines how many times the Laplacian is applied.&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 SmoothMesh&lt;br /&gt;
    // bp2009 FilterNormals&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -FilterNormals direction &amp;lt;MeshFileVTK&amp;gt; &amp;lt;MeshFileVTKOut&amp;gt;  ... Changes homogeneously normals of the polygons in a mesh&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;               direction= [1] normals outwards [-1] normals inwards&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 FilterNormals&lt;br /&gt;
    // bp2009 StatsROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -statsROI &amp;lt;txtROIFileIn&amp;gt;   Process a KWMeshVisu file, given a ROI Mask&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;       Outputs a new KWMeshVisu only with the info in the mask&amp;quot;&lt;br /&gt;
      &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 StatsROI&lt;br /&gt;
    // bp2009 KWMtoPolyData&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -KWMtoPolyData &amp;lt;txtFileIn&amp;gt; &amp;lt;nameScalarField&amp;gt;   Writes a KWM scalar field (N Dimensions) into a PolyData Field Data Scalar to visualize in Slicer&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 KWMtoPolyData&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -FSAscData &amp;lt;FreeSurferASCIIfile&amp;gt; &amp;lt;nameScalarField&amp;gt;   Extracts a curvature/thickness etc information from a FreeSurfer style scalar file and adds it as attribute to the vtk mesh for visualization. FS format is line-by-line, no header, with each line 'point-id vertex-x vertex-y vertex-z scalar-prop' &amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // styner2015 FSAscData&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -significanceLevel &amp;lt;double&amp;gt; the min Pvalue for the Pval ColorMap &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
    // bp2009 ProcessROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -processROI &amp;lt;txtROIFileIn&amp;gt; &amp;lt;MeshFileIn&amp;gt;  ... [TEMP - do not know where to put this]&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;   Gets stats for a distances ROI map&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2009 ProcessROI&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -surfaceArea &amp;lt;AttributeFile&amp;gt;   Computes surface area in a txt file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -lobarSurfaceArea &amp;lt;ParcellationAttributeFile&amp;gt;   Computes lobar surface area (output: csv file)&amp;quot;&amp;lt;&amp;lt;std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -variance &amp;lt;AttributeFile2&amp;gt; &amp;lt;AttributeFile3&amp;gt;...   Compute variance across population&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetCurvatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -GetCurvatures &amp;lt;txtFileOut_C&amp;gt; &amp;lt;txtFileOut_S&amp;gt; &amp;lt;txtFileOut_Gauss&amp;gt; &amp;lt;txtFileOut_mean&amp;gt;... Gets an assorted set of curvature measurements:&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot;   Koenderink curvature values for an input mesh (shape index = S, curvedness = C), Gaussian Curvature and Mean Curvature&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetCurvatures&lt;br /&gt;
    // bp2010 particleConsistency&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -particleConsistency &amp;lt;vtkFileIn_1&amp;gt; &amp;lt;lptsFileIn_1&amp;gt; ... &amp;lt;vtkFileIn_n&amp;gt; &amp;lt;lptsFileIn_n&amp;gt; ... Generates new particle files where fliped particles does not appear&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 particleConsistency&lt;br /&gt;
    // bp2010 GetDirectionFeatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -GetDirectionFeatures ... Generates three KWM loadable files that have directionality features with respect to X, Y and Z directions&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    // bp2010 GetDirectionFeatures&lt;br /&gt;
    std::cout&lt;br /&gt;
    &amp;lt;&amp;lt;&lt;br /&gt;
    &amp;quot; -closestPoint &amp;lt;InputAttributeFile1&amp;gt; &amp;lt;InputMesh2&amp;gt;   Computes interpolated attribute file (output file) for second mesh using closest point interpolation between two input meshes&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -extractVertices &amp;lt;YLocationAttributeFile.txt&amp;gt; &amp;lt;ZLocationAttributeFile.txt&amp;gt;  Extract points and write 3 different files listing respectively X, Y and Z values&amp;quot;&lt;br /&gt;
    &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -mean &amp;lt;AttributeFile2&amp;gt; &amp;lt;AttributeFile3&amp;gt;... Compute mean scalar attribute file (assuming same number of vertices)&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //cx2011 cart2bary&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -cart2bary &amp;lt;vtkPointFileIn&amp;gt; Project each point in &amp;lt;vtkPointFileIn&amp;gt; onto the &amp;lt;inputmesh&amp;gt; and then calculate the Barycentric coordinate of the projected point, output to &amp;lt;OutputFileName&amp;gt;&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
    //bp2011&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -attSTD &amp;lt;attribute_file2&amp;gt; &amp;lt;attribute_file2&amp;gt; ...&amp;lt;attribute_fileN&amp;gt; ... Compute std for a collection of vector or scalar files&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -VTKtolpts  ... Create a particle file out of a triangulated VTK mesh&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2012&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -relaxPolygons iterations... Mesh relaxation based in vtkWindowedSincPolyDataFilter&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -decimateMesh &amp;lt;target reduction&amp;gt; ... Mesh decimation, reducing the number of points. Target reduction is a value from 0..1 that indicates in what % vertices should be reduced&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //mst2013&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -listPointData    lists info about all the VTK point Data in the vtk file&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -PointDataOp &amp;lt;name&amp;gt; &amp;lt;op&amp;gt; &amp;lt;val&amp;gt;   &amp;lt;name&amp;gt;: name of point data, &amp;quot; &amp;lt;&amp;lt; std::endl&lt;br /&gt;
	      &amp;lt;&amp;lt; &amp;quot;     &amp;lt;op&amp;gt;: [threshBelow | sub]  threshBelow: set to 0 all data below &amp;lt;value&amp;gt;, sub: subtract value&amp;quot;   &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2013&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -translateMesh &amp;lt;tx_DimX&amp;gt; &amp;lt;tx_DimY&amp;gt; &amp;lt;tx_DimZ&amp;gt; ,  translates a mesh for a given amount &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2015&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -lookupPointData &amp;lt;csv_lookup&amp;gt; &amp;lt;scalar_field_name&amp;gt;,  substitutes scalar values in a given scalar field based on an input lookup &amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    //bp2016&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -volumePolyData,  provides volume count for the PolyData through the std output. NOTE: Only in closed surfaces.&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    &lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot; -verbose                   Verbose output&amp;quot; &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    return 0;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61088</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61088"/>
		<updated>2019-04-26T18:08:04Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: /* Definitions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* TBD engineer&lt;br /&gt;
&lt;br /&gt;
=== Definitions ===&lt;br /&gt;
* [http://insight-journal.org/browse/publication/106 KWMeshVisu]: Legacy mesh viewer from the Styner Lab.&lt;br /&gt;
* Types of Mesh Operations:&lt;br /&gt;
** PairWise Mesh&lt;br /&gt;
** Group Mesh&lt;br /&gt;
** Single Mesh&lt;br /&gt;
** MeshToVolume&lt;br /&gt;
** MeshScalar to Mesh&lt;br /&gt;
** MeshScalar to MeshScalar&lt;br /&gt;
&lt;br /&gt;
=== Initial discussions ===&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
== Current MeshMath functionality ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; subtract: &amp;quot;Subtract mesh from inputmesh, write a KWMeshVisu readable text file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: PairWiseMesh&lt;br /&gt;
* To-do: NOT KEEP. This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; magnitude: &amp;quot;Magnitude of the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: ?&lt;br /&gt;
* To-do: NOT KEEP. It seems this is very specific to a certain application&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; scaleMVA: &amp;quot;Scales the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: ?&lt;br /&gt;
* To-do: NOT KEEP. It seems this is very specific to a certain application&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; scaleMesh : &amp;quot;Scales the input mesh file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: SingleMesh &lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61087</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61087"/>
		<updated>2019-04-26T18:06:45Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: /* Current MeshMath functionality */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* TBD engineer&lt;br /&gt;
&lt;br /&gt;
=== Definitions ===&lt;br /&gt;
* [http://insight-journal.org/browse/publication/106 KWMeshVisu]: Legacy viewer from the Styner Lab.&lt;br /&gt;
* Types of Mesh Operations:&lt;br /&gt;
** PairWise Mesh&lt;br /&gt;
** Group Mesh&lt;br /&gt;
** Single Mesh&lt;br /&gt;
** MeshToVolume&lt;br /&gt;
** MeshScalar to Mesh&lt;br /&gt;
** MeshScalar to MeshScalar&lt;br /&gt;
&lt;br /&gt;
=== Initial discussions ===&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
== Current MeshMath functionality ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; subtract: &amp;quot;Subtract mesh from inputmesh, write a KWMeshVisu readable text file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: PairWiseMesh&lt;br /&gt;
* To-do: NOT KEEP. This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; magnitude: &amp;quot;Magnitude of the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: ?&lt;br /&gt;
* To-do: NOT KEEP. It seems this is very specific to a certain application&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; scaleMVA: &amp;quot;Scales the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: ?&lt;br /&gt;
* To-do: NOT KEEP. It seems this is very specific to a certain application&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; scaleMesh : &amp;quot;Scales the input mesh file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: SingleMesh &lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61086</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61086"/>
		<updated>2019-04-26T18:06:25Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: /* Current MeshMath functionality */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* TBD engineer&lt;br /&gt;
&lt;br /&gt;
=== Definitions ===&lt;br /&gt;
* [http://insight-journal.org/browse/publication/106 KWMeshVisu]: Legacy viewer from the Styner Lab.&lt;br /&gt;
* Types of Mesh Operations:&lt;br /&gt;
** PairWise Mesh&lt;br /&gt;
** Group Mesh&lt;br /&gt;
** Single Mesh&lt;br /&gt;
** MeshToVolume&lt;br /&gt;
** MeshScalar to Mesh&lt;br /&gt;
** MeshScalar to MeshScalar&lt;br /&gt;
&lt;br /&gt;
=== Initial discussions ===&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
== Current MeshMath functionality ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; subtract: &amp;quot;Subtract mesh from inputmesh, write a KWMeshVisu readable text file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: PairWiseMesh&lt;br /&gt;
* To-do: Not keep. This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; magnitude: &amp;quot;Magnitude of the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: ?&lt;br /&gt;
* To-do: Not keep. It seems this is very specific to a certain application&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; scaleMVA: &amp;quot;Scales the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: ?&lt;br /&gt;
* To-do: Not keep. It seems this is very specific to a certain application&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; scaleMesh : &amp;quot;Scales the input mesh file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: SingleMesh &lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61085</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61085"/>
		<updated>2019-04-26T18:05:09Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: /* Current MeshMath functionality */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* TBD engineer&lt;br /&gt;
&lt;br /&gt;
=== Definitions ===&lt;br /&gt;
* [http://insight-journal.org/browse/publication/106 KWMeshVisu]: Legacy viewer from the Styner Lab.&lt;br /&gt;
* Types of Mesh Operations:&lt;br /&gt;
** PairWise Mesh&lt;br /&gt;
** Group Mesh&lt;br /&gt;
** Single Mesh&lt;br /&gt;
** MeshToVolume&lt;br /&gt;
** MeshScalar to Mesh&lt;br /&gt;
** MeshScalar to MeshScalar&lt;br /&gt;
&lt;br /&gt;
=== Initial discussions ===&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
== Current MeshMath functionality ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; subtract: &amp;quot;Subtract mesh from inputmesh, write a KWMeshVisu readable text file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: PairWiseMesh&lt;br /&gt;
* To-do: Not keep. This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; magnitude: &amp;quot;Magnitude of the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: ?&lt;br /&gt;
* To-do: N/A It seems this is very specific to a certain application&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; scaleMVA: &amp;quot;Scales the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: ?&lt;br /&gt;
* To-do: N/A It seems this is very specific to a certain application&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; scaleMesh : &amp;quot;Scales the input mesh file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Type: SingleMesh &lt;br /&gt;
* To-do: KEEP. &lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61084</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61084"/>
		<updated>2019-04-26T17:56:38Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: /* Current MeshMath functionality */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* TBD engineer&lt;br /&gt;
&lt;br /&gt;
=== Definitions ===&lt;br /&gt;
* [http://insight-journal.org/browse/publication/106 KWMeshVisu]: Legacy viewer from the Styner Lab.&lt;br /&gt;
* Types of Mesh Operations:&lt;br /&gt;
** PairWise Mesh&lt;br /&gt;
** Group Mesh&lt;br /&gt;
** Single Mesh&lt;br /&gt;
** MeshToVolume&lt;br /&gt;
** MeshScalar to Mesh&lt;br /&gt;
** MeshScalar to MeshScalar&lt;br /&gt;
&lt;br /&gt;
=== Initial discussions ===&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
== Current MeshMath functionality ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; subtract: &amp;quot;Subtract mesh from inputmesh, write a KWMeshVisu readable text file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''Type:''' PairWiseMesh&lt;br /&gt;
 '''To-do:''' Not keep. This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; magnitude: &amp;quot;Magnitude of the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''Type:''' ?&lt;br /&gt;
 &lt;br /&gt;
'''To-do:''' N/A It seems this is very specific to a certain application&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; scaleMVA: &amp;quot;Scales the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''Type:''' ?&lt;br /&gt;
 &lt;br /&gt;
'''To-do:''' N/A It seems this is very specific to a certain application&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt; scaleMesh : &amp;quot;Scales the input mesh file&amp;quot;&amp;lt;/big&amp;gt; &lt;br /&gt;
&lt;br /&gt;
'''Type:''' SingleMesh&lt;br /&gt;
 &lt;br /&gt;
'''To-do:''' KEEP. &lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61083</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61083"/>
		<updated>2019-04-26T17:50:12Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: /* Current MeshMath functionality */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* TBD engineer&lt;br /&gt;
&lt;br /&gt;
=== Definitions ===&lt;br /&gt;
* [http://insight-journal.org/browse/publication/106 KWMeshVisu]: Legacy viewer from the Styner Lab.&lt;br /&gt;
* Types of Mesh Operations:&lt;br /&gt;
** PairWise Mesh&lt;br /&gt;
** Group Mesh&lt;br /&gt;
** Single Mesh&lt;br /&gt;
** MeshToVolume&lt;br /&gt;
** MeshScalar to Mesh&lt;br /&gt;
** MeshScalar to MeshScalar&lt;br /&gt;
&lt;br /&gt;
=== Initial discussions ===&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
== Current MeshMath functionality ==&lt;br /&gt;
&lt;br /&gt;
* subtract: &amp;quot;Subtract mesh from inputmesh, write a KWMeshVisu readable text file&amp;quot; &lt;br /&gt;
&lt;br /&gt;
'''Type:''' PairWiseMesh&lt;br /&gt;
 &lt;br /&gt;
'''To-do:''' Not keep. This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
&lt;br /&gt;
* magnitude: &amp;quot;Magnitude of the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&amp;quot; &lt;br /&gt;
&lt;br /&gt;
'''Type:''' ?&lt;br /&gt;
 &lt;br /&gt;
'''To-do:''' N/A It seems this is very specific to a certain application&lt;br /&gt;
&lt;br /&gt;
* scaleMVA: &amp;quot;Scales the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file&amp;quot; &lt;br /&gt;
&lt;br /&gt;
'''Type:''' ?&lt;br /&gt;
 &lt;br /&gt;
'''To-do:''' N/A It seems this is very specific to a certain application&lt;br /&gt;
&lt;br /&gt;
* scaleMesh : &amp;quot;Scales the input mesh file&amp;quot; &lt;br /&gt;
&lt;br /&gt;
'''Type:''' SingleMesh&lt;br /&gt;
 &lt;br /&gt;
'''To-do:''' KEEP. &lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61082</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61082"/>
		<updated>2019-04-26T17:45:50Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* TBD engineer&lt;br /&gt;
&lt;br /&gt;
=== Definitions ===&lt;br /&gt;
* [http://insight-journal.org/browse/publication/106 KWMeshVisu]: Legacy viewer from the Styner Lab.&lt;br /&gt;
* Types of Mesh Operations:&lt;br /&gt;
** PairWise Mesh&lt;br /&gt;
** Group Mesh&lt;br /&gt;
** Single Mesh&lt;br /&gt;
** MeshToVolume&lt;br /&gt;
** MeshScalar to Mesh&lt;br /&gt;
** MeshScalar to MeshScalar&lt;br /&gt;
&lt;br /&gt;
=== Initial discussions ===&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
== Current MeshMath functionality ==&lt;br /&gt;
&lt;br /&gt;
# subtract: &amp;quot;Subtract mesh from inputmesh, write a KWMeshVisu readable text file&amp;quot; &lt;br /&gt;
&lt;br /&gt;
'''Type:''' PairWiseMesh&lt;br /&gt;
 &lt;br /&gt;
'''To-do:''' Not keep. This functionality is currently available through [[Documentation/Nightly/Extensions/ModelToModelDistance|ModelToModelDistance]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61081</id>
		<title>Documentation/Labs/Surface Toolbox update</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs/Surface_Toolbox_update&amp;diff=61081"/>
		<updated>2019-04-25T20:30:34Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: Created page with &amp;quot;  == Overview ==  As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/Me...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
As part of the SALT project we would like to revamp some of the existing functionality in [https://github.com/NIRALUser/SPHARM-PDM/blob/master/Modules/CLI/MetaMeshTools/MeshMath.cxx MeshMath] into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.&lt;br /&gt;
&lt;br /&gt;
== Team == &lt;br /&gt;
* JC Fillon-Robin&lt;br /&gt;
* Bea Paniagua&lt;br /&gt;
* Jared Vicory&lt;br /&gt;
* Andras Lasso&lt;br /&gt;
* TBD engineer&lt;br /&gt;
&lt;br /&gt;
=== Initial discussions ===&lt;br /&gt;
&lt;br /&gt;
We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.&lt;br /&gt;
&lt;br /&gt;
=== Path forward ===&lt;br /&gt;
&lt;br /&gt;
== Testing data ==&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Labs&amp;diff=61079</id>
		<title>Documentation/Labs</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Labs&amp;diff=61079"/>
		<updated>2019-04-25T20:26:13Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: /* Internals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the place where we will keep track of our experiments and projects.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= On-going =&lt;br /&gt;
&lt;br /&gt;
== Roadmap ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/Slicer5-roadmap|Slicer 5]]&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/NrrdReading_Writing_Optimizations|NrrdReading_Writing_Optimizations]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/OpenGLFilters|OpenGLFilters]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/DeprecatedModules|DeprecatedModules extension]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/FHSCompliantDirectoryStructure|FHS compliant directory structure]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/FiberTractMeasurementAndVisualization|Fiber Tract measurement and visualization]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/VTKWidgets|VTK Widgets improvements]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/CLIInfrastructureCleanupAndRefactoring|CLI infrastructure cleanup and refactoring]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/UpgradingCompilerInfrastructure|Upgrading Compiler Infrastructure]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/ViewInfrastructureImprovements| View Infrastructure Improvements]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/CDash Improvements|CDash Improvements]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/SlicerBridge|SlicerBridge]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
* [[{{FULLPAGENAME}}/Display2dText|Display 2D text in viewers]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
* [[{{FULLPAGENAME}}/CI-and-NightlyPackagesGeneration|Continuous Integration and Nightly packages build infrastructure]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/ParameterSerializer|Parameter Serializer support for CLIs]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Augmented Reality and Virtual Reality support|Augmented Reality and Virtual Reality support]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Infrastucture Status|Infrastucture Status]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Improving Slicer Packages Download Experience|Improving Slicer Packages Download experience]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Sequences|Sequences]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Improving Markups|Improving Markups]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Surface Toolbox update|Surface Toolbox update]]&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/VTK-Orientation|Design: Addition of orientation to VTK data structures]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/VTK-String|Design: Make VTK strings encoding aware]]&lt;br /&gt;
&lt;br /&gt;
== Python ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/CallingPythonMethodsFromCpp|Calling Python methods from Cpp]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/IPython|IPython]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/PythonCondaBuild|Python conda build]]&lt;br /&gt;
&lt;br /&gt;
== Compilers &amp;amp; IDE ==&lt;br /&gt;
* Modernize to c++11&lt;br /&gt;
&lt;br /&gt;
'''The use of auto''' &lt;br /&gt;
&lt;br /&gt;
  run-clang-tidy.py -checks=-*,modernize-use-auto  -header-filter=.* -fix &lt;br /&gt;
&lt;br /&gt;
The automatic fix use auto in cases where static_cast is used:&lt;br /&gt;
&lt;br /&gt;
  - int a = static_cast&amp;lt;int&amp;gt;(something);&lt;br /&gt;
  + auto a = static_cast&amp;lt;int&amp;gt;(something);&lt;br /&gt;
&lt;br /&gt;
No much gain on this particular case, however, when using iterators and other verbose types, it really helps readability.&lt;br /&gt;
&lt;br /&gt;
The change should be discussed with the main developers to reach a consensus. VTK and ITK are using auto in a lot of cases.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Move not implemented constructors and assignment operators to the public interface''' &lt;br /&gt;
&lt;br /&gt;
Now that we use = delete, we don't need the constructors and assignment operator to be in the private interface.&lt;br /&gt;
Moving them to the public interface is better. Including better integrations with IDE's.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Other modernizers'''&lt;br /&gt;
  clang-tidy --list-checks -checks='*' | grep &amp;quot;modernize&amp;quot;&lt;br /&gt;
    modernize-avoid-bind&lt;br /&gt;
    modernize-deprecated-headers&lt;br /&gt;
    modernize-loop-convert&lt;br /&gt;
    modernize-make-shared&lt;br /&gt;
    modernize-make-unique&lt;br /&gt;
    modernize-pass-by-value&lt;br /&gt;
    modernize-raw-string-literal&lt;br /&gt;
    modernize-redundant-void-arg&lt;br /&gt;
    modernize-replace-auto-ptr&lt;br /&gt;
    modernize-replace-random-shuffle&lt;br /&gt;
    modernize-return-braced-init-list&lt;br /&gt;
    modernize-shrink-to-fit&lt;br /&gt;
    modernize-unary-static-assert&lt;br /&gt;
    modernize-use-auto # ToDiscuss&lt;br /&gt;
    modernize-use-bool-literals&lt;br /&gt;
    modernize-use-default-member-init&lt;br /&gt;
    modernize-use-emplace # easy!&lt;br /&gt;
    modernize-use-equals-default # DONE&lt;br /&gt;
    modernize-use-equals-delete # DONE&lt;br /&gt;
    modernize-use-noexcept &lt;br /&gt;
    modernize-use-nullptr # DONE&lt;br /&gt;
    modernize-use-override # DONE&lt;br /&gt;
    modernize-use-transparent-functors&lt;br /&gt;
    modernize-use-uncaught-exceptions&lt;br /&gt;
    modernize-use-using # Better style, to discuss.&lt;br /&gt;
&lt;br /&gt;
Check https://github.com/InsightSoftwareConsortium/ITK/tree/master/Utilities/ITKv5Preparation for a list of commands used in the &lt;br /&gt;
ITKv5 transition.&lt;br /&gt;
&lt;br /&gt;
== Virtual Machines ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/GPU Virtualization|GPU Virtualization]]&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/DocumentationImprovments|Documentation Improvements (Wiki, website, ...)]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/ModulesAndEvents|Intermediate documentation for developers]]&lt;br /&gt;
&lt;br /&gt;
== Tutorials ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/IPythonSlicerTutorials|IPython Slicer Tutorials]]&lt;br /&gt;
&lt;br /&gt;
== Source code management ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/TransitionToGit|Transition to Git]]&lt;br /&gt;
&lt;br /&gt;
== Extension ==&lt;br /&gt;
&lt;br /&gt;
* [[{{FULLPAGENAME}}/ExtensionsFrameworkRoadmap|Extensions Framework Roadmap]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/CustomSlicerGenerator|Custom Slicer Generator]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/ExtensionsMetadata|Improving Extensions Metadata]]&lt;br /&gt;
&lt;br /&gt;
== Functionalities ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/FlyThroughNavigation|Fly-through Navigation]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/AutomaticUpdateAndInstallationFramework|Automatic Update and Installation Framework]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/ApplicationUsageAnalytics|Application usage analytics]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Plotting2DLineSegments|Plotting 2D Line Segments]]&lt;br /&gt;
&lt;br /&gt;
== Packaging ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/HomebrewCask|Homebrew Cask]&lt;br /&gt;
&lt;br /&gt;
= Completed =&lt;br /&gt;
&lt;br /&gt;
* [[Slicer4:Developers|Developer Projects]]&lt;br /&gt;
&lt;br /&gt;
== Extension ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/EasyExtensionContribution|Easy Extension Contribution]] - See [[Documentation/Nightly/Developers/ExtensionWizard|ExtensionWizard]]&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/StartupTimeImprovement|Slicer startup time improvement]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/CMake-ified Python|CMake-ified Python]] - See [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21911 r21911], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21912 r21912], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21913 r21913]&lt;br /&gt;
* [[{{FULLPAGENAME}}/NonlinearTransforms|Full support for non-linear transforms]]&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/Qt5-and-VTK8|Migration to Qt5 and VTK8]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/OpenCV|Integration with OpenCV]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/ITKv4|ITKv4]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Qt484|Qt484]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/VTK6|VTK6]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/VTK7|VTK7]]&lt;br /&gt;
&lt;br /&gt;
== Python ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/Pip|Pip]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/DevelopmentWithGit|Development with Git]] - See [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21863 r21863], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21867 r21867], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21869 r21869], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21879 r21879], [http://viewvc.slicer.org/viewvc.cgi/Slicer4?view=revision&amp;amp;revision=21891 r21891]&lt;br /&gt;
* [[{{FULLPAGENAME}}/PythonObserverCallbacks|Python observer callbacks]]&lt;br /&gt;
&lt;br /&gt;
== Compilers &amp;amp; IDE ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/Ninja|Ninja]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/VS2012|VS2012]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/NUMPY171|Support for Numpy 1.7.1]]&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/SimpleFilters|Simple Filters]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Editor|Editor]]&lt;br /&gt;
&lt;br /&gt;
== Tutorials testing ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/TutorialTesting/4.3-Release|4.3 Release]]&lt;br /&gt;
&lt;br /&gt;
== Debug ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/BRAINS_and_ITKv4_issue|BRAINS and ITKv4 issue]]&lt;br /&gt;
&lt;br /&gt;
== Internals ==&lt;br /&gt;
* [[{{FULLPAGENAME}}/Segmentations|Segmentations]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/MultiDimensional Data Management|MultiDimensional Data Management]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/DICOMExport|DICOM Export]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/SliceViewAnnotations|Slice View Annotations]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/SubjectHierarchy|Subject hierarchy module and plugins]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/I18N|Internationalization]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/Units|Units]]&lt;br /&gt;
* [https://github.com/TubeTK/SlicerExecutionModel/wiki/SlicerExecutionModel-Parameter-Serialization SlicerExecutionModel Parameter Serialization]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Abandoned =&lt;br /&gt;
&lt;br /&gt;
* [[{{FULLPAGENAME}}/SlicerConfigAndUseSlicerTweaks|SlicerConfig and UseSlicer Tweaks]]&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Slicerverse&amp;diff=52518</id>
		<title>Slicerverse</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Slicerverse&amp;diff=52518"/>
		<updated>2017-06-22T17:24:08Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: Created page with &amp;quot;__TOC__  =Introduction=  The SlicerVerse represents a collection of customized versions or pluggings for Slicer that respond to the needs of a certain research community.  =Re...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
&lt;br /&gt;
The SlicerVerse represents a collection of customized versions or pluggings for Slicer that respond to the needs of a certain research community.&lt;br /&gt;
&lt;br /&gt;
=Requirements for inclusion=&lt;br /&gt;
&lt;br /&gt;
Having an open-source repository that presents a Slicer software solution with specialized functionality. &lt;br /&gt;
It needs to be a live project with a contact person responsible for answering user questions&lt;br /&gt;
&lt;br /&gt;
If you wish to be included in the community, please send a short description, icon, institute, SlicerVerse solution name, main webpage link as well as a tutorials webpage link.&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/SpharmPdm&amp;diff=37951</id>
		<title>Documentation/Nightly/Extensions/SpharmPdm</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/SpharmPdm&amp;diff=37951"/>
		<updated>2014-05-13T15:48:20Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Author: Francois Budin&amp;lt;br&amp;gt;&lt;br /&gt;
Contributors:Beatriz Paniagua (NIRAL, University of North Carolina), Martin Styner (NIRAL, University of North Carolina)&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Beatriz Paniagua, &amp;lt;email&amp;gt;beatriz_paniagua@med.unc.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Website: http://www.nitrc.org/projects/spharm-pdm&amp;lt;br&amp;gt;&lt;br /&gt;
License: [http://www.nitrc.org/include/glossary.php#187 BSD]&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-logo-gallery&lt;br /&gt;
|Image:UNC-NIRAL.png|Neuro Image Research and Analysis Laboratories (NIRAL)&lt;br /&gt;
|{{collaborator|logo|unc}}|{{collaborator|longname|unc}}&lt;br /&gt;
|{{collaborator|logo|namic}}|{{collaborator|longname|namic}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/extension-section|Extension Description}}&lt;br /&gt;
&lt;br /&gt;
* SPHARM-PDM is a tool that computes point-based models using a parametric boundary description for the computing of Shape analysis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/extension-section|Use Cases}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/extension-section|Tutorials}}&lt;br /&gt;
&lt;br /&gt;
* Tutorial Documentation : http://www.nitrc.org/docman/view.php/308/1015/TutorialContest_ShapeAnalysisModule_2011.pdf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/extension-section|Information for Developers}}&lt;br /&gt;
&lt;br /&gt;
* Project NITRC page : http://www.nitrc.org/projects/spharm-pdm &lt;br /&gt;
* SVN Repository : https://www.nitrc.org/svn/spharm-pdm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/extension-footer}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/SpharmPdm&amp;diff=37950</id>
		<title>Documentation/Nightly/Extensions/SpharmPdm</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions/SpharmPdm&amp;diff=37950"/>
		<updated>2014-05-13T15:47:24Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: Created page with '&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt; &amp;lt;!-- ---------------------------- --&amp;gt; {{documentation/{{documentation/version}}/module-header}} &amp;lt;!-- -----------------------…'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-header}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/module-section|Introduction and Acknowledgements}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-start|{{documentation/modulename}}}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
Author: Francois Budin&amp;lt;br&amp;gt;&lt;br /&gt;
Contributors:Beatriz Paniagua (NIRAL, University of North Carolina), Martin Styner (NIRAL, University of North Carolina)&amp;lt;br&amp;gt;&lt;br /&gt;
Contact: Beatriz Paniagua, &amp;lt;email&amp;gt;beatriz_paniagua@med.unc.edu&amp;lt;/email&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Website: http://www.nitrc.org/projects/spharm-pdm&amp;lt;br&amp;gt;&lt;br /&gt;
License: [http://www.nitrc.org/include/glossary.php#187 BSD]&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-row}}&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-logo-gallery&lt;br /&gt;
|Image:UNC-NIRAL.png|Neuro Image Research and Analysis Laboratories (NIRAL)&lt;br /&gt;
|{{collaborator|logo|unc}}|{{collaborator|longname|unc}}&lt;br /&gt;
|{{collaborator|logo|namic}}|{{collaborator|longname|namic}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{documentation/{{documentation/version}}/module-introduction-end}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/extension-section|Extension Description}}&lt;br /&gt;
&lt;br /&gt;
* SPHARM-PDM is a tool that computes point-based models using a parametric boundary description for the computing of Shape analysis. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/extension-section|Use Cases}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/extension-section|Tutorials}}&lt;br /&gt;
&lt;br /&gt;
* Tutorial Documentation : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/extension-section|Information for Developers}}&lt;br /&gt;
&lt;br /&gt;
* Project NITRC page : http://www.nitrc.org/projects/spharm-pdm &lt;br /&gt;
* SVN Repository : https://www.nitrc.org/svn/spharm-pdm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;br /&gt;
{{documentation/{{documentation/version}}/extension-footer}}&lt;br /&gt;
&amp;lt;!-- ---------------------------- --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
	<entry>
		<id>https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions&amp;diff=37949</id>
		<title>Documentation/Nightly/Extensions</title>
		<link rel="alternate" type="text/html" href="https://www.slicer.org/w/index.php?title=Documentation/Nightly/Extensions&amp;diff=37949"/>
		<updated>2014-05-13T15:36:59Z</updated>

		<summary type="html">&lt;p&gt;Bpaniagua: /* Cat 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{documentation/versioncheck}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;= Extensions by Category =&lt;br /&gt;
&lt;br /&gt;
==Cat 1==&lt;br /&gt;
&lt;br /&gt;
==Cat 2==&lt;br /&gt;
*[[Documentation/{{documentation/version}}/Extensions/CarreraSliceInteractiveSegmenter|CarreraSlice Interactive Segmenter]] (Ivan Kolesov, LiangJia Zhu, Yi Gao, Peter Karasev, Patricio Vela, Allen Tannenbaum, Karl Fritscher, Steve Pieper )&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/SurfaceReconstruction|SurfaceReconstruction]] (Chenxi-Zhang David-Doria Arnaud-Gelas Michael-Kazhdan Matthew-Bolitho Hugues-Hoppe Jean-Christophe Fillion-Robin )&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/SkullStripper|SkullStripper]] (Xiaodong Tao)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/MABMIS|MABMIS]] (Xiaofeng Liu)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/SwissSkullStripper|SwissSkullStripper]] (Bill Lorensen)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/CARMA|Cardiac MRI Toolkit]] (Alan Morris, Salma Bengali)[[image:UnderConstruction.png|tumb|10px]]&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/PkModeling|PkModeling]] (Emma Zhu, Jim Miller)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/FacetedVisualizer|FacetedVisualizer]] (Harini Veeraraghavan, Jim Miller)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/Reporting|Reporting]] (Andrey Fedorov, Nicole Aucoin, Steve Pieper) (work in progress)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/TCIABrowser|TCIA Browser]] (Alireza Mehrtash, Andrey Fedorov) (work in progress)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/SlicerRT|SlicerRT]] (Csaba Pinter, Andras Lasso, Kevin Wang, Greg Sharp, Steve Pieper)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/DicomRtImport|DICOM-RT import]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/DicomRtExport|DICOM-RT export]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/Contours|Contours]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/DoseVolumeHistogram|Dose volume histogram]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/DoseAccumulation|Dose accumulation]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/DoseComparison|Dose comparison]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/Isodose|Isodose line and surface display]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/ContourComparison|Contour comparison]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/ContourMorphology|Contour morphology]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/SubjectHierarchy|Subject hierarchy]]&lt;br /&gt;
** Modules from [[Documentation/{{documentation/version}}/Extensions/Plastimatch|Plastimatch]] (Greg Sharp)&lt;br /&gt;
*** [[Documentation/{{documentation/version}}/Modules/PlmBSplineDeformableRegistration|Plastimatch Automatic deformable image registration]]&lt;br /&gt;
*** [[Documentation/{{documentation/version}}/Modules/PlmLANDWARP|Plastimatch LANDWARP Landmark]]&lt;br /&gt;
*** [[Documentation/{{documentation/version}}/Modules/PlmXFORMWARP|Plastimatch XFORMWARP]] [[image:UnderConstruction.png|tumb|10px]]&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/SlicerIGT|SlicerIGT]] (Tamas Ungi, Adam Rankin, Andras Lasso, Junichi Tokuda, Laurent Chauvin)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/CollectFiducials|CollectFiducials]] (Tamas Ungi)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/CreateModels|CreateModels]] (Tamas Ungi, Matthew Holden)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/OpenIGTLinkRemote|OpenIGTLinkRemote]] (Tamas Ungi, Andras Lasso)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/UltrasoundSnapshots|UltrasoundSnapshots]] (Tamas Ungi, Franklin King)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Extensions/VolumeResliceDriver|VolumeResliceDriver]] (Junichi Tokuda, Tamas Ungi, Laurent Chauvin)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Extensions/PathExplorer|PathExplorer]] (Laurent Chauvin, Junichi Tokuda)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/MatlabBridge|Matlab Bridge]] (Andras Lasso, Jean-Christophe Fillion-Robin, Kevin Wang)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/iGyne|iGyne]] (Xiaojun Chen and iGyne Team)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/LongitudinalPETCT|LongitudinalPETCT]] (Paul Mercea, Andrey Fedorov)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/DTIProcess|DTIProcess]] (Francois Budin)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/DTIAtlasFiberAnalyzer|DTIAtlasFiberAnalyzer]] (Francois Budin)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/FiberViewerLight|FiberViewerLight]] (Francois Budin)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/DTIPrep|DTIPrep]] (Francois Budin)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/DTIAtlasBuilder|DTIAtlasBuilder]] (Adrien Kaiser)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/ShapePopulationViewer|ShapePopulationViewer]] (Alexis Girault)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/ModelToModelDistance|ModelToModelDistance]] (Francois Budin, Juliette Pera, Beatriz Paniagua)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/SpharmPdm|SPHARM-PDM]] (Beatriz Paniagua, Francois Budin, Martin Styner)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/TubeTK|TubeTK]] (Stephen Aylward, Jean-Christophe Fillion-Robin, Christopher Mullins, Michael Jeulin-L, Matthew McCormick)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/UKFTractography|UKFTractography]] (Ryan Eckbo, Yogesh Rathi)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/TrackerStabilizer|TrackerStabilizer]] (Laurent Chauvin, Jayender Jagadeesan)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/ChangeTracker|ChangeTracker]] (Andrey Fedorov)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/SobolevSegmenter|SobolevSegmenter]] (Arie Nakhmani)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/QuickTools|QuickTools]] (Julien Finet)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/ImageMaker|Image Maker]]&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/XNATSlicer|XNATSlicer]]&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/ErodeDilateLabel|ErodeDilateLabel]] (Junichi)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/ThingiverseBrowser|ThingiverseBrowser]] (Nigel Goh)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/VirtualFractureReconstruction|Virtual Fracture Reconstruction]] (Karl Fritscher, Peter Karasev)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/AirwaySegmentation|AirwaySegmentation]] (Pietro Nardelli)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/ModelClip|ModelClip]] (Jun Lin, Xiaojun Chen)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/SurfaceMirror|SurfaceMirror]] (Jiaxi Luo, Ruqing Ye, Xiaojun Chen)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/Scoliosis|Scoliosis]] (Franklin King, Tamas Ungi)&lt;br /&gt;
**[[Documentation/{{documentation/version}}/Modules/SpinalCurvatureMeasurement|Spinal Curvature Measurement]] (Franklin King, Tamas Ungi)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/PortPlacement|Port Placement]] (Andinet Enquobahrie, Luis G. Torres)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/PlusRemote|Plus Remote]] (Franklin King, Tamas Ungi)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/TransformVisualizer|Transform Visualizer]] (Franklin King, Andras Lasso, Csaba Pinter)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/WindowLevelEffect|WindowLevelEffect]] (Andrey Fedorov, Steve Pieper)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/PerkTutor|PerkTutor]] (Tamas Ungi, Matthew Holden)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/PerkEvaluator|PerkEvaluator]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/TransformRecorder|TransformRecorder]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/WorkflowSegmentation|WorkflowSegmentation]]&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Modules/SlicerToKiwiExporter|SlicerToKiwiExporter]] (Jean-Christophe Fillion-Robin)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Modules/GelDosimetry|GelDosimetry]] (Csaba Pinter)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/MultidimData|Multidimensional data]] (Andras Lasso, Matthew Holden, Kevin Wang)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/GyroGuide|GyroGuide]] (Ruifeng Chen,Luping Fang, Qing Pan, Xiaolei Chen, Jiashu Zhang)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Modules/MRI SNR Measurement|MRI SNR Measurement]] (Babak Matinfar)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/OpenCAD|OpenCAD]] (Vivek Narayan, Jayender Jagadeesan)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/PercutaneousApproachAnalysis|Percutaneous Approach Analysis]] (Koichiro Murakami, Laurent Chauvin, Junichi Tokuda)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/FinslerTractography|Finsler Tractography]] (Antonio Tristan Vega, Demian Wassermann and Carl-Fredrik Westin)&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/FinslerTractography|Finsler Tractography]]&lt;br /&gt;
** [[Documentation/{{documentation/version}}/Modules/FinslerBacktracing|Finsler Backtracing]]&lt;br /&gt;
&lt;br /&gt;
==Cat 3==&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/LesionSegmentation|LesionSegmentation]] (Mark Scully)&lt;br /&gt;
**[[Documentation/{{documentation/version}}/Modules/TrainModel|LesionSegmentation-&amp;gt;TrainModel]] (Mark Scully)&lt;br /&gt;
**[[Documentation/{{documentation/version}}/Modules/PredictLesions|LesionSegmentation-&amp;gt;PredictLesions]] (Mark Scully)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/IASEM|IASEM]] (Bradley Lowekamp)&lt;br /&gt;
* [[Documentation/{{documentation/version}}/Extensions/PyDevRemoteDebug|Python debugger]] (Andras Lasso)&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{:Documentation/{{documentation/version}}/FAQ/Extensions|Extensions}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bpaniagua</name></author>
		
	</entry>
</feed>