Open Inventor
Release 2023.2.3
Loading...
Searching...
No Matches
MxTetrahedronCellExtract.h
Go to the documentation of this file.
1
/*=======================================================================
2
*** THE CONTENT OF THIS WORK IS PROPRIETARY TO FEI S.A.S, (FEI S.A.S.), ***
3
*** AND IS DISTRIBUTED UNDER A LICENSE AGREEMENT. ***
4
*** ***
5
*** REPRODUCTION, DISCLOSURE, OR USE, IN WHOLE OR IN PART, OTHER THAN AS ***
6
*** SPECIFIED IN THE LICENSE ARE NOT TO BE UNDERTAKEN EXCEPT WITH PRIOR ***
7
*** WRITTEN AUTHORIZATION OF FEI S.A.S. ***
8
*** ***
9
*** RESTRICTED RIGHTS LEGEND ***
10
*** USE, DUPLICATION, OR DISCLOSURE BY THE GOVERNMENT OF THE CONTENT OF THIS ***
11
*** WORK OR RELATED DOCUMENTATION IS SUBJECT TO RESTRICTIONS AS SET FORTH IN ***
12
*** SUBPARAGRAPH (C)(1) OF THE COMMERCIAL COMPUTER SOFTWARE RESTRICTED RIGHT ***
13
*** CLAUSE AT FAR 52.227-19 OR SUBPARAGRAPH (C)(1)(II) OF THE RIGHTS IN ***
14
*** TECHNICAL DATA AND COMPUTER SOFTWARE CLAUSE AT DFARS 52.227-7013. ***
15
*** ***
16
*** COPYRIGHT (C) 1996-2017 BY FEI S.A.S, ***
17
*** BORDEAUX, FRANCE ***
18
*** ALL RIGHTS RESERVED ***
19
**=======================================================================*/
20
/*=======================================================================
21
** Author : VSG (MMM YYYY)
22
**=======================================================================*/
23
#ifndef _MxTetrahedronCellExtract_h
24
#define _MxTetrahedronCellExtract_h
25
26
#include <
MeshVizXLM/mesh/geometry/MiGeometryI.h
>
27
28
#include <Inventor/STL/vector>
29
#include <Inventor/STL/utility>
30
31
class
MxTabOfMarchingCase;
32
class
MiVolumeCell
;
33
59
class
MESHVIZXLM_EXTR_API
MxTetrahedronCellExtract
60
{
61
public
:
62
68
static
void
getIsosurfTopology
(
unsigned
char
caseId, std::vector< std::pair<size_t,size_t> >& edgeList );
69
83
static
MbVec3d
getIsoParametricCoord
(
const
MiGeometryI
& meshGeometry,
const
MiVolumeCell
* tetrahedronCell,
const
MbVec3d
&point);
84
90
static
MbVec3d
getIsoParametricCoord
(
size_t
nodeIndex)
91
{
92
return
MbVec3d
(s_nodesIsoParametricCoords[nodeIndex]);
93
}
94
114
static
void
getWeight
(
const
MiGeometryI
& meshGeometry,
const
MiVolumeCell
* tetrahedronCell,
const
MbVec3d
&point, std::vector<double>& weights)
115
{
116
MbVec3d
ipcoord =
getIsoParametricCoord
(meshGeometry,tetrahedronCell,point);
117
getWeight
(ipcoord,weights);
118
}
119
132
static
void
getWeight
(
const
MbVec3d
&ipcoord, std::vector<double>& weights)
133
{
134
ipcoord.
getValue
(weights[1],weights[2],weights[3]);
135
weights[0] = 1.0 - weights[1] - weights[2] - weights[3];
136
}
137
149
static
void
getDerivs
(
const
MbVec3d
&ipcoord, std::vector<double>& derivs);
150
164
static
bool
isPointInsideCell
(
const
MiGeometryI
& meshGeometry,
const
MiVolumeCell
* tetrahedronCell,
const
MbVec3d
&point, std::vector<double>& weights)
165
{
166
getWeight
(
getIsoParametricCoord
(meshGeometry,tetrahedronCell,point),weights);
167
return
( -1.E-5 < weights[0] && weights[0] < 1 + 1.E-5 &&
168
-1.E-5 < weights[1] && weights[1] < 1 + 1.E-5 &&
169
-1.E-5 < weights[2] && weights[2] < 1 + 1.E-5 &&
170
-1.E-5 < weights[3] && weights[3] < 1 + 1.E-5);
171
}
172
176
static
double
getVolume
(
const
MiGeometryI
& meshGeometry,
const
MiVolumeCell
* tetrahedronCell);
177
181
static
MbVec3d
getFacetNormal
(
size_t
facetId,
const
MiGeometryI
& meshGeometry,
const
MiVolumeCell
* tetrahedronCell);
182
186
static
double
getLongestEdgeLength
(
const
MiGeometryI
& meshGeometry,
const
MiVolumeCell
* cell);
187
191
static
double
getShortestEdgeLength
(
const
MiGeometryI
& meshGeometry,
const
MiVolumeCell
* cell);
192
193
private
:
194
195
static
bool
initClass();
196
static
void
exitClass();
197
198
static
void
initMarchingCase0();
199
static
void
initMarchingCase1();
200
static
void
initMarchingCase2();
201
202
static
bool
s_isInit;
203
static
MxTabOfMarchingCase* s_tabOfMarchingTetra;
204
static
double
s_nodesIsoParametricCoords[4][3];
205
};
206
207
#endif
208
MiGeometryI.h
getWeight
static void getWeight(const MiGeometryI &meshGeometry, const MiVolumeCell *hexahedronCell, const MbVec3d &point, std::vector< double > &weights)
Gets the weights of a point in a cell.
Definition
MxHexahedron21CellExtract.h:70
getIsoParametricCoord
static MbVec3d getIsoParametricCoord(size_t nodeIndex)
<a href="IconLegend.html"><img src="extMV.gif" alt="MeshViz" border="0"></a> Utility class for quadra...
MESHVIZXLM_EXTR_API
#define MESHVIZXLM_EXTR_API
Definition
MxMeshVizXLM.h:48
MbVec3< double >
MbVec3::getValue
const _T * getValue() const
Returns pointer to vector components.
Definition
MbVec3.h:183
MiGeometryI
<a href="IconLegend.html"><img src="extMV.gif" alt="MeshViz" border="0"></a> Generic geometry interfa...
Definition
MiGeometryI.h:39
MiVolumeCell
<a href="IconLegend.html"><img src="extMV.gif" alt="MeshViz" border="0"></a> Defines an abstract cell...
Definition
MiVolumeCell.h:89
MxTetrahedronCellExtract
<a href="IconLegend.html"><img src="extMV.gif" alt="MeshViz" border="0"></a> Utility class for tetrah...
Definition
MxTetrahedronCellExtract.h:60
MxTetrahedronCellExtract::getDerivs
static void getDerivs(const MbVec3d &ipcoord, std::vector< double > &derivs)
Gets the value of the derivatives of the shape functions (aka weights) at the point given by its iso ...
MxTetrahedronCellExtract::getWeight
static void getWeight(const MbVec3d &ipcoord, std::vector< double > &weights)
Gets the weights of a point defined by its iso parametric coordinates.
Definition
MxTetrahedronCellExtract.h:132
MxTetrahedronCellExtract::getVolume
static double getVolume(const MiGeometryI &meshGeometry, const MiVolumeCell *tetrahedronCell)
Gets the volume of a tetrahedron cell.
MxTetrahedronCellExtract::getFacetNormal
static MbVec3d getFacetNormal(size_t facetId, const MiGeometryI &meshGeometry, const MiVolumeCell *tetrahedronCell)
Gets the normal of the given facet in a tetrahedron cell.
MxTetrahedronCellExtract::getLongestEdgeLength
static double getLongestEdgeLength(const MiGeometryI &meshGeometry, const MiVolumeCell *cell)
Gets the longest edge of a tetrahedron cell.
MxTetrahedronCellExtract::getIsosurfTopology
static void getIsosurfTopology(unsigned char caseId, std::vector< std::pair< size_t, size_t > > &edgeList)
Returns the isosurface topology of the associated caseId.
MxTetrahedronCellExtract::getWeight
static void getWeight(const MiGeometryI &meshGeometry, const MiVolumeCell *tetrahedronCell, const MbVec3d &point, std::vector< double > &weights)
Gets the weights in the given cell of the given point.
Definition
MxTetrahedronCellExtract.h:114
MxTetrahedronCellExtract::getIsoParametricCoord
static MbVec3d getIsoParametricCoord(const MiGeometryI &meshGeometry, const MiVolumeCell *tetrahedronCell, const MbVec3d &point)
Computes the iso parametric coordinates of the given point in the given cell with the given geometry.
MxTetrahedronCellExtract::getShortestEdgeLength
static double getShortestEdgeLength(const MiGeometryI &meshGeometry, const MiVolumeCell *cell)
Gets the shortest edge of a tetrahedron cell.
MxTetrahedronCellExtract::isPointInsideCell
static bool isPointInsideCell(const MiGeometryI &meshGeometry, const MiVolumeCell *tetrahedronCell, const MbVec3d &point, std::vector< double > &weights)
Checks if a point is inside or outside a tetrahedron cell.
Definition
MxTetrahedronCellExtract.h:164
MxTetrahedronCellExtract::getIsoParametricCoord
static MbVec3d getIsoParametricCoord(size_t nodeIndex)
Returns the iso parametric coordinates of one of the 4 nodes of a tetrahedron cell.
Definition
MxTetrahedronCellExtract.h:90
MbVec3d
MbVec3< double > MbVec3d
Vector of 3 double coordinates.
Definition
MbVec3.h:532
MeshVizXLM
extractors
MxTetrahedronCellExtract.h
Generated by
1.9.8