X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FDriverUNV%2FDriverUNV_W_SMDS_Mesh.cxx;h=6b507b00e84a3ec8c0a6ad1c79065cd9c0119431;hp=59cd9adf90aeb09da0fb7f52631a2ac677d1ecf6;hb=0fc0831670e27a5611b941c52dc152fd63964515;hpb=c98d9fcd7f02c1f1f5c24dd3e709ed75228d66c4 diff --git a/src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx b/src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx index 59cd9adf9..6b507b00e 100644 --- a/src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx +++ b/src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -25,9 +25,6 @@ #include "DriverUNV_W_SMDS_Mesh.h" #include "SMDS_Mesh.hxx" -#include "SMDS_QuadraticEdge.hxx" -#include "SMDS_QuadraticFaceOfNodes.hxx" -#include "SMDS_PolyhedralVolumeOfNodes.hxx" #include "SMESHDS_GroupBase.hxx" #include "utilities.h" @@ -44,102 +41,107 @@ using namespace std; using namespace UNV; -namespace{ - typedef std::vector TConnect; - - int GetConnect(const SMDS_ElemIteratorPtr& theNodesIter, - TConnect& theConnect) - { - theConnect.clear(); - for(; theNodesIter->more();){ - const SMDS_MeshElement* anElem = theNodesIter->next(); - theConnect.push_back(anElem->GetID()); - } - return theConnect.size(); - } - -} - Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform() { Kernel_Utils::Localizer loc; Status aResult = DRS_OK; +#if defined(WIN32) && defined(UNICODE) + std::wstring aFile = Kernel_Utils::utf8_decode_s(myFile); + std::ofstream out_stream(aFile.c_str()); +#else std::ofstream out_stream(myFile.c_str()); +#endif try{ UNV164::Write( out_stream ); // unit system UNV2420::Write( out_stream, myMeshName ); // Coordinate system + std::vector< size_t > nodeLabelByID; + if ( myMesh->HasNumerationHoles() ) + nodeLabelByID.resize( myMesh->MaxNodeID() + 1 ); + { using namespace UNV2411; TDataSet aDataSet2411; + // ----------------------------------- // Storing SMDS nodes to the UNV file - //----------------------------------- - MESSAGE("Perform - myMesh->NbNodes() = "<NbNodes()); + // ----------------------------------- SMDS_NodeIteratorPtr aNodesIter = myMesh->nodesIterator(); TRecord aRec; - while ( aNodesIter->more() ) + for ( aRec.label = 1; aNodesIter->more(); ++aRec.label ) { const SMDS_MeshNode* aNode = aNodesIter->next(); - aRec.label = aNode->GetID(); + // aRec.label = aNode->GetID(); -- IPAL54452 + if ( !nodeLabelByID.empty() ) + nodeLabelByID[ aNode->GetID() ] = aRec.label; aRec.coord[0] = aNode->X(); aRec.coord[1] = aNode->Y(); aRec.coord[2] = aNode->Z(); aDataSet2411.push_back( aRec ); } - MESSAGE("Perform - aDataSet2411.size() = "< elemLabelByID; + if ( !myGroups.empty() ) + elemLabelByID.resize( myMesh->MaxElementID() + 1 ); + { using namespace UNV2412; TDataSet aDataSet2412; - TConnect aConnect; + TRecord aRec; + aRec.label = 0; + // ------------------- // Storing SMDS Edges - MESSAGE("Perform - myMesh->NbEdges() = "<NbEdges()); - if(myMesh->NbEdges()){ + // ------------------- + if ( myMesh->NbEdges() ) + { SMDS_EdgeIteratorPtr anIter = myMesh->edgesIterator(); - while( anIter->more() ) + while ( anIter->more() ) { const SMDS_MeshEdge* anElem = anIter->next(); - int aNbNodes = anElem->NbNodes(); - TRecord aRec; - aRec.label = anElem->GetID(); - aRec.node_labels.reserve(aNbNodes); - if( anElem->IsQuadratic() ) { - aRec.fe_descriptor_id = 22; - } else { - aRec.fe_descriptor_id = 11; - } + // aRec.label = anElem->GetID(); -- IPAL54452 + ++aRec.label; + if ( !elemLabelByID.empty() ) + elemLabelByID[ anElem->GetID() ] = aRec.label; + + aRec.fe_descriptor_id = anElem->IsQuadratic() ? 22 : 11; + SMDS_NodeIteratorPtr aNodesIter = anElem->nodesIteratorToUNV(); - while( aNodesIter->more()) + for ( aRec.node_labels.clear(); aNodesIter->more(); ) { const SMDS_MeshNode* aNode = aNodesIter->next(); - aRec.node_labels.push_back( aNode->GetID() ); + if ( nodeLabelByID.empty() ) + aRec.node_labels.push_back( aNode->GetID() ); + else + aRec.node_labels.push_back( nodeLabelByID[ aNode->GetID() ]); } + aDataSet2412.push_back(aRec); } - MESSAGE("Perform - aDataSet2412.size() = "<NbFaces() = "<NbFaces()); + // ------------------- + // Storing SMDS Faces + // ------------------- if ( myMesh->NbFaces() ) { SMDS_FaceIteratorPtr anIter = myMesh->facesIterator(); - while ( anIter->more()) + while ( anIter->more() ) { const SMDS_MeshFace* anElem = anIter->next(); if ( anElem->IsPoly() ) continue; - int aNbNodes = anElem->NbNodes(); - TRecord aRec; - aRec.label = anElem->GetID(); - aRec.node_labels.reserve(aNbNodes); + SMDS_NodeIteratorPtr aNodesIter = anElem->nodesIteratorToUNV(); - while( aNodesIter->more() ) { + for ( aRec.node_labels.clear(); aNodesIter->more(); ) { const SMDS_MeshNode* aNode = aNodesIter->next(); - aRec.node_labels.push_back( aNode->GetID() ); + if ( nodeLabelByID.empty() ) + aRec.node_labels.push_back( aNode->GetID() ); + else + aRec.node_labels.push_back( nodeLabelByID[ aNode->GetID() ]); } - switch ( aNbNodes ) { + switch ( anElem->NbNodes() ) { case 3: aRec.fe_descriptor_id = 41; break; case 4: aRec.fe_descriptor_id = 44; break; case 6: aRec.fe_descriptor_id = 42; break; @@ -149,79 +151,94 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform() default: continue; } + // aRec.label = anElem->GetID(); -- IPAL54452 + ++aRec.label; + if ( !elemLabelByID.empty() ) + elemLabelByID[ anElem->GetID() ] = aRec.label; + aDataSet2412.push_back(aRec); } - MESSAGE("Perform - aDataSet2412.size() = "<NbVolumes() = "<NbVolumes()); + // --------------------- + // Storing SMDS Volumes + // --------------------- if ( myMesh->NbVolumes() ) { SMDS_VolumeIteratorPtr anIter = myMesh->volumesIterator(); - while ( anIter->more()) + while ( anIter->more() ) { const SMDS_MeshVolume* anElem = anIter->next(); if ( anElem->IsPoly() ) continue; - int aNbNodes = anElem->NbNodes(); - int anId = -1; - switch(aNbNodes) { - case 4: anId = 111; break; - case 6: anId = 112; break; - case 8: anId = 115; break; - case 10: anId = 118; break; - case 13: anId = 114; break; - case 15: anId = 113; break; + size_t aNbNodes = anElem->NbNodes(); + switch( aNbNodes ) { + case 4: aRec.fe_descriptor_id = 111; break; + case 6: aRec.fe_descriptor_id = 112; break; + case 8: aRec.fe_descriptor_id = 115; break; + case 10: aRec.fe_descriptor_id = 118; break; + case 13: aRec.fe_descriptor_id = 114; break; + case 15: aRec.fe_descriptor_id = 113; break; case 20: - case 27: anId = 116; aNbNodes = 20; break; + case 27: aRec.fe_descriptor_id = 116; aNbNodes = 20; break; default: continue; } - if(anId>0){ - TRecord aRec; - aRec.label = anElem->GetID(); - aRec.fe_descriptor_id = anId; - aRec.node_labels.reserve(aNbNodes); - SMDS_NodeIteratorPtr aNodesIter = anElem->nodesIteratorToUNV(); - while ( aNodesIter->more() && (int)aRec.node_labels.size() < aNbNodes ) - { - const SMDS_MeshElement* aNode = aNodesIter->next(); - aRec.node_labels.push_back(aNode->GetID()); - } - aDataSet2412.push_back(aRec); + // aRec.label = anElem->GetID(); -- IPAL54452 + ++aRec.label; + if ( !elemLabelByID.empty() ) + elemLabelByID[ anElem->GetID() ] = aRec.label; + + aRec.node_labels.clear(); + SMDS_NodeIteratorPtr aNodesIter = anElem->nodesIteratorToUNV(); + while ( aNodesIter->more() && aRec.node_labels.size() < aNbNodes ) + { + const SMDS_MeshElement* aNode = aNodesIter->next(); + if ( nodeLabelByID.empty() ) + aRec.node_labels.push_back( aNode->GetID() ); + else + aRec.node_labels.push_back( nodeLabelByID[ aNode->GetID() ]); } + aDataSet2412.push_back(aRec); } - MESSAGE("Perform - aDataSet2412.size() = "< 0) { + if ( myGroups.size() > 0 ) { + TRecord aRec; TDataSet aDataSet2417; TGroupList::const_iterator aIter = myGroups.begin(); - for (; aIter != myGroups.end(); aIter++) { + for ( ; aIter != myGroups.end(); aIter++ ) + { SMESHDS_GroupBase* aGroupDS = *aIter; - TRecord aRec; aRec.GroupName = aGroupDS->GetStoreName(); + aRec.NodeList.clear(); + aRec.ElementList.clear(); - int i; SMDS_ElemIteratorPtr aIter = aGroupDS->GetElements(); - if (aGroupDS->GetType() == SMDSAbs_Node) { - aRec.NodeList.resize(aGroupDS->Extent()); - i = 0; - while (aIter->more()) { - const SMDS_MeshElement* aElem = aIter->next(); - aRec.NodeList[i] = aElem->GetID(); - i++; + if ( aGroupDS->GetType() == SMDSAbs_Node ) { + while ( aIter->more() ) { + const SMDS_MeshElement* aNode = aIter->next(); + if ( nodeLabelByID.empty() ) + aRec.NodeList.push_back( aNode->GetID() ); + else + aRec.NodeList.push_back( nodeLabelByID[ aNode->GetID() ]); } - } else { - aRec.ElementList.resize(aGroupDS->Extent()); - i = 0; - while (aIter->more()) { + } + else + { + while ( aIter->more() ) { const SMDS_MeshElement* aElem = aIter->next(); - aRec.ElementList[i] = aElem->GetID(); - i++; + if ( elemLabelByID.empty() ) + aRec.ElementList.push_back( aElem->GetID() ); + else + aRec.ElementList.push_back( elemLabelByID[ aElem->GetID() ]); } } // 0019936: EDF 794 SMESH : Export UNV : Node color and group id @@ -232,39 +249,6 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform() myGroups.clear(); } } - /* { - using namespace UNV2417; - TDataSet aDataSet2417; - for ( TGroupsMap::iterator it = myGroupsMap.begin(); it != myGroupsMap.end(); it++ ) { - SMESH_Group* aGroup = it->second; - SMESHDS_GroupBase* aGroupDS = aGroup->GetGroupDS(); - if ( aGroupDS ) { - TRecord aRec; - aRec.GroupName = aGroup->GetName(); - int i; - SMDS_ElemIteratorPtr aIter = aGroupDS->GetElements(); - if (aGroupDS->GetType() == SMDSAbs_Node) { - aRec.NodeList.resize(aGroupDS->Extent()); - i = 0; - while (aIter->more()) { - const SMDS_MeshElement* aElem = aIter->next(); - aRec.NodeList[i] = aElem->GetID(); - i++; - } - } else { - aRec.ElementList.resize(aGroupDS->Extent()); - i = 0; - while (aIter->more()) { - const SMDS_MeshElement* aElem = aIter->next(); - aRec.ElementList[i] = aElem->GetID(); - i++; - } - } - aDataSet2417.insert(TDataSet::value_type(aGroupDS->GetID(), aRec)); - } - } - UNV2417::Write(out_stream,aDataSet2417); - }*/ out_stream.flush(); out_stream.close();