X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FBuildGUI%2FBuildGUI_SolidDlg.cxx;h=995faf671bd3c78550a99edcdb19a5052c65676f;hb=f43bdeb895071d4bbaabb94d401da24f5973ba6e;hp=0d0bcb0751b152861da4ae4fe27915602d3fff66;hpb=239f8109c64fa0c5a2e1d87a420bad5529b57f48;p=modules%2Fgeom.git diff --git a/src/BuildGUI/BuildGUI_SolidDlg.cxx b/src/BuildGUI/BuildGUI_SolidDlg.cxx index 0d0bcb075..995faf671 100644 --- a/src/BuildGUI/BuildGUI_SolidDlg.cxx +++ b/src/BuildGUI/BuildGUI_SolidDlg.cxx @@ -1,73 +1,79 @@ -// GEOM GEOMGUI : GUI for Geometry component +// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE // -// Copyright (C) 2003 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 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 +// 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 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 // -// File : BuildGUI_SolidDlg.cxx -// Author : Damien COQUERET -// Module : GEOM -// $Header$ +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +// GEOM GEOMGUI : GUI for Geometry component +// File : BuildGUI_SolidDlg.cxx +// Author : Damien COQUERET, Open CASCADE S.A.S. #include "BuildGUI_SolidDlg.h" -#include "GEOMImpl_Types.hxx" -#include "SUIT_Session.h" -#include "SalomeApp_Application.h" -#include "LightApp_SelectionMgr.h" +#include +#include +#include -//Qt includes -#include -#include +#include + +#include +#include +#include +#include +#include + +#include //================================================================================= // class : BuildGUI_SolidDlg() -// purpose : Constructs a BuildGUI_SolidDlg which is a child of 'parent', with the +// purpose : Constructs a BuildGUI_SolidDlg 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. //================================================================================= -BuildGUI_SolidDlg::BuildGUI_SolidDlg(GeometryGUI* theGeometryGUI, QWidget* parent, - const char* name, bool modal, WFlags fl) - :GEOMBase_Skeleton(theGeometryGUI, parent, name, modal, WStyle_Customize | - WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu) +BuildGUI_SolidDlg::BuildGUI_SolidDlg( GeometryGUI* theGeometryGUI, QWidget* parent ) + : GEOMBase_Skeleton( theGeometryGUI, parent ) { - QPixmap image0(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_BUILD_SOLID"))); - QPixmap image1(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT"))); + QPixmap image0( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_BUILD_SOLID" ) ) ); + QPixmap image1( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) ); + + setWindowTitle( tr( "GEOM_SOLID_TITLE" ) ); - setCaption(tr("GEOM_SOLID_TITLE")); - /***************************************************************/ - GroupConstructors->setTitle(tr("GEOM_SOLID")); - RadioButton1->setPixmap(image0); - RadioButton2->close(TRUE); - RadioButton3->close(TRUE); - - GroupSolid = new DlgRef_1Sel1Check_QTD(this, "GroupSolid"); - GroupSolid->GroupBox1->setTitle(tr("GEOM_ARGUMENTS")); - GroupSolid->TextLabel1->setText(tr("GEOM_OBJECTS")); - GroupSolid->CheckButton1->setText(tr("GEOM_CREATE_SINGLE_SOLID")); - GroupSolid->PushButton1->setPixmap(image1); + mainFrame()->GroupConstructors->setTitle( tr( "GEOM_SOLID" ) ); + mainFrame()->RadioButton1->setIcon( image0 ); + mainFrame()->RadioButton2->setAttribute( Qt::WA_DeleteOnClose ); + mainFrame()->RadioButton2->close(); + mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose ); + mainFrame()->RadioButton3->close(); + + GroupSolid = new DlgRef_1Sel1Check( centralWidget() ); + + GroupSolid->GroupBox1->setTitle( tr( "GEOM_ARGUMENTS" ) ); + GroupSolid->TextLabel1->setText( tr( "GEOM_OBJECTS" ) ); + GroupSolid->CheckButton1->setText( tr( "GEOM_CREATE_SINGLE_SOLID" ) ); + GroupSolid->PushButton1->setIcon( image1 ); GroupSolid->LineEdit1->setReadOnly( true ); - - Layout1->addWidget(GroupSolid, 2, 0); + + QVBoxLayout* layout = new QVBoxLayout( centralWidget() ); + layout->setMargin( 0 ); layout->setSpacing( 6 ); + layout->addWidget( GroupSolid ); /***************************************************************/ setHelpFileName("create_solid_page.html"); @@ -83,7 +89,7 @@ BuildGUI_SolidDlg::BuildGUI_SolidDlg(GeometryGUI* theGeometryGUI, QWidget* paren //================================================================================= BuildGUI_SolidDlg::~BuildGUI_SolidDlg() { - // no need to delete child widgets, Qt does it all for us + // no need to delete child widgets, Qt does it all for us } @@ -98,21 +104,28 @@ void BuildGUI_SolidDlg::Init() GroupSolid->LineEdit1->setReadOnly( true ); GroupSolid->CheckButton1->setChecked( true ); - myOkShells = false; + myShells.clear(); - globalSelection( GEOM_SHELL ); + //globalSelection( GEOM_SHELL ); + TColStd_MapOfInteger aMap; + aMap.Add( GEOM_SHELL ); + aMap.Add( GEOM_COMPOUNDFILTER ); + QList aSubShapes; + aSubShapes.append( GEOM_SHELL ); + globalSelection( aMap, aSubShapes ); /* signals and slots connections */ - connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); + connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) ); + connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) ); - connect(GroupSolid->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - connect(GroupSolid->CheckButton1, SIGNAL(toggled(bool)), this, SLOT(EnableNameField(bool))); + connect( GroupSolid->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); + connect( GroupSolid->CheckButton1, SIGNAL( toggled( bool ) ), this, SLOT( EnableNameField( bool ) ) ); - connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(), - SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())) ; + connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), + SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); - initName(tr("GEOM_SOLID")); + initName( tr( "GEOM_SOLID" ) ); + SelectionIntoArgument(); } @@ -122,6 +135,7 @@ void BuildGUI_SolidDlg::Init() //================================================================================= void BuildGUI_SolidDlg::ClickOnOk() { + setIsApplyAndClose( true ); if ( ClickOnApply() ) ClickOnCancel(); } @@ -146,22 +160,17 @@ bool BuildGUI_SolidDlg::ClickOnApply() //================================================================================= void BuildGUI_SolidDlg::SelectionIntoArgument() { - myEditCurrentArgument->setText(""); - QString aString = ""; - - myOkShells = false; - int nbSel = GEOMBase::GetNameOfSelectedIObjects(selectedIO(), aString); - if (nbSel == 0) - return; - if(nbSel != 1) - aString = tr("%1_objects").arg(nbSel); - - GEOMBase::ConvertListOfIOInListOfGO(selectedIO(), myShells); - if (!myShells.length()) - return; - - myEditCurrentArgument->setText(aString); - myOkShells = true; + myEditCurrentArgument->setText( "" ); + + //myShells = getSelected( TopAbs_SHELL, -1 ); + QList types; + types << TopAbs_SHELL << TopAbs_COMPOUND; + myShells = getSelected( types, -1 ); + + if ( !myShells.isEmpty() ) { + QString aName = myShells.count() > 1 ? QString( "%1_objects").arg( myShells.count() ) : GEOMBase::GetName( myShells[0].get() ); + myEditCurrentArgument->setText( aName ); + } } //================================================================================= @@ -171,10 +180,17 @@ void BuildGUI_SolidDlg::SelectionIntoArgument() void BuildGUI_SolidDlg::SetEditCurrentArgument() { QPushButton* send = (QPushButton*)sender(); - if(send != GroupSolid->PushButton1) + if ( send != GroupSolid->PushButton1 ) return; - - globalSelection( GEOM_SHELL ); + + //globalSelection( GEOM_SHELL ); + TColStd_MapOfInteger aMap; + aMap.Add( GEOM_SHELL ); + aMap.Add( GEOM_COMPOUNDFILTER ); + QList aSubShapes; + aSubShapes.append( GEOM_SHELL ); + globalSelection( aMap, aSubShapes ); + myEditCurrentArgument = GroupSolid->LineEdit1; myEditCurrentArgument->setFocus(); @@ -189,9 +205,16 @@ void BuildGUI_SolidDlg::SetEditCurrentArgument() void BuildGUI_SolidDlg::ActivateThisDialog() { GEOMBase_Skeleton::ActivateThisDialog(); - connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(), - SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())) ; - globalSelection( GEOM_SHELL ); + connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), + SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); + + //globalSelection( GEOM_SHELL ); + TColStd_MapOfInteger aMap; + aMap.Add( GEOM_SHELL ); + aMap.Add( GEOM_COMPOUNDFILTER ); + QList aSubShapes; + aSubShapes.append( GEOM_SHELL ); + globalSelection( aMap, aSubShapes ); } @@ -199,9 +222,9 @@ void BuildGUI_SolidDlg::ActivateThisDialog() // function : enterEvent() // purpose : //================================================================================= -void BuildGUI_SolidDlg::enterEvent(QEvent* e) +void BuildGUI_SolidDlg::enterEvent( QEvent* ) { - if ( !GroupConstructors->isEnabled() ) + if ( !mainFrame()->GroupConstructors->isEnabled() ) ActivateThisDialog(); } @@ -210,9 +233,9 @@ void BuildGUI_SolidDlg::enterEvent(QEvent* e) // function : EnableNameField() // purpose : //================================================================================= -void BuildGUI_SolidDlg::EnableNameField(bool toEnable) +void BuildGUI_SolidDlg::EnableNameField( bool toEnable ) { - this->GroupBoxName->setEnabled(toEnable); + mainFrame()->GroupBoxName->setEnabled( toEnable ); } //================================================================================= @@ -228,10 +251,60 @@ GEOM::GEOM_IOperations_ptr BuildGUI_SolidDlg::createOperation() // function : isValid // purpose : //================================================================================= -bool BuildGUI_SolidDlg::isValid( QString& ) +bool BuildGUI_SolidDlg::isValid (QString& msg) +{ + bool ok = !myShells.isEmpty(); + + GEOM::MeasureOpPtr anOp; + anOp.take(myGeomGUI->GetGeomGen()->GetIMeasureOperations(getStudyId())); + + for ( int i = 0, n = myShells.count(); i < n && ok; i++ ) { + CORBA::String_var aRes = anOp->IsGoodForSolid(myShells[i].get()); + if (strlen(aRes.in())) { + msg = QObject::tr(aRes.in()).arg(GEOMBase::GetName(myShells[i].get())); + ok = false; + } + } + return ok; +} + +/* +//================================================================================= +// function : isClosed +// purpose : Check the object 'i' in myShells list is closed or unclosed +//================================================================================= +bool BuildGUI_SolidDlg::isClosed( GEOM::GEOM_Object_ptr shell ) { - return myOkShells; + bool ok = false; + + GEOM::GEOM_IKindOfShape::shape_kind aKind; + GEOM::ListOfLong_var anInts; + GEOM::ListOfDouble_var aDbls; + + if ( !CORBA::is_nil( shell ) ) { + GEOM::MeasureOpPtr anOp; + anOp.take( myGeomGUI->GetGeomGen()->GetIMeasureOperations( getStudyId() ) ); + + // Detect kind of shape and parameters + aKind = anOp->KindOfShape(shell, anInts, aDbls); + + if ( anOp->IsDone() ) { + if ( anInts[0] == 1 ) + ok = true; + else if ( anInts[0] == 2 ) + ok = false; + } + else { + MESSAGE ("KindOfShape Operation is NOT DONE!!!"); + } + } + else { + MESSAGE ("Shape is NULL!!!"); + } + + return ok; } +*/ //================================================================================= // function : execute @@ -239,22 +312,22 @@ bool BuildGUI_SolidDlg::isValid( QString& ) //================================================================================= bool BuildGUI_SolidDlg::execute( ObjectList& objects ) { - bool toCreateSingleSolid = GroupSolid->CheckButton1->isChecked(); - - if ( toCreateSingleSolid ) - { - GEOM::GEOM_Object_var anObj = GEOM::GEOM_IShapesOperations::_narrow( - getOperation() )->MakeSolidShells( myShells ); + GEOM::GEOM_IShapesOperations_var anOper = GEOM::GEOM_IShapesOperations::_narrow( getOperation() ); + + if ( GroupSolid->CheckButton1->isChecked() ) { + GEOM::ListOfGO_var objlist = new GEOM::ListOfGO(); + objlist->length( myShells.count() ); + for ( int i = 0; i < myShells.count(); i++ ) + objlist[i] = myShells[i].copy(); + + GEOM::GEOM_Object_var anObj = anOper->MakeSolidShells( objlist.in() ); if ( !anObj->_is_nil() ) objects.push_back( anObj._retn() ); } - else - { - for ( int i = 0, n = myShells.length(); i< n; i++ ) - { - GEOM::GEOM_Object_var anObj = GEOM::GEOM_IShapesOperations::_narrow( - getOperation() )->MakeSolidShell( myShells[ i ] ); + else { + for ( int i = 0, n = myShells.count(); i< n; i++ ) { + GEOM::GEOM_Object_var anObj = anOper->MakeSolidShell( myShells[ i ].get() ); if ( !anObj->_is_nil() ) objects.push_back( anObj._retn() ); @@ -263,4 +336,3 @@ bool BuildGUI_SolidDlg::execute( ObjectList& objects ) return true; } -