X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FDriverMED%2FDriverMED_Family.cxx;h=31a69cfc19eb25ff672a9326a05690d9914a9edd;hp=0da2c4cffa942131a326e1a762c981e705cd08ed;hb=720f7af2c3ae6ca1071de7df1142acd56b7ba0b4;hpb=4ff5bd61540272713e48de1eee75625028c32155 diff --git a/src/DriverMED/DriverMED_Family.cxx b/src/DriverMED/DriverMED_Family.cxx index 0da2c4cff..31a69cfc1 100644 --- a/src/DriverMED/DriverMED_Family.cxx +++ b/src/DriverMED/DriverMED_Family.cxx @@ -1,34 +1,33 @@ -// SMESH DriverMED : tool to split groups on families +// Copyright (C) 2007-2008 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 // -// Copyright (C) 2003 CEA -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org or email : webmaster.salome@opencascade.org +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// +// SMESH DriverMED : tool to split groups on families // File : DriverMED_Family.cxx // Author : Julia DOROVSKIKH // Module : SMESH -// $Header$ - +// #include "DriverMED_Family.h" #include "MED_Factory.hxx" -#include +#include using namespace std; @@ -83,7 +82,7 @@ void DriverMED_Family ::SetType(const SMDSAbs_ElementType theType) { - myType = theType; + myTypes.insert( myType = theType ); } SMDSAbs_ElementType @@ -93,6 +92,13 @@ DriverMED_Family return myType; } +const std::set< SMDSAbs_ElementType >& +DriverMED_Family +::GetTypes() const +{ + return myTypes; +} + bool DriverMED_Family ::MemberOf(std::string theGroupName) const @@ -139,11 +145,11 @@ DriverMED_Family DriverMED_FamilyPtrList DriverMED_Family ::MakeFamilies(const SMESHDS_SubMeshPtrMap& theSubMeshes, - const SMESHDS_GroupBasePtrList& theGroups, - const bool doGroupOfNodes, - const bool doGroupOfEdges, - const bool doGroupOfFaces, - const bool doGroupOfVolumes) + const SMESHDS_GroupBasePtrList& theGroups, + const bool doGroupOfNodes, + const bool doGroupOfEdges, + const bool doGroupOfFaces, + const bool doGroupOfVolumes) { DriverMED_FamilyPtrList aFamilies; @@ -189,7 +195,7 @@ DriverMED_Family aFamilies.erase(aCurrIter); } if (aFam2->IsEmpty()) - break; + break; } } // The rest elements of family @@ -218,7 +224,7 @@ DriverMED_Family aFam1->Split(aFam2, aCommon); if (!aCommon->IsEmpty()) { - aCommon->SetGroupAttributVal(0); + aCommon->SetGroupAttributVal(0); aFamilies.push_back(aCommon); } if (aFam1->IsEmpty()) @@ -226,7 +232,7 @@ DriverMED_Family aFamilies.erase(aCurrIter); } if (aFam2->IsEmpty()) - break; + break; } } // The rest elements of group @@ -310,7 +316,7 @@ DriverMED_Family //============================================================================= MED::PFamilyInfo DriverMED_Family::GetFamilyInfo(const MED::PWrapper& theWrapper, - const MED::PMeshInfo& theMeshInfo) const + const MED::PMeshInfo& theMeshInfo) const { ostringstream aStr; aStr << "FAM_" << myId; @@ -318,26 +324,34 @@ DriverMED_Family::GetFamilyInfo(const MED::PWrapper& theWrapper, for(; aGrIter != myGroupNames.end(); aGrIter++){ aStr << "_" << *aGrIter; } + string aValue = aStr.str(); + // PAL19785,0019867 - med forbids whitespace to be the last char in the name + int maxSize; + if ( theWrapper->GetVersion() == MED::eV2_1 ) + maxSize = MED::GetNOMLength(); + else + maxSize = MED::GetNOMLength(); + int lastCharPos = min( maxSize, (int) aValue.size() ) - 1; + while ( isspace( aValue[ lastCharPos ] )) + aValue.resize( lastCharPos-- ); MED::PFamilyInfo anInfo; - string aValue = aStr.str(); - if(myId == 0){ + if(myId == 0 || myGroupAttributVal == 0){ anInfo = theWrapper->CrFamilyInfo(theMeshInfo, - aValue, - myId, - myGroupNames); + aValue, + myId, + myGroupNames); }else{ MED::TStringVector anAttrDescs (1, ""); // 1 attribute with empty description, MED::TIntVector anAttrIds (1, myId); // Id=0, - MED::TIntVector anAttrVals (1); - anAttrVals[0] = myGroupAttributVal != 0? myGroupAttributVal: myId; + MED::TIntVector anAttrVals (1, myGroupAttributVal); anInfo = theWrapper->CrFamilyInfo(theMeshInfo, - aValue, - myId, - myGroupNames, - anAttrDescs, - anAttrIds, - anAttrVals); + aValue, + myId, + myGroupNames, + anAttrDescs, + anAttrIds, + anAttrVals); } // cout << endl; @@ -382,13 +396,18 @@ void DriverMED_Family::Init (SMESHDS_GroupBase* theGroup) myGroupNames.clear(); myGroupNames.insert(string(theGroup->GetStoreName())); - myGroupAttributVal = 0; - - if (theGroup->GetColorGroup()!=0) - { - myGroupAttributVal = theGroup->GetColorGroup(); - } - + Quantity_Color aColor = theGroup->GetColor(); + double aRed = aColor.Red(); + double aGreen = aColor.Green(); + double aBlue = aColor.Blue(); + int aR = int( aRed*255 ); + int aG = int( aGreen*255 ); + int aB = int( aBlue*255 ); +// cout << "aRed = " << aR << endl; +// cout << "aGreen = " << aG << endl; +// cout << "aBlue = " << aB << endl; + myGroupAttributVal = (int)(aR*1000000 + aG*1000 + aB); + //cout << "myGroupAttributVal = " << myGroupAttributVal << endl; } //============================================================================= @@ -400,7 +419,7 @@ void DriverMED_Family::Init (SMESHDS_GroupBase* theGroup) DriverMED_FamilyPtrList DriverMED_Family ::SplitByType (SMESHDS_SubMesh* theSubMesh, - const int theId) + const int theId) { DriverMED_FamilyPtrList aFamilies; DriverMED_FamilyPtr aNodesFamily (new DriverMED_Family);