mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-26 09:20:34 +05:00
fix #7051 libmesh5.c/h DriverGMF_Read.cxx/hxx
This commit is contained in:
parent
0f4abfb68b
commit
8fa9e8c05f
@ -43,7 +43,8 @@ extern "C"
|
|||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
DriverGMF_Read::DriverGMF_Read():
|
DriverGMF_Read::DriverGMF_Read():
|
||||||
Driver_SMESHDS_Mesh(),
|
Driver_SMESHDS_Mesh(),
|
||||||
_makeRequiredGroups( true )
|
_makeRequiredGroups( true ),
|
||||||
|
_makeFaultGroups( true )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
// --------------------------------------------------------------------------------
|
// --------------------------------------------------------------------------------
|
||||||
@ -401,10 +402,9 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read required entities into groups
|
// Read some entities into groups
|
||||||
|
// see MeshGems/Docs/meshgems_formats_description.pdf
|
||||||
|
|
||||||
if ( _makeRequiredGroups )
|
|
||||||
{
|
|
||||||
// get ids of existing groups
|
// get ids of existing groups
|
||||||
std::set< int > groupIDs;
|
std::set< int > groupIDs;
|
||||||
const std::set<SMESHDS_GroupBase*>& groups = myMesh->GetGroups();
|
const std::set<SMESHDS_GroupBase*>& groups = myMesh->GetGroups();
|
||||||
@ -413,14 +413,20 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
|
|||||||
groupIDs.insert( (*grIter)->GetID() );
|
groupIDs.insert( (*grIter)->GetID() );
|
||||||
if ( groupIDs.empty() ) groupIDs.insert( 0 );
|
if ( groupIDs.empty() ) groupIDs.insert( 0 );
|
||||||
|
|
||||||
|
// Read required entities into groups
|
||||||
|
if ( _makeRequiredGroups )
|
||||||
|
{
|
||||||
|
|
||||||
const int kes[4][3] = { { GmfRequiredVertices, SMDSAbs_Node, nodeIDShift },
|
const int kes[4][3] = { { GmfRequiredVertices, SMDSAbs_Node, nodeIDShift },
|
||||||
{ GmfRequiredEdges, SMDSAbs_Edge, edgeIDShift },
|
{ GmfRequiredEdges, SMDSAbs_Edge, edgeIDShift },
|
||||||
{ GmfRequiredTriangles, SMDSAbs_Face, triaIDShift },
|
{ GmfRequiredTriangles, SMDSAbs_Face, triaIDShift },
|
||||||
{ GmfRequiredQuadrilaterals,SMDSAbs_Face, quadIDShift }};
|
{ GmfRequiredQuadrilaterals,SMDSAbs_Face, quadIDShift }
|
||||||
|
};
|
||||||
const char* names[4] = { "_required_Vertices" ,
|
const char* names[4] = { "_required_Vertices" ,
|
||||||
"_required_Edges" ,
|
"_required_Edges" ,
|
||||||
"_required_Triangles" ,
|
"_required_Triangles" ,
|
||||||
"_required_Quadrilaterals" };
|
"_required_Quadrilaterals"
|
||||||
|
};
|
||||||
for ( int i = 0; i < 4; ++i )
|
for ( int i = 0; i < 4; ++i )
|
||||||
{
|
{
|
||||||
int gmfKwd = kes[i][0];
|
int gmfKwd = kes[i][0];
|
||||||
@ -444,6 +450,50 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Read fault entities into groups
|
||||||
|
if ( _makeFaultGroups )
|
||||||
|
{
|
||||||
|
|
||||||
|
const int kes[7][3] = { { GmfFault_SmallTri, SMDSAbs_Face, triaIDShift },
|
||||||
|
{ GmfFault_BadShape, SMDSAbs_Face, triaIDShift },
|
||||||
|
{ GmfFault_Overlap, SMDSAbs_Face, triaIDShift },
|
||||||
|
{ GmfFault_Inter, SMDSAbs_Face, triaIDShift },
|
||||||
|
{ GmfFault_NearTri, SMDSAbs_Face, triaIDShift },
|
||||||
|
{ GmfFault_FreeEdge, SMDSAbs_Face, triaIDShift },
|
||||||
|
{ GmfFault_MultipleEdge, SMDSAbs_Face, triaIDShift }
|
||||||
|
};
|
||||||
|
const char* names[7] = { "Fault_SmallTri",
|
||||||
|
"Fault_BadShape",
|
||||||
|
"Fault_Overlap",
|
||||||
|
"Fault_Inter",
|
||||||
|
"Fault_NearTri",
|
||||||
|
"Fault_FreeEdge",
|
||||||
|
"Fault_MultipleEdge"
|
||||||
|
};
|
||||||
|
for ( int i = 0; i < 7; ++i )
|
||||||
|
{
|
||||||
|
int gmfKwd = kes[i][0];
|
||||||
|
SMDSAbs_ElementType entity = (SMDSAbs_ElementType) kes[i][1];
|
||||||
|
int shift = kes[i][2];
|
||||||
|
if ( int nb = GmfStatKwd(meshID, gmfKwd))
|
||||||
|
{
|
||||||
|
const int newID = *groupIDs.rbegin() + 1;
|
||||||
|
groupIDs.insert( newID );
|
||||||
|
SMESHDS_Group* group = new SMESHDS_Group( newID, myMesh, entity );
|
||||||
|
group->SetStoreName( names[i] );
|
||||||
|
myMesh->AddGroup( group );
|
||||||
|
|
||||||
|
GmfGotoKwd(meshID, gmfKwd);
|
||||||
|
for ( int i = 0; i < nb; ++i )
|
||||||
|
{
|
||||||
|
GmfGetLin(meshID, gmfKwd, &iN[0] );
|
||||||
|
group->Add( shift + iN[0] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
myMesh->Modified();
|
myMesh->Modified();
|
||||||
myMesh->CompactMesh();
|
myMesh->CompactMesh();
|
||||||
|
|
||||||
|
@ -50,6 +50,11 @@ public:
|
|||||||
_makeRequiredGroups = theMakeRequiredGroups;
|
_makeRequiredGroups = theMakeRequiredGroups;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SetMakeFaultGroups( bool theMakeFaultGroups )
|
||||||
|
{
|
||||||
|
_makeFaultGroups = theMakeFaultGroups;
|
||||||
|
}
|
||||||
|
|
||||||
virtual Status Perform();
|
virtual Status Perform();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -57,6 +62,7 @@ public:
|
|||||||
Status storeBadNodeIds(const char* gmfKwd, int elemNb, int nb, ...);
|
Status storeBadNodeIds(const char* gmfKwd, int elemNb, int nb, ...);
|
||||||
|
|
||||||
bool _makeRequiredGroups;
|
bool _makeRequiredGroups;
|
||||||
|
bool _makeFaultGroups;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -78,6 +78,7 @@ typedef struct
|
|||||||
|
|
||||||
static int GmfIniFlg=0;
|
static int GmfIniFlg=0;
|
||||||
static GmfMshSct *GmfMshTab[ MaxMsh + 1 ];
|
static GmfMshSct *GmfMshTab[ MaxMsh + 1 ];
|
||||||
|
// see MeshGems/Docs/meshgems_formats_description.pdf
|
||||||
static const char *GmfKwdFmt[ GmfMaxKwd + 1 ][4] =
|
static const char *GmfKwdFmt[ GmfMaxKwd + 1 ][4] =
|
||||||
{ {"Reserved", "", "", ""},
|
{ {"Reserved", "", "", ""},
|
||||||
{"MeshVersionFormatted", "", "", "i"},
|
{"MeshVersionFormatted", "", "", "i"},
|
||||||
@ -159,7 +160,8 @@ static const char *GmfKwdFmt[ GmfMaxKwd + 1 ][4] =
|
|||||||
{"Iterations", "","","i"},
|
{"Iterations", "","","i"},
|
||||||
{"Time", "","","r"},
|
{"Time", "","","r"},
|
||||||
{"Fault_SmallTri", "Fault_SmallTri","i","i"},
|
{"Fault_SmallTri", "Fault_SmallTri","i","i"},
|
||||||
{"CoarseHexahedra", "CoarseHexahedron", "i", "i"}
|
{"CoarseHexahedra", "CoarseHexahedron", "i", "i"},
|
||||||
|
{"Fault_MultipleEdge", "Fault_MultipleEdge", "i", "i"}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -1062,7 +1064,7 @@ static int ScaKwdTab(GmfMshSct *msh)
|
|||||||
{
|
{
|
||||||
/* Search which kwd code this string is associated with,
|
/* Search which kwd code this string is associated with,
|
||||||
then get its header and save the current position in file (just before the data) */
|
then get its header and save the current position in file (just before the data) */
|
||||||
|
// printf("libmesh ScaKwdTab %s\n", str);
|
||||||
for(KwdCod=1; KwdCod<= GmfMaxKwd; KwdCod++)
|
for(KwdCod=1; KwdCod<= GmfMaxKwd; KwdCod++)
|
||||||
if(!strcmp(str, GmfKwdFmt[ KwdCod ][0]))
|
if(!strcmp(str, GmfKwdFmt[ KwdCod ][0]))
|
||||||
{
|
{
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#define GmfStrSiz 1024
|
#define GmfStrSiz 1024
|
||||||
#define GmfMaxTyp 1000
|
#define GmfMaxTyp 1000
|
||||||
#define GmfMaxKwd 80
|
#define GmfMaxKwd 81
|
||||||
#define GmfMshVer 1
|
#define GmfMshVer 1
|
||||||
#define GmfRead 1
|
#define GmfRead 1
|
||||||
#define GmfWrite 2
|
#define GmfWrite 2
|
||||||
@ -33,6 +33,7 @@
|
|||||||
#define GmfFloat 1
|
#define GmfFloat 1
|
||||||
#define GmfDouble 2
|
#define GmfDouble 2
|
||||||
|
|
||||||
|
// see MeshGems/Docs/meshgems_formats_description.pdf
|
||||||
enum GmfKwdCod
|
enum GmfKwdCod
|
||||||
{
|
{
|
||||||
GmfReserved1, \
|
GmfReserved1, \
|
||||||
@ -115,7 +116,8 @@ enum GmfKwdCod
|
|||||||
GmfIterations, \
|
GmfIterations, \
|
||||||
GmfTime, \
|
GmfTime, \
|
||||||
GmfFault_SmallTri, \
|
GmfFault_SmallTri, \
|
||||||
GmfCoarseHexahedra
|
GmfCoarseHexahedra, \
|
||||||
|
GmfFault_MultipleEdge
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user