mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2024-12-28 02:10:36 +05:00
0022747: [EDF] Improvement of Get Shared Shapes operation
Additional improvement: - In the dialog box, automatically, propose only allowed types of sub-shapes according to the current selection
This commit is contained in:
parent
528f4842f4
commit
0f1846a8c0
@ -40,6 +40,24 @@
|
|||||||
#include <TopoDS_Iterator.hxx>
|
#include <TopoDS_Iterator.hxx>
|
||||||
#include <TopoDS_Shape.hxx>
|
#include <TopoDS_Shape.hxx>
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
GEOM::shape_type maxShapeType(const GEOM::ListOfGO& objs)
|
||||||
|
{
|
||||||
|
GEOM::shape_type r = GEOM::SHAPE;
|
||||||
|
for ( int i = 0; i < objs.length(); i++ ) {
|
||||||
|
GEOM::shape_type t = objs[i]->GetShapeType();
|
||||||
|
if ( t == GEOM::COMPOUND || t == GEOM::COMPSOLID )
|
||||||
|
t = objs[i]->GetMaxShapeType();
|
||||||
|
else if ( t < GEOM::VERTEX )
|
||||||
|
t = GEOM::shape_type( (int)t+1 );
|
||||||
|
r = qMin( r, t );
|
||||||
|
if ( r <= GEOM::SOLID ) break;
|
||||||
|
}
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
// class : OperationGUI_GetSharedShapesDlg()
|
// class : OperationGUI_GetSharedShapesDlg()
|
||||||
// purpose : Constructs a OperationGUI_GetSharedShapesDlg which is a child of 'parent', with the
|
// purpose : Constructs a OperationGUI_GetSharedShapesDlg which is a child of 'parent', with the
|
||||||
@ -103,15 +121,7 @@ OperationGUI_GetSharedShapesDlg::~OperationGUI_GetSharedShapesDlg()
|
|||||||
//=================================================================================
|
//=================================================================================
|
||||||
void OperationGUI_GetSharedShapesDlg::Init()
|
void OperationGUI_GetSharedShapesDlg::Init()
|
||||||
{
|
{
|
||||||
/* type for sub-shape selection */
|
initTypes();
|
||||||
GroupPoints->ComboBox1->addItem(tr("GEOM_SOLID"));
|
|
||||||
GroupPoints->ComboBox1->addItem(tr("GEOM_SHELL"));
|
|
||||||
GroupPoints->ComboBox1->addItem(tr("GEOM_FACE"));
|
|
||||||
GroupPoints->ComboBox1->addItem(tr("GEOM_WIRE"));
|
|
||||||
GroupPoints->ComboBox1->addItem(tr("GEOM_EDGE"));
|
|
||||||
GroupPoints->ComboBox1->addItem(tr("GEOM_VERTEX"));
|
|
||||||
|
|
||||||
GroupPoints->ComboBox1->setCurrentIndex(0);
|
|
||||||
|
|
||||||
showOnlyPreviewControl();
|
showOnlyPreviewControl();
|
||||||
|
|
||||||
@ -127,6 +137,8 @@ void OperationGUI_GetSharedShapesDlg::Init()
|
|||||||
|
|
||||||
connect(GroupPoints->ComboBox1, SIGNAL(activated(int)), this, SLOT(ComboTextChanged()));
|
connect(GroupPoints->ComboBox1, SIGNAL(activated(int)), this, SLOT(ComboTextChanged()));
|
||||||
|
|
||||||
|
connect(GroupPoints->CheckButton1, SIGNAL(clicked()), this, SLOT(processPreview()));
|
||||||
|
|
||||||
connect(myGeomGUI->getApp()->selectionMgr(),
|
connect(myGeomGUI->getApp()->selectionMgr(),
|
||||||
SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
|
SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
|
||||||
|
|
||||||
@ -137,6 +149,35 @@ void OperationGUI_GetSharedShapesDlg::Init()
|
|||||||
GroupPoints->PushButton1->click();
|
GroupPoints->PushButton1->click();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OperationGUI_GetSharedShapesDlg::initTypes()
|
||||||
|
{
|
||||||
|
GEOM::shape_type t = maxShapeType( myListShapes );
|
||||||
|
|
||||||
|
int idx = GroupPoints->ComboBox1->count() > 0 ?
|
||||||
|
GroupPoints->ComboBox1->itemData( GroupPoints->ComboBox1->currentIndex() ).toInt() : -1;
|
||||||
|
|
||||||
|
GroupPoints->ComboBox1->clear();
|
||||||
|
|
||||||
|
if ( t == GEOM::SHAPE || t <= GEOM::SOLID )
|
||||||
|
GroupPoints->ComboBox1->addItem( tr( "GEOM_SOLID" ), int( GEOM::SOLID ) );
|
||||||
|
if ( t == GEOM::SHAPE || t <= GEOM::SHELL )
|
||||||
|
GroupPoints->ComboBox1->addItem( tr( "GEOM_SHELL" ), int( GEOM::SHELL ) );
|
||||||
|
if ( t == GEOM::SHAPE || t <= GEOM::FACE )
|
||||||
|
GroupPoints->ComboBox1->addItem( tr( "GEOM_FACE" ), int( GEOM::FACE ) );
|
||||||
|
if ( t == GEOM::SHAPE || t <= GEOM::WIRE )
|
||||||
|
GroupPoints->ComboBox1->addItem( tr( "GEOM_WIRE" ), int( GEOM::WIRE ) );
|
||||||
|
if ( t == GEOM::SHAPE || t <= GEOM::EDGE )
|
||||||
|
GroupPoints->ComboBox1->addItem( tr( "GEOM_EDGE" ), int( GEOM::EDGE ) );
|
||||||
|
if ( t == GEOM::SHAPE || t <= GEOM::VERTEX )
|
||||||
|
GroupPoints->ComboBox1->addItem( tr( "GEOM_VERTEX" ), int( GEOM::VERTEX ) );
|
||||||
|
|
||||||
|
idx = GroupPoints->ComboBox1->findData( idx );
|
||||||
|
GroupPoints->ComboBox1->setCurrentIndex( idx >= 0 ? idx : 0 );
|
||||||
|
|
||||||
|
if ( idx < 0 )
|
||||||
|
ComboTextChanged();
|
||||||
|
}
|
||||||
|
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
// function : ConstructorsClicked()
|
// function : ConstructorsClicked()
|
||||||
// purpose : Radio button management
|
// purpose : Radio button management
|
||||||
@ -148,7 +189,6 @@ void OperationGUI_GetSharedShapesDlg::ConstructorsClicked (int constructorId)
|
|||||||
|
|
||||||
myListShapes.length(0);
|
myListShapes.length(0);
|
||||||
|
|
||||||
GroupPoints->ComboBox1->setCurrentIndex(0);
|
|
||||||
GroupPoints->PushButton1->setDown(true);
|
GroupPoints->PushButton1->setDown(true);
|
||||||
|
|
||||||
myEditCurrentArgument = GroupPoints->LineEdit1;
|
myEditCurrentArgument = GroupPoints->LineEdit1;
|
||||||
@ -210,6 +250,9 @@ void OperationGUI_GetSharedShapesDlg::SelectionIntoArgument()
|
|||||||
}
|
}
|
||||||
|
|
||||||
GEOMBase::ConvertListOfIOInListOfGO(aSelList, myListShapes, true);
|
GEOMBase::ConvertListOfIOInListOfGO(aSelList, myListShapes, true);
|
||||||
|
|
||||||
|
initTypes();
|
||||||
|
|
||||||
if (!myListShapes.length())
|
if (!myListShapes.length())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -278,19 +321,8 @@ void OperationGUI_GetSharedShapesDlg::ComboTextChanged()
|
|||||||
//=================================================================================
|
//=================================================================================
|
||||||
int OperationGUI_GetSharedShapesDlg::GetType() const
|
int OperationGUI_GetSharedShapesDlg::GetType() const
|
||||||
{
|
{
|
||||||
int aLimit = GroupPoints->ComboBox1->currentIndex();
|
return GroupPoints->ComboBox1->count() > 0 ?
|
||||||
|
GroupPoints->ComboBox1->itemData( GroupPoints->ComboBox1->currentIndex() ).toInt() : (int)GEOM::SHAPE;
|
||||||
switch (aLimit) {
|
|
||||||
case 0: aLimit = GEOM::SOLID ; break;
|
|
||||||
case 1: aLimit = GEOM::SHELL ; break;
|
|
||||||
case 2: aLimit = GEOM::FACE ; break;
|
|
||||||
case 3: aLimit = GEOM::WIRE ; break;
|
|
||||||
case 4: aLimit = GEOM::EDGE ; break;
|
|
||||||
case 5: aLimit = GEOM::VERTEX; break;
|
|
||||||
default: aLimit = GEOM::SHAPE ;
|
|
||||||
}
|
|
||||||
|
|
||||||
return aLimit;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
@ -359,16 +391,14 @@ QString OperationGUI_GetSharedShapesDlg::getPrefixByType () const
|
|||||||
{
|
{
|
||||||
QString aPref;
|
QString aPref;
|
||||||
|
|
||||||
int aLimit = GroupPoints->ComboBox1->currentIndex();
|
switch ( GetType() ) {
|
||||||
|
case GEOM::SOLID: aPref = tr("GEOM_SHARED_SHAPE").arg(tr("GEOM_SOLID")) ; break;
|
||||||
switch (aLimit) {
|
case GEOM::SHELL: aPref = tr("GEOM_SHARED_SHAPE").arg(tr("GEOM_SHELL")) ; break;
|
||||||
case 0: aPref = tr("GEOM_SHARED_SHAPE").arg(tr("GEOM_SOLID")) ; break;
|
case GEOM::FACE: aPref = tr("GEOM_SHARED_SHAPE").arg(tr("GEOM_FACE")) ; break;
|
||||||
case 1: aPref = tr("GEOM_SHARED_SHAPE").arg(tr("GEOM_SHELL")) ; break;
|
case GEOM::WIRE: aPref = tr("GEOM_SHARED_SHAPE").arg(tr("GEOM_WIRE")) ; break;
|
||||||
case 2: aPref = tr("GEOM_SHARED_SHAPE").arg(tr("GEOM_FACE")) ; break;
|
case GEOM::EDGE: aPref = tr("GEOM_SHARED_SHAPE").arg(tr("GEOM_EDGE")) ; break;
|
||||||
case 3: aPref = tr("GEOM_SHARED_SHAPE").arg(tr("GEOM_WIRE")) ; break;
|
case GEOM::VERTEX: aPref = tr("GEOM_SHARED_SHAPE").arg(tr("GEOM_VERTEX")); break;
|
||||||
case 4: aPref = tr("GEOM_SHARED_SHAPE").arg(tr("GEOM_EDGE")) ; break;
|
default: aPref = tr("GEOM_SHARED_SHAPE").arg(tr("GEOM_SHAPE")) ; break;
|
||||||
case 5: aPref = tr("GEOM_SHARED_SHAPE").arg(tr("GEOM_VERTEX")); break;
|
|
||||||
default: aPref = tr("GEOM_SHARED_SHAPE").arg(tr("GEOM_SHAPE")) ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return aPref;
|
return aPref;
|
||||||
|
@ -53,6 +53,7 @@ private:
|
|||||||
void Init();
|
void Init();
|
||||||
void enterEvent (QEvent*);
|
void enterEvent (QEvent*);
|
||||||
int GetType() const;
|
int GetType() const;
|
||||||
|
void initTypes();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
GEOM::ListOfGO myListShapes;
|
GEOM::ListOfGO myListShapes;
|
||||||
|
Loading…
Reference in New Issue
Block a user