fix biquadratic quadratic pentahedron(18 nodes prism)

This commit is contained in:
Paul RASCLE 2017-09-14 22:28:11 +02:00
parent 2077baef82
commit 09ff68516f
15 changed files with 159 additions and 86 deletions

View File

@ -493,6 +493,7 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
case ePYRA13: aNbNodes = 13; break;
case ePENTA6: aNbNodes = 6; break;
case ePENTA15: aNbNodes = 15; break;
case ePENTA18: aNbNodes = 18; break;
case eHEXA8: aNbNodes = 8; break;
case eHEXA20: aNbNodes = 20; break;
case eHEXA27: aNbNodes = 27; break;
@ -811,6 +812,41 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
isRenum = anIsElemNum;
}
break;
case ePENTA18:
aNbNodes = 18;
if(anIsElemNum)
anElement = myMesh->AddVolumeWithID(aNodeIds[0], aNodeIds[1],
aNodeIds[2], aNodeIds[3],
aNodeIds[4], aNodeIds[5],
aNodeIds[6], aNodeIds[7],
aNodeIds[8], aNodeIds[9],
aNodeIds[10], aNodeIds[11],
aNodeIds[12], aNodeIds[13],
aNodeIds[14], aNodeIds[15],
aNodeIds[16], aNodeIds[17],
aCellInfo->GetElemNum(iElem));
if (!anElement) {
anElement = myMesh->AddVolume(FindNode(myMesh,aNodeIds[0]),
FindNode(myMesh,aNodeIds[1]),
FindNode(myMesh,aNodeIds[2]),
FindNode(myMesh,aNodeIds[3]),
FindNode(myMesh,aNodeIds[4]),
FindNode(myMesh,aNodeIds[5]),
FindNode(myMesh,aNodeIds[6]),
FindNode(myMesh,aNodeIds[7]),
FindNode(myMesh,aNodeIds[8]),
FindNode(myMesh,aNodeIds[9]),
FindNode(myMesh,aNodeIds[10]),
FindNode(myMesh,aNodeIds[11]),
FindNode(myMesh,aNodeIds[12]),
FindNode(myMesh,aNodeIds[13]),
FindNode(myMesh,aNodeIds[14]),
FindNode(myMesh,aNodeIds[15]),
FindNode(myMesh,aNodeIds[16]),
FindNode(myMesh,aNodeIds[17]));
isRenum = anIsElemNum;
}
break;
case eHEXA8:
aNbNodes = 8;
if(anIsElemNum)

View File

@ -703,7 +703,11 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
SMDSAbs_Volume));
aTElemTypeDatas.push_back( TElemTypeData(anEntity,
ePENTA15,
nbElemInfo.NbPrisms( ORDER_QUADRATIC ),
nbElemInfo.NbQuadPrisms(),
SMDSAbs_Volume));
aTElemTypeDatas.push_back( TElemTypeData(anEntity,
ePENTA18,
nbElemInfo.NbBiQuadPrisms(),
SMDSAbs_Volume));
aTElemTypeDatas.push_back( TElemTypeData(anEntity,
eHEXA8,
@ -943,7 +947,6 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
{
// Treat standard types
// ---------------------
// allocate data arrays
PCellInfo aCellInfo = myMed->CrCellInfo( aMeshInfo,
aElemTypeData->_entity,
@ -955,7 +958,6 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
// build map of family numbers for this type
if ( !isElemFamMapBuilt[ aElemTypeData->_smdsType ])
{
//cout << " fillElemFamilyMap()" << endl;
fillElemFamilyMap( anElemFamMap, aFamilies, aElemTypeData->_smdsType );
isElemFamMapBuilt[ aElemTypeData->_smdsType ] = true;
}
@ -993,10 +995,7 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
// store data in a file
myMed->SetCellInfo(aCellInfo);
}
} // loop on geom types
}
catch(const std::exception& exc) {
INFOS("The following exception was caught:\n\t"<<exc.what());

View File

@ -27,7 +27,7 @@
#ifdef WIN32
#pragma warning(disable:4250)
#endif
#include <utilities.h>
namespace MED
{
//---------------------------------------------------------------

View File

@ -93,6 +93,7 @@ bool InitEntity2GeomSet()
aGeomMAILLESet.insert(eTETRA10);
aGeomMAILLESet.insert(ePYRA13);
aGeomMAILLESet.insert(ePENTA15);
aGeomMAILLESet.insert(ePENTA18);
aGeomMAILLESet.insert(eHEXA20);
aGeomMAILLESet.insert(eHEXA27);
aGeomMAILLESet.insert(ePOLYEDRE);

View File

@ -279,6 +279,7 @@ SMESH_ActorDef::SMESH_ActorDef()
aFilter->RegisterCellsWithType(VTK_QUADRATIC_HEXAHEDRON);
aFilter->RegisterCellsWithType(VTK_TRIQUADRATIC_HEXAHEDRON);
aFilter->RegisterCellsWithType(VTK_QUADRATIC_WEDGE);
aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUADRATIC_WEDGE);
aFilter->RegisterCellsWithType(VTK_QUADRATIC_PYRAMID);
aFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET);
aFilter->RegisterCellsWithType(VTK_POLYHEDRON);
@ -310,6 +311,7 @@ SMESH_ActorDef::SMESH_ActorDef()
aFilter->RegisterCellsWithType(VTK_QUADRATIC_HEXAHEDRON);
aFilter->RegisterCellsWithType(VTK_TRIQUADRATIC_HEXAHEDRON);
aFilter->RegisterCellsWithType(VTK_QUADRATIC_WEDGE);
aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUADRATIC_WEDGE);
aFilter->RegisterCellsWithType(VTK_QUADRATIC_PYRAMID);
aFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET);
aFilter->RegisterCellsWithType(VTK_POLYHEDRON);
@ -1683,6 +1685,7 @@ void SMESH_ActorDef::SetEntityMode(unsigned int theMode)
aFilter->RegisterCellsWithType(VTK_TRIQUADRATIC_HEXAHEDRON);
aFilter->RegisterCellsWithType(VTK_QUADRATIC_PYRAMID);
aFilter->RegisterCellsWithType(VTK_QUADRATIC_WEDGE);
aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUADRATIC_WEDGE);
aFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET);
aFilter->RegisterCellsWithType(VTK_POLYHEDRON);
@ -1696,6 +1699,7 @@ void SMESH_ActorDef::SetEntityMode(unsigned int theMode)
aHltFilter->RegisterCellsWithType(VTK_QUADRATIC_HEXAHEDRON);
aHltFilter->RegisterCellsWithType(VTK_TRIQUADRATIC_HEXAHEDRON);
aHltFilter->RegisterCellsWithType(VTK_QUADRATIC_WEDGE);
aHltFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUADRATIC_WEDGE);
aHltFilter->RegisterCellsWithType(VTK_QUADRATIC_PYRAMID);
aHltFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET);
aHltFilter->RegisterCellsWithType(VTK_POLYHEDRON);

View File

@ -61,6 +61,7 @@ int SMDS_Downward::getCellDimension(unsigned char cellType)
_cellDimension[VTK_TRIQUADRATIC_HEXAHEDRON] = 3;
_cellDimension[VTK_WEDGE] = 3;
_cellDimension[VTK_QUADRATIC_WEDGE] = 3;
_cellDimension[VTK_BIQUADRATIC_QUADRATIC_WEDGE] = 3;
_cellDimension[VTK_PYRAMID] = 3;
_cellDimension[VTK_QUADRATIC_PYRAMID] = 3;
_cellDimension[VTK_HEXAGONAL_PRISM] = 3;

View File

@ -1556,9 +1556,15 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeFromVtkIdsWithID(const std::vector<vtkIdTyp
case VTK_QUADRATIC_WEDGE:
myInfo.myNbQuadPrisms++;
break;
case VTK_BIQUADRATIC_QUADRATIC_WEDGE:
myInfo.myNbBiQuadPrisms++;
break;
case VTK_QUADRATIC_HEXAHEDRON:
myInfo.myNbQuadHexas++;
break;
case VTK_TRIQUADRATIC_HEXAHEDRON:
myInfo.myNbTriQuadHexas++;
break;
//#ifdef VTK_HAVE_POLYHEDRON
case VTK_POLYHEDRON:
myInfo.myNbPolyhedrons++;
@ -4357,6 +4363,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
const SMDS_MeshNode * n2356,
const SMDS_MeshNode * n1346)
{
//MESSAGE("AddVolume penta18");
int ID = myElementIDFactory->GetFreeID();
SMDS_MeshVolume * v =
SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, n12, n23, n31,
@ -4376,6 +4383,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(int n1, int n2, int n3,
int n14,int n25,int n36,
int n1245, int n2356, int n1346, int ID)
{
//MESSAGE("AddVolumeWithID penta18 " << ID);
return SMDS_Mesh::AddVolumeWithID
((SMDS_MeshNode*) myNodeIDFactory->MeshElement(n1) ,
(SMDS_MeshNode*) myNodeIDFactory->MeshElement(n2) ,
@ -4422,6 +4430,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
const SMDS_MeshNode * n1346,
int ID)
{
//MESSAGE("AddVolumeWithID penta18 "<< ID);
if (!n1 || !n2 || !n3 || !n4 || !n5 || !n6 || !n12 || !n23 ||
!n31 || !n45 || !n56 || !n64 || !n14 || !n25 || !n36 || !n1245 || !n2356 || !n1346)
return 0;
@ -4430,7 +4439,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
return 0;
}
// --- retrieve nodes ID
myNodeIds.resize(15);
myNodeIds.resize(18);
myNodeIds[0] = n1->getVtkId();
myNodeIds[1] = n2->getVtkId();
myNodeIds[2] = n3->getVtkId();

View File

@ -29,6 +29,7 @@
#include "SMESH_SMDS.hxx"
#include "SMDS_MeshElement.hxx"
#include<utilities.h>
class SMDS_EXPORT SMDS_MeshInfo
{
@ -144,26 +145,30 @@ inline SMDS_MeshInfo::SMDS_MeshInfo():
// 15 *
// 16 *
// 17 *
// 18 *
// 19 *
// 18 *
// 19
// 20 *
// 21 *
// 22 *
// 23 *
// 24 *
// 25
// 26
// 21
// 22
// 23
// 24
// 25 *
// 26 *
// 27 *
// 28 *
// 29 *
// 30 *
// 31 *
//
// So to have a unique index for each type basing on nb of nodes, we use a shift:
myShift.resize(SMDSAbs_NbElementTypes, 0);
myShift[ SMDSAbs_Face ] = +15;// 3->18, 4->19, etc.
myShift[ SMDSAbs_Face ] = +22;// 3->25, 4->26, etc.
myShift[ SMDSAbs_Edge ] = +14;// 2->16, 3->17
myShift[ SMDSAbs_0DElement ] = +2; // 1->3
myShift[ SMDSAbs_Ball ] = +1; // 1->2
myNb.resize( index( SMDSAbs_Volume,27 ) + 1, NULL);
myNb.resize( index( SMDSAbs_Face,9 ) + 1, NULL);
myNb[ index( SMDSAbs_Node,1 )] = & myNbNodes;
myNb[ index( SMDSAbs_0DElement,1 )] = & myNb0DElements;
@ -187,6 +192,7 @@ inline SMDS_MeshInfo::SMDS_MeshInfo():
myNb[ index( SMDSAbs_Volume, 12)] = & myNbHexPrism;
myNb[ index( SMDSAbs_Volume, 13)] = & myNbQuadPyramids;
myNb[ index( SMDSAbs_Volume, 15)] = & myNbQuadPrisms;
myNb[ index( SMDSAbs_Volume, 18)] = & myNbBiQuadPrisms;
myNb[ index( SMDSAbs_Volume, 20)] = & myNbQuadHexas;
myNb[ index( SMDSAbs_Volume, 27)] = & myNbTriQuadHexas;
}
@ -282,7 +288,7 @@ SMDS_MeshInfo::NbPyramids(SMDSAbs_ElementOrder order) const
inline int // NbPrisms
SMDS_MeshInfo::NbPrisms (SMDSAbs_ElementOrder order) const
{ return order == ORDER_ANY ? myNbPrisms+myNbQuadPrisms : order == ORDER_LINEAR ? myNbPrisms : myNbQuadPrisms; }
{ return order == ORDER_ANY ? myNbPrisms+myNbQuadPrisms+myNbBiQuadPrisms: order == ORDER_LINEAR ? myNbPrisms : myNbQuadPrisms+myNbBiQuadPrisms; }
inline int // NbHexPrisms
SMDS_MeshInfo::NbHexPrisms (SMDSAbs_ElementOrder order) const
@ -386,7 +392,8 @@ SMDS_MeshInfo::NbElementsOfGeom(SMDSAbs_GeometryType geom) const
myNbQuadHexas +
myNbTriQuadHexas);
case SMDSGeom_PENTA: return (myNbPrisms +
myNbQuadPrisms);
myNbQuadPrisms +
myNbBiQuadPrisms);
case SMDSGeom_HEXAGONAL_PRISM: return myNbHexPrism;
case SMDSGeom_POLYHEDRA: return myNbPolyhedrons;
// Discrete:

View File

@ -170,6 +170,7 @@ int SMDS_VtkVolume::NbFaces() const
case VTK_WEDGE:
case VTK_QUADRATIC_PYRAMID:
case VTK_QUADRATIC_WEDGE:
case VTK_BIQUADRATIC_QUADRATIC_WEDGE:
nbFaces = 5;
break;
case VTK_HEXAHEDRON:
@ -240,6 +241,7 @@ int SMDS_VtkVolume::NbEdges() const
break;
case VTK_WEDGE:
case VTK_QUADRATIC_WEDGE:
case VTK_BIQUADRATIC_QUADRATIC_WEDGE:
nbEdges = 9;
break;
case VTK_HEXAHEDRON:
@ -468,6 +470,7 @@ bool SMDS_VtkVolume::IsQuadratic() const
case VTK_QUADRATIC_TETRA:
case VTK_QUADRATIC_PYRAMID:
case VTK_QUADRATIC_WEDGE:
case VTK_BIQUADRATIC_QUADRATIC_WEDGE:
case VTK_QUADRATIC_HEXAHEDRON:
case VTK_TRIQUADRATIC_HEXAHEDRON:
return true;
@ -498,6 +501,7 @@ bool SMDS_VtkVolume::IsMediumNode(const SMDS_MeshNode* node) const
rankFirstMedium = 5; // medium nodes are of rank 5 to 12
break;
case VTK_QUADRATIC_WEDGE:
case VTK_BIQUADRATIC_QUADRATIC_WEDGE:
rankFirstMedium = 6; // medium nodes are of rank 6 to 14
break;
case VTK_QUADRATIC_HEXAHEDRON:
@ -533,11 +537,12 @@ int SMDS_VtkVolume::NbCornerNodes() const
vtkIdType aVtkType = grid->GetCellType(myVtkID);
switch (aVtkType)
{
case VTK_QUADRATIC_TETRA: return 4;
case VTK_QUADRATIC_PYRAMID: return 5;
case VTK_QUADRATIC_WEDGE: return 6;
case VTK_QUADRATIC_TETRA: return 4;
case VTK_QUADRATIC_PYRAMID: return 5;
case VTK_QUADRATIC_WEDGE:
case VTK_BIQUADRATIC_QUADRATIC_WEDGE: return 6;
case VTK_QUADRATIC_HEXAHEDRON:
case VTK_TRIQUADRATIC_HEXAHEDRON: return 8;
case VTK_TRIQUADRATIC_HEXAHEDRON: return 8;
default:;
}
return NbNodes();
@ -612,6 +617,7 @@ SMDSAbs_GeometryType SMDS_VtkVolume::GetGeomType() const
break;
case VTK_WEDGE:
case VTK_QUADRATIC_WEDGE:
case VTK_BIQUADRATIC_QUADRATIC_WEDGE:
aType = SMDSGeom_PENTA;
break;
case VTK_HEXAHEDRON:

View File

@ -9230,7 +9230,7 @@ int SMESH_MeshEditor::convertElemToQuadratic(SMESHDS_SubMesh * theSm,
SMESH_MesherHelper& theHelper,
const bool theForce3d)
{
MESSAGE("convertElemToQuadratic");
//MESSAGE("convertElemToQuadratic");
int nbElem = 0;
if( !theSm ) return nbElem;
@ -9338,7 +9338,6 @@ int SMESH_MeshEditor::convertElemToQuadratic(SMESHDS_SubMesh * theSm,
case SMDSEntity_Penta:
case SMDSEntity_Quad_Penta:
case SMDSEntity_BiQuad_Penta:
MESSAGE("--- " << aGeomType);
NewElem = theHelper.AddVolume(nodes[0], nodes[1], nodes[2], nodes[3], nodes[4], nodes[5], id, theForce3d);
break;
case SMDSEntity_Hexa:
@ -9369,7 +9368,7 @@ int SMESH_MeshEditor::convertElemToQuadratic(SMESHDS_SubMesh * theSm,
void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d, const bool theToBiQuad)
{
MESSAGE("ConvertToQuadratic "<< theForce3d << " " << theToBiQuad);
//MESSAGE("ConvertToQuadratic "<< theForce3d << " " << theToBiQuad);
SMESHDS_Mesh* meshDS = GetMeshDS();
SMESH_MesherHelper aHelper(*myMesh);
@ -9538,7 +9537,6 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d, const bool theT
case SMDSEntity_Penta:
case SMDSEntity_Quad_Penta:
case SMDSEntity_BiQuad_Penta:
MESSAGE("--- " << type);
NewVolume = aHelper.AddVolume(nodes[0], nodes[1], nodes[2],
nodes[3], nodes[4], nodes[5], id, theForce3d);
for ( size_t i = 15; i < nodes.size(); ++i ) // rm central nodes

View File

@ -4883,7 +4883,7 @@ namespace { // Structures used by FixQuadraticElements()
void SMESH_MesherHelper::FixQuadraticElements(SMESH_ComputeErrorPtr& compError,
bool volumeOnly)
{
MESSAGE("FixQuadraticElements " << volumeOnly);
//MESSAGE("FixQuadraticElements " << volumeOnly);
// setenv NO_FixQuadraticElements to know if FixQuadraticElements() is guilty of bad conversion
if ( getenv("NO_FixQuadraticElements") )
return;
@ -4911,7 +4911,6 @@ void SMESH_MesherHelper::FixQuadraticElements(SMESH_ComputeErrorPtr& compError,
}
else { // fix nodes in the solid and its faces
#ifdef _DEBUG_
MESSAGE("FIX SOLID " << nbSolids-- << " #" << GetMeshDS()->ShapeToIndex(s.Current()));
MSG("FIX SOLID " << nbSolids-- << " #" << GetMeshDS()->ShapeToIndex(s.Current()));
#endif
SMESH_MesherHelper h(*myMesh);

View File

@ -153,6 +153,7 @@ vtkIdType getCellType( const SMDSAbs_ElementType theType,
else if ( theNbNodes == 20 ) return VTK_QUADRATIC_HEXAHEDRON;
else if ( theNbNodes == 27 ) return VTK_TRIQUADRATIC_HEXAHEDRON;
else if ( theNbNodes == 15 ) return VTK_QUADRATIC_WEDGE;
else if ( theNbNodes == 18 ) return VTK_BIQUADRATIC_QUADRATIC_WEDGE;
else if ( theNbNodes == 13 ) return VTK_QUADRATIC_PYRAMID;//VTK_CONVEX_POINT_SET;
else return VTK_EMPTY_CELL;

View File

@ -6057,18 +6057,22 @@ Please enter correct value and try again</translation>
</message>
<message>
<source>ENTITY_TYPE_21</source>
<translation>OCTA12</translation>
<translation>PENTA18</translation>
</message>
<message>
<source>ENTITY_TYPE_22</source>
<translation>POLYEDRE</translation>
<translation>OCTA12</translation>
</message>
<message>
<source>ENTITY_TYPE_23</source>
<translation>QPOLYEDRE</translation>
<translation>POLYEDRE</translation>
</message>
<message>
<source>ENTITY_TYPE_24</source>
<translation>QPOLYEDRE</translation>
</message>
<message>
<source>ENTITY_TYPE_25</source>
<translation>BALL</translation>
</message>
<message>

View File

@ -6036,18 +6036,22 @@ Entrez une valeur correcte et essayez de nouveau</translation>
</message>
<message>
<source>ENTITY_TYPE_21</source>
<translation>OCTA12</translation>
<translation>PENTA18</translation>
</message>
<message>
<source>ENTITY_TYPE_22</source>
<translation>POLYEDRE</translation>
<translation>OCTA12</translation>
</message>
<message>
<source>ENTITY_TYPE_23</source>
<translation>QPOLYEDRE</translation>
<translation>POLYEDRE</translation>
</message>
<message>
<source>ENTITY_TYPE_24</source>
<translation>QPOLYEDRE</translation>
</message>
<message>
<source>ENTITY_TYPE_25</source>
<translation>BALL</translation>
</message>
<message>

View File

@ -5848,104 +5848,108 @@
<translation></translation>
</message>
<message>
<source>ENTITY_TYPE_0</source>
<translation>POINT1</translation>
<source>ENTITY_TYPE_0</source>
<translation>NONE</translation>
</message>
<message>
<source>ENTITY_TYPE_1</source>
<translation>POINT1</translation>
<source>ENTITY_TYPE_1</source>
<translation>POINT1</translation>
</message>
<message>
<source>ENTITY_TYPE_2</source>
<translation>SEG2</translation>
<source>ENTITY_TYPE_2</source>
<translation>SEG2</translation>
</message>
<message>
<source>ENTITY_TYPE_3</source>
<translation>SEG3</translation>
<source>ENTITY_TYPE_3</source>
<translation>SEG3</translation>
</message>
<message>
<source>ENTITY_TYPE_4</source>
<translation>TRIA3</translation>
<source>ENTITY_TYPE_4</source>
<translation>TRIA3</translation>
</message>
<message>
<source>ENTITY_TYPE_5</source>
<translation>TRIA6</translation>
<source>ENTITY_TYPE_5</source>
<translation>TRIA6</translation>
</message>
<message>
<source>ENTITY_TYPE_6</source>
<translation>QUAD4</translation>
<source>ENTITY_TYPE_6</source>
<translation>TRIA7</translation>
</message>
<message>
<source>ENTITY_TYPE_7</source>
<translation>QUAD8</translation>
<source>ENTITY_TYPE_7</source>
<translation>QUAD4</translation>
</message>
<message>
<source>ENTITY_TYPE_8</source>
<translation>QUAD9</translation>
<source>ENTITY_TYPE_8</source>
<translation>QUAD8</translation>
</message>
<message>
<source>ENTITY_TYPE_9</source>
<translation>TETRA4</translation>
<source>ENTITY_TYPE_9</source>
<translation>QUAD9</translation>
</message>
<message>
<source>ENTITY_TYPE_10</source>
<translation>TETRA10</translation>
<source>ENTITY_TYPE_10</source>
<translation>POLYGON</translation>
</message>
<message>
<source>ENTITY_TYPE_11</source>
<translation>PYRA5</translation>
<source>ENTITY_TYPE_11</source>
<translation>QPOLYGON</translation>
</message>
<message>
<source>ENTITY_TYPE_12</source>
<translation>PYRA13</translation>
<source>ENTITY_TYPE_12</source>
<translation>TETRA4</translation>
</message>
<message>
<source>ENTITY_TYPE_13</source>
<translation>PENTA6</translation>
<source>ENTITY_TYPE_13</source>
<translation>TETRA10</translation>
</message>
<message>
<source>ENTITY_TYPE_14</source>
<translation>PENTA15</translation>
<source>ENTITY_TYPE_14</source>
<translation>PYRA5</translation>
</message>
<message>
<source>ENTITY_TYPE_15</source>
<translation>HEXA8</translation>
<source>ENTITY_TYPE_15</source>
<translation>PYRA13</translation>
</message>
<message>
<source>ENTITY_TYPE_16</source>
<translation>HEXA20</translation>
<source>ENTITY_TYPE_16</source>
<translation>HEXA8</translation>
</message>
<message>
<source>ENTITY_TYPE_17</source>
<translation>HEXA27</translation>
<source>ENTITY_TYPE_17</source>
<translation>HEXA20</translation>
</message>
<message>
<source>ENTITY_TYPE_18</source>
<translation>OCTA12</translation>
<source>ENTITY_TYPE_18</source>
<translation>HEXA27</translation>
</message>
<message>
<source>ENTITY_TYPE_19</source>
<translation></translation>
<source>ENTITY_TYPE_19</source>
<translation>PENTA6</translation>
</message>
<message>
<source>ENTITY_TYPE_20</source>
<translation>POLYEDRE</translation>
<source>ENTITY_TYPE_20</source>
<translation>PENTA15</translation>
</message>
<message>
<source>ENTITY_TYPE_21</source>
<translation>[]</translation>
<source>ENTITY_TYPE_21</source>
<translation>PENTA18</translation>
</message>
<message>
<source>ENTITY_TYPE_22</source>
<translation></translation>
<source>ENTITY_TYPE_22</source>
<translation>OCTA12</translation>
</message>
<message>
<source>ENTITY_TYPE_23</source>
<translation>QPOLYEDRE</translation>
<source>ENTITY_TYPE_23</source>
<translation>POLYEDRE</translation>
</message>
<message>
<source>ENTITY_TYPE_24</source>
<translation></translation>
<source>ENTITY_TYPE_24</source>
<translation>QPOLYEDRE</translation>
</message>
<message>
<source>ENTITY_TYPE_25</source>
<translation>BALL</translation>
</message>
<message>
<source>GEOM_TYPE</source>