mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-28 02:10:35 +05:00
IPAL53097: At med export "Automatically define space dimension" does not work
This commit is contained in:
parent
a1a6d5ddc1
commit
77ab849209
@ -37,6 +37,10 @@
|
|||||||
#include "SMDS_SetIterator.hxx"
|
#include "SMDS_SetIterator.hxx"
|
||||||
#include "SMESHDS_Mesh.hxx"
|
#include "SMESHDS_Mesh.hxx"
|
||||||
|
|
||||||
|
#include <BRep_Tool.hxx>
|
||||||
|
#include <TopExp_Explorer.hxx>
|
||||||
|
#include <TopoDS.hxx>
|
||||||
|
|
||||||
#include <utilities.h>
|
#include <utilities.h>
|
||||||
|
|
||||||
|
|
||||||
@ -356,11 +360,28 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
|
|||||||
}
|
}
|
||||||
|
|
||||||
double EPS = 1.0E-7;
|
double EPS = 1.0E-7;
|
||||||
|
TopoDS_Shape mainShape = myMesh->ShapeToMesh();
|
||||||
|
bool hasShapeToMesh = ( myMesh->SubMeshIndices().size() > 1 );
|
||||||
|
if ( !mainShape.IsNull() && hasShapeToMesh )
|
||||||
|
{
|
||||||
|
// define EPS by max tolerance of the mainShape (IPAL53097)
|
||||||
|
TopExp_Explorer subShape;
|
||||||
|
for ( subShape.Init( mainShape, TopAbs_FACE ); subShape.More(); subShape.Next() ) {
|
||||||
|
EPS = Max( EPS, BRep_Tool::Tolerance( TopoDS::Face( subShape.Current() )));
|
||||||
|
}
|
||||||
|
for ( subShape.Init( mainShape, TopAbs_EDGE ); subShape.More(); subShape.Next() ) {
|
||||||
|
EPS = Max( EPS, BRep_Tool::Tolerance( TopoDS::Edge( subShape.Current() )));
|
||||||
|
}
|
||||||
|
for ( subShape.Init( mainShape, TopAbs_VERTEX ); subShape.More(); subShape.Next() ) {
|
||||||
|
EPS = Max( EPS, BRep_Tool::Tolerance( TopoDS::Vertex( subShape.Current() )));
|
||||||
|
}
|
||||||
|
EPS *= 2.;
|
||||||
|
}
|
||||||
anIsXDimension = (aBounds[1] - aBounds[0]) + abs(aBounds[1]) + abs(aBounds[0]) > EPS;
|
anIsXDimension = (aBounds[1] - aBounds[0]) + abs(aBounds[1]) + abs(aBounds[0]) > EPS;
|
||||||
anIsYDimension = (aBounds[3] - aBounds[2]) + abs(aBounds[3]) + abs(aBounds[2]) > EPS;
|
anIsYDimension = (aBounds[3] - aBounds[2]) + abs(aBounds[3]) + abs(aBounds[2]) > EPS;
|
||||||
anIsZDimension = (aBounds[5] - aBounds[4]) + abs(aBounds[5]) + abs(aBounds[4]) > EPS;
|
anIsZDimension = (aBounds[5] - aBounds[4]) + abs(aBounds[5]) + abs(aBounds[4]) > EPS;
|
||||||
aSpaceDimension = anIsXDimension + anIsYDimension + anIsZDimension;
|
aSpaceDimension = anIsXDimension + anIsYDimension + anIsZDimension;
|
||||||
if(!aSpaceDimension)
|
if ( !aSpaceDimension )
|
||||||
aSpaceDimension = 3;
|
aSpaceDimension = 3;
|
||||||
// PAL16857(SMESH not conform to the MED convention):
|
// PAL16857(SMESH not conform to the MED convention):
|
||||||
if ( aSpaceDimension == 2 && anIsZDimension ) // 2D only if mesh is in XOY plane
|
if ( aSpaceDimension == 2 && anIsZDimension ) // 2D only if mesh is in XOY plane
|
||||||
@ -377,7 +398,7 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
|
|||||||
}
|
}
|
||||||
|
|
||||||
SMDS_NodeIteratorPtr aNodesIter = myMesh->nodesIterator(/*idInceasingOrder=*/true);
|
SMDS_NodeIteratorPtr aNodesIter = myMesh->nodesIterator(/*idInceasingOrder=*/true);
|
||||||
switch(aSpaceDimension){
|
switch ( aSpaceDimension ) {
|
||||||
case 3:
|
case 3:
|
||||||
aCoordHelperPtr.reset(new TCoordHelper(aNodesIter,aXYZGetCoord,aXYZName));
|
aCoordHelperPtr.reset(new TCoordHelper(aNodesIter,aXYZGetCoord,aXYZName));
|
||||||
break;
|
break;
|
||||||
@ -444,7 +465,8 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
|
|||||||
myDoGroupOfVolumes && nbVolumes,
|
myDoGroupOfVolumes && nbVolumes,
|
||||||
myDoGroupOf0DElems && nb0DElements,
|
myDoGroupOf0DElems && nb0DElements,
|
||||||
myDoGroupOfBalls && nbBalls);
|
myDoGroupOfBalls && nbBalls);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
aFamilies = DriverMED_Family::MakeFamilies
|
aFamilies = DriverMED_Family::MakeFamilies
|
||||||
(getIterator( mySubMeshes ), myGroups,
|
(getIterator( mySubMeshes ), myGroups,
|
||||||
myDoGroupOfNodes && nbNodes,
|
myDoGroupOfNodes && nbNodes,
|
||||||
@ -477,7 +499,6 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
|
|||||||
PNodeInfo aNodeInfo = myMed->CrNodeInfo(aMeshInfo, aNbNodes,
|
PNodeInfo aNodeInfo = myMed->CrNodeInfo(aMeshInfo, aNbNodes,
|
||||||
theMode, theSystem, theIsElemNum, theIsElemNames);
|
theMode, theSystem, theIsElemNum, theIsElemNames);
|
||||||
|
|
||||||
//cout << " fillElemFamilyMap( SMDSAbs_Node )" << endl;
|
|
||||||
// find family numbers for nodes
|
// find family numbers for nodes
|
||||||
TElemFamilyMap anElemFamMap;
|
TElemFamilyMap anElemFamMap;
|
||||||
fillElemFamilyMap( anElemFamMap, aFamilies, SMDSAbs_Node );
|
fillElemFamilyMap( anElemFamMap, aFamilies, SMDSAbs_Node );
|
||||||
@ -687,21 +708,11 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
|
|||||||
|
|
||||||
int defaultFamilyId = 0;
|
int defaultFamilyId = 0;
|
||||||
switch ( aElemTypeData->_smdsType ) {
|
switch ( aElemTypeData->_smdsType ) {
|
||||||
case SMDSAbs_0DElement:
|
case SMDSAbs_0DElement: defaultFamilyId = my0DElementsDefaultFamilyId; break;
|
||||||
defaultFamilyId = my0DElementsDefaultFamilyId;
|
case SMDSAbs_Ball: defaultFamilyId = myBallsDefaultFamilyId; break;
|
||||||
break;
|
case SMDSAbs_Edge: defaultFamilyId = myEdgesDefaultFamilyId; break;
|
||||||
case SMDSAbs_Ball:
|
case SMDSAbs_Face: defaultFamilyId = myFacesDefaultFamilyId; break;
|
||||||
defaultFamilyId = myBallsDefaultFamilyId;
|
case SMDSAbs_Volume: defaultFamilyId = myVolumesDefaultFamilyId; break;
|
||||||
break;
|
|
||||||
case SMDSAbs_Edge:
|
|
||||||
defaultFamilyId = myEdgesDefaultFamilyId;
|
|
||||||
break;
|
|
||||||
case SMDSAbs_Face:
|
|
||||||
defaultFamilyId = myFacesDefaultFamilyId;
|
|
||||||
break;
|
|
||||||
case SMDSAbs_Volume:
|
|
||||||
defaultFamilyId = myVolumesDefaultFamilyId;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -854,8 +865,7 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
|
|||||||
else if (aElemTypeData->_geomType == eBALL )
|
else if (aElemTypeData->_geomType == eBALL )
|
||||||
{
|
{
|
||||||
// allocate data arrays
|
// allocate data arrays
|
||||||
PBallInfo aBallInfo = myMed->CrBallInfo( aMeshInfo,
|
PBallInfo aBallInfo = myMed->CrBallInfo( aMeshInfo, aElemTypeData->_nbElems );
|
||||||
aElemTypeData->_nbElems );
|
|
||||||
|
|
||||||
// build map of family numbers for this type
|
// build map of family numbers for this type
|
||||||
if ( !isElemFamMapBuilt[ aElemTypeData->_smdsType ])
|
if ( !isElemFamMapBuilt[ aElemTypeData->_smdsType ])
|
||||||
|
Loading…
Reference in New Issue
Block a user