X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPrimitiveGUI%2FPrimitiveGUI_SphereDlg.cxx;h=8b0dbb107526521b67a65eca33012403319bdf39;hb=a6b86fc40dddf212f4e71821d6156f298939c7ca;hp=d13352dc208077696af7b51200c7815477850127;hpb=a596550f89dfafcf288f8d62a2ca2a1be40ca512;p=modules%2Fgeom.git diff --git a/src/PrimitiveGUI/PrimitiveGUI_SphereDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_SphereDlg.cxx index d13352dc2..8b0dbb107 100644 --- a/src/PrimitiveGUI/PrimitiveGUI_SphereDlg.cxx +++ b/src/PrimitiveGUI/PrimitiveGUI_SphereDlg.cxx @@ -17,7 +17,7 @@ // 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // // @@ -26,11 +26,26 @@ // Module : GEOM // $Header$ -using namespace std; #include "PrimitiveGUI_SphereDlg.h" -#include -#include "QAD_Config.h" +#include "SUIT_Desktop.h" +#include "SUIT_Session.h" +#include "SalomeApp_Application.h" +#include "LightApp_SelectionMgr.h" + +#include +#include +#include +#include +#include + +#include + +#include "GEOMImpl_Types.hxx" + +#include "utilities.h" + +using namespace std; //================================================================================= // class : PrimitiveGUI_SphereDlg() @@ -39,12 +54,14 @@ using namespace std; // The dialog will by default be modeless, unless you set 'modal' to // TRUE to construct a modal dialog. //================================================================================= -PrimitiveGUI_SphereDlg::PrimitiveGUI_SphereDlg(QWidget* parent, const char* name, PrimitiveGUI* thePrimitiveGUI, SALOME_Selection* Sel, bool modal, WFlags fl) - :GEOMBase_Skeleton(parent, name, Sel, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu) +PrimitiveGUI_SphereDlg::PrimitiveGUI_SphereDlg(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) { - QPixmap image0(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_DLG_SPHERE_P"))); - QPixmap image1(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_DLG_SPHERE_DXYZ"))); - QPixmap image2(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_SELECT"))); + QPixmap image0(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_DLG_SPHERE_P"))); + QPixmap image1(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_DLG_SPHERE_DXYZ"))); + QPixmap image2(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_SELECT"))); setCaption(tr("GEOM_SPHERE_TITLE")); @@ -64,16 +81,15 @@ PrimitiveGUI_SphereDlg::PrimitiveGUI_SphereDlg(QWidget* parent, const char* nam GroupDimensions->GroupBox1->setTitle(tr("GEOM_SPHERE_RO")); GroupDimensions->TextLabel1->setText(tr("GEOM_RADIUS")); - Layout1->addWidget(GroupPoints, 1, 0); - Layout1->addWidget(GroupDimensions, 1, 0); + Layout1->addWidget(GroupPoints, 2, 0); + Layout1->addWidget(GroupDimensions, 2, 0); /***************************************************************/ - /* Initialisations */ - myPrimitiveGUI = thePrimitiveGUI; + setHelpFileName("create_sphere_page.html"); + Init(); } - //================================================================================= // function : ~PrimitiveGUI_SphereDlg() // purpose : Destroys the object and frees any allocated resources @@ -83,7 +99,6 @@ PrimitiveGUI_SphereDlg::~PrimitiveGUI_SphereDlg() /* no need to delete child widgets, Qt does it all for us */ } - //================================================================================= // function : Init() // purpose : @@ -91,26 +106,20 @@ PrimitiveGUI_SphereDlg::~PrimitiveGUI_SphereDlg() void PrimitiveGUI_SphereDlg::Init() { /* init variables */ - myConstructorId = 0; myEditCurrentArgument = GroupPoints->LineEdit1; - - myPoint1.SetCoord(0.0, 0.0, 0.0); - myRadius = 100.0; - myOkPoint1 = false; - - /* Vertices Filter for all arguments */ - myVertexFilter = new GEOM_ShapeTypeFilter(TopAbs_VERTEX, myGeom); - mySelection->AddFilter(myVertexFilter); - + GroupPoints->LineEdit1->setReadOnly( true ); + + myPoint = GEOM::GEOM_Object::_nil(); + /* Get setting of step value from file configuration */ - QString St = QAD_CONFIG->getSetting("Geometry:SettingsGeomStep"); - step = St.toDouble(); + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + double step = resMgr->doubleValue( "Geometry", "SettingsGeomStep", 100); /* min, max, step and decimals for spin boxes */ - GroupPoints->SpinBox_DX->RangeStepAndValidator(0.001, 999.999, step, 3); - GroupDimensions->SpinBox_DX->RangeStepAndValidator(0.001, 999.999, step, 3); - GroupPoints->SpinBox_DX->SetValue(myRadius); - GroupDimensions->SpinBox_DX->SetValue(myRadius); + GroupPoints->SpinBox_DX->RangeStepAndValidator(0.001, COORD_MAX, step, DBL_DIGITS_DISPLAY); + GroupDimensions->SpinBox_DX->RangeStepAndValidator(0.001, COORD_MAX, step, DBL_DIGITS_DISPLAY); + GroupPoints->SpinBox_DX->SetValue(100.0); + GroupDimensions->SpinBox_DX->SetValue(100.0); /* signals and slots connections */ connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); @@ -120,103 +129,92 @@ void PrimitiveGUI_SphereDlg::Init() connect(GroupPoints->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); connect(GroupPoints->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed())); - connect(GroupDimensions->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double))); - connect(GroupPoints->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double))); + connect(GroupDimensions->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox())); + connect(GroupPoints->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox())); - connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), GroupPoints->SpinBox_DX, SLOT(SetStep(double))); - connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), GroupDimensions->SpinBox_DX, SLOT(SetStep(double))); - - connect(mySelection, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); + connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), + GroupPoints->SpinBox_DX, SLOT(SetStep(double))); + connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), + GroupDimensions->SpinBox_DX, SLOT(SetStep(double))); - /* displays Dialog */ - GroupDimensions->hide(); - GroupPoints->show(); - this->show(); + connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), + this, SLOT(SelectionIntoArgument())); - return; + initName(tr("GEOM_SPHERE")); + ConstructorsClicked(0); } - //================================================================================= // function : ConstructorsClicked() // purpose : Radio button management //================================================================================= -void PrimitiveGUI_SphereDlg::ConstructorsClicked(int constructorId) +void PrimitiveGUI_SphereDlg::ConstructorsClicked (int constructorId) { - myConstructorId = constructorId; - mySelection->ClearFilters(); - myGeomBase->EraseSimulationShape(); - disconnect(mySelection, 0, this, 0); - myRadius = 100.0; + disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0); switch (constructorId) { case 0: { + globalSelection(); // close local contexts, if any + localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX ); GroupDimensions->hide(); resize(0, 0); GroupPoints->show(); myEditCurrentArgument = GroupPoints->LineEdit1; GroupPoints->LineEdit1->setText(""); + myPoint = GEOM::GEOM_Object::_nil(); - GroupPoints->SpinBox_DX->SetValue(myRadius); - myOkPoint1 = false; - - /* filter for next selections */ - mySelection->AddFilter(myVertexFilter); - connect(mySelection, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); + connect(myGeomGUI->getApp()->selectionMgr(), + SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); break; } case 1: { GroupPoints->hide(); + globalSelection(); // close local contexts, if any resize(0, 0); GroupDimensions->show(); - - GroupDimensions->SpinBox_DX->SetValue(myRadius); - myPoint1.SetCoord(0.0, 0.0, 0.0); /* at origin */ - myOkPoint1 = true; - - mySimulationTopoDs = BRepPrimAPI_MakeSphere(myPoint1, myRadius).Shape(); - myGeomBase->DisplaySimulationShape(mySimulationTopoDs); + break; } } - return ; + displayPreview(); } - //================================================================================= // function : ClickOnOk() // purpose : //================================================================================= void PrimitiveGUI_SphereDlg::ClickOnOk() { - this->ClickOnApply(); - ClickOnCancel(); - return; + if ( ClickOnApply() ) + ClickOnCancel(); } - //================================================================================= // function : ClickOnApply() // purpose : //================================================================================= -void PrimitiveGUI_SphereDlg::ClickOnApply() +bool PrimitiveGUI_SphereDlg::ClickOnApply() { - buttonApply->setFocus(); - QAD_Application::getDesktop()->putInfo(tr("")); - if(mySimulationTopoDs.IsNull()) - return; - myGeomBase->EraseSimulationShape(); - mySimulationTopoDs.Nullify(); - - if(myOkPoint1) - myPrimitiveGUI->MakeSphereAndDisplay(myPoint1, myRadius); - return; + if ( !onAccept() ) + return false; + + initName(); + ConstructorsClicked( getConstructorId() ); + return true; } +//================================================================================= +// function : ClickOnCancel() +// purpose : +//================================================================================= +void PrimitiveGUI_SphereDlg::ClickOnCancel() +{ + GEOMBase_Skeleton::ClickOnCancel(); +} //================================================================================= // function : SelectionIntoArgument() @@ -224,37 +222,61 @@ void PrimitiveGUI_SphereDlg::ClickOnApply() //================================================================================= void PrimitiveGUI_SphereDlg::SelectionIntoArgument() { - myGeomBase->EraseSimulationShape(); + if (getConstructorId() != 0) + return; + myEditCurrentArgument->setText(""); - QString aString = ""; /* name of selection */ - int nbSel = myGeomBase->GetNameOfSelectedIObjects(mySelection, aString); - if(nbSel != 1) { - if(myEditCurrentArgument == GroupPoints->LineEdit1) { - GroupPoints->LineEdit1->setText(""); - myOkPoint1 = false; - } + if (IObjectCount() != 1) + { + myPoint = GEOM::GEOM_Object::_nil(); return; } - + /* nbSel == 1 ! */ - TopoDS_Shape S; - if(!myGeomBase->GetTopoFromSelection(mySelection, S)) + Standard_Boolean testResult = Standard_False; + GEOM::GEOM_Object_ptr aSelectedObject = GEOMBase::ConvertIOinGEOMObject(firstIObject(), testResult); + + if (!testResult || CORBA::is_nil(aSelectedObject)) return; - - /* Constructor 1 treatment */ - if(myEditCurrentArgument == GroupPoints->LineEdit1 && myGeomBase->VertexToPoint(S, myPoint1)) { - GroupPoints->LineEdit1->setText(aString); - myOkPoint1 = true; - } - - if(myOkPoint1) { - mySimulationTopoDs = BRepPrimAPI_MakeSphere(myPoint1, myRadius).Shape(); - myGeomBase->DisplaySimulationShape(mySimulationTopoDs); + + QString aName = GEOMBase::GetName(aSelectedObject); + TopoDS_Shape aShape; + if (GEOMBase::GetShape(aSelectedObject, aShape, TopAbs_SHAPE) && !aShape.IsNull()) + { + LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr(); + TColStd_IndexedMapOfInteger aMap; + aSelMgr->GetIndexes(firstIObject(), aMap); + if (aMap.Extent() == 1) // Local Selection + { + int anIndex = aMap( 1 ); + aName.append( ":vertex_" + QString::number( anIndex ) ); + + //Find SubShape Object in Father + GEOM::GEOM_Object_var aFindedObject = findObjectInFather(aSelectedObject, aName); + + if ( aFindedObject == GEOM::GEOM_Object::_nil() ) { // Object not found in study + GEOM::GEOM_IShapesOperations_var aShapesOp = + getGeomEngine()->GetIShapesOperations( getStudyId() ); + aSelectedObject = aShapesOp->GetSubShape(aSelectedObject, anIndex); + } + else + aSelectedObject = aFindedObject; // get Object from study + } + else // Global Selection + { + if (aShape.ShapeType() != TopAbs_VERTEX) { + aSelectedObject = GEOM::GEOM_Object::_nil(); + aName = ""; + } + } } - return ; -} + myEditCurrentArgument->setText(aName); + myPoint = aSelectedObject; + + displayPreview(); +} //================================================================================= // function : LineEditReturnPressed() @@ -264,36 +286,29 @@ void PrimitiveGUI_SphereDlg::LineEditReturnPressed() { QLineEdit* send = (QLineEdit*)sender(); if(send == GroupPoints->LineEdit1) - myEditCurrentArgument = GroupPoints->LineEdit1; - else - return; - - GEOMBase_Skeleton::LineEditReturnPressed(); - return; + { + myEditCurrentArgument = send; + GEOMBase_Skeleton::LineEditReturnPressed(); + } } - //================================================================================= // function : SetEditCurrentArgument() // purpose : //================================================================================= void PrimitiveGUI_SphereDlg::SetEditCurrentArgument() { - if(myConstructorId != 0) - return; - QPushButton* send = (QPushButton*)sender(); - - if(send == GroupPoints->PushButton1) { + + if (send == GroupPoints->PushButton1) { GroupPoints->LineEdit1->setFocus(); myEditCurrentArgument = GroupPoints->LineEdit1; - mySelection->AddFilter(myVertexFilter); - this->SelectionIntoArgument(); + globalSelection(); // close local contexts, if any + localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX ); + SelectionIntoArgument(); } - return; } - //================================================================================= // function : ActivateThisDialog() // purpose : @@ -301,14 +316,20 @@ void PrimitiveGUI_SphereDlg::SetEditCurrentArgument() void PrimitiveGUI_SphereDlg::ActivateThisDialog() { GEOMBase_Skeleton::ActivateThisDialog(); - connect(mySelection, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - if(myConstructorId == 0) - mySelection->AddFilter(myVertexFilter); - if(!mySimulationTopoDs.IsNull()) - myGeomBase->DisplaySimulationShape(mySimulationTopoDs); - return; + connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), + this, SLOT(SelectionIntoArgument())); + + ConstructorsClicked(getConstructorId()); } +//================================================================================= +// function : DeactivateActiveDialog() +// purpose : public slot to deactivate if active +//================================================================================= +void PrimitiveGUI_SphereDlg::DeactivateActiveDialog() +{ + GEOMBase_Skeleton::DeactivateActiveDialog(); +} //================================================================================= // function : enterEvent() @@ -316,26 +337,111 @@ void PrimitiveGUI_SphereDlg::ActivateThisDialog() //================================================================================= void PrimitiveGUI_SphereDlg::enterEvent(QEvent* e) { - if(GroupConstructors->isEnabled()) - return; - this->ActivateThisDialog(); - return; + if ( !GroupConstructors->isEnabled() ) + ActivateThisDialog(); } - //================================================================================= // function : ValueChangedInSpinBox() // purpose : //================================================================================= -void PrimitiveGUI_SphereDlg::ValueChangedInSpinBox(double newValue) +void PrimitiveGUI_SphereDlg::ValueChangedInSpinBox() { - myGeomBase->EraseSimulationShape(); - mySimulationTopoDs.Nullify(); - myRadius = newValue; - - if(myOkPoint1) { - mySimulationTopoDs = BRepPrimAPI_MakeSphere(myPoint1, myRadius).Shape(); - myGeomBase->DisplaySimulationShape(mySimulationTopoDs); + displayPreview(); +} + +//================================================================================= +// function : createOperation +// purpose : +//================================================================================= +GEOM::GEOM_IOperations_ptr PrimitiveGUI_SphereDlg::createOperation() +{ + return getGeomEngine()->GetI3DPrimOperations( getStudyId() ); +} + +//================================================================================= +// function : isValid +// purpose : +//================================================================================= +bool PrimitiveGUI_SphereDlg::isValid( QString& msg ) +{ + return getConstructorId() == 0 ? !myPoint->_is_nil() : true; +} + +//================================================================================= +// function : execute +// purpose : +//================================================================================= +bool PrimitiveGUI_SphereDlg::execute (ObjectList& objects) +{ + bool res = false; + + GEOM::GEOM_Object_var anObj; + + switch (getConstructorId()) + { + case 0: + { + if (!CORBA::is_nil(myPoint)) { + anObj = GEOM::GEOM_I3DPrimOperations::_narrow( getOperation() )-> + MakeSpherePntR(myPoint, getRadius()); + res = true; + } + break; + } + case 1: + { + anObj = GEOM::GEOM_I3DPrimOperations::_narrow( getOperation() )-> + MakeSphereR(getRadius()); + res = true; + break; + } + } + + if (!anObj->_is_nil()) + objects.push_back(anObj._retn()); + + return res; +} + +//================================================================================= +// function : closeEvent +// purpose : +//================================================================================= +void PrimitiveGUI_SphereDlg::closeEvent( QCloseEvent* e ) +{ + GEOMBase_Skeleton::closeEvent( e ); +} + +//================================================================================= +// function : getRadius() +// purpose : +//================================================================================= +double PrimitiveGUI_SphereDlg::getRadius() const +{ + int aConstructorId = getConstructorId(); + if (aConstructorId == 0) + return GroupPoints->SpinBox_DX->GetValue(); + else if (aConstructorId == 1) + return GroupDimensions->SpinBox_DX->GetValue(); + return 0; +} + +//================================================================================= +// function : addSubshapeToStudy +// purpose : virtual method to add new SubObjects if local selection +//================================================================================= +void PrimitiveGUI_SphereDlg::addSubshapesToStudy() +{ + QMap objMap; + +switch (getConstructorId()) + { + case 0: + objMap[GroupPoints->LineEdit1->text()] = myPoint; + break; + case 1: + return; } - return; + addSubshapesToFather( objMap ); }