From c2a8ef192fe340264489d5b1b4a5caa462457833 Mon Sep 17 00:00:00 2001 From: ana Date: Wed, 19 Nov 2014 15:40:00 +0300 Subject: [PATCH] 0022765: [EDF] Improvement of local selection mechanism First step --- doc/salome/gui/GEOM/images/point4.png | Bin 19243 -> 17212 bytes doc/salome/gui/GEOM/input/angle.doc | 4 ++ doc/salome/gui/GEOM/input/basic_prop.doc | 4 ++ doc/salome/gui/GEOM/input/bounding_box.doc | 4 ++ doc/salome/gui/GEOM/input/center_mass.doc | 4 ++ doc/salome/gui/GEOM/input/creating_point.doc | 6 +- doc/salome/gui/GEOM/input/inertia.doc | 4 ++ doc/salome/gui/GEOM/input/min_distance.doc | 4 ++ doc/salome/gui/GEOM/input/tolerance.doc | 4 ++ .../AdvancedGUI_SmoothingSurfaceDlg.cxx | 19 ++++- .../AdvancedGUI_SmoothingSurfaceDlg.h | 1 + src/BasicGUI/BasicGUI_PointDlg.cxx | 43 ++++-------- src/BasicGUI/BasicGUI_PointDlg.h | 2 - src/GEOMBase/GEOMBase_Helper.cxx | 35 ++++++++-- src/GEOMBase/GEOMBase_Helper.h | 2 + src/GEOMGUI/GEOM_Displayer.cxx | 36 ++++++++-- src/GEOMGUI/GEOM_Displayer.h | 2 + .../GenerationGUI_FillingDlg.cxx | 16 ++++- src/GenerationGUI/GenerationGUI_FillingDlg.h | 1 + src/MeasureGUI/MeasureGUI_AngleDlg.cxx | 48 +++++++------ src/MeasureGUI/MeasureGUI_AngleDlg.h | 3 +- src/MeasureGUI/MeasureGUI_BndBoxDlg.cxx | 57 +++++++++------ src/MeasureGUI/MeasureGUI_BndBoxDlg.h | 5 +- src/MeasureGUI/MeasureGUI_CenterMassDlg.cxx | 58 ++++++++++------ src/MeasureGUI/MeasureGUI_CenterMassDlg.h | 4 +- .../MeasureGUI_CheckSelfIntersectionsDlg.cxx | 8 +-- src/MeasureGUI/MeasureGUI_DistanceDlg.cxx | 65 ++++++++++++------ src/MeasureGUI/MeasureGUI_DistanceDlg.h | 6 +- src/MeasureGUI/MeasureGUI_InertiaDlg.cxx | 36 +++++++++- src/MeasureGUI/MeasureGUI_InertiaDlg.h | 2 + src/MeasureGUI/MeasureGUI_MaxToleranceDlg.cxx | 35 +++++++++- src/MeasureGUI/MeasureGUI_MaxToleranceDlg.h | 2 + src/MeasureGUI/MeasureGUI_PointDlg.cxx | 15 ++-- src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx | 30 ++++++-- src/MeasureGUI/MeasureGUI_PropertiesDlg.h | 1 + src/MeasureGUI/MeasureGUI_Skeleton.cxx | 13 ++-- src/MeasureGUI/MeasureGUI_Skeleton.h | 2 +- src/MeasureGUI/MeasureGUI_WhatisDlg.cxx | 8 +-- 38 files changed, 419 insertions(+), 170 deletions(-) diff --git a/doc/salome/gui/GEOM/images/point4.png b/doc/salome/gui/GEOM/images/point4.png index dc3e08641294a28f28cc5761d7cae25718d471f4..3be67dbca1f2a8cea42414df116ccffe2a007fe5 100755 GIT binary patch literal 17212 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 literal 19243 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 button and scroll the mouse wheel to switch between different available shapes that are pointed by the mouse cursor. The corresponding entities are highlighted in the viewer. +Press left mouse button to select appropriate object to the dialog box. + \image html angle.png If both objects are vectors, the angle is computed in accordance with their orientations, otherwise the minimum angle is computed. diff --git a/doc/salome/gui/GEOM/input/basic_prop.doc b/doc/salome/gui/GEOM/input/basic_prop.doc index 05b539e0c..2a1c8b9ad 100644 --- a/doc/salome/gui/GEOM/input/basic_prop.doc +++ b/doc/salome/gui/GEOM/input/basic_prop.doc @@ -5,6 +5,10 @@ This operation returns Length, Surface and Volume properties for the selected geometrical object. +\n The appropriate "local" selection is automatically switched on. If there are several entities of allowed types under the mouse cursor, first of them (top-level one) is highlighted. +Press button and scroll the mouse wheel to switch between different available shapes that are pointed by the mouse cursor. The corresponding entities are highlighted in the viewer. +Press left mouse button to select appropriate object to the dialog box. + \image html neo-basicprop.png \nTUI Command: geompy.BasicProperties(Shape), where diff --git a/doc/salome/gui/GEOM/input/bounding_box.doc b/doc/salome/gui/GEOM/input/bounding_box.doc index 5d963b097..71e2b3f75 100644 --- a/doc/salome/gui/GEOM/input/bounding_box.doc +++ b/doc/salome/gui/GEOM/input/bounding_box.doc @@ -4,6 +4,10 @@ This operation performs precise computation of bounding box for the selected geometrical object and displays its dimensions. +\n The appropriate "local" selection is automatically switched on. If there are several entities of allowed types under the mouse cursor, first of them (top-level one) is highlighted. +Press button and scroll the mouse wheel to switch between different available shapes that are pointed by the mouse cursor. The corresponding entities are highlighted in the viewer. +Press left mouse button to select appropriate object to the dialog box. + \image html measures5.png The coordinates of two corners of its bounding box are shown in the table. diff --git a/doc/salome/gui/GEOM/input/center_mass.doc b/doc/salome/gui/GEOM/input/center_mass.doc index c50370de5..7cab8da45 100644 --- a/doc/salome/gui/GEOM/input/center_mass.doc +++ b/doc/salome/gui/GEOM/input/center_mass.doc @@ -5,6 +5,10 @@ This operation calculates and returns the coordinates of the gravity center for the selected geometrical object. +\n The appropriate "local" selection is automatically switched on. If there are several entities of allowed types under the mouse cursor, first of them (top-level one) is highlighted. +Press button and scroll the mouse wheel to switch between different available shapes that are pointed by the mouse cursor. The corresponding entities are highlighted in the viewer. +Press left mouse button to select appropriate object to the dialog box. + \image html measures3.png Press \b Apply or Apply and Close button to publish the \b Point in the study. diff --git a/doc/salome/gui/GEOM/input/creating_point.doc b/doc/salome/gui/GEOM/input/creating_point.doc index a235bf0cd..c4641a7a5 100644 --- a/doc/salome/gui/GEOM/input/creating_point.doc +++ b/doc/salome/gui/GEOM/input/creating_point.doc @@ -53,8 +53,10 @@ projected on the given edge to produce the resulting point. projected point. \image html point3_2.png -\n Fourthly, we can define a point by intersection of two \b Lines or \b Wires (or a Wire and a Line). -If they intersect only once, a point will be created. If there are several intersections, a compound of points will be created. The type of the selected object (Line or Wire) can be changed in the popup menu, after clicking the corresponding selection button. +\n Fourthly, we can define a point by intersection of two \b Lines or \b Wires (or a Wire and a Line). +The appropriate "local" selection is automatically switched on. If there are several entities of allowed types under the mouse cursor, first of them (top-level one) is highlighted. +Press button and scroll the mouse wheel to switch between different available shapes that are pointed by the mouse cursor. The corresponding entities are highlighted in the viewer. Press left mouse button to select appropriate object to the dialog box. +If they intersect only once, a point will be created. If there are several intersections, a compound of points will be created. \n TUI Command: geompy.MakePointOnLinesIntersection(myLine1,myWire1). \n Arguments: Name + 2 1D objects diff --git a/doc/salome/gui/GEOM/input/inertia.doc b/doc/salome/gui/GEOM/input/inertia.doc index 70b368497..d2fe665dc 100644 --- a/doc/salome/gui/GEOM/input/inertia.doc +++ b/doc/salome/gui/GEOM/input/inertia.doc @@ -4,6 +4,10 @@ This operation returns the axial moments of inertia for the selected geometrical object. +\n The appropriate "local" selection is automatically switched on. If there are several entities of allowed types under the mouse cursor, first of them (top-level one) is highlighted. +Press button and scroll the mouse wheel to switch between different available shapes that are pointed by the mouse cursor. The corresponding entities are highlighted in the viewer. +Press left mouse button to select appropriate object to the dialog box. + \image html measures4.png The table displays: diff --git a/doc/salome/gui/GEOM/input/min_distance.doc b/doc/salome/gui/GEOM/input/min_distance.doc index d4fa336b7..4188890f9 100644 --- a/doc/salome/gui/GEOM/input/min_distance.doc +++ b/doc/salome/gui/GEOM/input/min_distance.doc @@ -4,6 +4,10 @@ This operation returns the minimum distance between two geometrical objects. +\n The appropriate "local" selection is automatically switched on. If there are several entities of allowed types under the mouse cursor, first of them (top-level one) is highlighted. +Press button and scroll the mouse wheel to switch between different available shapes that are pointed by the mouse cursor. The corresponding entities are highlighted in the viewer. +Press left mouse button to select appropriate object to the dialog box. + \image html distance.png The query for minimum distance can find one or more solutions, or even an infinite set of solutions. diff --git a/doc/salome/gui/GEOM/input/tolerance.doc b/doc/salome/gui/GEOM/input/tolerance.doc index 2b0bdd0c6..2dd15097c 100644 --- a/doc/salome/gui/GEOM/input/tolerance.doc +++ b/doc/salome/gui/GEOM/input/tolerance.doc @@ -5,6 +5,10 @@ This operation returns the maximum and the minimum tolerance for the selected geometrical object. +\n The appropriate "local" selection is automatically switched on. If there are several entities of allowed types under the mouse cursor, first of them (top-level one) is highlighted. +Press button and scroll the mouse wheel to switch between different available shapes that are pointed by the mouse cursor. The corresponding entities are highlighted in the viewer. +Press left mouse button to select appropriate object to the dialog box. + \image html new-tolerance.png The table displays \b Min and \b Max tolerance values for \b Face, \b Edge and \b Vertex tolerance. diff --git a/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx b/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx index 89c5f68ce..2f276ef1e 100644 --- a/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx +++ b/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx @@ -119,6 +119,8 @@ void AdvancedGUI_SmoothingSurfaceDlg::Init() showOnlyPreviewControl(); + globalSelection(); + localSelection(GEOM::GEOM_Object::_nil(), TopAbs_VERTEX ); //@@ initialize dialog box widgets here @@// // Signal/slot connections @@ -160,7 +162,8 @@ bool AdvancedGUI_SmoothingSurfaceDlg::ClickOnApply() return false; initName(); - + globalSelection(); + localSelection(GEOM::GEOM_Object::_nil(), TopAbs_VERTEX ); return true; } @@ -171,6 +174,8 @@ bool AdvancedGUI_SmoothingSurfaceDlg::ClickOnApply() void AdvancedGUI_SmoothingSurfaceDlg::ActivateThisDialog() { GEOMBase_Skeleton::ActivateThisDialog(); + globalSelection(); + localSelection(GEOM::GEOM_Object::_nil(), TopAbs_VERTEX ); //displayPreview(); } @@ -249,6 +254,16 @@ bool AdvancedGUI_SmoothingSurfaceDlg::execute (ObjectList& objects) return res; } +//================================================================================= +// function : addSubshapesToStudy +// purpose : virtual method to add new SubObjects if local selection +//================================================================================= +void AdvancedGUI_SmoothingSurfaceDlg::addSubshapesToStudy() +{ + for ( int i = 0; i < myPoints.count(); i++ ) + GEOMBase::PublishSubObject( myPoints[i].get() ); +} + //================================================================================= // function : getNbPoints() // purpose : Returns the number of points in myPoints list. @@ -337,5 +352,7 @@ void AdvancedGUI_SmoothingSurfaceDlg::SetEditCurrentArgument() if ( sender() == GroupPoints->PushButton1 ) myEditCurrentArgument = GroupPoints->LineEdit1; myEditCurrentArgument->setFocus(); + globalSelection(); + localSelection(GEOM::GEOM_Object::_nil(), TopAbs_VERTEX ); SelectionIntoArgument(); } diff --git a/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h b/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h index 822d2aa0f..23e800647 100644 --- a/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h +++ b/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h @@ -45,6 +45,7 @@ protected: virtual GEOM::GEOM_IOperations_ptr createOperation(); virtual bool isValid( QString& ); virtual bool execute( ObjectList& ); + virtual void addSubshapesToStudy(); private: void Init(); diff --git a/src/BasicGUI/BasicGUI_PointDlg.cxx b/src/BasicGUI/BasicGUI_PointDlg.cxx index 868c607bb..cf5356214 100644 --- a/src/BasicGUI/BasicGUI_PointDlg.cxx +++ b/src/BasicGUI/BasicGUI_PointDlg.cxx @@ -45,6 +45,7 @@ #include #include #include +#include #include #include @@ -68,8 +69,6 @@ #define SPACING 6 #define MARGIN 9 -enum { SelectEdge, SelectWire }; - //================================================================================= // class : BasicGUI_PointDlg() // purpose : Constructs a BasicGUI_PointDlg which is a child of 'parent', with the @@ -150,20 +149,15 @@ BasicGUI_PointDlg::BasicGUI_PointDlg(GeometryGUI* theGeometryGUI, QWidget* paren GroupRefPoint->TextLabel4->setText(tr("GEOM_DZ")); /* popup menu for line intersect buttons */ - myBtnPopup = new QMenu(this); QIcon ico_line = QIcon(image6); QIcon ico_wire = QIcon(image7); - myActions[myBtnPopup->addAction(ico_line, tr("GEOM_EDGE"))] = SelectEdge; - myActions[myBtnPopup->addAction(ico_wire, tr("GEOM_WIRE"))] = SelectWire; GroupLineIntersection = new DlgRef_2Sel(centralWidget()); GroupLineIntersection->GroupBox1->setTitle(tr("GEOM_LINE_INTERSECTION")); GroupLineIntersection->TextLabel1->setText(tr("GEOM_LINE1")); GroupLineIntersection->TextLabel2->setText(tr("GEOM_LINE2")); GroupLineIntersection->PushButton1->setIcon(image2); - GroupLineIntersection->PushButton1->setMenu(myBtnPopup); GroupLineIntersection->PushButton2->setIcon(image2); - GroupLineIntersection->PushButton2->setMenu(myBtnPopup); GroupLineIntersection->LineEdit2->setEnabled(false); myCoordGrp = new QGroupBox(tr("GEOM_COORDINATES_RES"), centralWidget()); @@ -286,9 +280,7 @@ void BasicGUI_PointDlg::Init() connect(GroupOnSurface->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); connect(GroupLineIntersection->PushButton1, SIGNAL(pressed()), this, SLOT(SetEditCurrentArgument())); connect(GroupLineIntersection->PushButton2, SIGNAL(pressed()), this, SLOT(SetEditCurrentArgument())); - - connect(myBtnPopup, SIGNAL(triggered(QAction*)), this, SLOT(onBtnPopup(QAction*))); - + connect(GroupOnCurve->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double))); connect(GroupOnSurface->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double))); connect(GroupOnSurface->SpinBox_DY, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double))); @@ -391,8 +383,9 @@ void BasicGUI_PointDlg::ConstructorsClicked(int constructorId) case GEOM_POINT_INTINT: { globalSelection(); // close local contexts, if any - myNeedType = TopAbs_EDGE; - localSelection(GEOM::GEOM_Object::_nil(), myNeedType); + std::list needTypes; + needTypes.push_back( TopAbs_EDGE ), needTypes.push_back( TopAbs_WIRE ); + localSelection(GEOM::GEOM_Object::_nil(), needTypes ); myEditCurrentArgument = GroupLineIntersection->LineEdit1; GroupLineIntersection->LineEdit1->setText(""); @@ -500,7 +493,14 @@ void BasicGUI_PointDlg::SelectionIntoArgument() myLine2.nullify(); } - GEOM::GeomObjPtr aSelectedObject = getSelected(myNeedType); + GEOM::GeomObjPtr aSelectedObject; + if (id == GEOM_POINT_INTINT) { + QList needTypes; + needTypes << TopAbs_EDGE, needTypes << TopAbs_WIRE; + aSelectedObject= getSelected(needTypes); + } + else + aSelectedObject= getSelected(myNeedType); TopoDS_Shape aShape; if (aSelectedObject && GEOMBase::GetShape(aSelectedObject.get(), aShape) && !aShape.IsNull()) { QString aName = GEOMBase::GetName(aSelectedObject.get()); @@ -535,19 +535,13 @@ void BasicGUI_PointDlg::SelectionIntoArgument() if (myEditCurrentArgument == GroupLineIntersection->LineEdit1) { myLine1 = aSelectedObject; if (myLine1 && !myLine2) { - GroupLineIntersection->PushButton2->setMenu(0); GroupLineIntersection->PushButton2->click(); - GroupLineIntersection->PushButton2->setDown(true); - GroupLineIntersection->PushButton2->setMenu(myBtnPopup); } } else if (myEditCurrentArgument == GroupLineIntersection->LineEdit2) { myLine2 = aSelectedObject; if (myLine2 && !myLine1) { - GroupLineIntersection->PushButton1->setMenu(0); GroupLineIntersection->PushButton1->click(); - GroupLineIntersection->PushButton1->setDown(true); - GroupLineIntersection->PushButton1->setMenu(myBtnPopup); } } } @@ -992,17 +986,6 @@ void BasicGUI_PointDlg::updateParamCoord(bool theIsUpdate) QTimer::singleShot(50, this, SLOT(updateSize())); } -//================================================================================= -// function : onBtnPopup() -// purpose : -//================================================================================= -void BasicGUI_PointDlg::onBtnPopup(QAction* a) -{ - globalSelection(); // close local contexts, if any - myNeedType = myActions[a] == SelectEdge ? TopAbs_EDGE : TopAbs_WIRE; - localSelection(GEOM::GEOM_Object::_nil(), myNeedType); -} - //================================================================================= // function : updateSize // purpose : adjust dialog size to minimum diff --git a/src/BasicGUI/BasicGUI_PointDlg.h b/src/BasicGUI/BasicGUI_PointDlg.h index ddd413f7b..ec691ae94 100644 --- a/src/BasicGUI/BasicGUI_PointDlg.h +++ b/src/BasicGUI/BasicGUI_PointDlg.h @@ -99,7 +99,6 @@ private: QGroupBox* myParamGroup; QButtonGroup* myParamCoord; - QMenu* myBtnPopup; QMap myActions; TopAbs_ShapeEnum myNeedType; @@ -116,7 +115,6 @@ private slots: void SetDoubleSpinBoxStep( double ); void ClickParamCoord( int ); void CheckBoxClicked( int ); - void onBtnPopup( QAction* ); void updateSize(); }; diff --git a/src/GEOMBase/GEOMBase_Helper.cxx b/src/GEOMBase/GEOMBase_Helper.cxx index e7b02e6b4..ba67388e9 100755 --- a/src/GEOMBase/GEOMBase_Helper.cxx +++ b/src/GEOMBase/GEOMBase_Helper.cxx @@ -460,9 +460,9 @@ void GEOMBase_Helper::activate( const int theType ) //================================================================ // Function : localSelection // Purpose : Activate selection of sub-shapes in accordance with mode -// theMode is from TopAbs_ShapeEnum +// modes are from TopAbs_ShapeEnum //================================================================ -void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const int theMode ) +void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const std::list modes ) { SALOME_ListIO aListOfIO; @@ -478,7 +478,7 @@ void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const int theMo anEntry.toLatin1().constData(), "GEOM", strdup( GEOMBase::GetName( anObj ).toLatin1().constData() ) ) ); } - getDisplayer()->LocalSelection( aListOfIO, theMode ); + getDisplayer()->LocalSelection( aListOfIO, modes ); } //================================================================ @@ -486,19 +486,42 @@ void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const int theMo // Purpose : Activate selection of sub-shapes in accordance with mode // theMode is from TopAbs_ShapeEnum //================================================================ -void GEOMBase_Helper::localSelection( GEOM::GEOM_Object_ptr obj, const int mode ) +void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const int theMode ) +{ + std::list modes; + modes.push_back( theMode ); + localSelection( theObjs, modes ); +} + +//================================================================ +// Function : localSelection +// Purpose : Activate selection of sub-shapes in accordance with mode +// modes are from TopAbs_ShapeEnum +//================================================================ +void GEOMBase_Helper::localSelection( GEOM::GEOM_Object_ptr obj, const std::list modes ) { // If object is null local selection for all objects is activated if ( obj->_is_nil() ) { - getDisplayer()->LocalSelection( Handle(SALOME_InteractiveObject)(), mode ); + getDisplayer()->LocalSelection( Handle(SALOME_InteractiveObject)(), modes ); return; } ObjectList objList; objList.push_back( obj ); - localSelection( objList, mode ); + localSelection( objList, modes ); } +//================================================================ +// Function : localSelection +// Purpose : Activate selection of sub-shapes in accordance with mode +// mode is from TopAbs_ShapeEnum +//================================================================ +void GEOMBase_Helper::localSelection( GEOM::GEOM_Object_ptr obj, const int mode ) +{ + std::list modes; + modes.push_back( mode ); + localSelection( obj, modes ); +} //================================================================ // Function : globalSelection diff --git a/src/GEOMBase/GEOMBase_Helper.h b/src/GEOMBase/GEOMBase_Helper.h index 438c3c26d..731b63d06 100755 --- a/src/GEOMBase/GEOMBase_Helper.h +++ b/src/GEOMBase/GEOMBase_Helper.h @@ -95,7 +95,9 @@ protected: const bool = true ); void erasePreview ( const bool = true ); + void localSelection( const ObjectList&, const std::list ); void localSelection( const ObjectList&, const int ); + void localSelection( GEOM::GEOM_Object_ptr, const std::list ); void localSelection( GEOM::GEOM_Object_ptr, const int ); void activate( const int ); void globalSelection( const int = GEOM_ALLOBJECTS, const bool = false ); diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx index c68154970..fe124e69e 100644 --- a/src/GEOMGUI/GEOM_Displayer.cxx +++ b/src/GEOMGUI/GEOM_Displayer.cxx @@ -1772,7 +1772,7 @@ void GEOM_Displayer::internalReset() * of their sub-shapes (with opened local context for OCC viewer) */ //================================================================= -void GEOM_Displayer::LocalSelection( const Handle(SALOME_InteractiveObject)& theIO, const int theMode ) +void GEOM_Displayer::LocalSelection( const Handle(SALOME_InteractiveObject)& theIO, const std::list modes ) { SUIT_Session* session = SUIT_Session::session(); SalomeApp_Application* app = dynamic_cast( session->activeApplication() ); @@ -1789,11 +1789,25 @@ void GEOM_Displayer::LocalSelection( const Handle(SALOME_InteractiveObject)& the if (!theIO.IsNull() && !vf->isVisible(theIO)) Display(theIO); SALOME_Prs* prs = vf->CreatePrs( theIO.IsNull() ? 0 : theIO->getEntry() ); - vf->LocalSelection( prs, theMode ); + vf->LocalSelection( prs, modes ); delete prs; // delete presentation because displayer is its owner } } +//================================================================= +/*! + * GEOM_Displayer::LocalSelection + * Activate selection of CAD shapes with activisation of selection + * of their sub-shapes (with opened local context for OCC viewer) + */ +//================================================================= +void GEOM_Displayer::LocalSelection( const Handle(SALOME_InteractiveObject)& theIO, const int theMode ) +{ + std::list modes; + modes.push_back( theMode ); + LocalSelection( theIO, modes ); +} + //================================================================= /*! * GEOM_Displayer::globalSelection @@ -1907,11 +1921,25 @@ void GEOM_Displayer::GlobalSelection( const TColStd_MapOfInteger& theModes, * of their sub-shapes (with opened local context for OCC viewer) */ //================================================================= -void GEOM_Displayer::LocalSelection( const SALOME_ListIO& theIOList, const int theMode ) +void GEOM_Displayer::LocalSelection( const SALOME_ListIO& theIOList, const std::list modes ) { SALOME_ListIteratorOfListIO Iter( theIOList ); for ( ; Iter.More(); Iter.Next() ) - LocalSelection( Iter.Value(), theMode ); + LocalSelection( Iter.Value(), modes ); +} + +//================================================================= +/*! + * GEOM_Displayer::LocalSelection + * Activate selection of CAD shapes with activisation of selection + * of their sub-shapes (with opened local context for OCC viewer) + */ +//================================================================= +void GEOM_Displayer::LocalSelection( const SALOME_ListIO& theIOList, const int theMode ) +{ + std::list modes; + modes.push_back( theMode ); + LocalSelection( theIOList, modes ); } //================================================================= diff --git a/src/GEOMGUI/GEOM_Displayer.h b/src/GEOMGUI/GEOM_Displayer.h index 7f0d01d99..bc90d12c8 100644 --- a/src/GEOMGUI/GEOM_Displayer.h +++ b/src/GEOMGUI/GEOM_Displayer.h @@ -183,7 +183,9 @@ public: bool ToActivate() const; /* Activate/Deactivate selection*/ + void LocalSelection( const Handle(SALOME_InteractiveObject)&, const std::list ); void LocalSelection( const Handle(SALOME_InteractiveObject)&, const int ); + void LocalSelection( const SALOME_ListIO& theIOList, const std::list ); void LocalSelection( const SALOME_ListIO& theIOList, const int ); void GlobalSelection( const int = GEOM_ALLOBJECTS, const bool = false ); void GlobalSelection( const TColStd_MapOfInteger&, const bool = false, const QList* = 0 ); diff --git a/src/GenerationGUI/GenerationGUI_FillingDlg.cxx b/src/GenerationGUI/GenerationGUI_FillingDlg.cxx index 141b9598f..e45cd85c6 100644 --- a/src/GenerationGUI/GenerationGUI_FillingDlg.cxx +++ b/src/GenerationGUI/GenerationGUI_FillingDlg.cxx @@ -105,7 +105,8 @@ void GenerationGUI_FillingDlg::Init() myEditCurrentArgument = GroupPoints->LineEdit1; GroupPoints->LineEdit1->setReadOnly(true); - globalSelection(GEOM_COMPOUND); + globalSelection(); + localSelection(GEOM::GEOM_Object::_nil(), TopAbs_COMPOUND ); int SpecificStep1 = 1; double SpecificStep2 = 0.0001; @@ -227,6 +228,7 @@ void GenerationGUI_FillingDlg::SetEditCurrentArgument() GroupPoints->LineEdit1->setFocus(); myEditCurrentArgument = GroupPoints->LineEdit1; globalSelection(GEOM_COMPOUND); + localSelection(GEOM::GEOM_Object::_nil(), TopAbs_COMPOUND ); this->SelectionIntoArgument(); } } @@ -240,7 +242,8 @@ void GenerationGUI_FillingDlg::ActivateThisDialog() GEOMBase_Skeleton::ActivateThisDialog(); connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(), SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - globalSelection(GEOM_COMPOUND); + globalSelection(GEOM_COMPOUND); + localSelection(GEOM::GEOM_Object::_nil(), TopAbs_COMPOUND ); processPreview(); } @@ -372,3 +375,12 @@ bool GenerationGUI_FillingDlg::execute(ObjectList& objects) return true; } + +//================================================================================= +// function : addSubshapesToStudy +// purpose : virtual method to add new SubObjects if local selection +//================================================================================= +void GenerationGUI_FillingDlg::addSubshapesToStudy() +{ + GEOMBase::PublishSubObject( myCompound.get() ); +} \ No newline at end of file diff --git a/src/GenerationGUI/GenerationGUI_FillingDlg.h b/src/GenerationGUI/GenerationGUI_FillingDlg.h index a6a828a04..650d048f3 100644 --- a/src/GenerationGUI/GenerationGUI_FillingDlg.h +++ b/src/GenerationGUI/GenerationGUI_FillingDlg.h @@ -49,6 +49,7 @@ protected: virtual GEOM::GEOM_IOperations_ptr createOperation(); virtual bool isValid( QString& ); virtual bool execute( ObjectList& ); + virtual void addSubshapesToStudy(); private: void Init(); diff --git a/src/MeasureGUI/MeasureGUI_AngleDlg.cxx b/src/MeasureGUI/MeasureGUI_AngleDlg.cxx index 9afe3b922..6241fbb38 100644 --- a/src/MeasureGUI/MeasureGUI_AngleDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_AngleDlg.cxx @@ -136,7 +136,10 @@ void MeasureGUI_AngleDlg::Init() // init variables myGrp->LineEdit1->setText(""); myGrp->LineEdit2->setText(""); - myObj = myObj2 = GEOM::GEOM_Object::_nil(); + myGrp->LineEdit1->setEnabled(true); + myGrp->LineEdit2->setEnabled(false); + myObj.nullify(); + myObj2.nullify(); mySelBtn = myGrp->PushButton1; mySelEdit = myGrp->LineEdit1; @@ -149,7 +152,7 @@ void MeasureGUI_AngleDlg::Init() connect(mySelEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed())); connect(mySelBtn2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - globalSelection(GEOM_LINE); + activateSelection(); MeasureGUI_Skeleton::Init(); } @@ -159,15 +162,7 @@ void MeasureGUI_AngleDlg::Init() //================================================================================= void MeasureGUI_AngleDlg::SelectionIntoArgument() { - LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr(); - SALOME_ListIO aSelList; - aSelMgr->selectedObjects(aSelList); - - GEOM::GEOM_Object_var aSelectedObject = GEOM::GEOM_Object::_nil(); - - if (aSelList.Extent() > 0) { - aSelectedObject = GEOMBase::ConvertIOinGEOMObject( aSelList.First() ); - } + GEOM::GeomObjPtr aSelectedObject = getSelected( TopAbs_EDGE ); // clear selection disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0); @@ -177,12 +172,12 @@ void MeasureGUI_AngleDlg::SelectionIntoArgument() if (myEditCurrentArgument == mySelEdit) { myObj = aSelectedObject; - if (!myObj->_is_nil() && myObj2->_is_nil()) + if (myObj && !myObj2) myGrp->PushButton2->click(); } else { myObj2 = aSelectedObject; - if (!myObj2->_is_nil() && myObj->_is_nil()) + if (myObj2 && !myObj) myGrp->PushButton1->click(); } @@ -195,8 +190,8 @@ void MeasureGUI_AngleDlg::SelectionIntoArgument() //================================================================================= void MeasureGUI_AngleDlg::processObject() { - myGrp->LineEdit1->setText(!myObj->_is_nil() ? GEOMBase::GetName(myObj ) : ""); - myGrp->LineEdit2->setText(!myObj2->_is_nil() ? GEOMBase::GetName(myObj2) : ""); + myGrp->LineEdit1->setText(myObj ? GEOMBase::GetName(myObj.get()) : ""); + myGrp->LineEdit2->setText(myObj2 ? GEOMBase::GetName(myObj2.get()) : ""); double anAngle = 0.; if (getParameters(anAngle)) { @@ -220,7 +215,7 @@ bool MeasureGUI_AngleDlg::getParameters (double& theAngle) if (isValid(msg)) { GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow( getOperation() ); try { - theAngle = anOper->GetAngle(myObj, myObj2); + theAngle = anOper->GetAngle(myObj.get(), myObj2.get()); } catch(const SALOME::SALOME_Exception& e) { SalomeApp_Tools::QtCatchCorbaException(e); @@ -262,7 +257,7 @@ void MeasureGUI_AngleDlg::SetEditCurrentArgument() } disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0); - globalSelection(GEOM_LINE); + activateSelection(); connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); @@ -304,10 +299,11 @@ void MeasureGUI_AngleDlg::LineEditReturnPressed() SALOME_Prs* MeasureGUI_AngleDlg::buildPrs() { double anAngle = 0.; + myGrp->LineEdit3->setText(""); SUIT_ViewWindow* vw = SUIT_Session::session()->activeApplication()->desktop()->activeWindow(); - if (myObj->_is_nil() || myObj2->_is_nil() || !getParameters(anAngle) || + if (!myObj || !myObj2 || !getParameters(anAngle) || vw->getViewManager()->getType() != OCCViewer_Viewer::Type()) return 0; @@ -315,8 +311,8 @@ SALOME_Prs* MeasureGUI_AngleDlg::buildPrs() try { OCC_CATCH_SIGNALS; TopoDS_Shape S1, S2; - if (GEOMBase::GetShape(myObj , S1, TopAbs_EDGE) && - GEOMBase::GetShape(myObj2, S2, TopAbs_EDGE)) { + if (GEOMBase::GetShape(myObj.get() , S1, TopAbs_EDGE) && + GEOMBase::GetShape(myObj2.get(), S2, TopAbs_EDGE)) { TopoDS_Edge anEdge1 = TopoDS::Edge(S1); TopoDS_Edge anEdge2 = TopoDS::Edge(S2); @@ -399,5 +395,15 @@ SALOME_Prs* MeasureGUI_AngleDlg::buildPrs() //================================================================================= bool MeasureGUI_AngleDlg::isValid (QString& msg) { - return MeasureGUI_Skeleton::isValid(msg) && !myObj2->_is_nil(); + return MeasureGUI_Skeleton::isValid(msg) && myObj2; +} + +//================================================================================= +// function : activateSelection() +// purpose : +//================================================================================= +void MeasureGUI_AngleDlg::activateSelection() +{ + globalSelection(GEOM_LINE); + localSelection(GEOM::GEOM_Object::_nil(), TopAbs_EDGE ); } diff --git a/src/MeasureGUI/MeasureGUI_AngleDlg.h b/src/MeasureGUI/MeasureGUI_AngleDlg.h index 46615265d..d12a22666 100644 --- a/src/MeasureGUI/MeasureGUI_AngleDlg.h +++ b/src/MeasureGUI/MeasureGUI_AngleDlg.h @@ -52,6 +52,7 @@ protected: private: void Init(); bool getParameters( double& ); + void activateSelection(); private: QLineEdit* myEditCurrentArgument; @@ -59,7 +60,7 @@ private: QPushButton* mySelBtn2; MeasureGUI_2Sel1LineEdit* myGrp; - GEOM::GEOM_Object_var myObj2; + GEOM::GeomObjPtr myObj2; }; #endif // MEASUREGUI_ANGLEDLG_H diff --git a/src/MeasureGUI/MeasureGUI_BndBoxDlg.cxx b/src/MeasureGUI/MeasureGUI_BndBoxDlg.cxx index 0da5051ba..436c4a003 100644 --- a/src/MeasureGUI/MeasureGUI_BndBoxDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_BndBoxDlg.cxx @@ -124,7 +124,7 @@ void MeasureGUI_BndBoxDlg::Init() this, SLOT(SelectionIntoArgument())); initName(tr("GEOM_BNDBOX")); - globalSelection(); + activateSelection(); SelectionIntoArgument(); } @@ -148,6 +148,7 @@ bool MeasureGUI_BndBoxDlg::ClickOnApply() return false; initName(); + activateSelection(); return true; } @@ -162,7 +163,7 @@ void MeasureGUI_BndBoxDlg::ActivateThisDialog() connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - globalSelection(); + activateSelection(); redisplayPreview(); } @@ -216,11 +217,11 @@ bool MeasureGUI_BndBoxDlg::getParameters (double& theXmin, double& theXmax, double& theYmin, double& theYmax, double& theZmin, double& theZmax) { - if (myObj->_is_nil()) + if (!myObj) return false; GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation()); - anOper->GetBoundingBox(myObj, true, theXmin, theXmax, theYmin, theYmax, theZmin, theZmax); + anOper->GetBoundingBox(myObj.get(), true, theXmin, theXmax, theYmin, theYmax, theZmin, theZmax); return anOper->IsDone(); } @@ -249,28 +250,19 @@ SALOME_Prs* MeasureGUI_BndBoxDlg::buildPrs() void MeasureGUI_BndBoxDlg::SelectionIntoArgument() { myEditCurrentArgument->setText(""); - myObj = GEOM::GEOM_Object::_nil(); + myObj.nullify(); - LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr(); - SALOME_ListIO aSelList; - aSelMgr->selectedObjects(aSelList); + QList aTypes; + aTypes << TopAbs_VERTEX << TopAbs_EDGE << TopAbs_WIRE << TopAbs_FACE << TopAbs_SHELL << TopAbs_SOLID << TopAbs_COMPSOLID << TopAbs_COMPOUND << TopAbs_SHAPE; + myObj = getSelected( aTypes ); - if (aSelList.Extent() != 1) { + if ( !myObj ) { processObject(); erasePreview(); return; } - GEOM::GEOM_Object_var aSelectedObject = GEOMBase::ConvertIOinGEOMObject(aSelList.First()); - - if (aSelectedObject->_is_nil()) { - processObject(); - erasePreview(); - return; - } - - myObj = aSelectedObject; - myEditCurrentArgument->setText(GEOMBase::GetName(myObj)); + myEditCurrentArgument->setText(GEOMBase::GetName(myObj.get())); processObject(); redisplayPreview(); } @@ -290,7 +282,7 @@ GEOM::GEOM_IOperations_ptr MeasureGUI_BndBoxDlg::createOperation() //================================================================================= bool MeasureGUI_BndBoxDlg::isValid (QString&) { - return !myObj->_is_nil(); + return myObj; } //================================================================================= @@ -300,7 +292,7 @@ bool MeasureGUI_BndBoxDlg::isValid (QString&) bool MeasureGUI_BndBoxDlg::execute (ObjectList& objects) { GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation()); - GEOM::GEOM_Object_var anObj = anOper->MakeBoundingBox(myObj, true); + GEOM::GEOM_Object_var anObj = anOper->MakeBoundingBox(myObj.get(), true); if (!anObj->_is_nil()) objects.push_back(anObj._retn()); @@ -308,6 +300,20 @@ bool MeasureGUI_BndBoxDlg::execute (ObjectList& objects) return true; } +//================================================================================= +// function : activateSelection() +// purpose : +//================================================================================= +void MeasureGUI_BndBoxDlg::activateSelection() +{ + globalSelection( GEOM_ALLSHAPES ); + std::list needTypes; + needTypes.push_back( TopAbs_SHAPE ), needTypes.push_back( TopAbs_VERTEX ), needTypes.push_back( TopAbs_EDGE ); + needTypes.push_back( TopAbs_WIRE ), needTypes.push_back( TopAbs_FACE ), needTypes.push_back( TopAbs_SHELL ); + needTypes.push_back( TopAbs_SOLID ), needTypes.push_back( TopAbs_COMPSOLID ), needTypes.push_back( TopAbs_COMPOUND ); + localSelection(GEOM::GEOM_Object::_nil(), needTypes ); +} + //================================================================================= // function : redisplayPreview() // purpose : @@ -337,3 +343,12 @@ void MeasureGUI_BndBoxDlg::redisplayPreview() catch (...) { } } + +//================================================================================= +// function : addSubshapeToStudy +// purpose : virtual method to add new SubObjects if local selection +//================================================================================= +void MeasureGUI_BndBoxDlg::addSubshapesToStudy() +{ + GEOMBase::PublishSubObject( myObj.get() ); +} diff --git a/src/MeasureGUI/MeasureGUI_BndBoxDlg.h b/src/MeasureGUI/MeasureGUI_BndBoxDlg.h index 1386f0c30..0a7a3d9a1 100644 --- a/src/MeasureGUI/MeasureGUI_BndBoxDlg.h +++ b/src/MeasureGUI/MeasureGUI_BndBoxDlg.h @@ -48,7 +48,7 @@ protected: virtual GEOM::GEOM_IOperations_ptr createOperation(); virtual bool isValid (QString&); virtual bool execute (ObjectList&); - + virtual void addSubshapesToStudy(); void redisplayPreview(); virtual void processObject(); virtual SALOME_Prs* buildPrs(); @@ -56,10 +56,11 @@ protected: private: void Init(); void enterEvent (QEvent*); + void activateSelection(); bool getParameters (double&, double&, double&, double&, double&, double&); private: - GEOM::GEOM_Object_var myObj; + GEOM::GeomObjPtr myObj; MeasureGUI_1Sel6LineEdit* myGrp; private slots: diff --git a/src/MeasureGUI/MeasureGUI_CenterMassDlg.cxx b/src/MeasureGUI/MeasureGUI_CenterMassDlg.cxx index 64a3f556e..8a6a2cc22 100644 --- a/src/MeasureGUI/MeasureGUI_CenterMassDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_CenterMassDlg.cxx @@ -120,10 +120,23 @@ void MeasureGUI_CenterMassDlg::Init() SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); initName( tr( "GEOM_POINT") ); - globalSelection(); + activateSelection(); SelectionIntoArgument(); } +//================================================================================= +// function : activateSelection +// purpose : +//================================================================================= +void MeasureGUI_CenterMassDlg::activateSelection() +{ + globalSelection( GEOM_ALLSHAPES ); + std::list needTypes; + needTypes.push_back( TopAbs_SHAPE ), needTypes.push_back( TopAbs_VERTEX ), needTypes.push_back( TopAbs_EDGE ); + needTypes.push_back( TopAbs_WIRE ), needTypes.push_back( TopAbs_FACE ), needTypes.push_back( TopAbs_SHELL ); + needTypes.push_back( TopAbs_SOLID ), needTypes.push_back( TopAbs_COMPSOLID ), needTypes.push_back( TopAbs_COMPOUND ); + localSelection(GEOM::GEOM_Object::_nil(), needTypes ); +} //================================================================================= // function : ClickOnOk() @@ -146,6 +159,7 @@ bool MeasureGUI_CenterMassDlg::ClickOnApply() return false; initName(); + activateSelection(); return true; // myMeasureGUI->MakeCDGAndDisplay( myGeomShape ); @@ -159,26 +173,17 @@ bool MeasureGUI_CenterMassDlg::ClickOnApply() void MeasureGUI_CenterMassDlg::SelectionIntoArgument() { erasePreview(); - myObj = GEOM::GEOM_Object::_nil(); - - LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr(); - SALOME_ListIO aSelList; - aSelMgr->selectedObjects(aSelList); - - if (aSelList.Extent() != 1) { - processObject(); - return; - } - GEOM::GEOM_Object_var aSelectedObject = - GEOMBase::ConvertIOinGEOMObject( aSelList.First() ); + myObj.nullify(); + QList aTypes; + aTypes << TopAbs_VERTEX << TopAbs_EDGE << TopAbs_WIRE << TopAbs_FACE << TopAbs_SHELL << TopAbs_SOLID << TopAbs_COMPSOLID << TopAbs_COMPOUND << TopAbs_SHAPE; + myObj = getSelected( aTypes ); - if ( aSelectedObject->_is_nil() ) { + if ( !myObj ) { processObject(); return; } - myObj = aSelectedObject; processObject(); displayPreview(true); } @@ -220,7 +225,7 @@ void MeasureGUI_CenterMassDlg::ActivateThisDialog() connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), SIGNAL(currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); - globalSelection(); + activateSelection(); displayPreview(true); } @@ -230,7 +235,7 @@ void MeasureGUI_CenterMassDlg::ActivateThisDialog() //================================================================================= void MeasureGUI_CenterMassDlg::processObject() { - if ( myObj->_is_nil() ) { + if ( !myObj ) { myGrp->LineEdit1->setText( "" ); myGrp->LineEdit2->setText( "" ); myGrp->LineEdit3->setText( "" ); @@ -242,7 +247,7 @@ void MeasureGUI_CenterMassDlg::processObject() getParameters( x, y, z ); - myGrp->LineEdit1->setText( GEOMBase::GetName( myObj ) ); + myGrp->LineEdit1->setText( GEOMBase::GetName( myObj.get() ) ); SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); int aPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 ); @@ -280,7 +285,7 @@ GEOM::GEOM_IOperations_ptr MeasureGUI_CenterMassDlg::createOperation() //================================================================================= bool MeasureGUI_CenterMassDlg::isValid( QString& ) { - return !myObj->_is_nil(); + return myObj; } //================================================================================= @@ -289,12 +294,12 @@ bool MeasureGUI_CenterMassDlg::isValid( QString& ) //================================================================================= bool MeasureGUI_CenterMassDlg::getParameters( double& theX, double& theY, double& theZ ) { - if ( myObj->_is_nil() ) + if ( !myObj ) return false; else { try { GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow( getOperation() ); - GEOM::GEOM_Object_var anObj = anOper->GetCentreOfMass( myObj ); + GEOM::GEOM_Object_var anObj = anOper->GetCentreOfMass( myObj.get() ); if ( !anOper->IsDone() ) return false; @@ -328,10 +333,19 @@ bool MeasureGUI_CenterMassDlg::getParameters( double& theX, double& theY, double bool MeasureGUI_CenterMassDlg::execute( ObjectList& objects ) { GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow( getOperation() ); - GEOM::GEOM_Object_var anObj = anOper->GetCentreOfMass( myObj ); + GEOM::GEOM_Object_var anObj = anOper->GetCentreOfMass( myObj.get() ); if ( !anObj->_is_nil() ) objects.push_back( anObj._retn() ); return true; } + +//================================================================================= +// function : addSubshapeToStudy +// purpose : virtual method to add new SubObjects if local selection +//================================================================================= +void MeasureGUI_CenterMassDlg::addSubshapesToStudy() +{ + GEOMBase::PublishSubObject( myObj.get() ); +} diff --git a/src/MeasureGUI/MeasureGUI_CenterMassDlg.h b/src/MeasureGUI/MeasureGUI_CenterMassDlg.h index f279c6c33..ce1bbf335 100644 --- a/src/MeasureGUI/MeasureGUI_CenterMassDlg.h +++ b/src/MeasureGUI/MeasureGUI_CenterMassDlg.h @@ -47,6 +47,7 @@ protected: // redefined from GEOMBase_Helper virtual GEOM::GEOM_IOperations_ptr createOperation(); virtual bool isValid( QString& ); + virtual void addSubshapesToStudy(); virtual bool execute( ObjectList& ); private slots: @@ -61,10 +62,11 @@ private: void Init(); void enterEvent( QEvent* ); void processObject(); + void activateSelection(); bool getParameters( double&, double&, double& ); private: - GEOM::GEOM_Object_var myObj; + GEOM::GeomObjPtr myObj; MeasureGUI_1Sel3LineEdit* myGrp; }; diff --git a/src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.cxx b/src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.cxx index 8debf294c..e8a250b60 100644 --- a/src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_CheckSelfIntersectionsDlg.cxx @@ -125,7 +125,7 @@ void MeasureGUI_CheckSelfIntersectionsDlg::processObject() myGrp->ListBox2->clear(); erasePreview(); - if (myObj->_is_nil()) + if (!myObj) return; QString aMsg (""); @@ -133,7 +133,7 @@ void MeasureGUI_CheckSelfIntersectionsDlg::processObject() bool isGood = false, isFailed = false; int nbPairs = 0; try { - isGood = anOper->CheckSelfIntersections(myObj, myInters); + isGood = anOper->CheckSelfIntersections(myObj.get(), myInters); nbPairs = myInters->length()/2; if (nbPairs*2 != myInters->length()) { isFailed = true; @@ -197,7 +197,7 @@ void MeasureGUI_CheckSelfIntersectionsDlg::onErrorsListSelectionChanged() QStringList aSubShapeList; TopoDS_Shape aSelShape; - if (!myObj->_is_nil() && GEOMBase::GetShape(myObj, aSelShape)) { + if (myObj && GEOMBase::GetShape(myObj.get(), aSelShape)) { TopTools_IndexedMapOfShape anIndices; TopExp::MapShapes(aSelShape, anIndices); @@ -239,7 +239,7 @@ void MeasureGUI_CheckSelfIntersectionsDlg::onSubShapesListSelectionChanged() TopoDS_Shape aSelShape; TopoDS_Shape aSubShape; TopTools_IndexedMapOfShape anIndices; - if (!myObj->_is_nil() && GEOMBase::GetShape(myObj, aSelShape)) { + if (myObj && GEOMBase::GetShape(myObj.get(), aSelShape)) { SALOME_Prs* aPrs = 0; TopExp::MapShapes(aSelShape, anIndices); QList::iterator it; diff --git a/src/MeasureGUI/MeasureGUI_DistanceDlg.cxx b/src/MeasureGUI/MeasureGUI_DistanceDlg.cxx index 4fcbc5796..64e58fb08 100644 --- a/src/MeasureGUI/MeasureGUI_DistanceDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_DistanceDlg.cxx @@ -128,6 +128,12 @@ void MeasureGUI_DistanceDlg::Init() myEditCurrentArgument = myGrp->LineEdit1; myDbls = new GEOM::ListOfDouble(); + myGrp->LineEdit1->setEnabled(true); + myGrp->LineEdit2->setEnabled(false); + + myObj1.nullify(); + myObj2.nullify(); + // signals and slots connections connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk())); connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply())); @@ -140,7 +146,7 @@ void MeasureGUI_DistanceDlg::Init() connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - globalSelection(); + activateSelection(); SelectionIntoArgument(); } @@ -164,6 +170,7 @@ bool MeasureGUI_DistanceDlg::ClickOnApply() return false; initName(); + activateSelection(); return true; } @@ -178,7 +185,7 @@ void MeasureGUI_DistanceDlg::ActivateThisDialog() connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - globalSelection(); + activateSelection(); redisplayPreview(); } @@ -230,15 +237,9 @@ void MeasureGUI_DistanceDlg::SolutionSelected (int i) //================================================================================= void MeasureGUI_DistanceDlg::SelectionIntoArgument() { - LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr(); - SALOME_ListIO aSelList; - aSelMgr->selectedObjects(aSelList); - - GEOM::GEOM_Object_var aSelectedObject = GEOM::GEOM_Object::_nil(); - - if (aSelList.Extent() > 0) { - aSelectedObject = GEOMBase::ConvertIOinGEOMObject(aSelList.First()); - } + QList aTypes; + aTypes << TopAbs_VERTEX << TopAbs_EDGE << TopAbs_WIRE << TopAbs_FACE << TopAbs_SHELL << TopAbs_SOLID << TopAbs_COMPSOLID << TopAbs_COMPOUND << TopAbs_SHAPE; + GEOM::GeomObjPtr aSelectedObject = getSelected( aTypes ); // clear selection disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0); @@ -248,12 +249,12 @@ void MeasureGUI_DistanceDlg::SelectionIntoArgument() if (myEditCurrentArgument == myGrp->LineEdit1) { myObj1 = aSelectedObject; - if (!myObj1->_is_nil() && myObj2->_is_nil()) + if (myObj1 && !myObj2) myGrp->PushButton2->click(); } else { myObj2 = aSelectedObject; - if (!myObj2->_is_nil() && myObj1->_is_nil()) + if (myObj2 && !myObj1) myGrp->PushButton1->click(); } @@ -297,8 +298,8 @@ void MeasureGUI_DistanceDlg::SetEditCurrentArgument() //================================================================================= void MeasureGUI_DistanceDlg::processObject() { - myGrp->LineEdit1->setText(!myObj1->_is_nil() ? GEOMBase::GetName(myObj1) : ""); - myGrp->LineEdit2->setText(!myObj2->_is_nil() ? GEOMBase::GetName(myObj2) : ""); + myGrp->LineEdit1->setText(myObj1 ? GEOMBase::GetName(myObj1.get()) : ""); + myGrp->LineEdit2->setText(myObj2 ? GEOMBase::GetName(myObj2.get()) : ""); myGrp->ComboBox1->clear(); myDbls->length(0); @@ -311,7 +312,7 @@ void MeasureGUI_DistanceDlg::processObject() GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation()); try { - nbSols = anOper->ClosestPoints(myObj1, myObj2, myDbls); + nbSols = anOper->ClosestPoints(myObj1.get(), myObj2.get(), myDbls); } catch (const SALOME::SALOME_Exception& e) { SalomeApp_Tools::QtCatchCorbaException(e); @@ -340,7 +341,7 @@ SALOME_Prs* MeasureGUI_DistanceDlg::buildPrs() int currSol = myGrp->ComboBox1->currentIndex(); - if (myObj1->_is_nil() || myObj2->_is_nil() || + if (!myObj1 || !myObj2 || currSol == -1 || (currSol+1)*6 > myDbls->length() || vw->getViewManager()->getType() != OCCViewer_Viewer::Type()) return 0; @@ -424,7 +425,7 @@ GEOM::GEOM_IOperations_ptr MeasureGUI_DistanceDlg::createOperation() //================================================================================= bool MeasureGUI_DistanceDlg::isValid (QString& msg) { - return !myObj1->_is_nil() && !myObj2->_is_nil(); + return myObj1 && myObj2; } //================================================================================= @@ -437,7 +438,7 @@ bool MeasureGUI_DistanceDlg::execute (ObjectList& objects) GEOM::GEOM_IBasicOperations_var aBasicOper = getGeomEngine()->GetIBasicOperations(getStudyId()); GEOM::ListOfDouble_var aDbls; - int nbSols = anOper->ClosestPoints(myObj1, myObj2, aDbls); + int nbSols = anOper->ClosestPoints(myObj1.get(), myObj2.get(), aDbls); if (anOper->IsDone()) { bool doPublishAll = true; @@ -482,6 +483,20 @@ bool MeasureGUI_DistanceDlg::execute (ObjectList& objects) return true; } +//================================================================================= +// function : activateSelection() +// purpose : +//================================================================================= +void MeasureGUI_DistanceDlg::activateSelection() +{ + globalSelection( GEOM_ALLSHAPES ); + std::list needTypes; + needTypes.push_back( TopAbs_SHAPE ), needTypes.push_back( TopAbs_VERTEX ), needTypes.push_back( TopAbs_EDGE ); + needTypes.push_back( TopAbs_WIRE ), needTypes.push_back( TopAbs_FACE ), needTypes.push_back( TopAbs_SHELL ); + needTypes.push_back( TopAbs_SOLID ), needTypes.push_back( TopAbs_COMPSOLID ), needTypes.push_back( TopAbs_COMPOUND ); + localSelection(GEOM::GEOM_Object::_nil(), needTypes ); +} + //================================================================================= // function : redisplayPreview() // purpose : @@ -517,11 +532,21 @@ void MeasureGUI_DistanceDlg::redisplayPreview() QString MeasureGUI_DistanceDlg::getNewObjectName (int currObj) const { QString aName = tr("GEOM_MINDIST_NAME") + QString("_%1_").arg((currObj+1)/2); - aName += GEOMBase::GetName(currObj%2 ? myObj1 : myObj2); + aName += GEOMBase::GetName(currObj%2 ? myObj1.get() : myObj2.get()); return aName; } +//================================================================================= +// function : addSubshapeToStudy +// purpose : virtual method to add new SubObjects if local selection +//================================================================================= +void MeasureGUI_DistanceDlg::addSubshapesToStudy() +{ + GEOMBase::PublishSubObject( myObj1.get() ); + GEOMBase::PublishSubObject( myObj2.get() ); +} + //================================================================================= // function : MeasureGUI_DistanceGroup // purpose : diff --git a/src/MeasureGUI/MeasureGUI_DistanceDlg.h b/src/MeasureGUI/MeasureGUI_DistanceDlg.h index 04c9ed820..9b0b35d26 100644 --- a/src/MeasureGUI/MeasureGUI_DistanceDlg.h +++ b/src/MeasureGUI/MeasureGUI_DistanceDlg.h @@ -99,6 +99,7 @@ protected: virtual GEOM::GEOM_IOperations_ptr createOperation(); virtual bool isValid (QString&); virtual bool execute (ObjectList&); + virtual void addSubshapesToStudy(); virtual QString getNewObjectName (int CurrObj = -1) const; void redisplayPreview(); @@ -108,10 +109,11 @@ protected: private: void Init(); void enterEvent (QEvent*); + void activateSelection(); private: - GEOM::GEOM_Object_var myObj1; - GEOM::GEOM_Object_var myObj2; + GEOM::GeomObjPtr myObj1; + GEOM::GeomObjPtr myObj2; MeasureGUI_DistanceGroup* myGrp; GEOM::ListOfDouble_var myDbls; diff --git a/src/MeasureGUI/MeasureGUI_InertiaDlg.cxx b/src/MeasureGUI/MeasureGUI_InertiaDlg.cxx index 47a240e48..9d529f2f9 100644 --- a/src/MeasureGUI/MeasureGUI_InertiaDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_InertiaDlg.cxx @@ -114,6 +114,19 @@ void MeasureGUI_InertiaDlg::Init() MeasureGUI_Skeleton::Init(); } +//================================================================================= +// function : activateSelection() +// purpose : +//================================================================================= +void MeasureGUI_InertiaDlg::activateSelection() +{ + MeasureGUI_Skeleton::activateSelection(); + std::list needTypes; + needTypes.push_back( TopAbs_VERTEX ), needTypes.push_back( TopAbs_EDGE ), needTypes.push_back( TopAbs_WIRE ), needTypes.push_back( TopAbs_FACE ), needTypes.push_back( TopAbs_SHELL ), needTypes.push_back( TopAbs_SOLID ), needTypes.push_back( TopAbs_COMPOUND ); + localSelection(GEOM::GEOM_Object::_nil(), needTypes ); +} + + //================================================================================= // function : processObject // purpose : @@ -168,13 +181,13 @@ void MeasureGUI_InertiaDlg::processObject() bool MeasureGUI_InertiaDlg::getParameters( gp_Mat& I, gp_XYZ& theIXYZ ) { - if ( myObj->_is_nil() ) + if ( !myObj ) return false; else { GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow( getOperation() ); try { double x, y, z; - anOper->GetInertia( myObj, + anOper->GetInertia( myObj.get(), I( 1, 1 ), I( 1, 2 ), I( 1, 3 ), I( 2, 1 ), I( 2, 2 ), I( 2, 3 ), I( 3, 1 ), I( 3, 2 ), I( 3, 3 ), @@ -190,3 +203,22 @@ bool MeasureGUI_InertiaDlg::getParameters( gp_Mat& I, return anOper->IsDone(); } } + +void MeasureGUI_InertiaDlg::SelectionIntoArgument() +{ + myObj.nullify(); + QList aTypes; + aTypes << TopAbs_VERTEX << TopAbs_EDGE << TopAbs_WIRE << TopAbs_FACE << TopAbs_SHELL << TopAbs_SOLID << TopAbs_COMPSOLID << TopAbs_COMPOUND << TopAbs_SHAPE; + myObj = getSelected( aTypes ); + + if (!myObj) { + mySelEdit->setText(""); + processObject(); + erasePreview(); + return; + } + + mySelEdit->setText(GEOMBase::GetName(myObj.get())); + processObject(); + redisplayPreview(); +} \ No newline at end of file diff --git a/src/MeasureGUI/MeasureGUI_InertiaDlg.h b/src/MeasureGUI/MeasureGUI_InertiaDlg.h index 48fa73f3e..79712359b 100644 --- a/src/MeasureGUI/MeasureGUI_InertiaDlg.h +++ b/src/MeasureGUI/MeasureGUI_InertiaDlg.h @@ -49,6 +49,8 @@ public: protected: // redefined from GEOMBase_Helper and MeasureGUI_Skeleton virtual void processObject(); + virtual void activateSelection(); + virtual void SelectionIntoArgument(); private: void Init(); diff --git a/src/MeasureGUI/MeasureGUI_MaxToleranceDlg.cxx b/src/MeasureGUI/MeasureGUI_MaxToleranceDlg.cxx index 0e34b7650..612ac65b8 100644 --- a/src/MeasureGUI/MeasureGUI_MaxToleranceDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_MaxToleranceDlg.cxx @@ -26,6 +26,7 @@ // #include "MeasureGUI_MaxToleranceDlg.h" #include "MeasureGUI_Widgets.h" +#include #include "DlgRef.h" #include @@ -163,7 +164,7 @@ bool MeasureGUI_MaxToleranceDlg::getParameters( double& theMinFaceToler, else { GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow( getOperation() ); try { - anOper->GetTolerance( myObj, + anOper->GetTolerance( myObj.get(), theMinFaceToler, theMaxFaceToler, theMinEdgeToler, theMaxEdgeToler, theMinVertexToler, theMaxVertexToler ); } @@ -175,3 +176,35 @@ bool MeasureGUI_MaxToleranceDlg::getParameters( double& theMinFaceToler, return anOper->IsDone(); } } + +//================================================================================= +// function : activateSelection() +// purpose : +//================================================================================= +void MeasureGUI_MaxToleranceDlg::activateSelection() +{ + globalSelection( GEOM_ALLSHAPES ); + std::list needTypes; + needTypes.push_back( TopAbs_SHAPE ), needTypes.push_back( TopAbs_EDGE ); + needTypes.push_back( TopAbs_WIRE ), needTypes.push_back( TopAbs_FACE ), needTypes.push_back( TopAbs_SHELL ); + needTypes.push_back( TopAbs_SOLID ), needTypes.push_back( TopAbs_COMPSOLID ), needTypes.push_back( TopAbs_COMPOUND ); localSelection(GEOM::GEOM_Object::_nil(), needTypes ); +} + +void MeasureGUI_MaxToleranceDlg::SelectionIntoArgument() +{ + myObj.nullify(); + QList aTypes; + aTypes << TopAbs_EDGE << TopAbs_WIRE << TopAbs_FACE << TopAbs_SHELL << TopAbs_SOLID << TopAbs_COMPSOLID << TopAbs_COMPOUND << TopAbs_SHAPE; + myObj = getSelected( aTypes ); + + if (!myObj) { + mySelEdit->setText(""); + processObject(); + erasePreview(); + return; + } + + mySelEdit->setText(GEOMBase::GetName(myObj.get())); + processObject(); + redisplayPreview(); +} diff --git a/src/MeasureGUI/MeasureGUI_MaxToleranceDlg.h b/src/MeasureGUI/MeasureGUI_MaxToleranceDlg.h index c225d6efa..69113b314 100644 --- a/src/MeasureGUI/MeasureGUI_MaxToleranceDlg.h +++ b/src/MeasureGUI/MeasureGUI_MaxToleranceDlg.h @@ -46,9 +46,11 @@ public: protected: // redefined from GEOMBase_Helper and MeasureGUI_Skeleton virtual void processObject(); + virtual void SelectionIntoArgument(); private: void Init(); + void activateSelection(); bool getParameters( double&, double&, double&, double&, double&, double& ); diff --git a/src/MeasureGUI/MeasureGUI_PointDlg.cxx b/src/MeasureGUI/MeasureGUI_PointDlg.cxx index e21d5252f..7f4c89798 100644 --- a/src/MeasureGUI/MeasureGUI_PointDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_PointDlg.cxx @@ -122,7 +122,7 @@ void MeasureGUI_PointDlg::activateSelection() void MeasureGUI_PointDlg::SelectionIntoArgument() { try { - myObj = GEOM::GEOM_Object::_nil(); + myObj.nullify(); myGrp->LineEdit1->setText( "" ); myGrp->LineEdit2->setText( "" ); myGrp->LineEdit3->setText( "" ); @@ -135,23 +135,20 @@ void MeasureGUI_PointDlg::SelectionIntoArgument() if (aSelList.Extent() < 1) return; - GEOM::GEOM_Object_var aSelectedObject = - GEOMBase::ConvertIOinGEOMObject( aSelList.First() ); + myObj = GEOMBase::ConvertIOinGEOMObject( aSelList.First() ); - if ( aSelectedObject->_is_nil() ) + if ( !myObj ) return; - myObj = aSelectedObject; - TColStd_IndexedMapOfInteger anIndexes; aSelMgr->GetIndexes(aSelList.First(), anIndexes); TopoDS_Shape aShape; - if ( anIndexes.Extent() > 1 || !GEOMBase::GetShape( myObj, aShape ) || aShape.IsNull() ) + if ( anIndexes.Extent() > 1 || !GEOMBase::GetShape( myObj.get(), aShape ) || aShape.IsNull() ) return; TopoDS_Vertex aPoint; - QString aName = GEOMBase::GetName( myObj ); + QString aName = GEOMBase::GetName( myObj.get() ); if ( anIndexes.Extent() == 0 ) { if ( aShape.ShapeType() == TopAbs_VERTEX ) aPoint = TopoDS::Vertex( aShape ); @@ -180,7 +177,7 @@ void MeasureGUI_PointDlg::SelectionIntoArgument() } catch( ... ) { - myObj = GEOM::GEOM_Object::_nil(); + myObj.nullify(); myGrp->LineEdit1->setText( "" ); myGrp->LineEdit2->setText( "" ); myGrp->LineEdit3->setText( "" ); diff --git a/src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx b/src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx index 9e434c969..c3ace18a2 100644 --- a/src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx @@ -122,8 +122,30 @@ void MeasureGUI_PropertiesDlg::activateSelection() } globalSelection( aTypes ); + + std::list needTypes; + needTypes.push_back( TopAbs_EDGE ), needTypes.push_back( TopAbs_WIRE ), needTypes.push_back( TopAbs_FACE ), needTypes.push_back( TopAbs_SHELL ), needTypes.push_back( TopAbs_SOLID ), needTypes.push_back( TopAbs_COMPOUND ); + localSelection(GEOM::GEOM_Object::_nil(), needTypes ); } +void MeasureGUI_PropertiesDlg::SelectionIntoArgument() +{ + myObj.nullify(); + QList aTypes; + aTypes << TopAbs_EDGE << TopAbs_WIRE << TopAbs_FACE << TopAbs_SHELL << TopAbs_SOLID << TopAbs_COMPOUND; + myObj = getSelected( aTypes ); + + if (!myObj) { + mySelEdit->setText(""); + processObject(); + erasePreview(); + return; + } + + mySelEdit->setText(GEOMBase::GetName(myObj.get())); + processObject(); + redisplayPreview(); +} //================================================================================= // function : processObject // purpose : @@ -155,12 +177,12 @@ bool MeasureGUI_PropertiesDlg::getParameters( double& theLength, double& theArea, double& theVolume ) { - if ( myObj->_is_nil() ) + if ( !myObj ) return false; else { GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow( getOperation() ); try { - anOper->GetBasicProperties( myObj, theLength, theArea, theVolume ); + anOper->GetBasicProperties( myObj.get(), theLength, theArea, theVolume ); } catch( const SALOME::SALOME_Exception& e ) { SalomeApp_Tools::QtCatchCorbaException( e ); @@ -180,8 +202,8 @@ SALOME_Prs* MeasureGUI_PropertiesDlg::buildPrs() SALOME_Prs* prs = 0; TopoDS_Shape shape; - if ( GEOMBase::GetShape( myObj, shape, TopAbs_EDGE ) && - getDisplayer()->IsDisplayed( GEOMBase::GetEntry(myObj) ) ) { + if ( GEOMBase::GetShape( myObj.get(), shape, TopAbs_EDGE ) && + getDisplayer()->IsDisplayed( GEOMBase::GetEntry(myObj.get()) ) ) { shape = GEOMBase::CreateArrowForLinearEdge( shape ); if ( !shape.IsNull() ) prs = getDisplayer()->BuildPrs( shape ); diff --git a/src/MeasureGUI/MeasureGUI_PropertiesDlg.h b/src/MeasureGUI/MeasureGUI_PropertiesDlg.h index 4911b4c18..41cf932fb 100644 --- a/src/MeasureGUI/MeasureGUI_PropertiesDlg.h +++ b/src/MeasureGUI/MeasureGUI_PropertiesDlg.h @@ -48,6 +48,7 @@ protected: // redefined from GEOMBase_Helper and MeasureGUI_Skeleton virtual void processObject(); virtual void activateSelection(); + virtual void SelectionIntoArgument(); virtual SALOME_Prs* buildPrs(); private: diff --git a/src/MeasureGUI/MeasureGUI_Skeleton.cxx b/src/MeasureGUI/MeasureGUI_Skeleton.cxx index 1a5943a07..b254c4f9c 100644 --- a/src/MeasureGUI/MeasureGUI_Skeleton.cxx +++ b/src/MeasureGUI/MeasureGUI_Skeleton.cxx @@ -245,27 +245,24 @@ void MeasureGUI_Skeleton::SetEditCurrentArgument() //================================================================================= void MeasureGUI_Skeleton::SelectionIntoArgument() { - myObj = GEOM::GEOM_Object::_nil(); + myObj.nullify(); LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr(); SALOME_ListIO aSelList; aSelMgr->selectedObjects(aSelList); - GEOM::GEOM_Object_var aSelectedObject = GEOM::GEOM_Object::_nil(); - if (aSelList.Extent() > 0) { - aSelectedObject = GEOMBase::ConvertIOinGEOMObject( aSelList.First() ); + myObj = GEOMBase::ConvertIOinGEOMObject( aSelList.First() ); } - if (aSelectedObject->_is_nil()) { + if ( !myObj ) { mySelEdit->setText(""); processObject(); erasePreview(); return; } - myObj = aSelectedObject; - mySelEdit->setText(GEOMBase::GetName(myObj)); + mySelEdit->setText(GEOMBase::GetName(myObj.get())); processObject(); redisplayPreview(); } @@ -356,7 +353,7 @@ void MeasureGUI_Skeleton::activateSelection() //================================================================================= bool MeasureGUI_Skeleton::isValid( QString& ) { - return !myObj->_is_nil(); + return myObj; } //================================================================ diff --git a/src/MeasureGUI/MeasureGUI_Skeleton.h b/src/MeasureGUI/MeasureGUI_Skeleton.h index a12b40bf3..fa5ceef21 100644 --- a/src/MeasureGUI/MeasureGUI_Skeleton.h +++ b/src/MeasureGUI/MeasureGUI_Skeleton.h @@ -77,7 +77,7 @@ protected: protected: QPushButton* mySelBtn; QLineEdit* mySelEdit; - GEOM::GEOM_Object_var myObj; + GEOM::GeomObjPtr myObj; GeometryGUI* myGeomGUI; GEOM_Displayer* myDisplayer; diff --git a/src/MeasureGUI/MeasureGUI_WhatisDlg.cxx b/src/MeasureGUI/MeasureGUI_WhatisDlg.cxx index 1a6e03c8d..f9d2ea902 100644 --- a/src/MeasureGUI/MeasureGUI_WhatisDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_WhatisDlg.cxx @@ -202,13 +202,13 @@ void MeasureGUI_WhatisDlg::ClickOnProperties() //================================================================================= bool MeasureGUI_WhatisDlg::getParameters( QString& theText ) { - if ( myObj->_is_nil() ) + if ( !myObj ) return false; GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow( getOperation() ); try { - theText = anOper->WhatIs( myObj ); + theText = anOper->WhatIs( myObj.get() ); } catch( const SALOME::SALOME_Exception& e ) { @@ -231,7 +231,7 @@ QString MeasureGUI_WhatisDlg::getKindOfShape( QString& theParameters ) SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); int aLenPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 ); - if ( myObj->_is_nil() ) + if ( !myObj ) return aKindStr; GEOM::GEOM_IKindOfShape::shape_kind aKind; @@ -242,7 +242,7 @@ QString MeasureGUI_WhatisDlg::getKindOfShape( QString& theParameters ) try { - aKind = anOper->KindOfShape( myObj, anInts, aDbls ); + aKind = anOper->KindOfShape( myObj.get(), anInts, aDbls ); } catch( const SALOME::SALOME_Exception& e ) { SalomeApp_Tools::QtCatchCorbaException( e ); -- 2.39.2