11 #ifndef MESH_PROCESS_CELL_MESH_HPP
12 #define MESH_PROCESS_CELL_MESH_HPP
37 setName(
"Mesh/Cell Mesh/Fix Corners Classic");
38 setDesc(
"Fix labelling of cell corners.");
39 setIcon(QIcon(
":/images/FixCorners.png"));
41 addParm(
"Auto segmentation?",
"Re-run watershed automatically at each turn.",
"Yes",booleanChoice());
42 addParm(
"Select bad vertices",
"Select remaining bad vertices at the end. \n"
43 "Helps in deleting bad vertices that cannot be segmented properly.",
"Yes",booleanChoice());
44 addParm(
"Max iterations",
"Maximal number of turns.",
"5");
49 if(!checkState().mesh(MESH_NON_EMPTY))
51 if(parm(
"Max iterations").toInt() < 1) {
52 setErrorMessage(
"Number of runs must be at least one.");
55 return run(currentMesh(),
stringToBool(parm(
"Auto segmentation?")),
56 stringToBool(parm(
"Select bad vertices")), parm(
"Max iterations").toInt());
59 bool run(
Mesh* mesh,
bool autoSegment,
bool selectBadVertices,
int maxRun);
74 setName(
"Mesh/Cell Mesh/Fix Corner Triangles");
75 setDesc(
"Fix labelling of triangles in the cell corners.");
76 setIcon(QIcon(
":/images/FixCorners.png"));
81 if(!checkState().mesh(MESH_NON_EMPTY))
83 return run(currentMesh());
96 setName(
"Mesh/Cell Mesh/Convert to a normal mesh");
97 setDesc(
"Convert any mesh back to a normal (MGXM) mesh");
98 setIcon(QIcon(
":/images/MakeCells.png"));
104 if(!checkState().mesh(MESH_NON_EMPTY))
106 return run(currentMesh());
109 bool run(
Mesh* mesh);
125 setName(
"Mesh/Cell Mesh/Convert to a cell mesh");
126 setDesc(
"Convert a segmented mesh into a cell mesh (MGXC). \n"
127 "The simplified mesh contains only vertices for cell centers and cell outlines."
128 "The process will also convert a 2D cell tissue (MGX2D) back to a cell mesh (MGXC).");
129 setIcon(QIcon(
":/images/MakeCells.png"));
131 addParm(
"Max Wall Length (µm)",
"Length between vertices to keep, 0 keeps only junctions, -1 keeps everything.",
"-1");
136 if(!checkState().mesh(MESH_NON_EMPTY))
138 return run(currentMesh(), parm(
"Max Wall Length (µm)").toDouble());
141 bool run(
Mesh* mesh,
double wallMax);
151 setName(
"Mesh/Cell Mesh/Convert to 2D Cell Tissue");
152 setDesc(
"Convert a cell (MGXC) mesh to a 2D Cellular Tissue (MGX2D)");
153 setIcon(QIcon(
":/images/MakeCells.png"));
155 addParm(
"Max Wall Length (µm)",
"Length between vertices to keep, 0 keeps only junctions, -1 keeps everything.",
"-1");
161 if(!checkState().mesh(MESH_NON_EMPTY))
163 return run(currentMesh(), parm(
"Max Wall Length (µm)").toDouble());
166 bool run(
Mesh* mesh,
double wallMax);
176 setName(
"Mesh/Cell Mesh/Convert to 3D Cell Tissue");
177 setDesc(
"Convert a (MGXM) mesh that is a group of closed 3D cells to a 3D Cellular Tissue (MGX3D)");
178 setIcon(QIcon(
":/images/MakeCells.png"));
180 addParm(
"Tolerance (µm)",
"Tolerance for merging vertices. Vertices closer than this will be merged.",
".01");
181 addParm(
"Neighbour Min Area",
"Cells with at least this shared area will be considered as neighbors",
".01");
187 if(!checkState().mesh(MESH_NON_EMPTY))
189 return run(currentMesh(), parm(
"Tolerance (µm)").toDouble(), parm(
"Neighbour Min Area").toDouble());
192 bool run(
Mesh* mesh,
double tolerance,
double neighborMinArea);
209 setName(
"Mesh/Cell Mesh/Tools/Surface mesh from MGX3D");
210 setDesc(
"Convert MGX3D to normal mesh, keeping only triangles not shared between cells.");
211 setIcon(QIcon(
":/images/MakeCells.png"));
216 if(!checkState().mesh(MESH_NON_EMPTY))
219 if(currentMesh() == mesh(0)) {
222 }
else if(currentMesh() == mesh(1)) {
228 return run(mesh1, mesh2);
247 setName(
"Mesh/Cell Mesh/Tools/Relabel Fragments");
248 setDesc(
"Find multiple separate pieces of the same label, keep largest piece and relabel or unlabel (label 0) the rest \n"
249 "Unlabel for Threshold -1, Relabel for > -1");
250 setIcon(QIcon(
":/images/CHull.png"));
252 addParm(
"Relabel Threshold",
"Relabel Threshold in Vtxs. Set to -1 if pieces should be unlabeled.",
"-1");
256 Mesh *m = currentMesh();
257 return run(m, parm(
"Relabel Threshold").toInt());
259 bool run(
Mesh *mesh1,
int relabelThreshold);
274 setName(
"Mesh/Cell Mesh/Tools/Extend Cells");
275 setDesc(
"Extends cells into unlabeled regions");
276 setIcon(QIcon(
":/images/CHull.png"));
280 Mesh *m = currentMesh();