X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FDriverUNV%2FDriverUNV_W_SMDS_Mesh.cxx;fp=src%2FDriverUNV%2FDriverUNV_W_SMDS_Mesh.cxx;h=1a1a9dce71604a40f3ad8653e9e6eaf51ee00e7b;hp=a716945d9ecfc0776ec1509226d277689519dc58;hb=57b43b4d010e2d0a1529d3c131bbb9d416e63258;hpb=06c42e9c9528a8d54fed01e266c949676fa0d929 diff --git a/src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx b/src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx index a716945d9..1a1a9dce7 100644 --- a/src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx +++ b/src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx @@ -22,11 +22,16 @@ #include "DriverUNV_W_SMDS_Mesh.h" #include "SMDS_Mesh.hxx" +#include "SMESHDS_GroupBase.hxx" +//#include "SMESH_Group.hxx" +#include "SMDS_QuadraticEdge.hxx" +#include "SMDS_QuadraticFaceOfNodes.hxx" #include "utilities.h" #include "UNV2411_Structure.hxx" #include "UNV2412_Structure.hxx" +#include "UNV2417_Structure.hxx" #include "UNV_Utilities.hxx" using namespace std; @@ -86,15 +91,19 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform() int aNbNodes = anElem->NbNodes(); TRecord aRec; aRec.node_labels.reserve(aNbNodes); - SMDS_ElemIteratorPtr aNodesIter = anElem->nodesIterator(); + SMDS_ElemIteratorPtr aNodesIter; + if( anElem->IsQuadratic() ) { + aNodesIter = static_cast + ( anElem )->interlacedNodesElemIterator(); + aRec.fe_descriptor_id = 22; + } else { + aNodesIter = anElem->nodesIterator(); + aRec.fe_descriptor_id = 11; + } for(; aNodesIter->more();){ const SMDS_MeshElement* aNode = aNodesIter->next(); aRec.node_labels.push_back(aNode->GetID()); } - if(aNbNodes==2) - aRec.fe_descriptor_id = 11; - else - aRec.fe_descriptor_id = 21; aDataSet2412.insert(TDataSet::value_type(aLabel,aRec)); } MESSAGE("Perform - aDataSet2412.size() = "<NbNodes(); TRecord aRec; aRec.node_labels.reserve(aNbNodes); - SMDS_ElemIteratorPtr aNodesIter = anElem->nodesIterator(); + SMDS_ElemIteratorPtr aNodesIter; + if( anElem->IsQuadratic() ) + aNodesIter = static_cast + ( anElem )->interlacedNodesElemIterator(); + else + aNodesIter = anElem->nodesIterator(); for(; aNodesIter->more();){ const SMDS_MeshElement* aNode = aNodesIter->next(); aRec.node_labels.push_back(aNode->GetID()); @@ -170,25 +184,25 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform() break; } case 10: { - static int anIds[] = {0,2,1,3,6,5,4,7,9,8}; + static int anIds[] = {0,4,2,9,5,3, 1,6,8, 7}; aConn = anIds; anId = 118; break; } case 13: { - static int anIds[] = {0,3,2,1,4,8,7,6,5,9,12,11,10}; + static int anIds[] = {0,6,4,2,7,5,3,1,8,11,10,9,12}; aConn = anIds; anId = 114; break; } case 15: { - static int anIds[] = {0,2,1,3,5,4,8,7,6,11,10,9,12,14,13}; + static int anIds[] = {0,4,2,9,13,11,5,3,1,14,12,10,6,8,7}; aConn = anIds; anId = 113; break; } case 20: { - static int anIds[] = {0,3,2,1,4,7,6,5,11,10,9,8,15,14,13,12,16,19,18,17}; + static int anIds[] = {0,6, 4,2, 12,18,16,14,7, 5, 3, 1, 19,17,15,13,8, 11,10,9}; aConn = anIds; anId = 116; break; @@ -210,6 +224,74 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform() } UNV2412::Write(out_stream,aDataSet2412); } + { + using namespace UNV2417; + if (myGroups.size() > 0) { + TDataSet aDataSet2417; + TGroupList::const_iterator aIter = myGroups.begin(); + for (; aIter != myGroups.end(); aIter++) { + SMESHDS_GroupBase* aGroupDS = *aIter; + TRecord aRec; + aRec.GroupName = aGroupDS->GetStoreName(); + + 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); + 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); + }*/ } catch(const std::exception& exc){ INFOS("Follow exception was cought:\n\t"<