Computer Assited Medical Intervention Tool Kit  version 5.0
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-2021 Univ. Grenoble Alpes, CNRS, Grenoble INP, 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
33namespace physicalModel {
34class Cell;
35}
36
37class CellProperties;
46class Cell : public Structure, public StructuralComponent {
47public:
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
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
158private:
161
162};
163
164// ------- INLINE -----------
165inline 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
const StructuralComponent * getParentSC()
Get the direct parent structural that own this cell.
Definition: Cell.h:151
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 * parentSC
Keep a reference to the direct parent structural component.
Definition: Cell.h:160
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
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