diff --git a/src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx b/src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx index 945192a56..4e75a762f 100644 --- a/src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx +++ b/src/DriverUNV/DriverUNV_W_SMDS_Mesh.cxx @@ -22,6 +22,8 @@ #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" @@ -29,6 +31,7 @@ #include "UNV2411_Structure.hxx" #include "UNV2412_Structure.hxx" +#include "UNV2417_Structure.hxx" #include "UNV_Utilities.hxx" using namespace std; @@ -221,6 +224,39 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform() } UNV2412::Write(out_stream,aDataSet2412); } + { + 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"< + + +typedef std::map TGroupsMap; class DriverUNV_W_SMDS_Mesh: public Driver_SMDS_Mesh { public: virtual Status Perform(); + + void SetGroups(const TGroupsMap& theGroupsMap) { myGroupsMap = theGroupsMap; } + + private: + TGroupsMap myGroupsMap; }; diff --git a/src/DriverUNV/UNV2417_Structure.cxx b/src/DriverUNV/UNV2417_Structure.cxx index f5e84926c..4d3eac88e 100644 --- a/src/DriverUNV/UNV2417_Structure.cxx +++ b/src/DriverUNV/UNV2417_Structure.cxx @@ -1,6 +1,9 @@ #include "UNV2417_Structure.hxx" #include "UNV_Utilities.hxx" +#include +#include + using namespace std; using namespace UNV; using namespace UNV2417; @@ -12,10 +15,10 @@ static int MYDEBUG = 0; #endif -static string _group_labels[] = {"2417", "2429", "2430", "2432", "2435"}; -#define NBGROUP 5 +static string _group_labels[] = {"2417", "2429", "2430", "2432", "2435", "2452"}; +#define NBGROUP 6 -//static string _label_dataset = "2435"; +static string _label_dataset = "2429"; void UNV2417::Read(std::ifstream& in_stream, TDataSet& theDataSet) { @@ -72,10 +75,10 @@ void UNV2417::ReadGroup(const std::string& myGroupLabel, std::ifstream& in_strea int aElType; int aElId; int aNum; - for(int j=0; j < n_nodes; j++){ + for(int j=0; j < n_nodes; j++){ in_stream>>aElType; in_stream>>aElId; - if (myGroupLabel.compare("2435") == 0) { + if ((myGroupLabel.compare("2435") == 0) || (myGroupLabel.compare("2452") == 0)) { in_stream>>aTmp; in_stream>>aTmp; } @@ -96,3 +99,62 @@ void UNV2417::ReadGroup(const std::string& myGroupLabel, std::ifstream& in_strea } } + + +void UNV2417::Write(std::ofstream& out_stream, const TDataSet& theDataSet) +{ + if(!out_stream.good()) + EXCEPTION(runtime_error,"ERROR: Output file not good."); + + /* + * Write beginning of dataset + */ + out_stream<<" -1\n"; + out_stream<<" "<<_label_dataset<<"\n"; + + TDataSet::const_iterator anIter = theDataSet.begin(); + for(; anIter != theDataSet.end(); anIter++){ + const TGroupId& aLabel = anIter->first; + const TRecord& aRec = anIter->second; + int aNbNodes = aRec.NodeList.size(); + int aNbElements = aRec.ElementList.size(); + int aNbRecords = aNbNodes + aNbElements; + + out_stream<