X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FOperationGUI%2FOperationGUI_PartitionDlg.cxx;h=68c545faa6e84517bbf0315ff8fe5d355ebe07ef;hb=1468abed08a815d69b4def5820b72178a4f7bdc2;hp=fcf94afc648a189d4da33cd3a0ca12d0ff9508e3;hpb=46574ac4f48a11f2161e754fe7c8df8684bc2b78;p=modules%2Fgeom.git diff --git a/src/OperationGUI/OperationGUI_PartitionDlg.cxx b/src/OperationGUI/OperationGUI_PartitionDlg.cxx index fcf94afc6..68c545faa 100644 --- a/src/OperationGUI/OperationGUI_PartitionDlg.cxx +++ b/src/OperationGUI/OperationGUI_PartitionDlg.cxx @@ -1,29 +1,28 @@ -// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2011 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-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // -// 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 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. +// 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 +// 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 // GEOM GEOMGUI : GUI for Geometry component // File : OperationGUI_PartitionDlg.cxx // Author : Lucien PIGNOLONI, Open CASCADE S.A.S. -// + #include "OperationGUI_PartitionDlg.h" #include @@ -44,7 +43,7 @@ //================================================================================= // class : OperationGUI_PartitionDlg() -// purpose : Constructs a OperationGUI_PartitionDlg which is a child of 'parent', with the +// purpose : Constructs a OperationGUI_PartitionDlg which is a child of 'parent', with the // name 'name' and widget flags set to 'f'. // The dialog will by default be modeless, unless you set 'modal' to // TRUE to construct a modal dialog. @@ -88,7 +87,7 @@ OperationGUI_PartitionDlg::OperationGUI_PartitionDlg( GeometryGUI* theGeometryGU /***************************************************************/ setHelpFileName( "partition_page.html" ); - + Init(); } @@ -104,12 +103,12 @@ OperationGUI_PartitionDlg::~OperationGUI_PartitionDlg() void OperationGUI_PartitionDlg::SetListMaterials( GEOM::ListOfLong ListMaterials ) { - myListMaterials = ListMaterials; + myListMaterials = ListMaterials; } - + GEOM::ListOfLong OperationGUI_PartitionDlg::GetListMaterials() -{ - return myListMaterials; +{ + return myListMaterials; } //================================================================================= @@ -118,7 +117,7 @@ GEOM::ListOfLong OperationGUI_PartitionDlg::GetListMaterials() //================================================================================= void OperationGUI_PartitionDlg::Init() { - /* type for sub shape selection */ + /* type for sub-shape selection */ GroupPoints->ComboBox1->addItem( tr( "GEOM_RECONSTRUCTION_LIMIT_SOLID" ) ); GroupPoints->ComboBox1->setItemData(GroupPoints->ComboBox1->count()-1, GEOM::SOLID); GroupPoints->ComboBox1->addItem( tr( "GEOM_RECONSTRUCTION_LIMIT_SHELL" ) ); @@ -132,7 +131,7 @@ void OperationGUI_PartitionDlg::Init() GroupPoints->ComboBox1->addItem( tr( "GEOM_RECONSTRUCTION_LIMIT_VERTEX" ) ); GroupPoints->ComboBox1->setItemData(GroupPoints->ComboBox1->count()-1, GEOM::VERTEX); GroupPoints->CheckButton1->setChecked( false ); - + mainFrame()->GroupBoxPublish->show(); /* signals and slots connections */ @@ -140,13 +139,13 @@ void OperationGUI_PartitionDlg::Init() connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) ); connect( this, SIGNAL( constructorsClicked( int ) ), this, SLOT( ConstructorsClicked( int ) ) ); - + connect( GroupPoints->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); connect( GroupPoints->PushButton2, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); - + connect( GroupPoints->LineEdit1, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) ); connect( GroupPoints->LineEdit2, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) ); - + connect( GroupPoints->ComboBox1, SIGNAL( activated( int ) ), this, SLOT( ComboTextChanged() ) ); connect( myGeomGUI->getApp()->selectionMgr(), @@ -154,7 +153,7 @@ void OperationGUI_PartitionDlg::Init() connect( GroupPoints->CheckButton1, SIGNAL(toggled(bool)), this, SLOT(processPreview()) ); connect( GroupPoints->CheckButton2, SIGNAL(toggled(bool)), this, SLOT(processPreview()) ); - + initName( tr( "GEOM_PARTITION" ) ); ConstructorsClicked( 0 ); @@ -170,13 +169,13 @@ void OperationGUI_PartitionDlg::ConstructorsClicked( int constructorId ) { disconnect( myGeomGUI->getApp()->selectionMgr(), 0, this, 0 ); globalSelection(); - + //myListShapes.length( 0 ); - //myListTools.length( 0 ); + //myListTools.length( 0 ); //myListKeepInside.length( 0 ); // obsolete //myListRemoveInside.length( 0 ); // obsolete //myListMaterials.length( 0 ); // obsolete - + switch ( constructorId ) { case 0: /*Full partition */ GroupPoints->GroupBox1->setTitle( tr( "GEOM_PARTITION" ) ); @@ -203,7 +202,7 @@ void OperationGUI_PartitionDlg::ConstructorsClicked( int constructorId ) GroupPoints->PushButton1->setDown( true ); GroupPoints->LineEdit1->setEnabled(true); break; - } + } myEditCurrentArgument = GroupPoints->LineEdit1; GroupPoints->LineEdit1->clear(); @@ -214,7 +213,7 @@ void OperationGUI_PartitionDlg::ConstructorsClicked( int constructorId ) resize( minimumSizeHint() ); myEditCurrentArgument->setFocus(); - connect( myGeomGUI->getApp()->selectionMgr(), + connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); SelectionIntoArgument(); } @@ -226,6 +225,7 @@ void OperationGUI_PartitionDlg::ConstructorsClicked( int constructorId ) //================================================================================= void OperationGUI_PartitionDlg::ClickOnOk() { + setIsApplyAndClose( true ); if ( ClickOnApply() ) ClickOnCancel(); } @@ -239,10 +239,9 @@ bool OperationGUI_PartitionDlg::ClickOnApply() { if ( !onAccept() ) return false; - initName(); - // 0020854: EDF 1398 GEOM: Ergonomy of Partition GUI window + // 0020854: EDF 1398 GEOM: Ergonomy of Partition GUI window // ConstructorsClicked( getConstructorId() ); return true; } @@ -256,13 +255,13 @@ void OperationGUI_PartitionDlg::SelectionIntoArgument() { myEditCurrentArgument->setText( "" ); QString aString = ""; - + LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr(); SALOME_ListIO aSelList; aSelMgr->selectedObjects(aSelList); int nbSel = GEOMBase::GetNameOfSelectedIObjects(aSelList, aString, true); - + if ( getConstructorId() == 1 ) { // for half-selection, only one shape can be selected as an object // and only one plane as a tool @@ -291,11 +290,11 @@ void OperationGUI_PartitionDlg::SelectionIntoArgument() } } } - + if ( myEditCurrentArgument == GroupPoints->LineEdit1 ) { GEOMBase::ConvertListOfIOInListOfGO(aSelList, myListShapes, true); //myListMaterials.length( 0 ); // obsolete - + GEOM::shape_type type = GEOM::SHAPE; for (int i = 0; i < myListShapes.length(); i++) type = qMin( type, myListShapes[i]->GetMaxShapeType() ); @@ -321,7 +320,7 @@ void OperationGUI_PartitionDlg::SelectionIntoArgument() } } } - + myEditCurrentArgument->setText( aString ); processPreview(); } @@ -334,7 +333,7 @@ void OperationGUI_PartitionDlg::SelectionIntoArgument() void OperationGUI_PartitionDlg::SetEditCurrentArgument() { QPushButton* send = (QPushButton*)sender(); - + if ( send == GroupPoints->PushButton1 ) { myEditCurrentArgument = GroupPoints->LineEdit1; GroupPoints->PushButton2->setDown(false); @@ -350,9 +349,9 @@ void OperationGUI_PartitionDlg::SetEditCurrentArgument() if ( getConstructorId() == 1 ) globalSelection( GEOM_PLANE ); } - + globalSelection( GEOM_ALLSHAPES ); - + myEditCurrentArgument->setFocus(); SelectionIntoArgument(); send->setDown(true); @@ -368,7 +367,7 @@ void OperationGUI_PartitionDlg::LineEditReturnPressed() { QLineEdit* send = (QLineEdit*)sender(); - if ( send == GroupPoints->LineEdit1 || + if ( send == GroupPoints->LineEdit1 || send == GroupPoints->LineEdit2 ) { myEditCurrentArgument = send; GEOMBase_Skeleton::LineEditReturnPressed(); @@ -383,10 +382,10 @@ void OperationGUI_PartitionDlg::LineEditReturnPressed() void OperationGUI_PartitionDlg::ActivateThisDialog() { GEOMBase_Skeleton::ActivateThisDialog(); - connect( myGeomGUI->getApp()->selectionMgr(), + connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); - ConstructorsClicked( getConstructorId() ); + ConstructorsClicked( getConstructorId() ); processPreview(); } @@ -416,9 +415,11 @@ GEOM::GEOM_IOperations_ptr OperationGUI_PartitionDlg::createOperation() // function : isValid // purpose : //================================================================================= -bool OperationGUI_PartitionDlg::isValid( QString& ) +bool OperationGUI_PartitionDlg::isValid (QString& ) { - return ( myListShapes.length() || myListTools.length() ); // || myListKeepInside.length() || myListRemoveInside.length() // obsolete + return (getConstructorId() == 0 ? + myListShapes.length() : + myListShapes.length() && myListTools.length()); } @@ -426,31 +427,35 @@ bool OperationGUI_PartitionDlg::isValid( QString& ) // function : execute // purpose : //================================================================================= -bool OperationGUI_PartitionDlg::execute( ObjectList& objects ) +bool OperationGUI_PartitionDlg::execute (ObjectList& objects) { bool res = false; GEOM::GEOM_Object_var anObj; - int aLimit = GetLimit(); - int aKeepNonlimitShapes = GroupPoints->CheckButton1->isChecked(); - bool aNoSelfIntersection = GroupPoints->CheckButton2->isChecked(); - - GEOM::GEOM_IBooleanOperations_var anOper = GEOM::GEOM_IBooleanOperations::_narrow( getOperation() ); + GEOM::GEOM_IBooleanOperations_var anOper = GEOM::GEOM_IBooleanOperations::_narrow(getOperation()); switch ( getConstructorId() ) { case 0: - anObj = aNoSelfIntersection ? - anOper->MakePartitionNonSelfIntersectedShape( myListShapes, myListTools, - myListKeepInside, myListRemoveInside, - aLimit, false, myListMaterials, aKeepNonlimitShapes ) : - anOper->MakePartition( myListShapes, myListTools, - myListKeepInside, myListRemoveInside, - aLimit, false, myListMaterials, aKeepNonlimitShapes ); - res = true; + { + int aLimit = GetLimit(); + int aKeepNonlimitShapes = GroupPoints->CheckButton1->isChecked(); + bool aNoSelfIntersection = GroupPoints->CheckButton2->isChecked(); + + anObj = aNoSelfIntersection ? + anOper->MakePartitionNonSelfIntersectedShape(myListShapes, myListTools, + myListKeepInside, myListRemoveInside, + aLimit, false, myListMaterials, aKeepNonlimitShapes) : + anOper->MakePartition(myListShapes, myListTools, + myListKeepInside, myListRemoveInside, + aLimit, false, myListMaterials, aKeepNonlimitShapes); + res = true; + } break; case 1: - anObj = anOper->MakeHalfPartition( myListShapes[0].in(), myListTools[0].in() ); - res = true; + { + anObj = anOper->MakeHalfPartition( myListShapes[0].in(), myListTools[0].in() ); + res = true; + } break; } @@ -459,7 +464,7 @@ bool OperationGUI_PartitionDlg::execute( ObjectList& objects ) GEOMBase::GetShape( anObj, aShape, TopAbs_SHAPE ); TopoDS_Iterator It( aShape, Standard_True, Standard_True ); int nbSubshapes = 0; - for ( ; It.More(); It.Next() ) + for (; It.More(); It.Next()) nbSubshapes++; if ( nbSubshapes ) @@ -469,7 +474,7 @@ bool OperationGUI_PartitionDlg::execute( ObjectList& objects ) QObject::tr( "GEOM_ERROR" ), QObject::tr( "GEOM_WRN_PARTITION_RESULT_EMPTY" ) ); } - + return res; } @@ -491,7 +496,7 @@ void OperationGUI_PartitionDlg::restoreSubShapes( SALOMEDS::Study_ptr theStudy //======================================================================= //function : ComboTextChanged -//purpose : +//purpose : //======================================================================= void OperationGUI_PartitionDlg::ComboTextChanged() { @@ -507,7 +512,7 @@ void OperationGUI_PartitionDlg::ComboTextChanged() //================================================================================= // function : GetLimit() -// purpose : +// purpose : //================================================================================= int OperationGUI_PartitionDlg::GetLimit() const {