mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-02-15 13:13:08 +05:00
Join BR-D5-38-2003
This commit is contained in:
parent
c453758762
commit
5309d564cb
@ -34,6 +34,7 @@
|
||||
#include "SMESHDS_Group.hxx"
|
||||
|
||||
#include "MED_Factory.hxx"
|
||||
#include "MED_CoordUtils.hxx"
|
||||
#include "MED_Utilities.hxx"
|
||||
|
||||
#include <stdlib.h>
|
||||
@ -48,7 +49,9 @@ static int MYDEBUG = 0;
|
||||
|
||||
using namespace MED;
|
||||
|
||||
void DriverMED_R_SMESHDS_Mesh::SetMeshName(string theMeshName)
|
||||
void
|
||||
DriverMED_R_SMESHDS_Mesh
|
||||
::SetMeshName(string theMeshName)
|
||||
{
|
||||
myMeshName = theMeshName;
|
||||
}
|
||||
@ -61,83 +64,9 @@ FindNode(const SMDS_Mesh* theMesh, TInt theId){
|
||||
}
|
||||
|
||||
|
||||
enum ECoordName{eX, eY, eZ, eNone};
|
||||
typedef TFloat (*TGetCoord)(MED::PNodeInfo&, TInt);
|
||||
|
||||
template<ECoordName TheCoordId>
|
||||
TFloat GetCoord(MED::PNodeInfo& thePNodeInfo, TInt theElemId){
|
||||
return thePNodeInfo->GetNodeCoord(theElemId,TheCoordId);
|
||||
}
|
||||
|
||||
template<>
|
||||
TFloat GetCoord<eNone>(MED::PNodeInfo& thePNodeInfo, TInt theElemId){
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
|
||||
static TGetCoord aXYZGetCoord[3] = {
|
||||
&GetCoord<eX>,
|
||||
&GetCoord<eY>,
|
||||
&GetCoord<eZ>
|
||||
};
|
||||
|
||||
|
||||
static TGetCoord aXYGetCoord[3] = {
|
||||
&GetCoord<eX>,
|
||||
&GetCoord<eY>,
|
||||
&GetCoord<eNone>
|
||||
};
|
||||
|
||||
static TGetCoord aYZGetCoord[3] = {
|
||||
&GetCoord<eNone>,
|
||||
&GetCoord<eX>,
|
||||
&GetCoord<eY>
|
||||
};
|
||||
|
||||
static TGetCoord aXZGetCoord[3] = {
|
||||
&GetCoord<eX>,
|
||||
&GetCoord<eNone>,
|
||||
&GetCoord<eY>
|
||||
};
|
||||
|
||||
|
||||
static TGetCoord aXGetCoord[3] = {
|
||||
&GetCoord<eX>,
|
||||
&GetCoord<eNone>,
|
||||
&GetCoord<eNone>
|
||||
};
|
||||
|
||||
static TGetCoord aYGetCoord[3] = {
|
||||
&GetCoord<eNone>,
|
||||
&GetCoord<eX>,
|
||||
&GetCoord<eNone>
|
||||
};
|
||||
|
||||
static TGetCoord aZGetCoord[3] = {
|
||||
&GetCoord<eNone>,
|
||||
&GetCoord<eNone>,
|
||||
&GetCoord<eX>
|
||||
};
|
||||
|
||||
|
||||
class TCoordHelper{
|
||||
MED::PNodeInfo myPNodeInfo;
|
||||
TGetCoord* myGetCoord;
|
||||
public:
|
||||
TCoordHelper(const MED::PNodeInfo& thePNodeInfo,
|
||||
TGetCoord* theGetCoord):
|
||||
myPNodeInfo(thePNodeInfo),
|
||||
myGetCoord(theGetCoord)
|
||||
{}
|
||||
virtual ~TCoordHelper(){}
|
||||
TFloat GetCoord(TInt theElemId, TInt theCoodId){
|
||||
return (*myGetCoord[theCoodId])(myPNodeInfo,theElemId);
|
||||
}
|
||||
};
|
||||
typedef boost::shared_ptr<TCoordHelper> TCoordHelperPtr;
|
||||
|
||||
|
||||
Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
|
||||
Driver_Mesh::Status
|
||||
DriverMED_R_SMESHDS_Mesh
|
||||
::Perform()
|
||||
{
|
||||
Status aResult = DRS_FAIL;
|
||||
try{
|
||||
@ -193,50 +122,17 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
|
||||
//------------------------------------------------------
|
||||
PNodeInfo aNodeInfo = aMed->GetPNodeInfo(aMeshInfo);
|
||||
|
||||
TCoordHelperPtr aCoordHelperPtr;
|
||||
{
|
||||
TInt aMeshDimension = aMeshInfo->GetDim();
|
||||
bool anIsDimPresent[3] = {false, false, false};
|
||||
for(TInt iDim = 0; iDim < aMeshDimension; iDim++){
|
||||
string aDimName = aNodeInfo->GetCoordName(iDim);
|
||||
if(aDimName == "x" || aDimName == "X")
|
||||
anIsDimPresent[eX] = true;
|
||||
else if(aDimName == "y" || aDimName == "Y")
|
||||
anIsDimPresent[eY] = true;
|
||||
else if(aDimName == "z" || aDimName == "Z")
|
||||
anIsDimPresent[eZ] = true;
|
||||
}
|
||||
switch(aMeshDimension){
|
||||
case 3:
|
||||
aCoordHelperPtr.reset(new TCoordHelper(aNodeInfo,aXYZGetCoord));
|
||||
break;
|
||||
case 2:
|
||||
if(anIsDimPresent[eY] && anIsDimPresent[eZ])
|
||||
aCoordHelperPtr.reset(new TCoordHelper(aNodeInfo,aYZGetCoord));
|
||||
else if(anIsDimPresent[eX] && anIsDimPresent[eZ])
|
||||
aCoordHelperPtr.reset(new TCoordHelper(aNodeInfo,aXZGetCoord));
|
||||
else
|
||||
aCoordHelperPtr.reset(new TCoordHelper(aNodeInfo,aXYGetCoord));
|
||||
break;
|
||||
case 1:
|
||||
if(anIsDimPresent[eY])
|
||||
aCoordHelperPtr.reset(new TCoordHelper(aNodeInfo,aYGetCoord));
|
||||
else if(anIsDimPresent[eZ])
|
||||
aCoordHelperPtr.reset(new TCoordHelper(aNodeInfo,aZGetCoord));
|
||||
else
|
||||
aCoordHelperPtr.reset(new TCoordHelper(aNodeInfo,aXGetCoord));
|
||||
break;
|
||||
}
|
||||
}
|
||||
PCoordHelper aCoordHelper = GetCoordHelper(aNodeInfo);
|
||||
|
||||
EBooleen anIsNodeNum = aNodeInfo->IsElemNum();
|
||||
TInt aNbElems = aNodeInfo->GetNbElem();
|
||||
if(MYDEBUG) MESSAGE("Perform - aNodeInfo->GetNbElem() = "<<aNbElems<<"; anIsNodeNum = "<<anIsNodeNum);
|
||||
DriverMED_FamilyPtr aFamily;
|
||||
for(TInt iElem = 0; iElem < aNbElems; iElem++){
|
||||
TCCoordSlice aCoordSlice = aNodeInfo->GetCoordSlice(iElem);
|
||||
double aCoords[3] = {0.0, 0.0, 0.0};
|
||||
for(TInt iDim = 0; iDim < 3; iDim++)
|
||||
aCoords[iDim] = aCoordHelperPtr->GetCoord(iElem,iDim);
|
||||
aCoords[iDim] = aCoordHelper->GetCoord(aCoordSlice,iDim);
|
||||
const SMDS_MeshNode* aNode;
|
||||
if(anIsNodeNum) {
|
||||
aNode = myMesh->AddNodeWithID
|
||||
@ -258,6 +154,7 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
|
||||
|
||||
// Reading pre information about all MED cells
|
||||
//--------------------------------------------
|
||||
typedef std::vector<int> TNodeIds;
|
||||
bool takeNumbers = true; // initially we trust the numbers from file
|
||||
MED::TEntityInfo aEntityInfo = aMed->GetEntityInfo(aMeshInfo);
|
||||
MED::TEntityInfo::iterator anEntityIter = aEntityInfo.begin();
|
||||
@ -266,77 +163,63 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
|
||||
if(anEntity == eNOEUD) continue;
|
||||
// Reading MED cells to the corresponding SMDS structure
|
||||
//------------------------------------------------------
|
||||
const MED::TGeom& aTGeom = anEntityIter->second;
|
||||
MED::TGeom::const_iterator anTGeomIter = aTGeom.begin();
|
||||
for(; anTGeomIter != aTGeom.end(); anTGeomIter++){
|
||||
const EGeometrieElement& aGeom = anTGeomIter->first;
|
||||
const MED::TGeom2Size& aGeom2Size = anEntityIter->second;
|
||||
MED::TGeom2Size::const_iterator aGeom2SizeIter = aGeom2Size.begin();
|
||||
for(; aGeom2SizeIter != aGeom2Size.end(); aGeom2SizeIter++){
|
||||
const EGeometrieElement& aGeom = aGeom2SizeIter->first;
|
||||
|
||||
if (aGeom == ePOINT1) {
|
||||
continue;
|
||||
|
||||
} else if (aGeom == ePOLYGONE) {
|
||||
switch(aGeom){
|
||||
case ePOINT1:
|
||||
break;
|
||||
case ePOLYGONE: {
|
||||
PPolygoneInfo aPolygoneInfo = aMed->GetPPolygoneInfo(aMeshInfo,anEntity,aGeom);
|
||||
EBooleen anIsElemNum = takeNumbers ? aPolygoneInfo->IsElemNum() : eFAUX;
|
||||
|
||||
TElemNum aConn = aPolygoneInfo->GetConnectivite();
|
||||
TElemNum aIndex = aPolygoneInfo->GetIndex();
|
||||
|
||||
TInt nbPolygons = aPolygoneInfo->GetNbElem();
|
||||
|
||||
for (TInt iPG = 0; iPG < nbPolygons; iPG++) {
|
||||
// get nodes
|
||||
TInt aCurrPG_FirstNodeIndex = aIndex[iPG] - 1;
|
||||
int nbNodes = aPolygoneInfo->GetNbConn(iPG);
|
||||
std::vector<int> nodes_ids (nbNodes);
|
||||
//for (TInt inode = 0; inode < nbNodes; inode++) {
|
||||
// nodes_ids[inode] = aConn[aCurrPG_FirstNodeIndex + inode];
|
||||
//}
|
||||
|
||||
TInt aNbElem = aPolygoneInfo->GetNbElem();
|
||||
for(TInt iElem = 0; iElem < aNbElem; iElem++){
|
||||
MED::TCConnSlice aConnSlice = aPolygoneInfo->GetConnSlice(iElem);
|
||||
TInt aNbConn = aPolygoneInfo->GetNbConn(iElem);
|
||||
TNodeIds aNodeIds(aNbConn);
|
||||
#ifdef _EDF_NODE_IDS_
|
||||
if (anIsNodeNum) {
|
||||
for (TInt inode = 0; inode < nbNodes; inode++) {
|
||||
nodes_ids[inode] = aNodeInfo->GetElemNum(aConn[aCurrPG_FirstNodeIndex + inode] - 1);
|
||||
}
|
||||
} else {
|
||||
for (TInt inode = 0; inode < nbNodes; inode++) {
|
||||
nodes_ids[inode] = aConn[aCurrPG_FirstNodeIndex + inode];
|
||||
}
|
||||
}
|
||||
if(anIsNodeNum)
|
||||
for(TInt iConn = 0; iConn < aNbConn; iConn++)
|
||||
aNodeIds[iConn] = aNodeInfo->GetElemNum(aConnSlice[iConn] - 1);
|
||||
else
|
||||
for(TInt iConn = 0; iConn < aNbConn; iConn++)
|
||||
aNodeIds[iConn] = aConnSlice[iConn];
|
||||
#else
|
||||
for (TInt inode = 0; inode < nbNodes; inode++) {
|
||||
nodes_ids[inode] = aConn[aCurrPG_FirstNodeIndex + inode];
|
||||
}
|
||||
for(TInt iConn = 0; iConn < aNbConn; iConn++)
|
||||
aNodeIds[iConn] = aConnSlice[iConn];
|
||||
#endif
|
||||
|
||||
bool isRenum = false;
|
||||
SMDS_MeshElement* anElement = NULL;
|
||||
TInt aFamNum = aPolygoneInfo->GetFamNum(iPG);
|
||||
TInt aFamNum = aPolygoneInfo->GetFamNum(iElem);
|
||||
|
||||
try {
|
||||
if (anIsElemNum) {
|
||||
anElement = myMesh->AddPolygonalFaceWithID
|
||||
(nodes_ids, aPolygoneInfo->GetElemNum(iPG));
|
||||
}
|
||||
if (!anElement) {
|
||||
std::vector<const SMDS_MeshNode*> nodes (nbNodes);
|
||||
for (int inode = 0; inode < nbNodes; inode++) {
|
||||
nodes[inode] = FindNode(myMesh, nodes_ids[inode]);
|
||||
}
|
||||
anElement = myMesh->AddPolygonalFace(nodes);
|
||||
try{
|
||||
if(anIsElemNum){
|
||||
TInt anElemId = aPolygoneInfo->GetElemNum(iElem);
|
||||
anElement = myMesh->AddPolygonalFaceWithID(aNodeIds,anElemId);
|
||||
}
|
||||
if(!anElement){
|
||||
std::vector<const SMDS_MeshNode*> aNodes(aNbConn);
|
||||
for(TInt iConn = 0; iConn < aNbConn; iConn++)
|
||||
aNodes[iConn] = FindNode(myMesh,aNodeIds[iConn]);
|
||||
anElement = myMesh->AddPolygonalFace(aNodes);
|
||||
isRenum = anIsElemNum;
|
||||
}
|
||||
} catch (const std::exception& exc) {
|
||||
}catch(const std::exception& exc){
|
||||
aResult = DRS_FAIL;
|
||||
} catch (...) {
|
||||
}catch (...){
|
||||
aResult = DRS_FAIL;
|
||||
}
|
||||
|
||||
if (!anElement) {
|
||||
if(!anElement){
|
||||
aResult = DRS_WARN_SKIP_ELEM;
|
||||
} else {
|
||||
if (isRenum) {
|
||||
}else{
|
||||
if(isRenum){
|
||||
anIsElemNum = eFAUX;
|
||||
takeNumbers = false;
|
||||
if (aResult < DRS_WARN_RENUMBER)
|
||||
if(aResult < DRS_WARN_RENUMBER)
|
||||
aResult = DRS_WARN_RENUMBER;
|
||||
}
|
||||
if ( checkFamilyID ( aFamily, aFamNum ))
|
||||
@ -347,82 +230,63 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
|
||||
}
|
||||
}
|
||||
} // for (TInt iPG = 0; iPG < nbPolygons; iPG++)
|
||||
continue;
|
||||
|
||||
} else if (aGeom == ePOLYEDRE) {
|
||||
break;
|
||||
}
|
||||
case ePOLYEDRE: {
|
||||
PPolyedreInfo aPolyedreInfo = aMed->GetPPolyedreInfo(aMeshInfo,anEntity,aGeom);
|
||||
EBooleen anIsElemNum = takeNumbers ? aPolyedreInfo->IsElemNum() : eFAUX;
|
||||
|
||||
TElemNum aConn = aPolyedreInfo->GetConnectivite();
|
||||
TElemNum aFacesIndex = aPolyedreInfo->GetFacesIndex();
|
||||
TElemNum aIndex = aPolyedreInfo->GetIndex();
|
||||
|
||||
TInt nbPolyedres = aPolyedreInfo->GetNbElem();
|
||||
|
||||
for (int iPE = 0; iPE < nbPolyedres; iPE++) {
|
||||
// get faces
|
||||
int aCurrPE_FirstFaceIndex = aIndex[iPE] - 1;
|
||||
int aNextPE_FirstFaceIndex = aIndex[iPE + 1] - 1;
|
||||
int nbFaces = aNextPE_FirstFaceIndex - aCurrPE_FirstFaceIndex;
|
||||
std::vector<int> quantities (nbFaces);
|
||||
for (int iFa = 0; iFa < nbFaces; iFa++) {
|
||||
int aCurrFace_FirstNodeIndex = aFacesIndex[aCurrPE_FirstFaceIndex + iFa] - 1;
|
||||
int aNextFace_FirstNodeIndex = aFacesIndex[aCurrPE_FirstFaceIndex + iFa + 1] - 1;
|
||||
|
||||
int nbNodes = aNextFace_FirstNodeIndex - aCurrFace_FirstNodeIndex;
|
||||
quantities[iFa] = nbNodes;
|
||||
}
|
||||
|
||||
// get nodes
|
||||
int aCurrPE_FirstNodeIndex = aFacesIndex[aCurrPE_FirstFaceIndex] - 1;
|
||||
int nbPENodes = aPolyedreInfo->GetNbConn(iPE);
|
||||
std::vector<int> nodes_ids (nbPENodes);
|
||||
//for (int inode = 0; inode < nbPENodes; inode++) {
|
||||
// nodes_ids[inode] = aConn[aCurrPE_FirstNodeIndex + inode];
|
||||
//}
|
||||
TInt aNbElem = aPolyedreInfo->GetNbElem();
|
||||
for(TInt iElem = 0; iElem < aNbElem; iElem++){
|
||||
MED::TCConnSliceArr aConnSliceArr = aPolyedreInfo->GetConnSliceArr(iElem);
|
||||
TInt aNbFaces = aConnSliceArr.size();
|
||||
typedef std::vector<int> TQuantities;
|
||||
TQuantities aQuantities(aNbFaces);
|
||||
TInt aNbNodes = aPolyedreInfo->GetNbNodes(iElem);
|
||||
TNodeIds aNodeIds(aNbNodes);
|
||||
for(TInt iFace = 0, iNode = 0; iFace < aNbFaces; iFace++){
|
||||
MED::TCConnSlice aConnSlice = aConnSliceArr[iFace];
|
||||
TInt aNbConn = aConnSlice.size();
|
||||
aQuantities[iFace] = aNbConn;
|
||||
#ifdef _EDF_NODE_IDS_
|
||||
if (anIsNodeNum) {
|
||||
for (int inode = 0; inode < nbPENodes; inode++) {
|
||||
nodes_ids[inode] = aNodeInfo->GetElemNum(aConn[aCurrPE_FirstNodeIndex + inode] - 1);
|
||||
}
|
||||
} else {
|
||||
for (int inode = 0; inode < nbPENodes; inode++) {
|
||||
nodes_ids[inode] = aConn[aCurrPE_FirstNodeIndex + inode];
|
||||
}
|
||||
}
|
||||
if(anIsNodeNum)
|
||||
for(TInt iConn = 0; iConn < aNbConn; iConn++)
|
||||
aNodeIds[iNode++] = aNodeInfo->GetElemNum(aConnSlice[iConn] - 1);
|
||||
else
|
||||
for(TInt iConn = 0; iConn < aNbConn; iConn++)
|
||||
aNodeIds[iNode++] = aConnSlice[iConn];
|
||||
#else
|
||||
for (int inode = 0; inode < nbPENodes; inode++) {
|
||||
nodes_ids[inode] = aConn[aCurrPE_FirstNodeIndex + inode];
|
||||
}
|
||||
for(TInt iConn = 0; iConn < aNbConn; iConn++)
|
||||
aNodeIds[iNode++] = aConnSlice[iConn];
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
bool isRenum = false;
|
||||
SMDS_MeshElement* anElement = NULL;
|
||||
TInt aFamNum = aPolyedreInfo->GetFamNum(iPE);
|
||||
TInt aFamNum = aPolyedreInfo->GetFamNum(iElem);
|
||||
|
||||
try {
|
||||
if (anIsElemNum) {
|
||||
anElement = myMesh->AddPolyhedralVolumeWithID
|
||||
(nodes_ids, quantities, aPolyedreInfo->GetElemNum(iPE));
|
||||
try{
|
||||
if(anIsElemNum){
|
||||
TInt anElemId = aPolyedreInfo->GetElemNum(iElem);
|
||||
anElement = myMesh->AddPolyhedralVolumeWithID(aNodeIds,aQuantities,anElemId);
|
||||
}
|
||||
if (!anElement) {
|
||||
std::vector<const SMDS_MeshNode*> nodes (nbPENodes);
|
||||
for (int inode = 0; inode < nbPENodes; inode++) {
|
||||
nodes[inode] = FindNode(myMesh, nodes_ids[inode]);
|
||||
}
|
||||
anElement = myMesh->AddPolyhedralVolume(nodes, quantities);
|
||||
if(!anElement){
|
||||
std::vector<const SMDS_MeshNode*> aNodes(aNbNodes);
|
||||
for(TInt iConn = 0; iConn < aNbNodes; iConn++)
|
||||
aNodes[iConn] = FindNode(myMesh,aNodeIds[iConn]);
|
||||
anElement = myMesh->AddPolyhedralVolume(aNodes,aQuantities);
|
||||
isRenum = anIsElemNum;
|
||||
}
|
||||
} catch (const std::exception& exc) {
|
||||
}catch(const std::exception& exc){
|
||||
aResult = DRS_FAIL;
|
||||
} catch (...) {
|
||||
}catch(...){
|
||||
aResult = DRS_FAIL;
|
||||
}
|
||||
|
||||
if (!anElement) {
|
||||
if(!anElement){
|
||||
aResult = DRS_WARN_SKIP_ELEM;
|
||||
} else {
|
||||
if (isRenum) {
|
||||
}else{
|
||||
if(isRenum){
|
||||
anIsElemNum = eFAUX;
|
||||
takeNumbers = false;
|
||||
if (aResult < DRS_WARN_RENUMBER)
|
||||
@ -436,246 +300,239 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
|
||||
}
|
||||
}
|
||||
} // for (int iPE = 0; iPE < nbPolyedres; iPE++)
|
||||
continue;
|
||||
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
PCellInfo aCellInfo = aMed->GetPCellInfo(aMeshInfo,anEntity,aGeom);
|
||||
EBooleen anIsElemNum = takeNumbers ? aCellInfo->IsElemNum() : eFAUX;
|
||||
TInt aNbElems = aCellInfo->GetNbElem();
|
||||
if(MYDEBUG) MESSAGE("Perform - anEntity = "<<anEntity<<"; anIsElemNum = "<<anIsElemNum);
|
||||
if(MYDEBUG) MESSAGE("Perform - aGeom = "<<aGeom<<"; aNbElems = "<<aNbElems);
|
||||
|
||||
for(int iElem = 0; iElem < aNbElems; iElem++){
|
||||
TInt aNbNodes = -1;
|
||||
switch(aGeom){
|
||||
case eSEG2:
|
||||
case eSEG3:
|
||||
aNbNodes = 2;
|
||||
break;
|
||||
case eTRIA3:
|
||||
case eTRIA6:
|
||||
aNbNodes = 3;
|
||||
break;
|
||||
break;
|
||||
case eQUAD4:
|
||||
case eQUAD8:
|
||||
aNbNodes = 4;
|
||||
break;
|
||||
case eTETRA4:
|
||||
case eTETRA10:
|
||||
aNbNodes = 4;
|
||||
break;
|
||||
case ePYRA5:
|
||||
case ePYRA13:
|
||||
aNbNodes = 5;
|
||||
break;
|
||||
case ePENTA6:
|
||||
case ePENTA15:
|
||||
aNbNodes = 6;
|
||||
break;
|
||||
case eHEXA8:
|
||||
case eHEXA20:
|
||||
aNbNodes = 8;
|
||||
break;
|
||||
}
|
||||
vector<TInt> aNodeIds(aNbNodes);
|
||||
bool anIsValidConnect = false;
|
||||
|
||||
try{
|
||||
#ifdef _EDF_NODE_IDS_
|
||||
if(anIsNodeNum) {
|
||||
for(int i = 0; i < aNbNodes; i++){
|
||||
aNodeIds[i] = aNodeInfo->GetElemNum(aCellInfo->GetConn(iElem,i)-1);
|
||||
}
|
||||
}else{
|
||||
for(int i = 0; i < aNbNodes; i++){
|
||||
aNodeIds[i] = aCellInfo->GetConn(iElem,i);
|
||||
}
|
||||
}
|
||||
#else
|
||||
for(int i = 0; i < aNbNodes; i++){
|
||||
aNodeIds[i] = aCellInfo->GetConn(iElem,i);
|
||||
}
|
||||
#endif
|
||||
anIsValidConnect = true;
|
||||
}catch(const std::exception& exc){
|
||||
//INFOS("Follow exception was cought:\n\t"<<exc.what());
|
||||
aResult = DRS_FAIL;
|
||||
}catch(...){
|
||||
//INFOS("Unknown exception was cought !!!");
|
||||
aResult = DRS_FAIL;
|
||||
}
|
||||
default: {
|
||||
PCellInfo aCellInfo = aMed->GetPCellInfo(aMeshInfo,anEntity,aGeom);
|
||||
EBooleen anIsElemNum = takeNumbers ? aCellInfo->IsElemNum() : eFAUX;
|
||||
TInt aNbElems = aCellInfo->GetNbElem();
|
||||
if(MYDEBUG) MESSAGE("Perform - anEntity = "<<anEntity<<"; anIsElemNum = "<<anIsElemNum);
|
||||
if(MYDEBUG) MESSAGE("Perform - aGeom = "<<aGeom<<"; aNbElems = "<<aNbElems);
|
||||
|
||||
if(!anIsValidConnect)
|
||||
continue;
|
||||
|
||||
bool isRenum = false;
|
||||
SMDS_MeshElement* anElement = NULL;
|
||||
TInt aFamNum = aCellInfo->GetFamNum(iElem);
|
||||
try{
|
||||
//MESSAGE("Try to create element # " << iElem << " with id = "
|
||||
// << aCellInfo->GetElemNum(iElem));
|
||||
for(int iElem = 0; iElem < aNbElems; iElem++){
|
||||
TInt aNbNodes = -1;
|
||||
switch(aGeom){
|
||||
case eSEG2:
|
||||
case eSEG3:
|
||||
if(anIsElemNum)
|
||||
anElement = myMesh->AddEdgeWithID(aNodeIds[0],
|
||||
aNodeIds[1],
|
||||
aCellInfo->GetElemNum(iElem));
|
||||
if (!anElement) {
|
||||
anElement = myMesh->AddEdge(FindNode(myMesh,aNodeIds[0]),
|
||||
FindNode(myMesh,aNodeIds[1]));
|
||||
isRenum = anIsElemNum;
|
||||
}
|
||||
aNbNodes = 2;
|
||||
break;
|
||||
case eTRIA3:
|
||||
case eTRIA6:
|
||||
aNbNodes = 3;
|
||||
if(anIsElemNum)
|
||||
anElement = myMesh->AddFaceWithID(aNodeIds[0],
|
||||
aNodeIds[1],
|
||||
aNodeIds[2],
|
||||
aCellInfo->GetElemNum(iElem));
|
||||
if (!anElement) {
|
||||
anElement = myMesh->AddFace(FindNode(myMesh,aNodeIds[0]),
|
||||
FindNode(myMesh,aNodeIds[1]),
|
||||
FindNode(myMesh,aNodeIds[2]));
|
||||
isRenum = anIsElemNum;
|
||||
}
|
||||
break;
|
||||
break;
|
||||
case eQUAD4:
|
||||
case eQUAD8:
|
||||
aNbNodes = 4;
|
||||
// There is some differnce between SMDS and MED
|
||||
if(anIsElemNum)
|
||||
anElement = myMesh->AddFaceWithID(aNodeIds[0],
|
||||
aNodeIds[1],
|
||||
aNodeIds[2],
|
||||
aNodeIds[3],
|
||||
aCellInfo->GetElemNum(iElem));
|
||||
if (!anElement) {
|
||||
anElement = myMesh->AddFace(FindNode(myMesh,aNodeIds[0]),
|
||||
FindNode(myMesh,aNodeIds[1]),
|
||||
FindNode(myMesh,aNodeIds[2]),
|
||||
FindNode(myMesh,aNodeIds[3]));
|
||||
isRenum = anIsElemNum;
|
||||
}
|
||||
break;
|
||||
case eTETRA4:
|
||||
case eTETRA10:
|
||||
aNbNodes = 4;
|
||||
if(anIsElemNum)
|
||||
anElement = myMesh->AddVolumeWithID(aNodeIds[0],
|
||||
aNodeIds[1],
|
||||
aNodeIds[2],
|
||||
aNodeIds[3],
|
||||
aCellInfo->GetElemNum(iElem));
|
||||
if (!anElement) {
|
||||
anElement = myMesh->AddVolume(FindNode(myMesh,aNodeIds[0]),
|
||||
FindNode(myMesh,aNodeIds[1]),
|
||||
FindNode(myMesh,aNodeIds[2]),
|
||||
FindNode(myMesh,aNodeIds[3]));
|
||||
isRenum = anIsElemNum;
|
||||
}
|
||||
break;
|
||||
case ePYRA5:
|
||||
case ePYRA13:
|
||||
aNbNodes = 5;
|
||||
// There is some differnce between SMDS and MED
|
||||
if(anIsElemNum)
|
||||
anElement = myMesh->AddVolumeWithID(aNodeIds[0],
|
||||
aNodeIds[1],
|
||||
aNodeIds[2],
|
||||
aNodeIds[3],
|
||||
aNodeIds[4],
|
||||
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]));
|
||||
isRenum = anIsElemNum;
|
||||
}
|
||||
break;
|
||||
case ePENTA6:
|
||||
case ePENTA15:
|
||||
aNbNodes = 6;
|
||||
if(anIsElemNum)
|
||||
anElement = myMesh->AddVolumeWithID(aNodeIds[0],
|
||||
aNodeIds[1],
|
||||
aNodeIds[2],
|
||||
aNodeIds[3],
|
||||
aNodeIds[4],
|
||||
aNodeIds[5],
|
||||
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]));
|
||||
isRenum = anIsElemNum;
|
||||
}
|
||||
break;
|
||||
case eHEXA8:
|
||||
case eHEXA20:
|
||||
aNbNodes = 8;
|
||||
if(anIsElemNum)
|
||||
anElement = myMesh->AddVolumeWithID(aNodeIds[0],
|
||||
break;
|
||||
}
|
||||
TNodeIds aNodeIds(aNbNodes);
|
||||
bool anIsValidConnect = false;
|
||||
TCConnSlice aConnSlice = aCellInfo->GetConnSlice(iElem);
|
||||
try{
|
||||
#ifdef _EDF_NODE_IDS_
|
||||
if(anIsNodeNum)
|
||||
for(int iNode = 0; iNode < aNbNodes; iNode++)
|
||||
aNodeIds[iNode] = aNodeInfo->GetElemNum(aConnSlice[iNode] - 1);
|
||||
else
|
||||
for(int iNode = 0; iNode < aNbNodes; iNode++)
|
||||
aNodeIds[iNode] = aConnSlice[iNode];
|
||||
#else
|
||||
for(int iNode = 0; iNode < aNbNodes; iNode++)
|
||||
aNodeIds[iNode] = aConnSlice[iNode];
|
||||
#endif
|
||||
anIsValidConnect = true;
|
||||
}catch(const std::exception& exc){
|
||||
//INFOS("Follow exception was cought:\n\t"<<exc.what());
|
||||
aResult = DRS_FAIL;
|
||||
}catch(...){
|
||||
//INFOS("Unknown exception was cought !!!");
|
||||
aResult = DRS_FAIL;
|
||||
}
|
||||
|
||||
if(!anIsValidConnect)
|
||||
continue;
|
||||
|
||||
bool isRenum = false;
|
||||
SMDS_MeshElement* anElement = NULL;
|
||||
TInt aFamNum = aCellInfo->GetFamNum(iElem);
|
||||
try{
|
||||
//MESSAGE("Try to create element # " << iElem << " with id = "
|
||||
// << aCellInfo->GetElemNum(iElem));
|
||||
switch(aGeom){
|
||||
case eSEG2:
|
||||
case eSEG3:
|
||||
if(anIsElemNum)
|
||||
anElement = myMesh->AddEdgeWithID(aNodeIds[0],
|
||||
aNodeIds[1],
|
||||
aCellInfo->GetElemNum(iElem));
|
||||
if (!anElement) {
|
||||
anElement = myMesh->AddEdge(FindNode(myMesh,aNodeIds[0]),
|
||||
FindNode(myMesh,aNodeIds[1]));
|
||||
isRenum = anIsElemNum;
|
||||
}
|
||||
break;
|
||||
case eTRIA3:
|
||||
case eTRIA6:
|
||||
aNbNodes = 3;
|
||||
if(anIsElemNum)
|
||||
anElement = myMesh->AddFaceWithID(aNodeIds[0],
|
||||
aNodeIds[1],
|
||||
aNodeIds[2],
|
||||
aCellInfo->GetElemNum(iElem));
|
||||
if (!anElement) {
|
||||
anElement = myMesh->AddFace(FindNode(myMesh,aNodeIds[0]),
|
||||
FindNode(myMesh,aNodeIds[1]),
|
||||
FindNode(myMesh,aNodeIds[2]));
|
||||
isRenum = anIsElemNum;
|
||||
}
|
||||
break;
|
||||
case eQUAD4:
|
||||
case eQUAD8:
|
||||
aNbNodes = 4;
|
||||
// There is some differnce between SMDS and MED
|
||||
if(anIsElemNum)
|
||||
anElement = myMesh->AddFaceWithID(aNodeIds[0],
|
||||
aNodeIds[1],
|
||||
aNodeIds[2],
|
||||
aNodeIds[3],
|
||||
aNodeIds[4],
|
||||
aNodeIds[5],
|
||||
aNodeIds[6],
|
||||
aNodeIds[7],
|
||||
aCellInfo->GetElemNum(iElem));
|
||||
if (!anElement) {
|
||||
anElement = myMesh->AddVolume(FindNode(myMesh,aNodeIds[0]),
|
||||
if (!anElement) {
|
||||
anElement = myMesh->AddFace(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]));
|
||||
isRenum = anIsElemNum;
|
||||
FindNode(myMesh,aNodeIds[3]));
|
||||
isRenum = anIsElemNum;
|
||||
}
|
||||
break;
|
||||
case eTETRA4:
|
||||
case eTETRA10:
|
||||
aNbNodes = 4;
|
||||
if(anIsElemNum)
|
||||
anElement = myMesh->AddVolumeWithID(aNodeIds[0],
|
||||
aNodeIds[1],
|
||||
aNodeIds[2],
|
||||
aNodeIds[3],
|
||||
aCellInfo->GetElemNum(iElem));
|
||||
if (!anElement) {
|
||||
anElement = myMesh->AddVolume(FindNode(myMesh,aNodeIds[0]),
|
||||
FindNode(myMesh,aNodeIds[1]),
|
||||
FindNode(myMesh,aNodeIds[2]),
|
||||
FindNode(myMesh,aNodeIds[3]));
|
||||
isRenum = anIsElemNum;
|
||||
}
|
||||
break;
|
||||
case ePYRA5:
|
||||
case ePYRA13:
|
||||
aNbNodes = 5;
|
||||
// There is some differnce between SMDS and MED
|
||||
if(anIsElemNum)
|
||||
anElement = myMesh->AddVolumeWithID(aNodeIds[0],
|
||||
aNodeIds[1],
|
||||
aNodeIds[2],
|
||||
aNodeIds[3],
|
||||
aNodeIds[4],
|
||||
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]));
|
||||
isRenum = anIsElemNum;
|
||||
}
|
||||
break;
|
||||
case ePENTA6:
|
||||
case ePENTA15:
|
||||
aNbNodes = 6;
|
||||
if(anIsElemNum)
|
||||
anElement = myMesh->AddVolumeWithID(aNodeIds[0],
|
||||
aNodeIds[1],
|
||||
aNodeIds[2],
|
||||
aNodeIds[3],
|
||||
aNodeIds[4],
|
||||
aNodeIds[5],
|
||||
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]));
|
||||
isRenum = anIsElemNum;
|
||||
}
|
||||
break;
|
||||
case eHEXA8:
|
||||
case eHEXA20:
|
||||
aNbNodes = 8;
|
||||
if(anIsElemNum)
|
||||
anElement = myMesh->AddVolumeWithID(aNodeIds[0],
|
||||
aNodeIds[1],
|
||||
aNodeIds[2],
|
||||
aNodeIds[3],
|
||||
aNodeIds[4],
|
||||
aNodeIds[5],
|
||||
aNodeIds[6],
|
||||
aNodeIds[7],
|
||||
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]));
|
||||
isRenum = anIsElemNum;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}catch(const std::exception& exc){
|
||||
//INFOS("Follow exception was cought:\n\t"<<exc.what());
|
||||
aResult = DRS_FAIL;
|
||||
}catch(...){
|
||||
//INFOS("Unknown exception was cought !!!");
|
||||
aResult = DRS_FAIL;
|
||||
}
|
||||
}catch(const std::exception& exc){
|
||||
//INFOS("Follow exception was cought:\n\t"<<exc.what());
|
||||
aResult = DRS_FAIL;
|
||||
}catch(...){
|
||||
//INFOS("Unknown exception was cought !!!");
|
||||
aResult = DRS_FAIL;
|
||||
}
|
||||
|
||||
if (!anElement) {
|
||||
aResult = DRS_WARN_SKIP_ELEM;
|
||||
}
|
||||
else {
|
||||
if (isRenum) {
|
||||
anIsElemNum = eFAUX;
|
||||
takeNumbers = false;
|
||||
if (aResult < DRS_WARN_RENUMBER)
|
||||
aResult = DRS_WARN_RENUMBER;
|
||||
}
|
||||
if ( checkFamilyID ( aFamily, aFamNum ))
|
||||
{
|
||||
// Save reference to this element from its family
|
||||
aFamily->AddElement(anElement);
|
||||
aFamily->SetType(anElement->GetType());
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!anElement) {
|
||||
aResult = DRS_WARN_SKIP_ELEM;
|
||||
}
|
||||
else {
|
||||
if (isRenum) {
|
||||
anIsElemNum = eFAUX;
|
||||
takeNumbers = false;
|
||||
if (aResult < DRS_WARN_RENUMBER)
|
||||
aResult = DRS_WARN_RENUMBER;
|
||||
}
|
||||
if ( checkFamilyID ( aFamily, aFamNum )) {
|
||||
// Save reference to this element from its family
|
||||
myFamilies[aFamNum]->AddElement(anElement);
|
||||
myFamilies[aFamNum]->SetType(anElement->GetType());
|
||||
}
|
||||
}
|
||||
}
|
||||
}}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}catch(const std::exception& exc){
|
||||
|
@ -329,12 +329,11 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
|
||||
int aFamId = (*aFamsIter)->GetId();
|
||||
|
||||
const set<const SMDS_MeshElement *>& anElems = (*aFamsIter)->GetElements();
|
||||
set<const SMDS_MeshElement *>::const_iterator anElemsIter = anElems.begin();
|
||||
set<const SMDS_MeshElement *>::const_iterator anElemsIter = anElems.begin();
|
||||
for (; anElemsIter != anElems.end(); anElemsIter++)
|
||||
{
|
||||
anElemFamMap[*anElemsIter] = aFamId;
|
||||
}
|
||||
// delete (*aFamsIter);
|
||||
}
|
||||
|
||||
// Storing SMDS nodes to the MED file for the MED mesh
|
||||
@ -373,8 +372,9 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
|
||||
const ERepere SMDS_COORDINATE_SYSTEM = eCART;
|
||||
|
||||
PNodeInfo aNodeInfo = myMed->CrNodeInfo(aMeshInfo,
|
||||
SMDS_COORDINATE_SYSTEM,
|
||||
aCoordinates,
|
||||
eFULL_INTERLACE,
|
||||
SMDS_COORDINATE_SYSTEM,
|
||||
aCoordNames,
|
||||
aCoordUnits,
|
||||
aFamilyNums,
|
||||
@ -421,8 +421,8 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
|
||||
PCellInfo aCellInfo = myMed->CrCellInfo(aMeshInfo,
|
||||
SMDS_MED_ENTITY,
|
||||
eSEG2,
|
||||
SMDS_MED_CONNECTIVITY,
|
||||
aConnectivity,
|
||||
SMDS_MED_CONNECTIVITY,
|
||||
aFamilyNums,
|
||||
anElemNums);
|
||||
myMed->SetCellInfo(aCellInfo);
|
||||
@ -532,8 +532,8 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
|
||||
PCellInfo aCellInfo = myMed->CrCellInfo(aMeshInfo,
|
||||
SMDS_MED_ENTITY,
|
||||
eTRIA3,
|
||||
SMDS_MED_CONNECTIVITY,
|
||||
aTriaConn,
|
||||
SMDS_MED_CONNECTIVITY,
|
||||
aTriaFamilyNums,
|
||||
anTriaElemNums);
|
||||
MESSAGE("Perform - anEntity = "<<SMDS_MED_ENTITY<<"; aGeom = "<<eTRIA3<<"; aNbElems = "<<aNbElems);
|
||||
@ -543,8 +543,8 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
|
||||
PCellInfo aCellInfo = myMed->CrCellInfo(aMeshInfo,
|
||||
SMDS_MED_ENTITY,
|
||||
eQUAD4,
|
||||
SMDS_MED_CONNECTIVITY,
|
||||
aQuadConn,
|
||||
SMDS_MED_CONNECTIVITY,
|
||||
aQuadFamilyNums,
|
||||
aQuadElemNums);
|
||||
MESSAGE("Perform - anEntity = "<<SMDS_MED_ENTITY<<"; aGeom = "<<eQUAD4<<"; aNbElems = "<<aNbElems);
|
||||
@ -558,9 +558,9 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
|
||||
PPolygoneInfo aCellInfo = myMed->CrPolygoneInfo(aMeshInfo,
|
||||
SMDS_MED_ENTITY,
|
||||
ePOLYGONE,
|
||||
SMDS_MED_CONNECTIVITY,
|
||||
aPolygoneConn,
|
||||
aPolygoneInds,
|
||||
SMDS_MED_CONNECTIVITY,
|
||||
aPolygoneFamilyNums,
|
||||
aPolygoneElemNums);
|
||||
MESSAGE("Perform - anEntity = "<<SMDS_MED_ENTITY<<"; aGeom = "<<ePOLYGONE<<"; aNbElems = "<<aNbElems);
|
||||
@ -722,8 +722,8 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
|
||||
PCellInfo aCellInfo = myMed->CrCellInfo(aMeshInfo,
|
||||
SMDS_MED_ENTITY,
|
||||
eTETRA4,
|
||||
SMDS_MED_CONNECTIVITY,
|
||||
aTetraConn,
|
||||
SMDS_MED_CONNECTIVITY,
|
||||
aTetraFamilyNums,
|
||||
anTetraElemNums);
|
||||
MESSAGE("Perform - anEntity = "<<SMDS_MED_ENTITY<<"; aGeom = "<<eTETRA4<<"; aNbElems = "<<aNbElems);
|
||||
@ -733,8 +733,8 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
|
||||
PCellInfo aCellInfo = myMed->CrCellInfo(aMeshInfo,
|
||||
SMDS_MED_ENTITY,
|
||||
ePYRA5,
|
||||
SMDS_MED_CONNECTIVITY,
|
||||
aPyraConn,
|
||||
SMDS_MED_CONNECTIVITY,
|
||||
aPyraFamilyNums,
|
||||
anPyraElemNums);
|
||||
MESSAGE("Perform - anEntity = "<<SMDS_MED_ENTITY<<"; aGeom = "<<ePYRA5<<"; aNbElems = "<<aNbElems);
|
||||
@ -744,8 +744,8 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
|
||||
PCellInfo aCellInfo = myMed->CrCellInfo(aMeshInfo,
|
||||
SMDS_MED_ENTITY,
|
||||
ePENTA6,
|
||||
SMDS_MED_CONNECTIVITY,
|
||||
aPentaConn,
|
||||
SMDS_MED_CONNECTIVITY,
|
||||
aPentaFamilyNums,
|
||||
anPentaElemNums);
|
||||
MESSAGE("Perform - anEntity = "<<SMDS_MED_ENTITY<<"; aGeom = "<<ePENTA6<<"; aNbElems = "<<aNbElems);
|
||||
@ -755,8 +755,8 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
|
||||
PCellInfo aCellInfo = myMed->CrCellInfo(aMeshInfo,
|
||||
SMDS_MED_ENTITY,
|
||||
eHEXA8,
|
||||
SMDS_MED_CONNECTIVITY,
|
||||
aHexaConn,
|
||||
SMDS_MED_CONNECTIVITY,
|
||||
aHexaFamilyNums,
|
||||
aHexaElemNums);
|
||||
MESSAGE("Perform - anEntity = "<<SMDS_MED_ENTITY<<"; aGeom = "<<eHEXA8<<"; aNbElems = "<<aNbElems);
|
||||
@ -770,10 +770,10 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
|
||||
PPolyedreInfo aCellInfo = myMed->CrPolyedreInfo(aMeshInfo,
|
||||
SMDS_MED_ENTITY,
|
||||
ePOLYEDRE,
|
||||
SMDS_MED_CONNECTIVITY,
|
||||
aPolyedreConn,
|
||||
aPolyedreFaces,
|
||||
aPolyedreInds,
|
||||
aPolyedreFaces,
|
||||
aPolyedreConn,
|
||||
SMDS_MED_CONNECTIVITY,
|
||||
aPolyedreFamilyNums,
|
||||
aPolyedreElemNums);
|
||||
MESSAGE("Perform - anEntity = "<<SMDS_MED_ENTITY<<"; aGeom = "<<ePOLYEDRE<<"; aNbElems = "<<aNbElems);
|
||||
|
@ -63,7 +63,7 @@ CPPFLAGS += $(OCC_INCLUDES) -I${MED_ROOT_DIR}/include/salome $(BOOST_CPPFLAGS)
|
||||
CXXFLAGS += $(OCC_CXXFLAGS) $(HDF5_INCLUDES) -I${KERNEL_ROOT_DIR}/include/salome
|
||||
LDFLAGS += -lMeshDriver -L${MED_ROOT_DIR}/lib/salome -lMEDWrapper
|
||||
|
||||
LDFLAGSFORBIN += -lMeshDriver -lSMDS -lSMESHDS -L${KERNEL_ROOT_DIR}/lib/salome -L${MED_ROOT_DIR}/lib/salome -lMEDWrapper -lMEDWrapperBase -lMEDWrapper_V2_1 -lMEDWrapper_V2_2 -lOpUtil -lSALOMELocalTrace -lSALOMEBasics
|
||||
LDFLAGSFORBIN += -lMeshDriver -lSMDS -lSMESHDS -L${KERNEL_ROOT_DIR}/lib/salome -L${MED_ROOT_DIR}/lib/salome -lMEDWrapper -lMEDWrapperBase -lMEDWrapper_V2_1 -lmed_V2_1 -lMEDWrapper_V2_2 -lOpUtil -lSALOMELocalTrace -lSALOMEBasics
|
||||
|
||||
@CONCLUDE@
|
||||
|
||||
|
@ -786,6 +786,8 @@ vtkDataSet* SMESH_ActorDef::GetInput(){
|
||||
|
||||
|
||||
void SMESH_ActorDef::SetTransform(VTKViewer_Transform* theTransform){
|
||||
Superclass::SetTransform(theTransform);
|
||||
|
||||
myNodeActor->SetTransform(theTransform);
|
||||
myBaseActor->SetTransform(theTransform);
|
||||
|
||||
|
@ -64,7 +64,7 @@ EXPORT_HEADERS= SMESH_Type.h \
|
||||
# additionnal information to compil and link file
|
||||
CPPFLAGS += $(OCC_INCLUDES) $(QT_INCLUDES) $(PYTHON_INCLUDES) $(VTK_INCLUDES) \
|
||||
-I${KERNEL_ROOT_DIR}/include/salome -I${GUI_ROOT_DIR}/include/salome \
|
||||
-I${GEOM_ROOT_DIR}/include/salome -I${BOOSTDIR}
|
||||
-I${GEOM_ROOT_DIR}/include/salome ${BOOST_CPPFLAGS}
|
||||
CXXFLAGS += $(OCC_CXXFLAGS) -I${KERNEL_ROOT_DIR}/include/salome -I${GUI_ROOT_DIR}/include/salome \
|
||||
-I${GEOM_ROOT_DIR}/include/salome -I${BOOSTDIR}
|
||||
LDFLAGS += $(OCC_KERNEL_LIBS) -L${GUI_ROOT_DIR}/lib/salome -L${GEOM_ROOT_DIR}/lib/salome -lSalomeApp -lsuit
|
||||
|
@ -1070,6 +1070,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
|
||||
if( !mgr )
|
||||
return false;
|
||||
|
||||
if (CORBA::is_nil(GetSMESHGen()->GetCurrentStudy())) {
|
||||
GetSMESHGen()->SetCurrentStudy(_CAST(Study,aStudy)->GetStudy());
|
||||
}
|
||||
|
||||
SUIT_ViewWindow* view = application()->desktop()->activeWindow();
|
||||
SVTK_ViewWindow* vtkwnd = dynamic_cast<SVTK_ViewWindow*>( view );
|
||||
|
||||
|
@ -2260,17 +2260,17 @@ bool SMESHGUI_FilterDlg::createFilter (const int theType)
|
||||
//=======================================================================
|
||||
void SMESHGUI_FilterDlg::insertFilterInViewer()
|
||||
{
|
||||
if (SVTK_InteractorStyle* aStyle = SMESH::GetInteractorStyle()) {
|
||||
if (SVTK_Selector* aSelector = SMESH::GetSelector()) {
|
||||
SMESH::ElementType anEntType = (SMESH::ElementType)myTable->GetType();
|
||||
|
||||
if (myFilter[ myTable->GetType() ]->_is_nil() ||
|
||||
myFilter[ myTable->GetType() ]->GetPredicate()->_is_nil() ||
|
||||
!mySetInViewer->isChecked()) {
|
||||
SMESH::RemoveFilter(getFilterId(anEntType), aStyle);
|
||||
SMESH::RemoveFilter(getFilterId(anEntType), aSelector);
|
||||
} else {
|
||||
Handle(SMESHGUI_PredicateFilter) aFilter = new SMESHGUI_PredicateFilter();
|
||||
aFilter->SetPredicate(myFilter[ myTable->GetType() ]->GetPredicate());
|
||||
SMESH::SetFilter(aFilter, aStyle);
|
||||
SMESH::SetFilter(aFilter, aSelector);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -89,6 +89,7 @@ SMESHGUI_GroupDlg::SMESHGUI_GroupDlg( SMESHGUI* theModule, const char* name,
|
||||
WStyle_Title | WStyle_SysMenu | WDestructiveClose),
|
||||
mySMESHGUI( theModule ),
|
||||
mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ),
|
||||
mySelector(SMESH::GetViewWindow( theModule )->GetSelector()),
|
||||
myIsBusy( false ),
|
||||
myActor( 0 )
|
||||
{
|
||||
@ -103,7 +104,6 @@ SMESHGUI_GroupDlg::SMESHGUI_GroupDlg( SMESHGUI* theModule, const char* name,
|
||||
myGeomGroupLine->setEnabled(false);
|
||||
}
|
||||
|
||||
mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();
|
||||
|
||||
/* Move widget on the botton right corner of main widget */
|
||||
int x, y ;
|
||||
@ -121,12 +121,11 @@ SMESHGUI_GroupDlg::SMESHGUI_GroupDlg( SMESHGUI* theModule, const char* name,
|
||||
WStyle_Title | WStyle_SysMenu | WDestructiveClose),
|
||||
mySMESHGUI( theModule ),
|
||||
mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ),
|
||||
mySelector(SMESH::GetViewWindow( theModule )->GetSelector()),
|
||||
myIsBusy( false )
|
||||
{
|
||||
if (!name) setName("SMESHGUI_GroupDlg");
|
||||
|
||||
mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();
|
||||
|
||||
initDialog(false);
|
||||
if (!theGroup->_is_nil())
|
||||
init(theGroup);
|
||||
@ -563,14 +562,14 @@ void SMESHGUI_GroupDlg::setSelectionMode (int theMode)
|
||||
aViewWindow->SetSelectionMode(VolumeSelection);
|
||||
}
|
||||
} else {
|
||||
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
|
||||
aViewWindow->SetSelectionMode(ActorSelection);
|
||||
if (theMode == 4)
|
||||
mySelectionMgr->installFilter(mySubMeshFilter);
|
||||
else if (theMode == 5)
|
||||
mySelectionMgr->installFilter(myGroupFilter);
|
||||
else if (theMode == 6)
|
||||
mySelectionMgr->installFilter(myMeshFilter);
|
||||
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
|
||||
aViewWindow->SetSelectionMode(ActorSelection);
|
||||
}
|
||||
mySelectionMode = theMode;
|
||||
}
|
||||
@ -716,8 +715,6 @@ void SMESHGUI_GroupDlg::onListSelectionChanged()
|
||||
SALOME_ListIO aList;
|
||||
aList.Append(myActor->getIO());
|
||||
mySelectionMgr->setSelectedObjects(aList,false);
|
||||
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
|
||||
aViewWindow->highlight( myActor->getIO(), true, true );
|
||||
}
|
||||
myIsBusy = false;
|
||||
}
|
||||
@ -1096,12 +1093,27 @@ void SMESHGUI_GroupDlg::onAdd()
|
||||
|
||||
SMESH::ElementType aType = SMESH::ALL;
|
||||
switch(myTypeId) {
|
||||
case 0: aType = SMESH::NODE; break;
|
||||
case 1: aType = SMESH::EDGE; break;
|
||||
case 2: aType = SMESH::FACE; break;
|
||||
case 3: aType = SMESH::VOLUME; break;
|
||||
case 0:
|
||||
aType = SMESH::NODE;
|
||||
mySelector->SetSelectionMode(NodeSelection);
|
||||
break;
|
||||
case 1:
|
||||
aType = SMESH::EDGE;
|
||||
mySelector->SetSelectionMode(EdgeSelection);
|
||||
break;
|
||||
case 2:
|
||||
aType = SMESH::FACE;
|
||||
mySelector->SetSelectionMode(FaceSelection);
|
||||
break;
|
||||
case 3:
|
||||
aType = SMESH::VOLUME;
|
||||
mySelector->SetSelectionMode(VolumeSelection);
|
||||
break;
|
||||
default:
|
||||
mySelector->SetSelectionMode(ActorSelection);
|
||||
}
|
||||
|
||||
|
||||
if (myCurrentLineEdit == 0) {
|
||||
//if (aNbSel != 1) { myIsBusy = false; return; }
|
||||
QString aListStr = "";
|
||||
|
@ -51,7 +51,6 @@
|
||||
#include "SVTK_Selector.h"
|
||||
#include "SVTK_ViewModel.h"
|
||||
#include "SVTK_ViewWindow.h"
|
||||
#include "SVTK_InteractorStyle.h"
|
||||
|
||||
// OCCT Includes
|
||||
#include <Precision.hxx>
|
||||
@ -504,8 +503,8 @@ void SMESHGUI_MultiEditDlg::onSelectionDone()
|
||||
myActor = SMESH::FindActorByEntry(aList.First()->getEntry());
|
||||
if (!myActor)
|
||||
myActor = SMESH::FindActorByObject(myMesh);
|
||||
SVTK_InteractorStyle* aStyle = SMESH::GetInteractorStyle();
|
||||
Handle(VTKViewer_Filter) aFilter = aStyle->GetFilter(myFilterType);
|
||||
SVTK_Selector* aSelector = SMESH::GetSelector();
|
||||
Handle(VTKViewer_Filter) aFilter = aSelector->GetFilter(myFilterType);
|
||||
if (!aFilter.IsNull())
|
||||
aFilter->SetActor(myActor);
|
||||
}
|
||||
@ -605,9 +604,9 @@ void SMESHGUI_MultiEditDlg::onFilterAccepted()
|
||||
//=======================================================================
|
||||
bool SMESHGUI_MultiEditDlg::isIdValid (const int theId) const
|
||||
{
|
||||
SVTK_InteractorStyle* aStyle = SMESH::GetInteractorStyle();
|
||||
SVTK_Selector* aSelector = SMESH::GetSelector();
|
||||
Handle(SMESHGUI_Filter) aFilter =
|
||||
Handle(SMESHGUI_Filter)::DownCast(aStyle->GetFilter(myFilterType));
|
||||
Handle(SMESHGUI_Filter)::DownCast(aSelector->GetFilter(myFilterType));
|
||||
|
||||
return (!aFilter.IsNull() && aFilter->IsObjValid(theId));
|
||||
}
|
||||
|
@ -262,6 +262,7 @@ void SMESHGUI_RemoveElementsDlg::ClickOnApply()
|
||||
|
||||
if (aResult) {
|
||||
myEditCurrentArgument->clear();
|
||||
mySelector->ClearIndex();
|
||||
SMESH::UpdateView();
|
||||
}
|
||||
}
|
||||
|
@ -265,6 +265,7 @@ void SMESHGUI_RemoveNodesDlg::ClickOnApply()
|
||||
|
||||
if (aResult) {
|
||||
myEditCurrentArgument->clear();
|
||||
mySelector->ClearIndex();
|
||||
SMESH::UpdateView();
|
||||
}
|
||||
|
||||
|
@ -327,8 +327,8 @@ QVariant SMESHGUI_Selection::isVisible( int ind ) const
|
||||
QString ent = entry( ind );
|
||||
SMESH_Actor* actor = SMESH::FindActorByEntry( ent.latin1() );
|
||||
if ( actor && actor->hasIO() ) {
|
||||
SVTK_RenderWindowInteractor* renderInter = SMESH::GetCurrentVtkView()->getRWInteractor();
|
||||
return QVariant( renderInter->isVisible( actor->getIO() ), 0 );
|
||||
if(SVTK_ViewWindow* aViewWindow = SMESH::GetCurrentVtkView())
|
||||
return QVariant( aViewWindow->isVisible( actor->getIO() ), 0 );
|
||||
}
|
||||
}
|
||||
return QVariant( false, 0 );
|
||||
|
@ -36,9 +36,6 @@
|
||||
#include "SVTK_Selector.h"
|
||||
#include "SVTK_ViewModel.h"
|
||||
#include "SVTK_ViewWindow.h"
|
||||
#include "SVTK_RenderWindow.h"
|
||||
#include "SVTK_InteractorStyle.h"
|
||||
#include "SVTK_RenderWindowInteractor.h"
|
||||
|
||||
#include "utilities.h"
|
||||
|
||||
@ -448,85 +445,83 @@ namespace SMESH{
|
||||
double SP1 = mgr->doubleValue( "SMESH", "selection_precision_node", 0.025 ),
|
||||
SP2 = mgr->doubleValue( "SMESH", "selection_precision_element", 0.001 );
|
||||
|
||||
for ( int i=0, n=views.count(); i<n; i++ ) {
|
||||
SVTK_ViewWindow* aVtkView = GetVtkViewWindow( views[i] );
|
||||
if (!aVtkView) continue;
|
||||
// update VTK viewer properties
|
||||
SVTK_RenderWindowInteractor* anInteractor = aVtkView->getRWInteractor();
|
||||
if (anInteractor) {
|
||||
// mesh element selection
|
||||
anInteractor->SetSelectionProp(aSelColor.red()/255., aSelColor.green()/255.,
|
||||
aSelColor.blue()/255., SW );
|
||||
for ( int i=0, n=views.count(); i<n; i++ ){
|
||||
// update VTK viewer properties
|
||||
if(SVTK_ViewWindow* aVtkView = GetVtkViewWindow( views[i] )){
|
||||
// mesh element selection
|
||||
aVtkView->SetSelectionProp(aSelColor.red()/255.,
|
||||
aSelColor.green()/255.,
|
||||
aSelColor.blue()/255.,
|
||||
SW );
|
||||
// tolerances
|
||||
aVtkView->SetSelectionTolerance(SP1, SP2);
|
||||
|
||||
// tolerances
|
||||
anInteractor->SetSelectionTolerance(SP1, SP2);
|
||||
|
||||
// pre-selection
|
||||
SVTK_InteractorStyle* aStyle =
|
||||
dynamic_cast<SVTK_InteractorStyle*>( anInteractor->GetInteractorStyle() );
|
||||
if (aStyle) {
|
||||
aStyle->setPreselectionProp(aPreColor.red()/255., aPreColor.green()/255.,
|
||||
aPreColor.blue()/255., PW);
|
||||
}
|
||||
}
|
||||
// pre-selection
|
||||
aVtkView->SetPreselectionProp(aPreColor.red()/255.,
|
||||
aPreColor.green()/255.,
|
||||
aPreColor.blue()/255.,
|
||||
PW);
|
||||
// update actors
|
||||
vtkRenderer* aRenderer = aVtkView->getRenderer();
|
||||
vtkActorCollection *aCollection = aRenderer->GetActors();
|
||||
aCollection->InitTraversal();
|
||||
while(vtkActor *anAct = aCollection->GetNextActor()){
|
||||
if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
|
||||
anActor->SetHighlightColor(aHiColor.red()/255., aHiColor.green()/255.,
|
||||
anActor->SetHighlightColor(aHiColor.red()/255.,
|
||||
aHiColor.green()/255.,
|
||||
aHiColor.blue()/255.);
|
||||
anActor->SetPreHighlightColor(aPreColor.red()/255., aPreColor.green()/255.,
|
||||
anActor->SetPreHighlightColor(aPreColor.red()/255.,
|
||||
aPreColor.green()/255.,
|
||||
aPreColor.blue()/255.);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
SVTK_InteractorStyle* GetInteractorStyle(SUIT_ViewWindow *theWindow){
|
||||
if(SVTK_ViewWindow* aWnd = GetVtkViewWindow(theWindow)){
|
||||
if(SVTK_RenderWindowInteractor* anInteractor = aWnd->getRWInteractor()){
|
||||
return dynamic_cast<SVTK_InteractorStyle*>( anInteractor->GetInteractorStyle() );
|
||||
}
|
||||
}
|
||||
SVTK_Selector*
|
||||
GetSelector(SUIT_ViewWindow *theWindow)
|
||||
{
|
||||
if(SVTK_ViewWindow* aWnd = GetVtkViewWindow(theWindow))
|
||||
return aWnd->GetSelector();
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void SetFilter(const Handle(VTKViewer_Filter)& theFilter,
|
||||
SVTK_InteractorStyle* theStyle)
|
||||
SVTK_Selector* theSelector)
|
||||
{
|
||||
if (theStyle)
|
||||
theStyle->SetFilter(theFilter);
|
||||
if (theSelector)
|
||||
theSelector->SetFilter(theFilter);
|
||||
}
|
||||
|
||||
Handle(VTKViewer_Filter) GetFilter(int theId, SVTK_InteractorStyle* theStyle)
|
||||
Handle(VTKViewer_Filter) GetFilter(int theId, SVTK_Selector* theSelector)
|
||||
{
|
||||
return theStyle->GetFilter(theId);
|
||||
return theSelector->GetFilter(theId);
|
||||
}
|
||||
|
||||
bool IsFilterPresent(int theId, SVTK_InteractorStyle* theStyle)
|
||||
bool IsFilterPresent(int theId, SVTK_Selector* theSelector)
|
||||
{
|
||||
return theStyle->IsFilterPresent(theId);
|
||||
return theSelector->IsFilterPresent(theId);
|
||||
}
|
||||
|
||||
void RemoveFilter(int theId, SVTK_InteractorStyle* theStyle)
|
||||
void RemoveFilter(int theId, SVTK_Selector* theSelector)
|
||||
{
|
||||
theStyle->RemoveFilter(theId);
|
||||
theSelector->RemoveFilter(theId);
|
||||
}
|
||||
|
||||
void RemoveFilters(SVTK_InteractorStyle* theStyle)
|
||||
void RemoveFilters(SVTK_Selector* theSelector)
|
||||
{
|
||||
for ( int id = SMESHGUI_NodeFilter; theStyle && id < SMESHGUI_LastFilter; id++ )
|
||||
theStyle->RemoveFilter( id );
|
||||
for ( int id = SMESHGUI_NodeFilter; theSelector && id < SMESHGUI_LastFilter; id++ )
|
||||
theSelector->RemoveFilter( id );
|
||||
}
|
||||
|
||||
bool IsValid(SALOME_Actor* theActor, int theCellId,
|
||||
SVTK_InteractorStyle* theStyle)
|
||||
SVTK_Selector* theSelector)
|
||||
{
|
||||
return theStyle->IsValid(theActor,theCellId);
|
||||
return theSelector->IsValid(theActor,theCellId);
|
||||
}
|
||||
|
||||
|
||||
|
@ -34,7 +34,6 @@ class SUIT_Study;
|
||||
class SUIT_ViewWindow;
|
||||
class SUIT_ViewManager;
|
||||
|
||||
class SVTK_InteractorStyle;
|
||||
class SVTK_ViewWindow;
|
||||
class SVTK_Selector;
|
||||
|
||||
@ -119,25 +118,25 @@ namespace SMESH{
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
SVTK_InteractorStyle*
|
||||
GetInteractorStyle (SUIT_ViewWindow* = GetActiveWindow());
|
||||
SVTK_Selector*
|
||||
GetSelector(SUIT_ViewWindow* = GetActiveWindow());
|
||||
|
||||
void SetFilter (const Handle(VTKViewer_Filter)& theFilter,
|
||||
SVTK_InteractorStyle* theStyle = GetInteractorStyle());
|
||||
SVTK_Selector* theSelector = GetSelector());
|
||||
|
||||
Handle(VTKViewer_Filter)
|
||||
GetFilter (int theId, SVTK_InteractorStyle* theStyle = GetInteractorStyle());
|
||||
GetFilter (int theId, SVTK_Selector* theSelector = GetSelector());
|
||||
|
||||
bool IsFilterPresent (int theId,
|
||||
SVTK_InteractorStyle* theStyle = GetInteractorStyle());
|
||||
SVTK_Selector* theSelector = GetSelector());
|
||||
|
||||
void RemoveFilter (int theId,
|
||||
SVTK_InteractorStyle* theStyle = GetInteractorStyle());
|
||||
SVTK_Selector* theSelector = GetSelector());
|
||||
|
||||
void RemoveFilters (SVTK_InteractorStyle* theStyle = GetInteractorStyle());
|
||||
void RemoveFilters (SVTK_Selector* theSelector = GetSelector());
|
||||
|
||||
bool IsValid (SALOME_Actor* theActor, int theCellId,
|
||||
SVTK_InteractorStyle* theStyle = GetInteractorStyle());
|
||||
SVTK_Selector* theSelector = GetSelector());
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
int GetNameOfSelectedNodes(SVTK_Selector* theSelector,
|
||||
|
@ -96,7 +96,7 @@ LDFLAGS+= -L${KERNEL_ROOT_DIR}/lib/salome -lSalomeContainer -lSalomeNS -lRegistr
|
||||
|
||||
|
||||
LDFLAGSFORBIN += -lSMDS -lSMESHDS \
|
||||
-L${MED_ROOT_DIR}/lib/salome -lMEDWrapper -lMEDWrapperBase -lMEDWrapper_V2_1 -lMEDWrapper_V2_2 \
|
||||
-L${MED_ROOT_DIR}/lib/salome -lMEDWrapper -lMEDWrapperBase -lMEDWrapper_V2_1 -lMEDWrapper_V2_2 -lmed_V2_1 \
|
||||
-lMeshDriver -lMeshDriverMED -lMeshDriverUNV -lMeshDriverDAT -lMeshDriverSTL \
|
||||
-L${KERNEL_ROOT_DIR}/lib/salome -lSalomeContainer -lSalomeNS -lRegistry -lSalomeResourcesManager \
|
||||
-lOpUtil -lSALOMELocalTrace -lSALOMEBasics -lSalomeNotification -lCASCatch \
|
||||
|
Loading…
Reference in New Issue
Block a user