MorphoGraphX  2.0-1-227
DivisionAnalysisData.hpp
Go to the documentation of this file.
1 #ifndef DivisionAnalysisData_H
2 #define DivisionAnalysisData_H
3 
4 #include <queue> // std::queue
5 
6 #include <Process.hpp>
7 #include <Geometry.hpp>
8 #include <Function.hpp>
9 
10 #include <CellTissue.hpp>
11 
12 #include <CellDivision.hpp>
13 
15 
16 using namespace std;
17 
18 namespace mgx
19 {
20 
21 
23  {
24  public:
25  std::vector<vertex> vtxs;
26  std::vector<Point3i> tris;
27 
28  double size;
31  int label;
32 
34  DivisionPlane(double size, Point3d planeNrml, Point3d planePos, int label) : size(size),planeNrml(planeNrml),planePos(planePos),label(label) {}
35 
36  };
37 
38  // stores general information that might be required for running the div analysis
40  {
41  public:
42  std::map<int, Point3d> cellNormalMap;
43  };
44 
45  // stores the information about a simulated division
47  {
48  public:
49  std::map<int, Point3d> cellNormalMap;
50 
51  std::map<cell, double> cellBetwMap;
52  std::map<cell, double> cellCurrentFlowMap;
53 
58 
59  std::vector<CellDivision> divData;
60 
62 
63  std::vector<DivisionPlane> customPlanes;
64 
65  };
66 
67 
74 class MakeMeshCircleDA : public Process
75  {
76  public:
77  MakeMeshCircleDA(const Process& process) : Process(process)
78  {
79  setName("Mesh/Division Analysis/Tools/Circular Mesh");
80  setDesc("Creates an unlabelled mesh of a regular 2D polygon with the specified number of corners, size and triangulation. \n"
81  "The generated corner points are on an ellipse with the specified radii. \n"
82  "Special Mode with Corner Points=4: Creates a Rectangular Mesh with the specified side length");
83  setIcon(QIcon(":/images/LayerFiles.png"));
84 
85  addParm("Radius X","Radius of ellipse in x dimension","100.0");
86  addParm("Radius Y","Radius of ellipse in y dimension","100.0");
87  addParm("Corner Points","Number of corner points (linearization in between)","100");
88  addParm("Segment","360 for a full shape","360");
89  addParm("Shift X","Translation in X dimension (microns)","0");
90  addParm("Shift Y","Translation in Y dimension (microns)","0");
91  addParm("Keep Mesh","Keep the existing mesh","No",booleanChoice());
92  }
93 
94  bool run()
95  {
96  Mesh *mesh = currentMesh();
97 
98  bool addEdgePoints = true;
99 
100  double triSize = 10.0;
101 
102  bool res = run(mesh, parm("Radius X").toDouble(), parm("Radius Y").toDouble(), parm("Corner Points").toInt(),
103  parm("Segment").toDouble(), parm("Shift X").toDouble(), parm("Shift Y").toDouble(), parm("Keep Mesh").toDouble(), triSize, addEdgePoints);
104  if(res)
105  mesh->setShowMesh();
106  return res;
107  }
108  bool run(Mesh *mesh, double radiusX, double radiusY, int edgePoints, double meshAngle,
109  double shiftX, double shiftY, bool keep, double triSize, bool addEdgePoints);
110 
111  };
112 
119 class MakeMeshTetraDA : public Process
120  {
121  public:
122  MakeMeshTetraDA(const Process& process) : Process(process)
123  {
124  setName("Mesh/Division Analysis/Tools/Tetrahedra Mesh");
125  setDesc("Tetra Creation");
126  setIcon(QIcon(":/images/LayerFiles.png"));
127 
128  addParm("Length","Length","100.0");
129  addParm("Tri Size","Tri Size","1.0");
130  addParm("Keep Mesh","Keep the existing mesh","No",booleanChoice());
131  }
132 
133  bool run()
134  {
135  Mesh *mesh = currentMesh();
136 
137  bool addEdgePoints = true;
138 
139  bool res = run(mesh, parm("Length").toDouble(), parm("Tri Size").toDouble(), stringToBool(parm("Keep Mesh")), addEdgePoints);
140 
141  // bool res = run(mesh, parm("Radius X").toDouble(), parm("Radius Y").toDouble(), parm("Corner Points").toInt(),
142  // parm("Segment").toDouble(), parm("Shift X").toDouble(), parm("Shift Y").toDouble(), stringToBool(parm("Shift Y")), parm("Keep Mesh").toDouble(), addEdgePoints);
143  if(res)
144  mesh->setShowMesh();
145  return res;
146  }
147  bool run(Mesh *mesh, double length, double triSize, bool keep, bool addEdgePoints);
148 
149  };
150 
151 
152 
153 
154  void drawPlane(const Process& process, Mesh *m, DivisionPlane& vtxTris, Point3d scalingNormal = Point3d(0,0,0), double scalingFac = 1);
155 
156 
157 
158  //void simulateDivision2D(const vvGraph& S, const vertex& vc, std::vector<P3dDouble>& samplingDirections, Point3d& shortestPlaneNrml, double& shortesPlaneDispl);
159 
160  void simulateDivision2D(std::vector<vertex>& cellContour, Point3d& divP, Point3d divNormal, std::vector<P3dDouble>& samplingDirections, std::vector<CellDivision>& allDivisions,
161  Point3d& shortestPlaneNrml, double& shortesPlaneDispl);
162 
163 
164 
165 }
166 
167 #endif
mgx::DivisionPlane
Definition: DivisionAnalysisData.hpp:22
mgx::DivisionPlane::label
int label
Definition: DivisionAnalysisData.hpp:31
mgx::DivisionAnalysisData::cellNormalMap
std::map< int, Point3d > cellNormalMap
Definition: DivisionAnalysisData.hpp:49
mgx::DivisionAnalysisData::divPlaneShortest
DivisionPlane divPlaneShortest
Definition: DivisionAnalysisData.hpp:55
Process.hpp
mgx::DivisionAnalysisData::cellBetwMap
std::map< cell, double > cellBetwMap
Definition: DivisionAnalysisData.hpp:51
mgx::DivisionAnalysisConfig::cellNormalMap
std::map< int, Point3d > cellNormalMap
Definition: DivisionAnalysisData.hpp:42
mgx::DivisionPlane::vtxs
std::vector< vertex > vtxs
Definition: DivisionAnalysisData.hpp:25
mgx::DivisionAnalysisData::optimalPlane
DivisionPlane optimalPlane
Definition: DivisionAnalysisData.hpp:61
mgx::MakeMeshTetraDA::run
bool run()
Runs the process.
Definition: DivisionAnalysisData.hpp:133
mgx::simulateDivision2D
void simulateDivision2D(std::vector< vertex > &cellContour, Point3d &divP, Point3d divNormal, std::vector< P3dDouble > &samplingDirections, std::vector< CellDivision > &allDivisions, Point3d &shortestPlaneNrml, double &shortesPlaneDispl)
mgx::drawPlane
void drawPlane(const Process &process, Mesh *m, DivisionPlane &vtxTris, Point3d scalingNormal=Point3d(0, 0, 0), double scalingFac=1)
mgx::DivisionAnalysisData::cellCurrentFlowMap
std::map< cell, double > cellCurrentFlowMap
Definition: DivisionAnalysisData.hpp:52
Geometry.hpp
mgx::Mesh::setShowMesh
void setShowMesh(bool show=true)
Set the mesh visibility.
Definition: Mesh.hpp:743
mgx
Distributed matrix library.
Definition: Assert.hpp:26
DivisionAnalysisUtils.hpp
CellDivision.hpp
CellTissue.hpp
mgx::MakeMeshCircleDA::run
bool run()
Runs the process.
Definition: DivisionAnalysisData.hpp:94
mgx::MakeMeshCircleDA
Definition: DivisionAnalysisData.hpp:74
mgx::DivisionPlane::size
double size
Definition: DivisionAnalysisData.hpp:28
mgx::Process
Definition: Process.hpp:219
mgx::DivisionPlane::DivisionPlane
DivisionPlane()
Definition: DivisionAnalysisData.hpp:33
mgx::DivisionPlane::planeNrml
Point3d planeNrml
Definition: DivisionAnalysisData.hpp:29
mgx::stringToBool
mgx_EXPORT bool stringToBool(const QString &string)
Helper function converting a string into a boolean.
mgx::DivisionPlane::DivisionPlane
DivisionPlane(double size, Point3d planeNrml, Point3d planePos, int label)
Definition: DivisionAnalysisData.hpp:34
mgx::Point3d
Vector< 3, double > Point3d
Definition: Geometry.hpp:56
mgx::DivisionAnalysisConfig
Definition: DivisionAnalysisData.hpp:39
mgx::DivisionAnalysisData::divPlaneShortestBest
DivisionPlane divPlaneShortestBest
Definition: DivisionAnalysisData.hpp:56
mgx::DivisionAnalysisData
Definition: DivisionAnalysisData.hpp:46
mgx::MakeMeshCircleDA::MakeMeshCircleDA
MakeMeshCircleDA(const Process &process)
Definition: DivisionAnalysisData.hpp:77
mgx::MakeMeshTetraDA
Definition: DivisionAnalysisData.hpp:119
mgx::MakeMeshTetraDA::MakeMeshTetraDA
MakeMeshTetraDA(const Process &process)
Definition: DivisionAnalysisData.hpp:122
mgx::Mesh
Definition: Mesh.hpp:54
mgx::DivisionAnalysisData::divPlaneShortestBestRW
DivisionPlane divPlaneShortestBestRW
Definition: DivisionAnalysisData.hpp:57
mgx::Vector< 3, double >
mgx::DivisionAnalysisData::divData
std::vector< CellDivision > divData
Definition: DivisionAnalysisData.hpp:59
Function.hpp
mgx::DivisionPlane::tris
std::vector< Point3i > tris
Definition: DivisionAnalysisData.hpp:26
mgx::DivisionAnalysisData::divPlaneFlat
DivisionPlane divPlaneFlat
Definition: DivisionAnalysisData.hpp:54
mgx::DivisionPlane::planePos
Point3d planePos
Definition: DivisionAnalysisData.hpp:30
mgx::DivisionAnalysisData::customPlanes
std::vector< DivisionPlane > customPlanes
Definition: DivisionAnalysisData.hpp:63