diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts
index 3d0ebd610..74ccb4dbf 100644
--- a/src/GEOMGUI/GEOM_msg_en.ts
+++ b/src/GEOMGUI/GEOM_msg_en.ts
@@ -1408,6 +1408,14 @@ Please, select face, shell or solid and try again
Select unpublished edges
+
+
+ Generate Groups
+
+
+
+ Group Names Prefix
+
Plane
diff --git a/src/GenerationGUI/GenerationGUI_PipeDlg.cxx b/src/GenerationGUI/GenerationGUI_PipeDlg.cxx
index dfd6f0755..7bc91a8a5 100644
--- a/src/GenerationGUI/GenerationGUI_PipeDlg.cxx
+++ b/src/GenerationGUI/GenerationGUI_PipeDlg.cxx
@@ -53,7 +53,13 @@
//=================================================================================
GenerationGUI_PipeDlg::GenerationGUI_PipeDlg (GeometryGUI* theGeometryGUI, QWidget* parent,
bool modal, Qt::WindowFlags fl)
- : GEOMBase_Skeleton(theGeometryGUI, parent, modal, fl)
+ : GEOMBase_Skeleton (theGeometryGUI, parent, modal, fl),
+ myGenGroupCheckGP (0),
+ myPrefixLblGP (0),
+ myPrefixEditGP (0),
+ myGenGroupCheckGMP (0),
+ myPrefixLblGMP (0),
+ myPrefixEditGMP (0)
{
QPixmap image0 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_PIPE")));
QPixmap image1 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT")));
@@ -81,6 +87,19 @@ GenerationGUI_PipeDlg::GenerationGUI_PipeDlg (GeometryGUI* theGeometryGUI, QWidg
GroupPoints->PushButton3->setIcon(image1);
GroupPoints->CheckButton1->setText(tr("GEOM_SELECT_UNPUBLISHED_EDGES"));
+ // Add widgets for group generation
+ QGridLayout *aLayoutGP = (QGridLayout *)GroupPoints->GroupBox1->layout();
+
+ myGenGroupCheckGP =
+ new QCheckBox(tr("GEOM_GENERATE_GROUPS"), GroupPoints->GroupBox1);
+ myPrefixLblGP =
+ new QLabel (tr("GEOM_GROUP_NAME_PREFIX"), GroupPoints->GroupBox1);
+ myPrefixEditGP = new QLineEdit(GroupPoints->GroupBox1);
+
+ aLayoutGP->addWidget(myGenGroupCheckGP, 4, 0, 1, 3);
+ aLayoutGP->addWidget(myPrefixLblGP, 5, 0, 1, 2);
+ aLayoutGP->addWidget(myPrefixEditGP, 5, 2);
+
GroupMakePoints = new DlgRef_3Sel2Check3Spin(centralWidget());
GroupMakePoints->GroupBox1->setTitle(tr("GEOM_ARGUMENTS"));
@@ -92,6 +111,12 @@ GenerationGUI_PipeDlg::GenerationGUI_PipeDlg (GeometryGUI* theGeometryGUI, QWidg
GroupMakePoints->PushButton3->setIcon(image1);
GroupMakePoints->CheckBox1->setText(tr("GEOM_WITH_CONTACT"));
GroupMakePoints->CheckBox2->setText(tr("GEOM_WITH_CORRECTION"));
+ GroupMakePoints->SpinBox1->setAttribute(Qt::WA_DeleteOnClose);
+ GroupMakePoints->SpinBox2->setAttribute(Qt::WA_DeleteOnClose);
+ GroupMakePoints->SpinBox3->setAttribute(Qt::WA_DeleteOnClose);
+ GroupMakePoints->TextLabel4->setAttribute(Qt::WA_DeleteOnClose);
+ GroupMakePoints->TextLabel5->setAttribute(Qt::WA_DeleteOnClose);
+ GroupMakePoints->TextLabel6->setAttribute(Qt::WA_DeleteOnClose);
GroupMakePoints->SpinBox1->close();
GroupMakePoints->SpinBox2->close();
GroupMakePoints->SpinBox3->close();
@@ -99,6 +124,19 @@ GenerationGUI_PipeDlg::GenerationGUI_PipeDlg (GeometryGUI* theGeometryGUI, QWidg
GroupMakePoints->TextLabel5->close();
GroupMakePoints->TextLabel6->close();
+ // Add widgets for group generation
+ QGridLayout *aLayoutGMP = (QGridLayout *)GroupMakePoints->GroupBox1->layout();
+
+ myGenGroupCheckGMP =
+ new QCheckBox(tr("GEOM_GENERATE_GROUPS"), GroupMakePoints->GroupBox1);
+ myPrefixLblGMP =
+ new QLabel (tr("GEOM_GROUP_NAME_PREFIX"), GroupMakePoints->GroupBox1);
+ myPrefixEditGMP = new QLineEdit(GroupMakePoints->GroupBox1);
+
+ aLayoutGMP->addWidget(myGenGroupCheckGMP, 8, 0, 1, 3);
+ aLayoutGMP->addWidget(myPrefixLblGMP, 9, 0, 1, 2);
+ aLayoutGMP->addWidget(myPrefixEditGMP, 9, 2);
+
QVBoxLayout* layout = new QVBoxLayout(centralWidget());
layout->setMargin(0); layout->setSpacing(6);
layout->addWidget(GroupPoints);
@@ -166,6 +204,8 @@ void GenerationGUI_PipeDlg::Init()
connect(GroupMakePoints->PushButton3, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
connect(GroupMakePoints->CheckBox1, SIGNAL(clicked()), this, SLOT(processPreview()));
connect(GroupMakePoints->CheckBox2, SIGNAL(clicked()), this, SLOT(processPreview()));
+ connect(myGenGroupCheckGP, SIGNAL(toggled(bool)), this, SLOT(GenGroupClicked(bool)));
+ connect(myGenGroupCheckGMP, SIGNAL(toggled(bool)), this, SLOT(GenGroupClicked(bool)));
initName(tr("GEOM_PIPE"));
resize(100,100);
@@ -195,6 +235,8 @@ void GenerationGUI_PipeDlg::ConstructorsClicked( int constructorId )
GroupPoints->PushButton3->hide();
GroupPoints->LineEdit3->hide();
GroupPoints->PushButton1->click();
+ myGenGroupCheckGP->setChecked(false);
+ resetGenGroup(myGenGroupCheckGP, false, true);
break;
case 1:
GroupMakePoints->hide();
@@ -203,11 +245,15 @@ void GenerationGUI_PipeDlg::ConstructorsClicked( int constructorId )
GroupPoints->PushButton3->show();
GroupPoints->LineEdit3->show();
GroupPoints->PushButton1->click();
+ myGenGroupCheckGP->setChecked(false);
+ resetGenGroup(myGenGroupCheckGP, false, true);
break;
case 2:
GroupPoints->hide();
GroupMakePoints->show();
GroupMakePoints->PushButton1->click();
+ myGenGroupCheckGMP->setChecked(false);
+ resetGenGroup(myGenGroupCheckGMP, false, true);
break;
default:
break;
@@ -483,21 +529,38 @@ bool GenerationGUI_PipeDlg::execute (ObjectList& objects)
GEOM::ListOfGO_var aList;
GEOM::GEOM_I3DPrimOperations_var anOper = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation());
+ bool doGroups = !IsPreview();
+
+ myGroupObjectsMap.clear();
+
switch( getConstructorId() ) {
case 0:
case 1:
+ if (doGroups) {
+ doGroups = myGenGroupCheckGP->isChecked();
+ }
+
for (int i = 0; i < myBaseObjects.count(); i++) {
switch ( getConstructorId() ) {
case 0 :
- aList = anOper->MakePipe(myBaseObjects[i].get(), myPath.get(), false);
- break;
+ aList = anOper->MakePipe(myBaseObjects[i].get(),
+ myPath.get(), doGroups);
+ break;
case 1 :
- aList = anOper->MakePipeBiNormalAlongVector(myBaseObjects[i].get(), myPath.get(), myVec.get(), false);
- break;
+ aList = anOper->MakePipeBiNormalAlongVector
+ (myBaseObjects[i].get(), myPath.get(), myVec.get(), doGroups);
+ break;
}
- if (!aList[0]->_is_nil())
- objects.push_back(aList[0]._retn());
+ if (aList->length() > 0) {
+ if (!aList[0]->_is_nil()) {
+ objects.push_back(aList[0]._retn());
+ }
+
+ if (doGroups) {
+ addGroups(aList);
+ }
+ }
}
break;
case 2:
@@ -507,17 +570,30 @@ bool GenerationGUI_PipeDlg::execute (ObjectList& objects)
myBaseGO->length( myBaseObjects.count() );
myLocationsGO->length( myLocations.count() );
for (int i = 0; i < myBaseObjects.count(); i++) {
- myBaseGO[i] = myBaseObjects[i].copy();
+ myBaseGO[i] = myBaseObjects[i].copy();
}
for (int i = 0; i < myLocations.count(); i++) {
- myLocationsGO[i] = myLocations[i].copy();
+ myLocationsGO[i] = myLocations[i].copy();
}
- aList = anOper->MakePipeWithDifferentSections(myBaseGO.in(), myLocationsGO.in(), myPath.get(),
- GroupMakePoints->CheckBox1->isChecked(),
- GroupMakePoints->CheckBox2->isChecked(), false);
- if (!aList[0]->_is_nil())
- objects.push_back(aList[0]._retn());
+ if (doGroups) {
+ doGroups = myGenGroupCheckGMP->isChecked();
+ }
+
+ aList = anOper->MakePipeWithDifferentSections
+ (myBaseGO.in(), myLocationsGO.in(), myPath.get(),
+ GroupMakePoints->CheckBox1->isChecked(),
+ GroupMakePoints->CheckBox2->isChecked(), doGroups);
+
+ if (aList->length() > 0) {
+ if (!aList[0]->_is_nil()) {
+ objects.push_back(aList[0]._retn());
+ }
+
+ if (doGroups) {
+ addGroups(aList);
+ }
+ }
}
break;
default:
@@ -545,6 +621,75 @@ bool GenerationGUI_PipeDlg::extractPrefix() const
return myBaseObjects.count() > 1;
}
+//=================================================================================
+// function : restoreSubShapes
+// purpose : virtual method to restore tree of argument's sub-shapes under
+// the resulting shape. Redefined from GEOMBase_Helper class.
+//=================================================================================
+void GenerationGUI_PipeDlg::restoreSubShapes
+ (SALOMEDS::Study_ptr theStudy, SALOMEDS::SObject_ptr theSObject)
+{
+ QCheckBox *aGenGroupCheck = NULL;
+ QLineEdit *aPrefixEdit = NULL;
+
+
+ switch (getConstructorId()) {
+ case 0 :
+ case 1 :
+ aGenGroupCheck = myGenGroupCheckGP;
+ aPrefixEdit = myPrefixEditGP;
+ break;
+ case 2 :
+ aGenGroupCheck = myGenGroupCheckGMP;
+ aPrefixEdit = myPrefixEditGMP;
+ break;
+ default:
+ break;
+ }
+
+ if (aGenGroupCheck == NULL || !aGenGroupCheck->isChecked()) {
+ return;
+ }
+
+ SALOMEDS::GenericAttribute_var anAttr;
+
+ if (!theSObject->FindAttribute(anAttr, "AttributeIOR")) {
+ return;
+ }
+
+ SALOMEDS::AttributeIOR_var anAttrIOR =
+ SALOMEDS::AttributeIOR::_narrow(anAttr);
+ CORBA::String_var anIORso = anAttrIOR->Value();
+
+ // get Object from SObject
+ GEOM::GEOM_Object_var aFather = GEOM::GEOM_Object::_narrow
+ (myGeomGUI->getApp()->orb()->string_to_object(anIORso));
+
+ if (CORBA::is_nil(aFather)) {
+ return;
+ }
+
+ ObjectMap::const_iterator anIter = myGroupObjectsMap.find(aFather);
+
+ if (anIter != myGroupObjectsMap.end()) {
+ ObjectList::const_iterator it = anIter->second.begin();
+ QString aName = aPrefixEdit->text();
+
+ if (!aName.isEmpty()) {
+ aName += "_";
+ }
+
+ for (; it != anIter->second.end(); it++) {
+ // Compose the name
+ QString aGrpName = tr((*it)->GetName());
+
+ aName += aGrpName;
+ getGeomEngine()->AddInStudy(theStudy, (*it),
+ aName.toStdString().c_str(), aFather);
+ }
+ }
+}
+
//=================================================================================
// function : getSourceObjects
// purpose : virtual method to get source objects
@@ -557,3 +702,64 @@ QList GenerationGUI_PipeDlg::getSourceObjects()
res << myLocations[i];
return res;
}
+
+//=================================================================================
+// function : GenGroupClicked
+// purpose : Slot to treat checking "Generate groups" check box.
+//=================================================================================
+void GenerationGUI_PipeDlg::GenGroupClicked(bool isChecked)
+{
+ resetGenGroup((QCheckBox *)sender(), isChecked, false);
+}
+
+//=================================================================================
+// function : resetGenGroup
+// purpose : Resets data of "Generate groups" widgets.
+//=================================================================================
+void GenerationGUI_PipeDlg::resetGenGroup(QCheckBox *theGenGroup,
+ const bool isChecked,
+ const bool isClearPrefix)
+{
+ QLabel *aPrefixLbl = NULL;
+ QLineEdit *aPrefixEdit = NULL;
+
+ if (theGenGroup == myGenGroupCheckGP) {
+ aPrefixLbl = myPrefixLblGP;
+ aPrefixEdit = myPrefixEditGP;
+ } else if (theGenGroup == myGenGroupCheckGMP) {
+ aPrefixLbl = myPrefixLblGMP;
+ aPrefixEdit = myPrefixEditGMP;
+ }
+
+ if (aPrefixLbl != NULL) {
+ aPrefixLbl->setEnabled(isChecked);
+ aPrefixEdit->setEnabled(isChecked);
+
+ if (isClearPrefix) {
+ aPrefixEdit->setText("");
+ }
+ }
+}
+
+//=================================================================================
+// function : addGroups
+// purpose : Add result groups to the list of groups.
+//=================================================================================
+void GenerationGUI_PipeDlg::addGroups(GEOM::ListOfGO_var &theResult)
+{
+ const int aNbObj = theResult->length();
+
+ if (aNbObj > 0) {
+ GEOM::GEOM_Object_ptr aKey = theResult[0]._retn();
+
+ if (!aKey->_is_nil()) {
+ int i;
+
+ for (i = 1; i < aNbObj; ++i) {
+ if (!theResult[i]->_is_nil()) {
+ myGroupObjectsMap[aKey].push_back(theResult[i]._retn());
+ }
+ }
+ }
+ }
+}
diff --git a/src/GenerationGUI/GenerationGUI_PipeDlg.h b/src/GenerationGUI/GenerationGUI_PipeDlg.h
index 868b465af..7af0402b3 100644
--- a/src/GenerationGUI/GenerationGUI_PipeDlg.h
+++ b/src/GenerationGUI/GenerationGUI_PipeDlg.h
@@ -30,6 +30,9 @@
#include "GEOMBase_Skeleton.h"
#include "GEOM_GenericObjPtr.h"
+typedef std::map ObjectMap;
+
+
class DlgRef_3Sel1Check;
class DlgRef_3Sel2Check3Spin;
@@ -52,11 +55,19 @@ protected:
virtual bool execute( ObjectList& );
virtual void addSubshapesToStudy();
virtual bool extractPrefix() const;
+ virtual void restoreSubShapes
+ (SALOMEDS::Study_ptr, SALOMEDS::SObject_ptr);
virtual QList getSourceObjects();
private:
void Init();
void enterEvent( QEvent* );
+ void resetGenGroup
+ (QCheckBox *theGenGroup,
+ const bool isChecked,
+ const bool isClearPrefix);
+ void addGroups
+ (GEOM::ListOfGO_var &theResult);
private:
QList myBaseObjects; /* Base shapes */
@@ -66,6 +77,13 @@ private:
DlgRef_3Sel1Check* GroupPoints;
DlgRef_3Sel2Check3Spin* GroupMakePoints;
+ QCheckBox *myGenGroupCheckGP;
+ QLabel *myPrefixLblGP;
+ QLineEdit *myPrefixEditGP;
+ QCheckBox *myGenGroupCheckGMP;
+ QLabel *myPrefixLblGMP;
+ QLineEdit *myPrefixEditGMP;
+ ObjectMap myGroupObjectsMap;
private slots:
void ClickOnOk();
@@ -75,6 +93,7 @@ private slots:
void SetEditCurrentArgument();
void ConstructorsClicked( int );
void SelectionTypeButtonClicked();
+ void GenGroupClicked(bool);
};
#endif // GENERATIONGUI_PIPEDLG_H