MorphoGraphX  2.0-1-227
DynamXProcessBezierSurface.hpp
Go to the documentation of this file.
1 //
2 // This file is part of MorphoGraphX - http://www.MorphoGraphX.org
3 // Copyright (C) 2012-2016 Richard S. Smith and collaborators.
4 //
5 // If you use MorphoGraphX in your work, please cite:
6 // http://dx.doi.org/10.7554/eLife.05864
7 //
8 // MorphoGraphX is free software, and is licensed under under the terms of the
9 // GNU General (GPL) Public License version 2.0, http://www.gnu.org/licenses.
10 //
11 
12 #ifndef DYNAMX_PROCESS_BEZIER_SURFACE_HPP
13 #define DYNAMX_PROCESS_BEZIER_SURFACE_HPP
14 
15 #include <Process.hpp>
16 #include <BezierSurface.hpp>
17 
18 namespace mgx
19 {
20  // Class to hold bezier surface parameters
21  class mgxBase_EXPORT BezierSurfaceParms : public Process
22  {
23  public:
24  BezierSurfaceParms(const Process &process) : Process(process) {}
25 
26  // Don't do anything, process is only for parms
27  bool run(const QStringList &) { return true; }
28 
29  // Functions for Gui
30  QString description() const { return "Parameters for growth simulations using Bezier surfaces"; }
31 
32  QStringList parmNames() const
33  {
34  // make a vector of size pNumParms containing the names of parameters for the GUI
35  QVector <QString> vec(BezierSurface::pNumParms);
36 
37  vec[BezierSurface::pSurface] = "Surfaces";
38  vec[BezierSurface::pSurfScale] = "SurfScales";
39  vec[BezierSurface::pSurfTime] = "SurfTimes";
40  vec[BezierSurface::pSurfMaxDist] = "SurfMaxDist";
41  vec[BezierSurface::pRootSearchMaxSteps] = "RootSearchMaxSteps";
42 
43  return vec.toList();
44  }
45  QStringList parmDescs() const
46  {
47  QVector <QString> vec(BezierSurface::pNumParms);
48 
49  vec[BezierSurface::pSurface] = "Bezier surfaces to define leaf shape";
50  vec[BezierSurface::pSurfScale] = "Scale factors";
51  vec[BezierSurface::pSurfTime] = "Time factors";
52  vec[BezierSurface::pSurfMaxDist] = "Max distance from surface for closest point search";
53  vec[BezierSurface::pRootSearchMaxSteps] = "Max number of iterations for point inversion";
54 
55  return vec.toList();
56  }
57  QStringList parmDefaults() const
58  {
59  QVector <QString> vec(BezierSurface::pNumParms);
60 
61  vec[BezierSurface::pSurface] = "leaf1.bez leaf2.bez";
62  vec[BezierSurface::pSurfScale] = "1 10";
63  vec[BezierSurface::pSurfTime] = "1 10";
64  vec[BezierSurface::pSurfMaxDist] = "0.2";
66 
67  return vec.toList();
68  }
69  // Icon file
70  QIcon icon() const { return QIcon(":/images/Parameters.png"); }
71  };
72 
73  class mgxBase_EXPORT BezierSurfaceGrowth : public Process
74  {
75  public:
76  BezierSurfaceGrowth(const Process &process) : Process(process) {}
77 
78  // Initialize the surface
79  bool initialize(QStringList &parms, QWidget *parent);
80 
81  // Run a step of the growth
82  bool step(const QStringList &parms);
83 
84  // Rewind the surface
85  bool rewind(QStringList &parms, QWidget *parent);
86 
87  // Process long description
88  QString description() const { return "Growing Bezier surface"; }
89 
90  // Parameters
91  enum ParmNames { pDt, pDrawSteps, pCellInitWalls, pCellInitSize,
92  pTissueParmsProc, pSurfaceParmsProc, pNumParms };
93 
94  QStringList parmNames() const
95  {
96  QVector <QString> vec(pNumParms);
97 
98  vec[pDt] = "Dt";
99  vec[pDrawSteps] = "DrawSteps";
100  vec[pCellInitWalls] = "CellInitWalls";
101  vec[pCellInitSize] = "CellInitSize";
102  vec[pTissueParmsProc] = "Tissue Parms Process";
103  vec[pSurfaceParmsProc] = "Surface Parms Process";
104 
105  return vec.toList();
106  }
107 
108  QStringList parmDescs() const
109  {
110  QVector <QString> vec(pNumParms);
111 
112  vec[pDt] = "Growth timestep";
113  vec[pDrawSteps] = "Steps between drawn frames";
114  vec[pCellInitWalls] = "Initial cell walls";
115  vec[pCellInitSize] = "Size of initial cell";
116  vec[pTissueParmsProc] = "Process to hold tissue parameters";
117  vec[pSurfaceParmsProc] = "Process to hold surface parameters";
118 
119  return vec.toList();
120  }
121 
122  QStringList parmDefaults() const
123  {
124  QVector <QString> vec(pNumParms);
125 
126  vec[pDt] = "0.1";
127  vec[pDrawSteps] = "3";
128  vec[pCellInitWalls] = "100";
129  vec[pCellInitSize] = "1.0";
130  vec[pTissueParmsProc] = "TissueParms";
131  vec[pSurfaceParmsProc] = "SurfaceParms";
132 
133  return vec.toList();
134  }
135 
136  // Plug-in icon
137  QIcon icon() const { return QIcon(":/images/BezierLeaf.png"); }
138 
139  // Bezier surface
141 
142  private:
143  // Read parameters
144  bool processParms(const QStringList &parms);
145 
146  // Model parameters from GUI
147  double dt; // Timestep
148  int drawSteps; // Steps per GUI update
149  int cellInitWalls; // Initial cell number of walls
150  double cellInitSize; // Initial cell size
151 
152  // Mesh object
153  Mesh *mesh; // Current mesh
154  CellTissue *T; // Cellular tissue
155 
156  // Bezier vertex atttributes
157  BezierSurface::VertexAttr *vertexAttr;
158 
159  // Define all global data you want to save in the mesh in the attributes
160  double &time()
161  {
162  return mesh->attributes().attrMap<QString, double>("BezierSurface Time")["Time"];
163  }
164  };
165 
166 }
167 #endif
168 
mgx::BezierSurfaceParms::parmDescs
QStringList parmDescs() const
Definition: DynamXProcessBezierSurface.hpp:45
mgx::BezierSurface::pSurface
@ pSurface
Definition: BezierSurface.hpp:31
mgx::BezierSurface::pSurfScale
@ pSurfScale
Definition: BezierSurface.hpp:31
mgx::BezierSurfaceGrowth::pTissueParmsProc
@ pTissueParmsProc
Definition: DynamXProcessBezierSurface.hpp:92
Process.hpp
mgx::Mesh::attributes
const Attributes & attributes() const
Get the mesh attributes.
Definition: Mesh.hpp:187
mgx::BezierSurfaceGrowth::BezierSurfaceGrowth
BezierSurfaceGrowth(const Process &process)
Definition: DynamXProcessBezierSurface.hpp:76
mgx::BezierSurfaceParms::run
bool run(const QStringList &)
Definition: DynamXProcessBezierSurface.hpp:27
mgx::CellTissue
Definition: CellTissue.hpp:46
mgx::BezierSurfaceGrowth::bezierSurface
BezierSurface bezierSurface
Definition: DynamXProcessBezierSurface.hpp:140
mgx::BezierSurface::pSurfTime
@ pSurfTime
Definition: BezierSurface.hpp:31
mgx::BezierSurface
Definition: BezierSurface.hpp:27
mgx::BezierSurfaceParms::BezierSurfaceParms
BezierSurfaceParms(const Process &process)
Definition: DynamXProcessBezierSurface.hpp:24
mgx
Distributed matrix library.
Definition: Assert.hpp:26
mgx::BezierSurfaceGrowth::icon
QIcon icon() const
Definition: DynamXProcessBezierSurface.hpp:137
mgx::BezierSurface::pRootSearchMaxSteps
@ pRootSearchMaxSteps
Definition: BezierSurface.hpp:31
mgx::Process
Definition: Process.hpp:219
mgx::Attributes::attrMap
AttrMap< KeyT, ValueT > & attrMap(const QString &name, bool saveRequired=true)
Get the attribute, if it does not exist create it and add to the set If it exists,...
Definition: Attributes.hpp:1116
mgx::BezierSurface::pSurfMaxDist
@ pSurfMaxDist
Definition: BezierSurface.hpp:31
BezierSurface.hpp
mgx::Mesh
Definition: Mesh.hpp:54
mgx::BezierSurfaceParms::parmDefaults
QStringList parmDefaults() const
Definition: DynamXProcessBezierSurface.hpp:57
mgx::BezierSurfaceGrowth::parmDefaults
QStringList parmDefaults() const
Definition: DynamXProcessBezierSurface.hpp:122
mgx::BezierSurfaceGrowth
Definition: DynamXProcessBezierSurface.hpp:73
mgx::BezierSurfaceParms::description
QString description() const
Definition: DynamXProcessBezierSurface.hpp:30
mgx::BezierSurfaceParms::icon
QIcon icon() const
Definition: DynamXProcessBezierSurface.hpp:70
mgx::BezierSurfaceGrowth::parmNames
QStringList parmNames() const
Definition: DynamXProcessBezierSurface.hpp:94
mgx::BezierSurfaceGrowth::parmDescs
QStringList parmDescs() const
Definition: DynamXProcessBezierSurface.hpp:108
mgx::BezierSurface::pNumParms
@ pNumParms
Definition: BezierSurface.hpp:31
mgx::BezierSurfaceGrowth::pDt
@ pDt
Definition: DynamXProcessBezierSurface.hpp:91
mgx::BezierSurfaceParms
Definition: DynamXProcessBezierSurface.hpp:21
mgx::BezierSurfaceGrowth::ParmNames
ParmNames
Definition: DynamXProcessBezierSurface.hpp:91
mgx::AttrMap
Attribute map wraps std::map.
Definition: Attributes.hpp:686
mgx::BezierSurfaceGrowth::description
QString description() const
Definition: DynamXProcessBezierSurface.hpp:88
mgx::BezierSurfaceParms::parmNames
QStringList parmNames() const
Definition: DynamXProcessBezierSurface.hpp:32