Computer Assisted Medical Intervention Tool Kit  version 5.2
Cell.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * $CAMITK_LICENCE_BEGIN$
3  *
4  * CamiTK - Computer Assisted Medical Intervention ToolKit
5  * (c) 2001-2024 Univ. Grenoble Alpes, CNRS, Grenoble INP - UGA, TIMC, 38000 Grenoble, France
6  *
7  * Visit http://camitk.imag.fr for more information
8  *
9  * This file is part of CamiTK.
10  *
11  * CamiTK is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * CamiTK is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU Lesser General Public License version 3 for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public License
21  * version 3 along with CamiTK. If not, see <http://www.gnu.org/licenses/>.
22  *
23  * $CAMITK_LICENCE_END$
24  ****************************************************************************/
25 
26 #ifndef CELL_H
27 #define CELL_H
28 
29 #include "Structure.h"
30 #include "StructuralComponent.h"
31 
32 //pmlschema forward declarations
33 namespace physicalModel {
34 class Cell;
35 }
36 
37 class CellProperties;
46 class Cell : public Structure, public StructuralComponent {
47 public:
53 
59  Cell(PhysicalModel* myPM, physicalModel::Cell xmlCell, StructuralComponent* sc);
60 
66  Cell(PhysicalModel* myPM, const StructureProperties::GeometricType t, const unsigned int ind);
67 
69  ~Cell() override;
70 
76 // as Cell inherits both Structure and StructuralComponent, it is correct to override
77 // the xmlPrint in StructuralComponent while reimplementing xmlPrint from Structure
78 #if defined(__has_warning)
79 # pragma GCC diagnostic push
80 # if __has_warning("-Woverloaded-virtual")
81 # pragma GCC diagnostic ignored "-Woverloaded-virtual"
82 # endif
83 #endif
84  void xmlPrint(std::ostream&, const StructuralComponent*) override;
85 #if defined(__has_warning)
86 # pragma GCC diagnostic pop
87 #endif
88 
89 
91  bool isInstanceOf(const char*) const override;
92 
99  void deleteAllStructures() override;
100 
103 
106 
110  bool makePrintData(const StructuralComponent*);
111 
118  bool setIndex(const unsigned int) override;
119 
123  double* normal();
124 
127 
130 
132  double surface();
133 
135  double volume();
136 
148  double signedVolumeTriangle(double p1[3], double p2[3], double p3[3]);
149 
152  return this->parentSC;
153  }
154 
157 
158 private:
160  StructuralComponent* parentSC;
161 
162 };
163 
164 // ------- INLINE -----------
165 inline bool Cell::isInstanceOf(const char* className) const {
166  return (std::string(className) == std::string("Cell"));
167 }
168 
171 }
172 
175  if (!parentSC) {
176  parentSC = sc;
177  }
178 }
179 
180 #endif //CELL_H
Describes and manages the properties attached to cells.
Definition: CellProperties.h:44
A cell has an unique index in the physical model object, is composed by atoms, and different basic pr...
Definition: Cell.h:46
bool isInstanceOf(const char *) const override
return true only if the parameter is equal to "MultiComponent"
Definition: Cell.h:165
double signedVolumeTriangle(double p1[3], double p2[3], double p3[3])
Compute the volume of a triangle with the origin of the coordinate system.
Definition: Cell.cpp:598
Cell(PhysicalModel *myPM, const StructureProperties::GeometricType t)
constructor that generates a unique index
Definition: Cell.cpp:36
void deleteAllStructures() override
This method overload the one defined in StructuralComponent.
Definition: Cell.cpp:215
bool setIndex(const unsigned int) override
set the index.
Definition: Cell.cpp:139
double surface()
Compute the surface of the cell.
Definition: Cell.cpp:492
StructuralComponent * getQuadFaces()
Return a new structural component directly representing the Cell as a list of quad faces (when possib...
Definition: Cell.cpp:385
StructuralComponent::ComposedBy composedBy() override
overloaded from Structural component, always return StructuralComponent::ATOMS
Definition: Cell.h:169
StructuralComponent * getTriangleFaces()
Return a new structural component directly representing the Cell as a list of triangular faces (when ...
Definition: Cell.cpp:231
CellProperties * getProperties()
return the property
Definition: Cell.cpp:226
bool makePrintData(const StructuralComponent *)
is this sc the one that will be the one that will make the cell to print out all its data or is this ...
Definition: Cell.cpp:147
const StructuralComponent * getParentSC()
Get the direct parent structural that own this cell.
Definition: Cell.h:151
double * normal()
compute the normal of the facet Warning : Only available for QUAD and TRIANGLE type cells
Definition: Cell.cpp:460
double volume()
Compute the volume of the cell.
Definition: Cell.cpp:545
void xmlPrint(std::ostream &, const StructuralComponent *) override
print to an output stream in "pseudo" XML format.
Definition: Cell.cpp:179
void addStructuralComponent(StructuralComponent *) override
add a particular StructuralComponent in the list (and set parentSC if null)
Definition: Cell.h:173
~Cell() override
the destructor, my tailor. BECAREFUL: the atoms should not not be deleted here...
Definition: Cell.cpp:118
This is the main class of this project.
Definition: PhysicalModel.h:86
A structural component is composed either by cell or by atoms.
Definition: StructuralComponent.h:52
ComposedBy
What this structural component is made of.
Definition: StructuralComponent.h:173
@ ATOMS
the structural component is made of atoms
Definition: StructuralComponent.h:176
GeometricType
Geometric type gives information about which kind of geometric representation is the structure.
Definition: StructureProperties.h:107
Pure virtual class that represent an element of the structure.
Definition: Structure.h:43
virtual void addStructuralComponent(StructuralComponent *)
add a particular StructuralComponent in the list
Definition: Structure.h:128
Definition: Atom.h:36