PAL14047 Problem to select merged face with Create group window

redesign GroupDlg
This commit is contained in:
eap 2008-05-07 17:31:32 +00:00
parent cd664dfa20
commit c1c1e7e6d6
6 changed files with 107 additions and 50 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -25,26 +25,32 @@ group (points, wires, faces, shells or solids).</li>
default, it is Group_n.</li>
<li>Then, using the "Select" button, select the <b>Main Shape</b> (a
geometrical object on which the group will be created). </li>
<li> <b>Select Sub-Shapes</b> button group lets you restrict range
of group elements you operate with.
<ul><li>\b All button enables work with all sub-shapes of the Main
Shape.</li>
<li><b>In Place of Second Shape</b> restricts range of accesible
elements to those sub-shapes of the Main Shape that geometrically
coincide with the <b>Second Shape</b>.</li>
<li><b>Sub-Shapes of Second Shape</b> restricts range of elements to
those sub-shapes of the Main Shape that are sub-shapes of <b>Second
Shape</b>.</li>
</ul>
<li> You can select the elements of your group in two ways:
<ul>
<li>You can select them
manually in the 3D Viewer, and add to the group by clicking the \b Add
button (keep down the Shift button on the keyboard to select several
elements and add all them together). The indexes of the selected
elements will be displayed in the list. To delete elements from the
list, select them and click \b Remove button.\n
Checking in <b>Select in Place of Second Shape</b> box allows you
to specify <b>Second Shape</b> which will restrict selection to those
subshapes of the main shape that geometrically coincide with the
Second Shape.
</li>
<li>You can select them manually in the 3D Viewer, and add to the
group by clicking the \b Add button (keep down the Shift button on the
keyboard to select several elements and add all them together). The
indexes of the selected elements will be displayed in the list. To
delete elements from the list, select them and click \b Remove
button.</li>
<li>Clicking <b>Select All</b> button you can add all object's
elements of a certain type in the list of the elements of the
group. To delete elements from the list, select them and click \b
Remove button. If you set <b>Second shape</b>, action of <b>Select
All</b> is limited to subshapes geometrically coincident with the
Second Shape</li>
</ul></li>
Remove button. If you set <b>Second Shape</b>, action of <b>Select
All</b> is limited according to you choice in <b>Select Sub-Shapes</b>
button group.</li></ul>
</li>
<li>Finally, confirm your selection by clicking \b OK (also closes the
Menu) or \b Apply (leaves the Menu open for creation of other groups),
or skip it by clicking \b Close button.</li>

View File

@ -1941,8 +1941,14 @@ msgstr "Main Shape"
msgid "GroupGUI_GroupDlg::SELECT_SUB_SHAPES"
msgstr "Select Sub-Shapes"
msgid "GroupGUI_GroupDlg::ALL_SUBSHAPES"
msgstr "All"
msgid "GroupGUI_GroupDlg::GET_IN_PLACE"
msgstr "Select In Place of Second Shape"
msgstr "In Place of Second Shape"
msgid "GroupGUI_GroupDlg::SUBSHAPES_OF_SHAPE2"
msgstr "Sub-Shapes of Second Shape"
msgid "GroupGUI_GroupDlg::SECOND_SHAPE"
msgstr "Second Shape"

View File

@ -47,6 +47,7 @@
#include <TColStd_MapOfInteger.hxx>
#include <TColStd_DataMapIteratorOfDataMapOfIntegerInteger.hxx>
enum { ALL_SUBSHAPES = 0, GET_IN_PLACE, SUBSHAPES_OF_SHAPE2 };
GroupGUI_GroupDlg::GroupGUI_GroupDlg(Mode mode, GeometryGUI* theGeometryGUI, QWidget* parent)
:GEOMBase_Skeleton( theGeometryGUI, parent, "GroupGUI_GroupDlg", false,
@ -82,7 +83,7 @@ GroupGUI_GroupDlg::GroupGUI_GroupDlg(Mode mode, GeometryGUI* theGeometryGUI, QWi
Layout1->addWidget( GroupMedium, 2, 0 );
QWidget* aFrame = new QWidget( GroupMedium );
QGridLayout* aMedLayout = new QGridLayout( aFrame, 5, 4, 0, 6 );
QGridLayout* aMedLayout = new QGridLayout( aFrame, 6, 4, 0, 6 );
QLabel* aMainLabel = new QLabel( tr( "MAIN_SHAPE" ), aFrame );
@ -105,7 +106,17 @@ GroupGUI_GroupDlg::GroupGUI_GroupDlg(Mode mode, GeometryGUI* theGeometryGUI, QWi
myShape2Name->setEnabled( false );
//mySelSubBtn = new QRadioButton ( tr( "SELECT_SUB_SHAPES" ), aFrame );
myPlaceCheckBox = new QCheckBox ( tr( "GET_IN_PLACE" ), aFrame );
//myPlaceCheckBox = new QCheckBox ( tr( "GET_IN_PLACE" ), aFrame );
mySelectionWayGroup = new QButtonGroup(1, Qt::Horizontal, tr("SELECT_SUB_SHAPES"),aFrame);
mySelectionWayGroup->setExclusive(true);
QRadioButton* allSubs = new QRadioButton(tr("ALL_SUBSHAPES") ,mySelectionWayGroup);
QRadioButton* inPlaceSubs = new QRadioButton(tr("GET_IN_PLACE") ,mySelectionWayGroup);
QRadioButton* shape2Subs = new QRadioButton(tr("SUBSHAPES_OF_SHAPE2"),mySelectionWayGroup);
mySelectionWayGroup->insert(allSubs , ALL_SUBSHAPES);
mySelectionWayGroup->insert(inPlaceSubs, GET_IN_PLACE);
mySelectionWayGroup->insert(shape2Subs , SUBSHAPES_OF_SHAPE2);
mySelectionWayGroup->setButton( ALL_SUBSHAPES );
mySelAllBtn = new QPushButton( tr( "SELECT_ALL" ), aFrame );
myAddBtn = new QPushButton( tr( "ADD" ), aFrame );
myRemBtn = new QPushButton( tr( "REMOVE" ), aFrame );
@ -125,11 +136,14 @@ GroupGUI_GroupDlg::GroupGUI_GroupDlg(Mode mode, GeometryGUI* theGeometryGUI, QWi
//aMedLayout->addMultiCellWidget( mySelSubBtn, 2, 2, 0, 1 );
//aMedLayout->addWidget( myPlaceCheckBox, 2, 2 );
aMedLayout->addMultiCellWidget( myPlaceCheckBox, 2, 2, 0, 2 );
//aMedLayout->addMultiCellWidget( myPlaceCheckBox, 2, 2, 0, 2 );
aMedLayout->addMultiCellWidget( mySelectionWayGroup, 2, 4, 0, 2 );
aMedLayout->addWidget( mySelAllBtn, 2, 3 );
aMedLayout->addMultiCellWidget( myIdList, 3, 4, 0, 2 );
aMedLayout->addWidget( myAddBtn, 3, 3 );
aMedLayout->addWidget( myRemBtn, 4, 3 );
aMedLayout->addMultiCellWidget( myIdList, 5, 5, 0, 3 );
aMedLayout->setRowStretch( 5, 1 );
setHelpFileName("work_with_groups_page.html");
@ -197,7 +211,8 @@ void GroupGUI_GroupDlg::Init()
connect( buttonApply, SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) );
//connect( mySelSubBtn, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
connect( myPlaceCheckBox, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
//connect( myPlaceCheckBox, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
connect( mySelectionWayGroup,SIGNAL(clicked(int)),this,SLOT(SetEditCurrentArgument()));
connect( mySelAllBtn, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
connect( myAddBtn, SIGNAL( clicked() ), this, SLOT( add() ) );
connect( myRemBtn, SIGNAL( clicked() ), this, SLOT( remove() ) );
@ -313,18 +328,17 @@ void GroupGUI_GroupDlg::SetEditCurrentArgument()
}
else if ( /*(QRadioButton*)sender() == mySelSubBtn ||*/ send == mySelAllBtn )
myEditCurrentArgument = 0;
else if ( send == mySelBtn2 || (QCheckBox*)sender() == myPlaceCheckBox ) {
else if ( send == mySelBtn2 || sender() == mySelectionWayGroup ) {
setInPlaceObj( GEOM::GEOM_Object::_nil() );
if ( myPlaceCheckBox->isChecked() ) {
//if ( myPlaceCheckBox->isChecked() )
myShape2Name->setText( "" );
if ( subSelectionWay() != ALL_SUBSHAPES )
{
myEditCurrentArgument = myShape2Name;
//myIdList->clear();
myShape2Name->setText( "" );
}
else {
//myEditCurrentArgument = myMainName;
myEditCurrentArgument = 0;
myShape2Name->setText( "" );
//myIdList->clear();
}
}
@ -365,9 +379,15 @@ void GroupGUI_GroupDlg::onGetInPlace()
if ( !anObj->_is_equivalent(myMainObj) && !anObj->_is_equivalent( myGroup )) {
SUIT_OverrideCursor wc;
myEditCurrentArgument->setText( GEOMBase::GetName( anObj ) );
GEOM::GEOM_IShapesOperations_var aShapesOp = getGeomEngine()->GetIShapesOperations( getStudyId() );
GEOM::GEOM_Object_var aGetInPlaceObj = aShapesOp->GetInPlace(myMainObj, anObj);
setInPlaceObj( aGetInPlaceObj );
GEOM::GEOM_IShapesOperations_var aShapesOp =
getGeomEngine()->GetIShapesOperations( getStudyId() );
if ( subSelectionWay() == GET_IN_PLACE ) {
GEOM::GEOM_Object_var aGetInPlaceObj = aShapesOp->GetInPlace(myMainObj, anObj);
setInPlaceObj( aGetInPlaceObj );
}
else {
setInPlaceObj( anObj );
}
myEditCurrentArgument = 0;
//myBusy = true; // just activate but do not select in the list
activateSelection();
@ -385,15 +405,16 @@ void GroupGUI_GroupDlg::setInPlaceObj( GEOM::GEOM_Object_var theObj )
{
if ( ! myInPlaceObj->_is_equivalent( theObj ) )
{
const char* tmpName = "InPlaceObj";
const char* tmpName = "__InPlaceObj__";
// remove old InPlaceObj
if ( !myInPlaceObj->_is_nil() ) {
if (_PTR(SObject) SO = getStudy()->studyDS()->FindObject( tmpName ))
if (_PTR(SObject) SO = getStudy()->studyDS()->FindObject( tmpName )) {
getStudy()->studyDS()->NewBuilder()->RemoveObjectWithChildren( SO );
getGeomEngine()->RemoveObject(myInPlaceObj);
getGeomEngine()->RemoveObject(myInPlaceObj);
}
}
// publish InPlaceObj to enable localSelection(InPlaceObj)
if ( !theObj->_is_nil() ) {
if ( !theObj->_is_nil() && subSelectionWay() == GET_IN_PLACE ) {
SALOMEDS::Study_var aStudyDS = GeometryGUI::ClientStudyToStudy(getStudy()->studyDS());
SALOMEDS::SObject_var aSO =
getGeomEngine()->AddInStudy(aStudyDS, theObj, tmpName, myMainObj);
@ -423,7 +444,8 @@ void GroupGUI_GroupDlg::setInPlaceObj( GEOM::GEOM_Object_var theObj )
//=================================================================================
void GroupGUI_GroupDlg::SelectionIntoArgument()
{
if (myPlaceCheckBox->isChecked() && myEditCurrentArgument == myShape2Name ) {
// if (myPlaceCheckBox->isChecked() && myEditCurrentArgument == myShape2Name )
if (subSelectionWay() != ALL_SUBSHAPES && myEditCurrentArgument == myShape2Name ) {
onGetInPlace();
return;
}
@ -475,7 +497,8 @@ void GroupGUI_GroupDlg::SelectionIntoArgument()
bool subselected = aMapIndex.Extent();
// convert inPlace indices to main indices
if ( subselected && myPlaceCheckBox->isChecked() )
//if ( subselected && myPlaceCheckBox->isChecked() )
if ( subselected && subSelectionWay() != ALL_SUBSHAPES )
{
TColStd_IndexedMapOfInteger aMapIndex2;
@ -522,7 +545,9 @@ void GroupGUI_GroupDlg::SelectionIntoArgument()
CORBA::Long anIndex;
anIndex = aLocOp->GetSubShapeIndex( myMainObj, aSubObjects[i] );
if ( anIndex >= 0 ) {
if ( myPlaceCheckBox->isChecked() && ! myMain2InPlaceIndices.IsBound( anIndex ))
//if ( myPlaceCheckBox->isChecked() && ! myMain2InPlaceIndices.IsBound( anIndex ))
if ( subSelectionWay() != ALL_SUBSHAPES &&
! myMain2InPlaceIndices.IsBound( anIndex ))
continue;
aMapIndex.Add( anIndex );
}
@ -530,10 +555,10 @@ void GroupGUI_GroupDlg::SelectionIntoArgument()
}
}
if ( !myMainObj->_is_nil() /*&& mySelSubBtn->isChecked()*/)
if ( !myInPlaceObj->_is_nil() )
localSelection( myInPlaceObj, getShapeType() );
else
if ( subSelectionWay() == ALL_SUBSHAPES )
localSelection( myMainObj, getShapeType() );
else if ( !myInPlaceObj->_is_nil() )
localSelection( myInPlaceObj, getShapeType() );
}
if (aMapIndex.Extent() >= 1) {
@ -574,7 +599,8 @@ void GroupGUI_GroupDlg::selectAllSubShapes()
return;
GEOM::ListOfLong_var aSubShapes;
if ( !myPlaceCheckBox->isChecked() )
// if ( !myPlaceCheckBox->isChecked() )
if ( subSelectionWay() == ALL_SUBSHAPES )
{
myIdList->clear();
GEOM::GEOM_IShapesOperations_var aShOp = getGeomEngine()->GetIShapesOperations( getStudyId() );
@ -737,6 +763,16 @@ int GroupGUI_GroupDlg::getConstructorId() const
return GroupConstructors->id( GroupConstructors->selected() );
}
//=======================================================================
//function : subSelectionWay
//purpose :
//=======================================================================
int GroupGUI_GroupDlg::subSelectionWay() const
{
return mySelectionWayGroup->id( mySelectionWayGroup->selected() );
}
//=================================================================================
// function : getShapeType()
// purpose :
@ -779,7 +815,8 @@ void GroupGUI_GroupDlg::activateSelection()
// local selection
if ( !myMainObj->_is_nil() && !myEditCurrentArgument/* && mySelSubBtn->isChecked()*/) {
if ( !myPlaceCheckBox->isChecked() )
// if ( !myPlaceCheckBox->isChecked() )
if ( subSelectionWay() == ALL_SUBSHAPES )
localSelection( myMainObj, getShapeType() );
else if ( !myInPlaceObj->_is_nil() )
localSelection( myInPlaceObj, getShapeType() );
@ -874,11 +911,15 @@ void GroupGUI_GroupDlg::updateState()
hasSel = myIdList->isSelected( ii );
myRemBtn->setEnabled( hasSel );
//mySelSubBtn->setEnabled( !CORBA::is_nil( myMainObj ) );
myPlaceCheckBox->setEnabled( !CORBA::is_nil( myMainObj ) );
//myPlaceCheckBox->setEnabled( !CORBA::is_nil( myMainObj ) );
mySelectionWayGroup->setEnabled( !CORBA::is_nil( myMainObj ) );
mySelAllBtn->setEnabled( !CORBA::is_nil( myMainObj ) );
mySelBtn2->setEnabled( myPlaceCheckBox->isChecked() );
myShape2Name->setEnabled( myPlaceCheckBox->isChecked() );
if ( !myPlaceCheckBox->isChecked() )
// mySelBtn2->setEnabled( myPlaceCheckBox->isChecked() );
// myShape2Name->setEnabled( myPlaceCheckBox->isChecked() );
mySelBtn2->setEnabled( subSelectionWay() != ALL_SUBSHAPES );
myShape2Name->setEnabled( subSelectionWay() != ALL_SUBSHAPES );
// if ( !myPlaceCheckBox->isChecked() )
if ( subSelectionWay() == ALL_SUBSHAPES )
setInPlaceObj( GEOM::GEOM_Object::_nil() );
}
@ -921,7 +962,8 @@ void GroupGUI_GroupDlg::highlightSubShapes()
for ( ; ii < nn; ii++ )
if ( myIdList->isSelected( ii ) ) {
int id = myIdList->item( ii )->text().toInt();
if ( myPlaceCheckBox->isChecked() )
// if ( myPlaceCheckBox->isChecked() )
if ( subSelectionWay() != ALL_SUBSHAPES )
{
if (myMain2InPlaceIndices.IsBound( id ))
id = myMain2InPlaceIndices( id );

View File

@ -37,7 +37,8 @@ class QGroupBox;
class QLineEdit;
class QListBox;
class QRadioButton;
//class QRadioButton;
class QButtonGroup;
//=================================================================================
// class : GroupGUI_GroupDlg
@ -83,6 +84,7 @@ private:
void Init();
void enterEvent( QEvent* e );
int getConstructorId() const;
int subSelectionWay() const;
TopAbs_ShapeEnum getShapeType() const;
void setShapeType( const TopAbs_ShapeEnum );
void activateSelection();
@ -103,8 +105,9 @@ private:
QLineEdit* myMainName;
QPushButton* mySelBtn2;
QLineEdit* myShape2Name;
QRadioButton* mySelSubBtn;
QCheckBox* myPlaceCheckBox;
QButtonGroup* mySelectionWayGroup;
//QRadioButton* mySelSubBtn;
//QCheckBox* myPlaceCheckBox;
QPushButton* mySelAllBtn;
QPushButton* myAddBtn;
QPushButton* myRemBtn;