11 #ifndef MESH_PROCESSS_CELLAXIS_HPP
12 #define MESH_PROCESSS_CELLAXIS_HPP
33 setName(
"Mesh/Cell Axis/Cell Axis Save");
34 setDesc(
"Save 3D Cell Axis to a csv file.");
35 setIcon(QIcon(
":/images/CellAxisSave.png"));
37 addParm(
"Output File",
"Path to output file",
"");
38 addParm(
"Data",
"Data to be saved",
"Original Tensor", QStringList() <<
"Original Tensor" <<
"Custom Tensor" <<
"Visualized Axis");
41 bool initialize(QWidget* parent);
45 if(!checkState().mesh(MESH_NON_EMPTY))
47 return run(currentMesh(), parm(
"Output File"), parm(
"Data"));
50 bool run(
Mesh* mesh,
const QString& filename,
const QString& type);
60 setName(
"Mesh/Cell Axis/Cell Axis Load");
61 setDesc(
"Load cell axis from a spreadsheet file.");
62 setIcon(QIcon(
":/images/CellAxisOpen.png"));
64 addParm(
"Type",
"Load PDG, Fibril Orientations or Curvature from a spreadsheet file.",
"PDG", QStringList() <<
"PDG" <<
"PCA" <<
"fibril" <<
"curvature" <<
"polarization");
65 addParm(
"Input File",
"Path to input file. If empty, a browser will open.",
"");
68 bool initialize(QWidget* parent);
72 if(!checkState().mesh(MESH_NON_EMPTY))
74 return run(currentMesh(), parm(
"Type"), parm(
"Input File"));
77 bool run(
Mesh* mesh,
const QString& type,
const QString& filename);
91 setName(
"Mesh/Cell Axis/Cell Axis Clear");
92 setDesc(
"Remove any cell axis information from the current mesh.");
93 setIcon(QIcon(
":/images/CellAxisClear.png"));
98 if(!checkState().mesh(MESH_NON_EMPTY))
100 return run(currentMesh());
103 bool run(
Mesh* mesh);
161 setName(
"Mesh/Cell Axis/Custom/Create Intrinsic Heatmap");
162 setDesc(
"Create Intrinsic Heatmap");
163 setIcon(QIcon(
":/images/PDG.png"));
165 addParm(
"Project Directions on Surface",
"",
"Yes",booleanChoice());
166 addParm(
"Normalize",
"",
"no", QStringList() <<
"no" <<
"norm" <<
"square norm");
171 if(!checkState().mesh(MESH_NON_EMPTY))
173 return run(currentMesh(),
stringToBool(parm(
"Project Directions on Surface")), parm(
"Normalize"),
true);
175 bool run(
Mesh *m,
bool projectOnSurface, QString normalize,
bool display);
185 setName(
"Mesh/Cell Axis/Custom/Create Heatmap Directions");
186 setDesc(
"Create Custom Heatmap Directions");
187 setIcon(QIcon(
":/images/PDG.png"));
189 addParm(
"Project Directions on Surface",
"",
"Yes",booleanChoice());
190 addParm(
"Normalize",
"",
"no", QStringList() <<
"no" <<
"norm" <<
"square norm");
195 if(!checkState().mesh(MESH_NON_EMPTY))
197 return run(currentMesh(),
stringToBool(parm(
"Project Directions on Surface")), parm(
"Normalize"),
true);
200 bool run(
Mesh *m,
bool projectOnSurface, QString normalize,
bool display);
209 setName(
"Mesh/Cell Axis/Custom/Smooth Custom Directions");
210 setDesc(
"Smooth Custom Directions");
211 setIcon(QIcon(
":/images/PDG.png"));
213 addParm(
"Weight by Cell Area",
"Weight by Cell Area",
"Yes",booleanChoice());
214 addParm(
"Project Directions on Surface",
"Project Directions on cell surfaces after smoothing",
"Yes",booleanChoice());
219 if(!checkState().mesh(MESH_NON_EMPTY))
221 return run(currentMesh(),
stringToBool(parm(
"Weight by Cell Area")),
stringToBool(parm(
"Project Directions on Surface")),
true);
224 bool run(
Mesh *m,
bool weight,
bool project,
bool display);
233 setName(
"Mesh/Cell Axis/Custom/Copy Custom Directions to Other Mesh");
234 setDesc(
"Copy Custom Directions");
235 setIcon(QIcon(
":/images/PDG.png"));
240 if(!checkState().mesh(MESH_NON_EMPTY))
242 return run(currentMesh(), otherMesh());
254 setName(
"Mesh/Cell Axis/Custom/Import Tensor from Attr Map");
255 setDesc(
"Copy Custom Directions");
256 setIcon(QIcon(
":/images/PDG.png"));
258 addParm(
"Prefix",
"Prefix",
"Measure Label Tensor ");
259 addParm(
"Name",
"Name",
"Custom Directions");
260 addParm(
"Mesh",
"Mesh",
"Active Mesh", QStringList() <<
"Active Mesh" <<
"Other Mesh");
265 if(!checkState().mesh(MESH_NON_EMPTY))
267 return run(currentMesh(), otherMesh(), parm(
"Prefix"), parm(
"Name"), parm(
"Mesh"));
270 bool run(
Mesh *m1,
Mesh *m2, QString prefix, QString name, QString nameMesh);
279 setName(
"Mesh/Cell Axis/Custom/Import Vector from Attr Map");
280 setDesc(
"Copy Custom Directions");
281 setIcon(QIcon(
":/images/PDG.png"));
283 addParm(
"Prefix",
"Prefix",
"Measure Label Vector ");
284 addParm(
"Name",
"Name",
"Custom Directions");
285 addParm(
"Dimension",
"Dimension",
"X",QStringList() <<
"X" <<
"Y" <<
"Z");
286 addParm(
"Mesh",
"Mesh",
"Active Mesh", QStringList() <<
"Active Mesh" <<
"Other Mesh");
291 if(!checkState().mesh(MESH_NON_EMPTY))
293 return run(currentMesh(), otherMesh(), parm(
"Prefix"), parm(
"Name"), parm(
"Dimension"), parm(
"Mesh"));
296 bool run(
Mesh *m1,
Mesh *m2, QString prefix, QString name, QString dimension, QString nameMesh);
310 setName(
"Mesh/Cell Axis 3D/Custom/Create Surface Directions");
311 setDesc(
"Create Custom Bezier Directions");
312 setIcon(QIcon(
":/images/PDG.png"));
314 addParm(
"Custom X",
"Custom X",
"Surface Direction",QStringList() <<
"None" <<
"Surface Direction" <<
"Surface Normal");
315 addParm(
"Custom Y",
"Custom Y",
"None",QStringList() <<
"None" <<
"Surface Direction" <<
"Surface Normal");
316 addParm(
"Custom Z",
"Custom Z",
"None",QStringList() <<
"None" <<
"Surface Direction" <<
"Surface Normal");
321 if(!checkState().mesh(MESH_NON_EMPTY))
323 Mesh* m = currentMesh();
324 Mesh* m2 = otherMesh();
325 return run(m, m2, parm(
"Custom X"), parm(
"Custom Y"), parm(
"Custom Z"),
true);
327 bool run(
Mesh *m,
Mesh *m2, QString customX, QString customY, QString customZ,
bool display);
342 setName(
"Mesh/Cell Axis 3D/Custom/Create Orthogonal Direction");
343 setDesc(
"Creates a orthogonal direction based on the two specified directions and overwrites the third direction with it.\n"
344 "Optional: edit the secondary direction to be orthogonal two the primary and new third direction.");
345 setIcon(QIcon(
":/images/PDG.png"));
347 addParm(
"Primary Axis",
"Primary Axis",
"X",QStringList() <<
"X" <<
"Y" <<
"Z");
348 addParm(
"Secondary Axis",
"Secondary Axis",
"Y",QStringList() <<
"X" <<
"Y" <<
"Z");
349 addParm(
"Change Secondary Axis",
"Change Secondary Axis",
"Yes",booleanChoice());
354 if(!checkState().mesh(MESH_NON_EMPTY))
356 Mesh* m = currentMesh();
357 return run(m, parm(
"Primary Axis"), parm(
"Secondary Axis"),
stringToBool(parm(
"Change Secondary Axis")),
true);
359 bool run(
Mesh *m, QString primX, QString secX,
bool changeSecondary,
bool display);
374 setName(
"Mesh/Cell Axis 3D/Custom/Clear Custom Directions");
375 setDesc(
"Clear Custom Directions");
376 setIcon(QIcon(
":/images/PDG.png"));
378 addParm(
"Clear Custom X",
"Clear Custom X",
"Yes",booleanChoice());
379 addParm(
"Clear Custom Y",
"Clear Custom Y",
"Yes",booleanChoice());
380 addParm(
"Clear Custom Z",
"Clear Custom Z",
"Yes",booleanChoice());
385 if(!checkState().mesh(MESH_NON_EMPTY))
387 Mesh* m = currentMesh();
390 bool run(
Mesh *m,
bool clearX,
bool clearY,
bool clearZ,
bool display);
407 setName(
"Mesh/Cell Axis/Custom/Create Bezier Grid Directions");
408 setDesc(
"Create Custom Bezier Directions");
409 setIcon(QIcon(
":/images/PDG.png"));
411 addParm(
"Custom X",
"Custom X",
"Bezier X",QStringList() <<
"None" <<
"Bezier X" <<
"Bezier Y" <<
"Bezier Normal");
412 addParm(
"Custom Y",
"Custom Y",
"Bezier Y",QStringList() <<
"None" <<
"Bezier X" <<
"Bezier Y" <<
"Bezier Normal");
414 addParm(
"Project Directions on Surface",
"",
"Yes",booleanChoice());
422 if(!checkState().mesh(MESH_NON_EMPTY))
424 return run(currentMesh(), parm(
"Custom X"), parm(
"Custom Y"),
stringToBool(parm(
"Project Directions on Surface")),
true);
427 bool run(
Mesh *m, QString customX, QString customY,
bool projectOnSurface,
bool display);
441 setName(
"Mesh/Cell Axis/Custom/Project Directions");
442 setDesc(
"Project custom directions on the cell plane");
443 setIcon(QIcon(
":/images/PDG.png"));
444 addParm(
"Make Orthogonal",
"Makes custom axes orthogonal",
"None",QStringList() <<
"None" <<
"Y from X" <<
"X from Y");
450 if(!checkState().mesh(MESH_NON_EMPTY))
452 return run(currentMesh(),parm(
"Make Orthogonal"));
455 bool run(
Mesh *m,QString makeOrthog);
469 setName(
"Mesh/Cell Axis/Custom/Create Bezier Line Directions");
470 setDesc(
"Create Custom Directions from a Bezier Line\n"
471 "Longitudinal - Along the Bezier line\n"
472 "Radial - Towards the Bezier line\n"
473 "Circumferential - Around the Bezier line\n"
474 "(always from the cell center)");
475 setIcon(QIcon(
":/images/PDG.png"));
477 addParm(
"Custom X",
"Custom X",
"Radial",QStringList() <<
"None" <<
"Radial" <<
"Circumferential" <<
"Longitudinal");
478 addParm(
"Custom Y",
"Custom Y",
"Circumferential",QStringList() <<
"None" <<
"Radial" <<
"Circumferential" <<
"Longitudinal");
480 addParm(
"Project Directions on Surface",
"",
"Yes",booleanChoice());
486 if(!checkState().mesh(MESH_NON_EMPTY))
488 return run(currentMesh(), parm(
"Custom X"), parm(
"Custom Y"),
stringToBool(parm(
"Project Directions on Surface")),
true);
491 bool run(
Mesh *m, QString customX, QString customY,
bool projectOnSurface,
bool display);
505 setName(
"Mesh/Cell Axis 3D/Custom/Create Bezier Line Directions");
506 setDesc(
"Create Custom Directions from a Bezier Line\n"
507 "Longitudinal - Along the Bezier line\n"
508 "Radial - Towards the Bezier line\n"
509 "Circumferential - Around the Bezier line\n"
510 "(always from the cell center)");
511 setIcon(QIcon(
":/images/PDG.png"));
513 addParm(
"Custom X",
"Custom X",
"Radial",QStringList() <<
"None" <<
"Radial" <<
"Circumferential" <<
"Longitudinal");
514 addParm(
"Custom Y",
"Custom Y",
"Circumferential",QStringList() <<
"None" <<
"Radial" <<
"Circumferential" <<
"Longitudinal");
515 addParm(
"Custom Z",
"Custom Z",
"Longitudinal",QStringList() <<
"None" <<
"Radial" <<
"Circumferential" <<
"Longitudinal");
522 if(!checkState().mesh(MESH_NON_EMPTY))
524 return run(currentMesh(), parm(
"Custom X"), parm(
"Custom Y"), parm(
"Custom Z"),
true);
527 bool run(
Mesh *m, QString customX, QString customY, QString customZ,
bool display);
540 setName(
"Mesh/Cell Axis 3D/Custom/Create Bezier Grid Directions");
541 setDesc(
"Create Custom Bezier Directions for volumetric cells");
542 setIcon(QIcon(
":/images/PDG.png"));
544 addParm(
"Custom X",
"Custom X",
"Bezier X",QStringList() <<
"None" <<
"Bezier X" <<
"Bezier Y" <<
"Bezier Normal");
545 addParm(
"Custom Y",
"Custom Y",
"Bezier Y",QStringList() <<
"None" <<
"Bezier X" <<
"Bezier Y" <<
"Bezier Normal");
546 addParm(
"Custom Z",
"Custom Z",
"Bezier Normal",QStringList() <<
"None" <<
"Bezier X" <<
"Bezier Y" <<
"Bezier Normal");
552 if(!checkState().mesh(MESH_NON_EMPTY))
554 return run(currentMesh(), parm(
"Custom X"), parm(
"Custom Y"), parm(
"Custom Z"),
true);
557 bool run(
Mesh *m, QString customX, QString customY, QString customZ,
bool display);
572 setName(
"Mesh/Cell Axis/Custom/Custom Direction Angle");
573 setDesc(
"Generate a heatmap of the angle (deg) between the specified active cell axis and a previously created custom direction.");
574 setIcon(QIcon(
":/images/PDG.png"));
576 addParm(
"Direction Axis",
"Direction Axis",
"Max", QStringList() <<
"Max" <<
"Min");
577 addParm(
"Direction Custom",
"Direction Custom",
"X", QStringList() <<
"X" <<
"Y");
582 if(!checkState().mesh(MESH_NON_EMPTY))
584 return run(currentMesh(), parm(
"Direction Axis"), parm(
"Direction Custom"));
587 bool run(
Mesh *m, QString dirAxis, QString dirCustom);
601 setName(
"Mesh/Cell Axis 3D/Custom/Custom Direction Angle 3D");
602 setDesc(
"Generate a heatmap of the angle (deg) between the specified active cell axis and a previously created custom direction.");
603 setIcon(QIcon(
":/images/PDG.png"));
605 addParm(
"Direction Axis",
"",
"Max", QStringList() <<
"Max" <<
"Mid" <<
"Min");
606 addParm(
"Direction Custom",
"",
"X", QStringList() <<
"X" <<
"Y" <<
"Z");
611 if(!checkState().mesh(MESH_NON_EMPTY))
613 return run(currentMesh(), parm(
"Direction Axis"), parm(
"Direction Custom"));
616 bool run(
Mesh *m, QString dirAxis, QString dirCustom);
632 setName(
"Mesh/Cell Axis/Custom/Display Custom Orientations");
633 setDesc(
"Display the orientations of the custom orientations attribute map");
634 setIcon(QIcon(
":/images/PrincipalOrientations.png"));
636 addParm(
"Directions",
"Directions to display",
"XY", QStringList() <<
"X" <<
"Y" <<
"Z" <<
"XY" <<
"XYZ");
637 addParm(
"Line Color",
"Line Color",
"aliceblue", QColor::colorNames());
638 addParm(
"Line Width",
"Line Width",
"3.0");
639 addParm(
"Line Scale",
"Length of the vectors = Scale * orientation strength.",
"3.0");
640 addParm(
"Line Offset",
"Draw the vector ends a bit tilted up for proper display on surfaces.",
"0.1");
641 addParm(
"Threshold",
"Minimal value of orientation strength required for drawing main direction.",
"0.0");
646 if(!checkState().mesh(MESH_NON_EMPTY))
649 return run(currentMesh(), parm(
"Directions"), QColor(parm(
"Line Color")), parm(
"Line Width").toFloat(),
650 parm(
"Line Scale").toFloat(), parm(
"Line Offset").toFloat(), parm(
"Threshold").toFloat());
653 bool run(
Mesh* mesh, QString directions,
const QColor& ColorMax,
654 float AxisLineWidth,
float ScaleAxisLength,
float AxisOffset,
float OrientationThreshold);
706 setName(
"Mesh/Cell Axis/Display Template");
707 setDesc(
"Process to draw cell axis used by other processes");
708 setIcon(QIcon(
":/images/PrincipalOrientations.png"));
722 QString mode,
bool custom,
const QColor& qaxisColorX,
const QColor& qaxisColorY,
const QColor& qaxisColorZ,
const QColor& qaxisColorShrink,
723 double axisLineWidth,
double axisLineScale,
double axisOffset,
double orientationThreshold,
bool strain);
740 setName(
"Mesh/Cell Axis 3D/Custom/Display Custom Orientations");
741 setDesc(
"Display the orientations of the custom orientations attribute map");
742 setIcon(QIcon(
":/images/PrincipalOrientations.png"));
744 addParm(
"Directions",
"Directions to display",
"XYZ", QStringList() <<
"X" <<
"Y" <<
"Z" <<
"XY" <<
"XZ" <<
"YZ" <<
"XYZ");
745 addParm(
"Line Color",
"Line Color",
"aliceblue", QColor::colorNames());
746 addParm(
"Line Width",
"Line Width",
"3.0");
747 addParm(
"Line Scale",
"Length of the vectors = Scale * orientation strength.",
"3.0");
748 addParm(
"Threshold",
"Minimal value of orientation strength required for drawing main direction.",
"0.0");
753 if(!checkState().mesh(MESH_NON_EMPTY))
756 return run(currentMesh(), parm(
"Directions"), QColor(parm(
"Line Color")), parm(
"Line Width").toFloat(),
757 parm(
"Line Scale").toFloat(), parm(
"Threshold").toFloat());
760 bool run(
Mesh* mesh, QString directions,
const QColor& ColorMax,
761 float AxisLineWidth,
float ScaleAxisLength,
float OrientationThreshold);
775 setName(
"Mesh/Cell Axis/Cell Axis Export To Attr Map");
777 setIcon(QIcon(
":/images/PDG.png"));
779 addParm(
"Prefix",
"",
"Measure Label Tensor");
780 addParm(
"Name",
"",
"AxisAttr");
781 addParm(
"Key",
"Keys of Attr Map",
"Label", QStringList() <<
"Label" <<
"Parent");
782 addParm(
"Value",
"Type of value to be saved",
"Label Axis", QStringList() <<
"Label Axis" <<
"Parent Axis");
783 addParm(
"Save to",
"Save to which mesh",
"Active Mesh", QStringList() <<
"Active Mesh" <<
"Other Mesh");
784 addParm(
"Clean",
"Remove entries for non-existent cells",
"No",booleanChoice());
789 if(!checkState().mesh(MESH_ANY))
791 Mesh *m = currentMesh();
793 if(currentMesh() == mesh(0))
797 return run(m,m2, parm(
"Prefix"), parm(
"Name"), parm(
"Key"), parm(
"Value"), parm(
"Save to"),
stringToBool(parm(
"Clean")));
800 bool run(
Mesh *m,
Mesh *m2, QString prefix, QString name, QString key, QString value, QString meshNumber,
bool cleanMesh);
815 setName(
"Mesh/Cell Axis/Cell Axis Import From Attr Map");
817 setIcon(QIcon(
":/images/PDG.png"));
819 addParm(
"Type",
"",
"PDG", QStringList() <<
"PDG" <<
"PCA" <<
"fibril" <<
"curvature" <<
"polarization");
820 addParm(
"Prefix",
"Prefix",
"Measure Label Tensor");
821 addParm(
"Name",
"Name",
"AxisAttr");
822 addParm(
"Project on cell plane",
"",
"No",booleanChoice());
827 if(!checkState().mesh(MESH_NON_EMPTY))
829 return run(currentMesh(), parm(
"Type"), parm(
"Prefix"), parm(
"Name"),
stringToBool(parm(
"Project on cell plane")));
832 bool run(
Mesh *m, QString type, QString prefix, QString name,
bool reproject);
875 setName(
"Mesh/Cell Axis/Compute Angles");
876 setDesc(
"Calculate angles between different cell axis");
877 setIcon(QIcon(
":/images/MeasureAngles.png"));
879 addParm(
"Cell Axis Attr 1",
"Cell Axis Attr 1",
"Shape2D",
880 QStringList() <<
"Curvature" <<
"CustomDirections" <<
"DeformationGradient" <<
"FibrilOrientations" <<
"PDGs" <<
"Polarity" <<
"Shape2D");
881 addParm(
"Direction 1",
"Direction",
"Max/X",QStringList() <<
"Max/X" <<
"Min/Y");
882 addParm(
"Isotropy Threshold 1",
"Ignore cells when their cell axis are close to isotropic, i.e. when their anisotropy is below the threshold",
"0");
883 addParm(
"Cell Axis Attr 2",
"Cell Axis Attr 2",
"FibrilOrientations",
884 QStringList() <<
"Curvature" <<
"CustomDirections" <<
"DeformationGradient" <<
"FibrilOrientations" <<
"PDGs" <<
"Polarity" <<
"Shape2D");
885 addParm(
"Direction 2",
"Direction",
"Max/X",QStringList() <<
"Max/X" <<
"Min/Y");
886 addParm(
"Isotropy Threshold 2",
"Ignore cells when their cell axis are close to isotropic, i.e. when their anisotropy is below the threshold",
"0");
888 addParm(
"Use Measure Prefix",
"Use Measure Prefix Measure Label Tensor",
"Yes", booleanChoice());
889 addParm(
"Display Axis",
"Display Axis",
"Yes", booleanChoice());
890 addParm(
"Color 1",
"Color 1",
"aqua", QColor::colorNames());
891 addParm(
"Color 2",
"Color 2",
"red", QColor::colorNames());
892 addParm(
"Line Width",
"Line width",
"2.0");
893 addParm(
"Line Scale",
"Line Scale",
"1.0");
894 addParm(
"Line Offset",
"Draw the vector ends a bit tilted up for proper display on surfaces.",
"0.1");
899 if(!checkState().mesh(MESH_NON_EMPTY))
901 return run(currentMesh(),
stringToBool(parm(
"Use Measure Prefix")),
902 parm(
"Cell Axis Attr 1"), parm(
"Direction 1"), parm(
"Isotropy Threshold 1").toDouble(),
903 parm(
"Cell Axis Attr 2"), parm(
"Direction 2"), parm(
"Isotropy Threshold 2").toDouble(),
stringToBool(parm(
"Display Axis")),
904 QColor(parm(
"Color 1")),QColor(parm(
"Color 2")),parm(
"Line Width").toDouble(),parm(
"Line Scale").toDouble(),parm(
"Line Offset").toDouble());
908 bool run(
Mesh* m,
bool usePrefix, QString attr1, QString dir1,
double isoT1, QString attr2, QString dir2,
double isoT2,
909 bool displayAxis,
const QColor& color1,
const QColor& color2,
double lineWidth,
double lineScale,
double lineOffset);
921 setName(
"Mesh/Cell Axis 3D/Compute Angles");
922 setDesc(
"Calculate angles between different cell axis");
923 setIcon(QIcon(
":/images/MeasureAngles.png"));
925 addParm(
"Cell Axis Attr 1",
"Cell Axis Attr 1",
"Polarity3D",
926 QStringList() <<
"CustomDirections" <<
"DeformationGradient3D" <<
"Polarity3D" <<
"Shape3D");
927 addParm(
"Direction 1",
"Direction",
"Max",QStringList() <<
"Max" <<
"Mid" <<
"Min");
928 addParm(
"Isotropy Threshold 1",
"Ignore cells when their cell axis are close to isotropic, i.e. when their anisotropy is below the threshold",
"1.");
929 addParm(
"Cell Axis Attr 2",
"Cell Axis Attr 2",
"FibrilOrientations",
930 QStringList() <<
"CustomDirections" <<
"DeformationGradient3D" <<
"Polarity3D" <<
"Shape3D");
931 addParm(
"Direction 2",
"Direction",
"Max",QStringList() <<
"Max" <<
"Mid" <<
"Min");
932 addParm(
"Isotropy Threshold 2",
"Ignore cells when their cell axis are close to isotropic, i.e. when their anisotropy is below the threshold",
"1.");
934 addParm(
"Use Measure Prefix",
"Use Measure Prefix Measure Label Tensor",
"Yes", booleanChoice());
935 addParm(
"Display Axis",
"Display Axis",
"Yes", booleanChoice());
940 if(!checkState().mesh(MESH_NON_EMPTY))
942 return run(currentMesh(),
stringToBool(parm(
"Use Measure Prefix")),
943 parm(
"Cell Axis Attr 1"), parm(
"Direction 1"), parm(
"Isotropy Threshold 1").toDouble(),
944 parm(
"Cell Axis Attr 2"), parm(
"Direction 2"), parm(
"Isotropy Threshold 2").toDouble(),
stringToBool(parm(
"Display Axis")));
948 bool run(
Mesh* m,
bool usePrefix, QString attr1, QString dir1,
double isoT1, QString attr2, QString dir2,
double isoT2,
bool displayAxis);
959 setName(
"Mesh/Cell Type Classification/Measure Map 2D Computation");
960 setDesc(
"Calculates ALL 2D measure maps. (Might take a bit depending on the mesh).");
961 setIcon(QIcon(
":/images/CellTypeRecognitionSpecification.jpeg"));