mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-26 09:20:34 +05:00
Bug PAL11696 - writing a MESH with FAMILY attributes (identifier, value, description
This commit is contained in:
parent
408e1a5c83
commit
1dd2517e39
@ -84,6 +84,16 @@ module SMESH
|
||||
* Returns the mesh object this group belongs to
|
||||
*/
|
||||
SMESH_Mesh GetMesh();
|
||||
|
||||
/*!
|
||||
* Sets group color number
|
||||
*/
|
||||
void SetColorNumber( in long color );
|
||||
|
||||
/*!
|
||||
* Returns group color number
|
||||
*/
|
||||
long GetColorNumber();
|
||||
};
|
||||
|
||||
/*!
|
||||
|
@ -32,6 +32,103 @@
|
||||
|
||||
using namespace std;
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* Default constructor
|
||||
*/
|
||||
//=============================================================================
|
||||
DriverMED_Family
|
||||
::DriverMED_Family():
|
||||
myGroupAttributVal(0)
|
||||
{}
|
||||
|
||||
|
||||
//=============================================================================
|
||||
const ElementsSet&
|
||||
DriverMED_Family
|
||||
::GetElements () const
|
||||
{
|
||||
return myElements;
|
||||
}
|
||||
|
||||
int
|
||||
DriverMED_Family
|
||||
::GetId () const
|
||||
{
|
||||
return myId;
|
||||
}
|
||||
|
||||
void
|
||||
DriverMED_Family
|
||||
::SetId (const int theId)
|
||||
{
|
||||
myId = theId;
|
||||
}
|
||||
|
||||
void
|
||||
DriverMED_Family
|
||||
::AddElement(const SMDS_MeshElement* theElement)
|
||||
{
|
||||
myElements.insert(theElement);
|
||||
}
|
||||
|
||||
void
|
||||
DriverMED_Family
|
||||
::AddGroupName(std::string theGroupName)
|
||||
{
|
||||
myGroupNames.insert(theGroupName);
|
||||
}
|
||||
|
||||
void
|
||||
DriverMED_Family
|
||||
::SetType(const SMDSAbs_ElementType theType)
|
||||
{
|
||||
myType = theType;
|
||||
}
|
||||
|
||||
SMDSAbs_ElementType
|
||||
DriverMED_Family
|
||||
::GetType()
|
||||
{
|
||||
return myType;
|
||||
}
|
||||
|
||||
bool
|
||||
DriverMED_Family
|
||||
::MemberOf(std::string theGroupName) const
|
||||
{
|
||||
return myGroupNames.find(theGroupName) != myGroupNames.end();
|
||||
}
|
||||
|
||||
const MED::TStringSet&
|
||||
DriverMED_Family
|
||||
::GetGroupNames () const
|
||||
{
|
||||
return myGroupNames;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
DriverMED_Family
|
||||
::GetGroupAttributVal() const
|
||||
{
|
||||
return myGroupAttributVal;
|
||||
}
|
||||
|
||||
void
|
||||
DriverMED_Family
|
||||
::SetGroupAttributVal( int theValue)
|
||||
{
|
||||
myGroupAttributVal = theValue;
|
||||
}
|
||||
|
||||
bool
|
||||
DriverMED_Family
|
||||
::IsEmpty () const
|
||||
{
|
||||
return myElements.empty();
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* Split each group from list <aGroups> on some parts (families)
|
||||
@ -39,15 +136,16 @@ using namespace std;
|
||||
* Resulting families have no common elements.
|
||||
*/
|
||||
//=============================================================================
|
||||
list<DriverMED_FamilyPtr> DriverMED_Family::MakeFamilies
|
||||
(const map <int, SMESHDS_SubMesh*>& theSubMeshes,
|
||||
const list<SMESHDS_GroupBase*>& theGroups,
|
||||
const bool doGroupOfNodes,
|
||||
const bool doGroupOfEdges,
|
||||
const bool doGroupOfFaces,
|
||||
const bool doGroupOfVolumes)
|
||||
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)
|
||||
{
|
||||
list<DriverMED_FamilyPtr> aFamilies;
|
||||
DriverMED_FamilyPtrList aFamilies;
|
||||
|
||||
string anAllNodesGroupName = "Group_Of_All_Nodes";
|
||||
string anAllEdgesGroupName = "Group_Of_All_Edges";
|
||||
@ -61,22 +159,23 @@ list<DriverMED_FamilyPtr> DriverMED_Family::MakeFamilies
|
||||
int aElemFamId = FIRST_ELEM_FAMILY;
|
||||
|
||||
// Process sub-meshes
|
||||
map<int, SMESHDS_SubMesh*>::const_iterator aSMIter = theSubMeshes.begin();
|
||||
SMESHDS_SubMeshPtrMap::const_iterator aSMIter = theSubMeshes.begin();
|
||||
for (; aSMIter != theSubMeshes.end(); aSMIter++)
|
||||
{
|
||||
if ( aSMIter->second->IsComplexSubmesh() )
|
||||
const int anId = aSMIter->first;
|
||||
SMESHDS_SubMesh* aSubMesh = aSMIter->second;
|
||||
if ( aSubMesh->IsComplexSubmesh() )
|
||||
continue; // submesh containing other submeshs
|
||||
list<DriverMED_FamilyPtr> aSMFams = SplitByType((*aSMIter).second, (*aSMIter).first);
|
||||
list<DriverMED_FamilyPtr>::iterator aSMFamsIter = aSMFams.begin();
|
||||
DriverMED_FamilyPtrList aSMFams = SplitByType(aSubMesh,anId);
|
||||
DriverMED_FamilyPtrList::iterator aSMFamsIter = aSMFams.begin();
|
||||
for (; aSMFamsIter != aSMFams.end(); aSMFamsIter++)
|
||||
{
|
||||
DriverMED_FamilyPtr aFam2 = (*aSMFamsIter);
|
||||
|
||||
list<DriverMED_FamilyPtr>::iterator aFamsIter = aFamilies.begin();
|
||||
DriverMED_FamilyPtrList::iterator aFamsIter = aFamilies.begin();
|
||||
while (aFamsIter != aFamilies.end())
|
||||
{
|
||||
DriverMED_FamilyPtr aFam1 = *aFamsIter;
|
||||
list<DriverMED_FamilyPtr>::iterator aCurrIter = aFamsIter++;
|
||||
DriverMED_FamilyPtrList::iterator aCurrIter = aFamsIter++;
|
||||
if (aFam1->myType == aFam2->myType)
|
||||
{
|
||||
DriverMED_FamilyPtr aCommon (new DriverMED_Family);
|
||||
@ -89,7 +188,8 @@ list<DriverMED_FamilyPtr> DriverMED_Family::MakeFamilies
|
||||
{
|
||||
aFamilies.erase(aCurrIter);
|
||||
}
|
||||
if (aFam2->IsEmpty()) break;
|
||||
if (aFam2->IsEmpty())
|
||||
break;
|
||||
}
|
||||
}
|
||||
// The rest elements of family
|
||||
@ -101,30 +201,32 @@ list<DriverMED_FamilyPtr> DriverMED_Family::MakeFamilies
|
||||
}
|
||||
|
||||
// Process groups
|
||||
list<SMESHDS_GroupBase*>::const_iterator aGroupsIter = theGroups.begin();
|
||||
SMESHDS_GroupBasePtrList::const_iterator aGroupsIter = theGroups.begin();
|
||||
for (; aGroupsIter != theGroups.end(); aGroupsIter++)
|
||||
{
|
||||
DriverMED_FamilyPtr aFam2 (new DriverMED_Family);
|
||||
aFam2->Init(*aGroupsIter);
|
||||
|
||||
list<DriverMED_FamilyPtr>::iterator aFamsIter = aFamilies.begin();
|
||||
DriverMED_FamilyPtrList::iterator aFamsIter = aFamilies.begin();
|
||||
while (aFamsIter != aFamilies.end())
|
||||
{
|
||||
DriverMED_FamilyPtr aFam1 = *aFamsIter;
|
||||
list<DriverMED_FamilyPtr>::iterator aCurrIter = aFamsIter++;
|
||||
DriverMED_FamilyPtrList::iterator aCurrIter = aFamsIter++;
|
||||
if (aFam1->myType == aFam2->myType)
|
||||
{
|
||||
DriverMED_FamilyPtr aCommon (new DriverMED_Family);
|
||||
aFam1->Split(aFam2, aCommon);
|
||||
if (!aCommon->IsEmpty())
|
||||
{
|
||||
aCommon->SetGroupAttributVal(0);
|
||||
aFamilies.push_back(aCommon);
|
||||
}
|
||||
if (aFam1->IsEmpty())
|
||||
{
|
||||
aFamilies.erase(aCurrIter);
|
||||
}
|
||||
if (aFam2->IsEmpty()) break;
|
||||
if (aFam2->IsEmpty())
|
||||
break;
|
||||
}
|
||||
}
|
||||
// The rest elements of group
|
||||
@ -134,7 +236,7 @@ list<DriverMED_FamilyPtr> DriverMED_Family::MakeFamilies
|
||||
}
|
||||
}
|
||||
|
||||
list<DriverMED_FamilyPtr>::iterator aFamsIter = aFamilies.begin();
|
||||
DriverMED_FamilyPtrList::iterator aFamsIter = aFamilies.begin();
|
||||
for (; aFamsIter != aFamilies.end(); aFamsIter++)
|
||||
{
|
||||
DriverMED_FamilyPtr aFam = *aFamsIter;
|
||||
@ -210,33 +312,33 @@ MED::PFamilyInfo
|
||||
DriverMED_Family::GetFamilyInfo(const MED::PWrapper& theWrapper,
|
||||
const MED::PMeshInfo& theMeshInfo) const
|
||||
{
|
||||
string aValue;
|
||||
|
||||
ostringstream aStr;
|
||||
|
||||
aStr << "FAM_" << myId;
|
||||
set<string>::const_iterator aGrIter = myGroupNames.begin();
|
||||
for (; aGrIter != myGroupNames.end(); aGrIter++)
|
||||
{
|
||||
for(; aGrIter != myGroupNames.end(); aGrIter++){
|
||||
aStr << "_" << *aGrIter;
|
||||
}
|
||||
|
||||
aValue = aStr.str();
|
||||
/*
|
||||
MED::TStringVector anAttrDescs (1, ""); // 1 attribute with empty description,
|
||||
MED::TIntVector anAttrIds (1, myId); // Id=0,
|
||||
MED::TIntVector anAttrVals (1, myId); // Value=0
|
||||
*/
|
||||
|
||||
MED::PFamilyInfo anInfo = theWrapper->CrFamilyInfo(theMeshInfo,
|
||||
aValue,
|
||||
myId,
|
||||
myGroupNames);
|
||||
/*
|
||||
anAttrDescs,
|
||||
anAttrIds,
|
||||
anAttrVals);
|
||||
*/
|
||||
MED::PFamilyInfo anInfo;
|
||||
string aValue = aStr.str();
|
||||
if(myId == 0){
|
||||
anInfo = theWrapper->CrFamilyInfo(theMeshInfo,
|
||||
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;
|
||||
anInfo = theWrapper->CrFamilyInfo(theMeshInfo,
|
||||
aValue,
|
||||
myId,
|
||||
myGroupNames,
|
||||
anAttrDescs,
|
||||
anAttrIds,
|
||||
anAttrVals);
|
||||
}
|
||||
|
||||
// cout << endl;
|
||||
// cout << "Groups: ";
|
||||
@ -279,6 +381,14 @@ void DriverMED_Family::Init (SMESHDS_GroupBase* theGroup)
|
||||
// Groups list
|
||||
myGroupNames.clear();
|
||||
myGroupNames.insert(string(theGroup->GetStoreName()));
|
||||
|
||||
myGroupAttributVal = 0;
|
||||
|
||||
if (theGroup->GetColorGroup()!=0)
|
||||
{
|
||||
myGroupAttributVal = theGroup->GetColorGroup();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
@ -287,10 +397,12 @@ void DriverMED_Family::Init (SMESHDS_GroupBase* theGroup)
|
||||
* on the basis of the elements type.
|
||||
*/
|
||||
//=============================================================================
|
||||
list<DriverMED_FamilyPtr> DriverMED_Family::SplitByType (SMESHDS_SubMesh* theSubMesh,
|
||||
const int theId)
|
||||
DriverMED_FamilyPtrList
|
||||
DriverMED_Family
|
||||
::SplitByType (SMESHDS_SubMesh* theSubMesh,
|
||||
const int theId)
|
||||
{
|
||||
list<DriverMED_FamilyPtr> aFamilies;
|
||||
DriverMED_FamilyPtrList aFamilies;
|
||||
DriverMED_FamilyPtr aNodesFamily (new DriverMED_Family);
|
||||
DriverMED_FamilyPtr anEdgesFamily (new DriverMED_Family);
|
||||
DriverMED_FamilyPtr aFacesFamily (new DriverMED_Family);
|
||||
@ -361,7 +473,7 @@ void DriverMED_Family::Split (DriverMED_FamilyPtr by,
|
||||
DriverMED_FamilyPtr common)
|
||||
{
|
||||
// Elements
|
||||
set<const SMDS_MeshElement *>::iterator anIter = by->myElements.begin();
|
||||
ElementsSet::iterator anIter = by->myElements.begin();
|
||||
while ( anIter != by->myElements.end())
|
||||
{
|
||||
if (myElements.find(*anIter) != myElements.end())
|
||||
@ -378,7 +490,7 @@ void DriverMED_Family::Split (DriverMED_FamilyPtr by,
|
||||
{
|
||||
// Groups list
|
||||
common->myGroupNames = myGroupNames;
|
||||
set<string>::iterator aGrNamesIter = by->myGroupNames.begin();
|
||||
MED::TStringSet::iterator aGrNamesIter = by->myGroupNames.begin();
|
||||
for (; aGrNamesIter != by->myGroupNames.end(); aGrNamesIter++)
|
||||
{
|
||||
common->myGroupNames.insert(*aGrNamesIter);
|
||||
|
@ -45,76 +45,92 @@
|
||||
|
||||
class DriverMED_Family;
|
||||
typedef boost::shared_ptr<DriverMED_Family> DriverMED_FamilyPtr;
|
||||
typedef std::list<DriverMED_FamilyPtr> DriverMED_FamilyPtrList;
|
||||
typedef std::map<int,SMESHDS_SubMesh*> SMESHDS_SubMeshPtrMap;
|
||||
typedef std::list<SMESHDS_GroupBase*> SMESHDS_GroupBasePtrList;
|
||||
typedef std::set<const SMDS_MeshElement*> ElementsSet;
|
||||
|
||||
class DriverMED_Family
|
||||
{
|
||||
public:
|
||||
|
||||
// Methods for groups storing to MED
|
||||
DriverMED_Family();
|
||||
|
||||
static std::list<DriverMED_FamilyPtr> MakeFamilies (const std::map <int, SMESHDS_SubMesh*>& theSubMeshes,
|
||||
const std::list<SMESHDS_GroupBase*>& theGroups,
|
||||
const bool doGroupOfNodes,
|
||||
const bool doGroupOfEdges,
|
||||
const bool doGroupOfFaces,
|
||||
const bool doGroupOfVolumes);
|
||||
// Split each group from list <theGroups> and each sub-mesh from list <theSubMeshes>
|
||||
// on some parts (families) on the basis of the elements membership in other groups
|
||||
// from <theGroups> and other sub-meshes from <theSubMeshes>.
|
||||
// Resulting families have no common elements.
|
||||
//! Methods for groups storing to MED
|
||||
/*!
|
||||
Split each group from list <theGroups> and each sub-mesh from list <theSubMeshes>
|
||||
on some parts (families) on the basis of the elements membership in other groups
|
||||
from <theGroups> and other sub-meshes from <theSubMeshes>.
|
||||
Resulting families have no common elements.
|
||||
*/
|
||||
static
|
||||
DriverMED_FamilyPtrList
|
||||
MakeFamilies (const SMESHDS_SubMeshPtrMap& theSubMeshes,
|
||||
const SMESHDS_GroupBasePtrList& theGroups,
|
||||
const bool doGroupOfNodes,
|
||||
const bool doGroupOfEdges,
|
||||
const bool doGroupOfFaces,
|
||||
const bool doGroupOfVolumes);
|
||||
|
||||
MED::PFamilyInfo GetFamilyInfo (const MED::PWrapper& theWrapper,
|
||||
const MED::PMeshInfo& theMeshInfo) const;
|
||||
// Create TFamilyInfo for this family
|
||||
//! Create TFamilyInfo for this family
|
||||
MED::PFamilyInfo
|
||||
GetFamilyInfo (const MED::PWrapper& theWrapper,
|
||||
const MED::PMeshInfo& theMeshInfo) const;
|
||||
|
||||
const std::set<const SMDS_MeshElement *>& GetElements () const { return myElements; }
|
||||
// Returns elements of this family
|
||||
//! Returns elements of this family
|
||||
const ElementsSet& GetElements () const;
|
||||
|
||||
int GetId () const { return myId; }
|
||||
// Returns a family ID
|
||||
//! Returns a family ID
|
||||
int GetId () const;
|
||||
|
||||
//! Sets a family ID
|
||||
void SetId (const int theId);
|
||||
|
||||
public:
|
||||
|
||||
// Methods for groups reading from MED
|
||||
|
||||
void AddElement (const SMDS_MeshElement* theElement) { myElements.insert(theElement); }
|
||||
void AddElement(const SMDS_MeshElement* theElement);
|
||||
|
||||
void AddGroupName (std::string theGroupName) { myGroupNames.insert(theGroupName); }
|
||||
const MED::TStringSet& GetGroupNames() const;
|
||||
void AddGroupName(std::string theGroupName);
|
||||
|
||||
void SetType (const SMDSAbs_ElementType theType) { myType = theType; }
|
||||
SMDSAbs_ElementType GetType () { return myType; }
|
||||
void SetType(const SMDSAbs_ElementType theType);
|
||||
SMDSAbs_ElementType GetType();
|
||||
|
||||
bool MemberOf (std::string theGroupName) const
|
||||
{ return (myGroupNames.find(theGroupName) != myGroupNames.end()); }
|
||||
bool MemberOf(std::string theGroupName) const;
|
||||
|
||||
const MED::TStringSet& GetGroupNames () const { return myGroupNames; }
|
||||
|
||||
void SetId (const int theId) { myId = theId; }
|
||||
// Sets a family ID
|
||||
int GetGroupAttributVal() const;
|
||||
void SetGroupAttributVal( int theValue);
|
||||
|
||||
private:
|
||||
//! Initialize the tool by SMESHDS_GroupBase
|
||||
void Init (SMESHDS_GroupBase* group);
|
||||
// Initialize the tool by SMESHDS_GroupBase
|
||||
|
||||
static std::list<DriverMED_FamilyPtr> SplitByType (SMESHDS_SubMesh* theSubMesh,
|
||||
const int theId);
|
||||
// Split <theSubMesh> on some parts (families)
|
||||
// on the basis of the elements type.
|
||||
//! Split <theSubMesh> on some parts (families) on the basis of the elements type.
|
||||
static
|
||||
DriverMED_FamilyPtrList
|
||||
SplitByType(SMESHDS_SubMesh* theSubMesh,
|
||||
const int theId);
|
||||
|
||||
|
||||
/*! Remove from <Elements> elements, common with <by>,
|
||||
Remove from <by> elements, common with <Elements>,
|
||||
Create family <common> from common elements, with combined groups list.
|
||||
*/
|
||||
void Split (DriverMED_FamilyPtr by,
|
||||
DriverMED_FamilyPtr common);
|
||||
// Remove from <Elements> elements, common with <by>,
|
||||
// Remove from <by> elements, common with <Elements>,
|
||||
// Create family <common> from common elements, with combined groups list.
|
||||
|
||||
bool IsEmpty () const { return myElements.empty(); }
|
||||
// Check, if this family has empty list of elements
|
||||
//! Check, if this family has empty list of elements
|
||||
bool IsEmpty () const;
|
||||
|
||||
|
||||
private:
|
||||
int myId;
|
||||
SMDSAbs_ElementType myType;
|
||||
std::set<const SMDS_MeshElement *> myElements;
|
||||
ElementsSet myElements;
|
||||
MED::TStringSet myGroupNames;
|
||||
int myGroupAttributVal;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -53,6 +53,9 @@ class SMESH_Group
|
||||
|
||||
SMESHDS_GroupBase * GetGroupDS () { return myGroupDS; }
|
||||
|
||||
void SetColorNumber (int theColorNumber) { myColorNumber = theColorNumber; }
|
||||
int GetColorNumber() const { return myColorNumber; }
|
||||
|
||||
private:
|
||||
SMESH_Group (const SMESH_Group& theOther);
|
||||
// prohibited copy constructor
|
||||
@ -61,7 +64,7 @@ class SMESH_Group
|
||||
|
||||
SMESHDS_GroupBase * myGroupDS;
|
||||
std::string myName;
|
||||
|
||||
int myColorNumber;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -66,6 +66,12 @@ class SMESHDS_GroupBase
|
||||
|
||||
virtual ~SMESHDS_GroupBase() {}
|
||||
|
||||
void SetColorGroup (int theColorGroup)
|
||||
{ myColorGroup = theColorGroup;}
|
||||
|
||||
int GetColorGroup() const
|
||||
{ return myColorGroup;}
|
||||
|
||||
protected:
|
||||
const SMDS_MeshElement* findInMesh (const int theID) const;
|
||||
void resetIterator();
|
||||
@ -84,7 +90,7 @@ class SMESHDS_GroupBase
|
||||
int myCurIndex;
|
||||
int myCurID;
|
||||
SMDS_ElemIteratorPtr myIterator;
|
||||
|
||||
int myColorGroup;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -259,7 +259,7 @@ void SMESHGUI_GroupDlg::initDialog(bool create)
|
||||
myGroupLine = new QLineEdit(aSelectBox, "group line");
|
||||
myGroupLine->setReadOnly(true);
|
||||
onSelectGroup(false);
|
||||
|
||||
|
||||
/***************************************************************/
|
||||
QGridLayout* wg1Layout = new QGridLayout( wg1, 3, 1, 0, 6 );
|
||||
wg1Layout->addWidget(aContentBox, 0, 0);
|
||||
@ -291,6 +291,26 @@ void SMESHGUI_GroupDlg::initDialog(bool create)
|
||||
myWGStack->addWidget( wg2, myGrpTypeGroup->id(rb2) );
|
||||
|
||||
/***************************************************************/
|
||||
QGroupBox* aColorBox = new QGroupBox(this, "color box");
|
||||
aColorBox->setTitle(tr("SMESH_SET_COLOR"));
|
||||
|
||||
mySelectColorGroup = new QCheckBox(aColorBox, "color checkbox");
|
||||
mySelectColorGroup->setText(tr("SMESH_CHECK_COLOR"));
|
||||
mySelectColorGroup->setMinimumSize(50, 0);
|
||||
|
||||
myColorGroupLine = new QLineEdit(aColorBox, "color line");
|
||||
myColorGroupLine->setReadOnly(false);
|
||||
onSelectColorGroup(false);
|
||||
|
||||
/***************************************************************/
|
||||
QHBoxLayout* aColorLayout = new QHBoxLayout(aColorBox, 15, 20);
|
||||
aColorLayout->setAutoAdd(false);
|
||||
|
||||
aColorLayout->addWidget(mySelectColorGroup);
|
||||
aColorLayout->addWidget(myColorGroupLine);
|
||||
|
||||
/***************************************************************/
|
||||
|
||||
QFrame* aButtons = new QFrame(this, "button box");
|
||||
aButtons->setFrameStyle(QFrame::Box | QFrame::Sunken);
|
||||
QHBoxLayout* aBtnLayout = new QHBoxLayout(aButtons, 11, 6);
|
||||
@ -322,7 +342,8 @@ void SMESHGUI_GroupDlg::initDialog(bool create)
|
||||
aMainLayout->addMultiCellWidget(myGrpTypeGroup, 3, 3, 0, 2);
|
||||
aMainLayout->addMultiCellWidget(myWGStack, 4, 4, 0, 2);
|
||||
aMainLayout->setRowStretch( 5, 5 );
|
||||
aMainLayout->addMultiCellWidget(aButtons, 6, 6, 0, 2);
|
||||
aMainLayout->addMultiCellWidget(aColorBox, 6, 6, 0, 2);
|
||||
aMainLayout->addMultiCellWidget(aButtons, 7, 7, 0, 2);
|
||||
|
||||
/* signals and slots connections */
|
||||
connect(myMeshGroupBtn, SIGNAL(clicked()), this, SLOT(setCurrentSelection()));
|
||||
@ -344,6 +365,8 @@ void SMESHGUI_GroupDlg::initDialog(bool create)
|
||||
connect(mySubMeshBtn, SIGNAL(clicked()), this, SLOT(setCurrentSelection()));
|
||||
connect(myGroupBtn, SIGNAL(clicked()), this, SLOT(setCurrentSelection()));
|
||||
connect(myGeomGroupBtn, SIGNAL(clicked()), this, SLOT(setCurrentSelection()));
|
||||
connect(mySelectColorGroup, SIGNAL(toggled(bool)), this, SLOT(onSelectColorGroup(bool)));
|
||||
|
||||
|
||||
connect(aOKBtn, SIGNAL(clicked()), this, SLOT(onOK()));
|
||||
connect(aApplyBtn, SIGNAL(clicked()), this, SLOT(onApply()));
|
||||
@ -439,6 +462,10 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_Group_ptr theGroup)
|
||||
|
||||
myName->setText(myGroup->GetName());
|
||||
myName->home(false);
|
||||
|
||||
myColorGroupLine->setText(QString::number(myGroup->GetColorNumber()));
|
||||
myColorGroupLine->home(false);
|
||||
|
||||
myMeshGroupLine->setText(myGroup->GetName());
|
||||
|
||||
myCurrentLineEdit = 0;
|
||||
@ -595,6 +622,20 @@ bool SMESHGUI_GroupDlg::onApply()
|
||||
|
||||
myGroup = SMESH::AddGroup(myMesh, aType, myName->text());
|
||||
myGroup->Add(anIdList.inout());
|
||||
|
||||
int aColorNumber = myColorGroupLine->text().toInt();
|
||||
myGroup->SetColorNumber(aColorNumber);
|
||||
|
||||
_PTR(SObject) aMeshGroupSO = SMESH::FindSObject(myGroup);
|
||||
|
||||
SMESH::setFileName (aMeshGroupSO, myColorGroupLine->text());
|
||||
|
||||
SMESH::setFileType (aMeshGroupSO,"COULEURGROUP");
|
||||
|
||||
/* init for next operation */
|
||||
myName->setText("");
|
||||
|
||||
myColorGroupLine->setText("");
|
||||
|
||||
/* init for next operation */
|
||||
myName->setText("");
|
||||
@ -603,6 +644,9 @@ bool SMESHGUI_GroupDlg::onApply()
|
||||
|
||||
} else {
|
||||
myGroup->SetName(myName->text());
|
||||
|
||||
int aColorNumber = myColorGroupLine->text().toInt();
|
||||
myGroup->SetColorNumber(aColorNumber);
|
||||
|
||||
QValueList<int> aAddList;
|
||||
QValueList<int>::iterator anIt;
|
||||
@ -660,10 +704,20 @@ bool SMESHGUI_GroupDlg::onApply()
|
||||
SMESH::SMESH_GroupOnGeom_var aGroupOnGeom =
|
||||
myMesh->CreateGroupFromGEOM(aType, myName->text(),myGeomGroup);
|
||||
|
||||
int aColorNumber = myColorGroupLine->text().toInt();
|
||||
aGroupOnGeom->SetColorNumber(aColorNumber);
|
||||
|
||||
_PTR(SObject) aMeshGroupSO = SMESH::FindSObject(aGroupOnGeom);
|
||||
|
||||
SMESH::setFileName (aMeshGroupSO, myColorGroupLine->text());
|
||||
|
||||
SMESH::setFileType (aMeshGroupSO,"COULEURGROUP");
|
||||
|
||||
mySMESHGUI->updateObjBrowser(true);
|
||||
mySelectionMgr->clearSelected();
|
||||
/* init for next operation */
|
||||
myName->setText("");
|
||||
myColorGroupLine->setText("");
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -986,6 +1040,23 @@ void SMESHGUI_GroupDlg::onSelectGeomGroup(bool on)
|
||||
}
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : (onSelectColorGroup)
|
||||
// purpose : Called when setting a color on group
|
||||
//=================================================================================
|
||||
void SMESHGUI_GroupDlg::onSelectColorGroup(bool on)
|
||||
{
|
||||
if (on) {
|
||||
setSelectionMode(7);
|
||||
}
|
||||
else {
|
||||
myColorGroupLine->setText("");
|
||||
myCurrentLineEdit = 0;
|
||||
if (myTypeId != -1)
|
||||
setSelectionMode(myTypeId);
|
||||
}
|
||||
myColorGroupLine->setEnabled(on);
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : setCurrentSelection()
|
||||
|
@ -95,6 +95,7 @@ private slots:
|
||||
void onSelectSubMesh(bool on);
|
||||
void onSelectGroup(bool on);
|
||||
void onSelectGeomGroup(bool on);
|
||||
void onSelectColorGroup(bool on);
|
||||
void setCurrentSelection();
|
||||
|
||||
void setFilters();
|
||||
@ -141,6 +142,9 @@ private:
|
||||
QPushButton* myGroupBtn;
|
||||
QLineEdit* myGroupLine;
|
||||
|
||||
QCheckBox* mySelectColorGroup;
|
||||
QLineEdit* myColorGroupLine;
|
||||
|
||||
QCheckBox* mySelectGeomGroup;
|
||||
QPushButton* myGeomGroupBtn;
|
||||
QLineEdit* myGeomGroupLine;
|
||||
|
@ -153,6 +153,32 @@ namespace SMESH{
|
||||
if (aComment)
|
||||
aComment->SetValue(theValue);
|
||||
}
|
||||
|
||||
void setFileName (_PTR(SObject) theSObject, const char* theValue)
|
||||
{
|
||||
_PTR(Study) aStudy = GetActiveStudyDocument();
|
||||
if (aStudy->GetProperties()->IsLocked())
|
||||
return;
|
||||
_PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
|
||||
_PTR(GenericAttribute) anAttr =
|
||||
aBuilder->FindOrCreateAttribute(theSObject, "AttributeExternalFileDef");
|
||||
_PTR(AttributeExternalFileDef) aFileName = anAttr;
|
||||
if (aFileName)
|
||||
aFileName->SetValue(theValue);
|
||||
}
|
||||
|
||||
void setFileType (_PTR(SObject) theSObject, const char* theValue)
|
||||
{
|
||||
_PTR(Study) aStudy = GetActiveStudyDocument();
|
||||
if (aStudy->GetProperties()->IsLocked())
|
||||
return;
|
||||
_PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
|
||||
_PTR(GenericAttribute) anAttr =
|
||||
aBuilder->FindOrCreateAttribute(theSObject, "AttributeFileType");
|
||||
_PTR(AttributeFileType) aFileType = anAttr;
|
||||
if (aFileType)
|
||||
aFileType->SetValue(theValue);
|
||||
}
|
||||
|
||||
CORBA::Object_var SObjectToObject (_PTR(SObject) theSObject,
|
||||
_PTR(Study) theStudy)
|
||||
|
@ -81,6 +81,8 @@ namespace SMESH {
|
||||
|
||||
void SetName (_PTR(SObject) theSObject, const char* theName);
|
||||
void SetValue (_PTR(SObject) theSObject, const char* theValue);
|
||||
void setFileType (_PTR(SObject) theSObject, const char* theValue);
|
||||
void setFileName (_PTR(SObject) theSObject, const char* theValue);
|
||||
|
||||
CORBA::Object_var SObjectToObject (_PTR(SObject) theSObject,
|
||||
_PTR(Study) theStudy);
|
||||
|
@ -918,6 +918,14 @@ msgstr "Group on geometry"
|
||||
msgid "SMESH_GEOM_GROUP"
|
||||
msgstr "Geometry group"
|
||||
|
||||
#Color group
|
||||
msgid "SMESH_SET_COLOR"
|
||||
msgstr "Color group"
|
||||
|
||||
#Check color group
|
||||
msgid "SMESH_CHECK_COLOR"
|
||||
msgstr "Color number"
|
||||
|
||||
#%1 SubMeshes
|
||||
msgid "SMESH_SUBMESH_SELECTED"
|
||||
msgstr "%1 SubMeshes"
|
||||
|
@ -419,3 +419,33 @@ GEOM::GEOM_Object_ptr SMESH_GroupOnGeom_i::GetShape()
|
||||
return aGeomObj._retn();
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
*
|
||||
*/
|
||||
//=============================================================================
|
||||
CORBA::Long SMESH_GroupBase_i::GetColorNumber()
|
||||
{
|
||||
SMESHDS_GroupBase* aGroupDS = GetGroupDS();
|
||||
if (aGroupDS)
|
||||
return aGroupDS->GetColorGroup();
|
||||
MESSAGE("get color number of a vague group");
|
||||
return 0;
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
*
|
||||
*/
|
||||
//=============================================================================
|
||||
void SMESH_GroupBase_i::SetColorNumber(CORBA::Long color)
|
||||
{
|
||||
SMESHDS_GroupBase* aGroupDS = GetGroupDS();
|
||||
if (aGroupDS)
|
||||
return aGroupDS->SetColorGroup(color);
|
||||
MESSAGE("set color number of a vague group");
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -73,6 +73,9 @@ class SMESH_GroupBase_i:
|
||||
SMESH_Group* GetSmeshGroup() const;
|
||||
SMESHDS_GroupBase* GetGroupDS() const;
|
||||
|
||||
void SetColorNumber(CORBA::Long color);
|
||||
CORBA::Long GetColorNumber();
|
||||
|
||||
private:
|
||||
SMESH_Mesh_i* myMeshServant;
|
||||
int myLocalID;
|
||||
|
Loading…
Reference in New Issue
Block a user