mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-29 02:40:35 +05:00
Added support of visualization of STRUCTURE mesh.
Bug PAL11384.
This commit is contained in:
parent
1366d8ffba
commit
a166931ff3
@ -84,9 +84,6 @@ DriverMED_R_SMESHDS_Mesh
|
|||||||
//---------------------
|
//---------------------
|
||||||
PMeshInfo aMeshInfo = aMed->GetPMeshInfo(iMesh+1);
|
PMeshInfo aMeshInfo = aMed->GetPMeshInfo(iMesh+1);
|
||||||
|
|
||||||
if (aMeshInfo->GetType() != MED::eNON_STRUCTURE)
|
|
||||||
continue; // not implemented yet
|
|
||||||
|
|
||||||
string aMeshName;
|
string aMeshName;
|
||||||
if (myMeshId != -1) {
|
if (myMeshId != -1) {
|
||||||
ostringstream aMeshNameStr;
|
ostringstream aMeshNameStr;
|
||||||
@ -126,9 +123,14 @@ DriverMED_R_SMESHDS_Mesh
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (aMeshInfo->GetType() == MED::eSTRUCTURE){
|
||||||
|
bool aRes = buildMeshGrille(aMed,aMeshInfo);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Reading MED nodes to the corresponding SMDS structure
|
// Reading MED nodes to the corresponding SMDS structure
|
||||||
//------------------------------------------------------
|
//------------------------------------------------------
|
||||||
PNodeInfo aNodeInfo = aMed->GetPNodeInfo(aMeshInfo);
|
PNodeInfo aNodeInfo = aMed->GetPNodeInfo(aMeshInfo);
|
||||||
if(!aNodeInfo)
|
if(!aNodeInfo)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -890,3 +892,86 @@ bool DriverMED_R_SMESHDS_Mesh::checkFamilyID(DriverMED_FamilyPtr & aFamily, int
|
|||||||
return ( aFamily->GetId() == anID );
|
return ( aFamily->GetId() == anID );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*! \brief Reading the structured mesh and convert to non structured (by filling of smesh structure for non structured mesh)
|
||||||
|
* \param theWrapper - PWrapper const pointer
|
||||||
|
* \param theMeshInfo - PMeshInfo const pointer
|
||||||
|
* \return TRUE, if successfully. Else FALSE
|
||||||
|
*/
|
||||||
|
bool DriverMED_R_SMESHDS_Mesh::buildMeshGrille(const MED::PWrapper& theWrapper,
|
||||||
|
const MED::PMeshInfo& theMeshInfo)
|
||||||
|
{
|
||||||
|
bool res = true;
|
||||||
|
|
||||||
|
MED::PGrilleInfo aGrilleInfo = theWrapper->GetPGrilleInfo(theMeshInfo);
|
||||||
|
MED::TInt aNbNodes = aGrilleInfo->GetNbNodes();
|
||||||
|
MED::TInt aNbCells = aGrilleInfo->GetNbCells();
|
||||||
|
MED::TInt aMeshDim = theMeshInfo->GetDim();
|
||||||
|
DriverMED_FamilyPtr aFamily;
|
||||||
|
for(MED::TInt iNode=0;iNode < aNbNodes; iNode++){
|
||||||
|
double aCoords[3] = {0.0, 0.0, 0.0};
|
||||||
|
const SMDS_MeshNode* aNode;
|
||||||
|
MED::TNodeCoord aMEDNodeCoord = aGrilleInfo->GetCoord(iNode);
|
||||||
|
for(MED::TInt iDim=0;iDim<aMeshDim;iDim++)
|
||||||
|
aCoords[(int)iDim] = aMEDNodeCoord[(int)iDim];
|
||||||
|
aNode = myMesh->AddNodeWithID(aCoords[0],aCoords[1],aCoords[2],(int)iNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* not implemented FAMILY
|
||||||
|
|
||||||
|
TInt aFamNum = aNodeInfo->GetFamNum(iElem);
|
||||||
|
if ( checkFamilyID ( aFamily, aFamNum ))
|
||||||
|
{
|
||||||
|
aFamily->AddElement(aNode);
|
||||||
|
aFamily->SetType(SMDSAbs_Node);
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
SMDS_MeshElement* anElement = NULL;
|
||||||
|
MED::TIntVector aNodeIds;
|
||||||
|
for(MED::TInt iCell=0;iCell < aNbCells; iCell++){
|
||||||
|
aNodeIds = aGrilleInfo->GetConn(iCell);
|
||||||
|
switch(aGrilleInfo->GetGeom()){
|
||||||
|
case MED::eSEG2:
|
||||||
|
if(aNodeIds.size() != 2){
|
||||||
|
aRes = false;
|
||||||
|
EXCEPTION(runtime_error,"buildMeshGrille Error. Incorrect size of ids 2!="<<aNodeIds.size());
|
||||||
|
}
|
||||||
|
anElement = myMesh->AddEdgeWithID(aNodeIds[0],
|
||||||
|
aNodeIds[1],
|
||||||
|
iCell);
|
||||||
|
break;
|
||||||
|
case MED::eQUAD4:
|
||||||
|
if(aNodeIds.size() != 4){
|
||||||
|
aRes = false;
|
||||||
|
EXCEPTION(runtime_error,"buildMeshGrille Error. Incorrect size of ids 4!="<<aNodeIds.size());
|
||||||
|
}
|
||||||
|
anElement = myMesh->AddFaceWithID(aNodeIds[0],
|
||||||
|
aNodeIds[2],
|
||||||
|
aNodeIds[3],
|
||||||
|
aNodeIds[1],
|
||||||
|
iCell);
|
||||||
|
break;
|
||||||
|
case MED::eHEXA8:
|
||||||
|
if(aNodeIds.size() != 8){
|
||||||
|
aRes = false;
|
||||||
|
EXCEPTION(runtime_error,"buildMeshGrille Error. Incorrect size of ids 8!="<<aNodeIds.size());
|
||||||
|
}
|
||||||
|
anElement = myMesh->AddVolumeWithID(aNodeIds[0],
|
||||||
|
aNodeIds[2],
|
||||||
|
aNodeIds[3],
|
||||||
|
aNodeIds[1],
|
||||||
|
aNodeIds[4],
|
||||||
|
aNodeIds[6],
|
||||||
|
aNodeIds[7],
|
||||||
|
aNodeIds[5],
|
||||||
|
iCell);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
@ -60,6 +60,9 @@ class DriverMED_R_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
|
|||||||
*/
|
*/
|
||||||
bool checkFamilyID(DriverMED_FamilyPtr & aFamily, int anID) const;
|
bool checkFamilyID(DriverMED_FamilyPtr & aFamily, int anID) const;
|
||||||
|
|
||||||
|
bool buildMeshGrille(const MED::PWrapper& theWrapper,
|
||||||
|
const MED::PMeshInfo& theMeshInfo);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string myMeshName;
|
std::string myMeshName;
|
||||||
std::map<int, DriverMED_FamilyPtr> myFamilies;
|
std::map<int, DriverMED_FamilyPtr> myFamilies;
|
||||||
|
Loading…
Reference in New Issue
Block a user