]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
0022765: [EDF] Improvement of local selection mechanism
authorana <ana@opencascade.com>
Wed, 19 Nov 2014 12:40:00 +0000 (15:40 +0300)
committervsr <vsr@opencascade.com>
Thu, 4 Dec 2014 13:19:14 +0000 (16:19 +0300)
44 files changed:
doc/salome/gui/GEOM/images/point4.png
doc/salome/gui/GEOM/input/angle.doc
doc/salome/gui/GEOM/input/basic_prop.doc
doc/salome/gui/GEOM/input/bounding_box.doc
doc/salome/gui/GEOM/input/center_mass.doc
doc/salome/gui/GEOM/input/creating_point.doc
doc/salome/gui/GEOM/input/inertia.doc
doc/salome/gui/GEOM/input/min_distance.doc
doc/salome/gui/GEOM/input/projection_operation.doc
doc/salome/gui/GEOM/input/section_operation.doc
doc/salome/gui/GEOM/input/tolerance.doc
doc/salome/gui/GEOM/input/whatis.doc
src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx
src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h
src/BasicGUI/BasicGUI_PointDlg.cxx
src/BasicGUI/BasicGUI_PointDlg.h
src/BooleanGUI/BooleanGUI_Dialog.cxx
src/BooleanGUI/BooleanGUI_Dialog.h
src/GEOMBase/GEOMBase_Helper.cxx
src/GEOMBase/GEOMBase_Helper.h
src/GEOMGUI/GEOM_Displayer.cxx
src/GEOMGUI/GEOM_Displayer.h
src/GenerationGUI/GenerationGUI_FillingDlg.cxx
src/GenerationGUI/GenerationGUI_FillingDlg.h
src/MeasureGUI/MeasureGUI_AngleDlg.cxx
src/MeasureGUI/MeasureGUI_AngleDlg.h
src/MeasureGUI/MeasureGUI_BndBoxDlg.cxx
src/MeasureGUI/MeasureGUI_BndBoxDlg.h
src/MeasureGUI/MeasureGUI_CenterMassDlg.cxx
src/MeasureGUI/MeasureGUI_CenterMassDlg.h
src/MeasureGUI/MeasureGUI_DistanceDlg.cxx
src/MeasureGUI/MeasureGUI_DistanceDlg.h
src/MeasureGUI/MeasureGUI_InertiaDlg.cxx
src/MeasureGUI/MeasureGUI_InertiaDlg.h
src/MeasureGUI/MeasureGUI_MaxToleranceDlg.cxx
src/MeasureGUI/MeasureGUI_MaxToleranceDlg.h
src/MeasureGUI/MeasureGUI_PointDlg.cxx
src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx
src/MeasureGUI/MeasureGUI_PropertiesDlg.h
src/MeasureGUI/MeasureGUI_Skeleton.cxx
src/MeasureGUI/MeasureGUI_Skeleton.h
src/MeasureGUI/MeasureGUI_WhatisDlg.cxx
src/MeasureGUI/MeasureGUI_WhatisDlg.h
src/TransformationGUI/TransformationGUI_ProjectionDlg.cxx

index dc3e08641294a28f28cc5761d7cae25718d471f4..3be67dbca1f2a8cea42414df116ccffe2a007fe5 100755 (executable)
Binary files a/doc/salome/gui/GEOM/images/point4.png and b/doc/salome/gui/GEOM/images/point4.png differ
index 0a3e46b7d79d445bdbcf65584a6b4646e2214c3a..5ceffbb2479b200d2e73edbf5a9f79fa147d0f69 100644 (file)
@@ -8,7 +8,15 @@ This operation returns the angle in degrees between two lines or linear edges.
 
 If both objects are <b>vectors</b>, the angle is computed in accordance with their orientations, otherwise the minimum angle is computed.
 
-\n <b>TUI Command:</b> <em>geompy.GetAngle(shape1, shape2),</em> where
+\note This dialog supports navigation through the selectable objects (in OCC 3D viewer only):
+- Scroll mouse wheel with pressed \em Ctrl key or press \em "S", \em "P" keys when input focus is
+in the viewer to navigate between selectable objects.
+- Press left mouse button to select an appropriate object to the dialog box.
+.
+For more details, please refer to the \em "Functionality common for OCC and VTK viewers" chapter
+of the GUI module's documentation.
+
+<b>TUI Command:</b> <em>geompy.GetAngle(shape1, shape2),</em> where
 Shape1 and Shape2 are shapes between which the angle is computed. 
 Another TUI command is <em>geompy.GetAngleRadians(shape1,shape2),</em> 
 which returns the value of angle in radians.
index 05b539e0c3e540fa8c0818ffe7910105924dc863..4210731ca7509391e0717181c430a1fb75337a54 100644 (file)
@@ -7,7 +7,15 @@ geometrical object.
 
 \image html neo-basicprop.png
 
-\n<b>TUI Command:</b> <em>geompy.BasicProperties(Shape),</em> where
+\note This dialog supports navigation through the selectable objects (in OCC 3D viewer only):
+- Scroll mouse wheel with pressed \em Ctrl key or press \em "S", \em "P" keys when input focus is
+in the viewer to navigate between selectable objects.
+- Press left mouse button to select an appropriate object to the dialog box.
+.
+For more details, please refer to the \em "Functionality common for OCC and VTK viewers" chapter
+of the GUI module's documentation.
+
+<b>TUI Command:</b> <em>geompy.BasicProperties(Shape),</em> where
 \em Shape is a shape whose properties are inquired.
 
 See also a \ref tui_basic_properties_page "TUI example".
index 5d963b0976981c13f36232ecca67df8a8565918d..a4b60bdd799fb62785aeaedbd0ed37cc5e0af492 100644 (file)
@@ -10,7 +10,15 @@ The coordinates of two corners of its bounding box are shown in the table.
 
 Press \b Apply or <b>Apply and Close</b> button to publish the bounding \b Box in the study. 
 
-\n <b>TUI Commands:</b> <em>[Xmin,Xmax, Ymin,Ymax, Zmin,Zmax] = geompy.BoundingBox(Shape, precise)</em>,
+\note This dialog supports navigation through the selectable objects (in OCC 3D viewer only):
+- Scroll mouse wheel with pressed \em Ctrl key or press \em "S", \em "P" keys when input focus is
+in the viewer to navigate between selectable objects.
+- Press left mouse button to select an appropriate object to the dialog box.
+.
+For more details, please refer to the \em "Functionality common for OCC and VTK viewers" chapter
+of the GUI module's documentation.
+
+<b>TUI Commands:</b> <em>[Xmin,Xmax, Ymin,Ymax, Zmin,Zmax] = geompy.BoundingBox(Shape, precise)</em>,
 <em>BBox = geompy.MakeBoundingBox(Shape, precise)</em>, where \em Shape
 is the shape for which the bounding box is computed. \em precise TRUE
  for precise computation; FALSE for fast one. Default value is False.
index c50370de5d1165532461579e5115354753e100f1..b965cb3fb53b675316ba49a041988bb3b3f1b87c 100644 (file)
@@ -9,7 +9,15 @@ the selected geometrical object.
 
 Press \b Apply or <b>Apply and Close</b> button to publish the \b Point in the study. 
 
-\n <b>TUI Command:</b> <em> geompy.MakeCDG(Shape),</em> where \em Shape is
+\note This dialog supports navigation through the selectable objects (in OCC 3D viewer only):
+- Scroll mouse wheel with pressed \em Ctrl key or press \em "S", \em "P" keys when input focus is
+in the viewer to navigate between selectable objects.
+- Press left mouse button to select an appropriate object to the dialog box.
+.
+For more details, please refer to the \em "Functionality common for OCC and VTK viewers" chapter
+of the GUI module's documentation.
+
+<b>TUI Command:</b> <em> geompy.MakeCDG(Shape),</em> where \em Shape is
 the shape for which a center of gravity is computed.
 
 See also a \ref tui_center_of_mass_page "TUI example".
index a235bf0cd6a35f7e58e1566f91e178b793791085..cc879062498c9530ddc4681c043aba4612a177f2 100644 (file)
@@ -53,8 +53,8 @@ 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).
+If they intersect only once, a point will be created. If there are several intersections, a compound of points will be created.
 \n <b>TUI Command:</b> <em>geompy.MakePointOnLinesIntersection(myLine1,myWire1).</em>
 \n <b>Arguments:</b> Name + 2 1D objects
 
@@ -75,6 +75,14 @@ The position of the point on it can be defined in one of two ways:
 
 \image html point5_2.png
 
+\note This dialog supports navigation through the selectable objects (in OCC 3D viewer only):
+- Scroll mouse wheel with pressed \em Ctrl key or press \em "S", \em "P" keys when input focus is
+in the viewer to navigate between selectable objects.
+- Press left mouse button to select an appropriate object to the dialog box.
+.
+For more details, please refer to the \em "Functionality common for OCC and VTK viewers" chapter
+of the GUI module's documentation.
+
 <b>Example:</b>
 
 \image html points.png "Points by edge and parameter and by coordinates"
index 70b368497b767128eab193a1b9e40f5f1ede8720..bfb439b884130fdc15609ae0605a05b11b49405c 100644 (file)
@@ -10,7 +10,15 @@ The table displays:
 - 3*3 matrix of its own moments of inertia (in rows <b> 1:1, 2:1</b> and <b>3:1</b>) and  
 - the relative moments of inertia (in row <b>IX & IY & IZ</b>)
 
-\n <b>TUI Command:</b> <em>geompy.Inertia(Shape),</em> where \em Shape is
+\note This dialog supports navigation through the selectable objects (in OCC 3D viewer only):
+- Scroll mouse wheel with pressed \em Ctrl key or press \em "S", \em "P" keys when input focus is
+in the viewer to navigate between selectable objects.
+- Press left mouse button to select an appropriate object to the dialog box.
+.
+For more details, please refer to the \em "Functionality common for OCC and VTK viewers" chapter
+of the GUI module's documentation.
+
+<b>TUI Command:</b> <em>geompy.Inertia(Shape),</em> where \em Shape is
 a shape for which the own matrix of inertia and the relative moments of inertia are
 returned.
 
index d4fa336b77bb3320a8461b055dce45df7b5c5472..2e3db6b1cc57c5fdf388c56461f64749295cac32 100644 (file)
@@ -17,11 +17,20 @@ Select one of the found solutions in the \b Solution list to display it in the V
 Press \b Apply or <b>Apply and Close</b> button to create a set of closest
 points, corresponding to all found solutions.
 
+\note This dialog supports navigation through the selectable objects (in OCC 3D viewer only):
+- Scroll mouse wheel with pressed \em Ctrl key or press \em "S", \em "P" keys when input focus is
+in the viewer to navigate between selectable objects.
+- Press left mouse button to select an appropriate object to the dialog box.
+.
+For more details, please refer to the \em "Functionality common for OCC and VTK viewers" chapter
+of the GUI module's documentation.
+
 <b>TUI Commands:</b>
-\n<em>aDist = geompy.MinDistance(Shape1, Shape2),</em>
-\n<em>[aDist, DX, DY, DZ] = geompy.MinDistanceComponents(Shape1, Shape2),</em>
-\n<em>[nbSols, (x11, y11, z11, x21, y21, z21, ...)] = geompy.ClosestPoints(Shape1, Shape2),</em>
-\n where \em Shape1 and \em Shape2 are the shapes, between which the minimal
+- <em>aDist = geompy.MinDistance(Shape1, Shape2),</em>
+- <em>[aDist, DX, DY, DZ] = geompy.MinDistanceComponents(Shape1, Shape2),</em>
+- <em>[nbSols, (x11, y11, z11, x21, y21, z21, ...)] = geompy.ClosestPoints(Shape1, Shape2),</em>
+.
+where \em Shape1 and \em Shape2 are the shapes, between which the minimal
 distance is computed.
 
 See also a \ref tui_min_distance_page "TUI example".
index b90373be893c47ba32a47445d31eba21fe85b785..17ccdcfd5ca279eda7da6400ac0f8bf309779b42 100644 (file)
@@ -2,11 +2,12 @@
 
 \page projection_operation_page Projection
 
-\n To produce a <b>Projection</b> in the <b>Main Menu</b> select
+To produce a <b>Projection</b> in the <b>Main Menu</b> select
 <b>Operations - > Transformation - > Projection</b>
 
-\n This operation makes normal projection of one shape to another.
-\n There are 3 types of projection different by types of operands.
+This operation makes normal projection of one shape to another.
+
+There are 3 types of projection different by types of operands.
 
 Firstly, you can project <b>Source vertex, edge or wire</b> on a given <b>Target face</b>.
 
@@ -22,14 +23,22 @@ Thirdly, you can project <b>Source vertex</b> on a given <b>Target edge</b>.
 
 \ref restore_presentation_parameters_page "Advanced options".
 
-\n <b>Example:</b>
+\note This dialog supports navigation through the selectable objects (in OCC 3D viewer only):
+- Scroll mouse wheel with pressed \em Ctrl key or press \em "S", \em "P" keys when input focus is
+in the viewer to navigate between selectable objects.
+- Press left mouse button to select an appropriate object to the dialog box.
+.
+For more details, please refer to the \em "Functionality common for OCC and VTK viewers" chapter
+of the GUI module's documentation.
+
+<b>Example:</b>
 
 \image html projection_preview.png "The curve (in red) and its projection on the cylindric surface"
 
-\n <b>TUI Command:</b> <em>geompy.MakeProjection(Source, Target),</em>
-   where \em Source is a shape which has to be projected, \em Target
-   is a shape, on which the \em Source shape will be projected. The \em
-   Result will be a \em GEOM_Object.
+<b>TUI Command:</b> <em>geompy.MakeProjection(Source, Target),</em>
+\n where \em Source is a shape which has to be projected, \em Target
+is a shape, on which the \em Source shape will be projected. The \em
+Result will be a \em GEOM_Object.
 
 Our <b>TUI Scripts</b> provide you with useful examples of the use of
 \ref tui_projection "Transformation Operations".
index fc29eb8f1db5b11377796336dbdd056809eb4351..717ad3b232ab4c9a8eaf405ffda2b82a47d426b7 100644 (file)
@@ -16,6 +16,14 @@ In this dialog:
 - Activate \ref restore_presentation_parameters_page "Advanced options" if required.
 - Press "Apply" or "Apply & Close" button to get the result (VERTEX, EDGE, WIRE or COMPOUND).
 
+\note This dialog supports navigation through the selectable objects (in OCC 3D viewer only):
+- Scroll mouse wheel with pressed \em Ctrl key or press \em "S", \em "P" keys when input focus is
+in the viewer to navigate between selectable objects.
+- Press left mouse button to select an appropriate object to the dialog box.
+.
+For more details, please refer to the \em "Functionality common for OCC and VTK viewers" chapter
+of the GUI module's documentation.
+
 This operation can be performed using a <b>TUI Command:</b> 
 
 <em>geompy.MakeSection(s1, s2, checkSelfInte)</em>
index 2b0bdd0c697ea9cb4cd35bd15a4b1b39aeeccff2..356817daeae898807a54636f6e7b2b871b0ab87d 100644 (file)
@@ -9,7 +9,15 @@ geometrical object.
 
 The table displays \b Min and \b Max tolerance values for \b Face, \b Edge and \b Vertex tolerance. 
 
-\n <b>TUI Command:</b> <em>geompy.Tolerance(Shape),</em> where \em Shape
+\note This dialog supports navigation through the selectable objects (in OCC 3D viewer only):
+- Scroll mouse wheel with pressed \em Ctrl key or press \em "S", \em "P" keys when input focus is
+in the viewer to navigate between selectable objects.
+- Press left mouse button to select an appropriate object to the dialog box.
+.
+For more details, please refer to the \em "Functionality common for OCC and VTK viewers" chapter
+of the GUI module's documentation.
+
+<b>TUI Command:</b> <em>geompy.Tolerance(Shape),</em> where \em Shape
 is a shape for which minimal and maximal tolerances are returned.
 
 See also a \ref tui_tolerance_page "TUI example".
index 040eea68635a9e5ffa2f6760bf5b79e55b45a3d6..fad70f01c9028401590d7d7a02892ad832afc0ed 100644 (file)
@@ -5,22 +5,30 @@
 This operation provides the list of types and quantities of all topological
 entities, composing the selected geometrical object.
 
-For the COMPOUND or COMPSOLID shape, additionally the information about
+For the \em COMPOUND or \em COMPSOLID shape, additionally the information about
 "flat" content is shown - a number of "simple" top-level shapes enclosed into the compound.
 
 \image html measures8.png
 
-\n <b>TUI Command:</b> <em>geompy.WhatIs(Shape),</em> where \em Shape is a
+\note This dialog supports navigation through the selectable objects (in OCC 3D viewer only):
+- Scroll mouse wheel with pressed \em Ctrl key or press \em "S", \em "P" keys when input focus is
+in the viewer to navigate between selectable objects.
+- Press left mouse button to select an appropriate object to the dialog box.
+.
+For more details, please refer to the \em "Functionality common for OCC and VTK viewers" chapter
+of the GUI module's documentation.
+
+<b>TUI Command:</b> <em>geompy.WhatIs(Shape),</em> where \em Shape is a
 shape from which a description is returned.
 
-\n <b>Kind of Shape</b> field characterizes the
+<b>Kind of Shape</b> field characterizes the
 whole shape. If there is no additional information about the
 shape, <b>Basic Properties</b> button is disabled, otherwise it
 provides information about center and dimensions of the shape.
 
 \image html measures8a.png
 
-\n <b>TUI Command:</b> <em>geompy.KindOfShape(Shape),</em> where \em Shape is a
+<b>TUI Command:</b> <em>geompy.KindOfShape(Shape),</em> where \em Shape is a
 shape from which a description is returned.
 
 See also a \ref tui_whatis_page "TUI example".
index 89c5f68ce9ccf3934dfdd5524d6d5d493d170f36..2f276ef1e8577669eecb1a4e6b961cbf5bd83728 100644 (file)
@@ -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();
 }
index 822d2aa0f8db29d965c866b85953cfa23faf1cac..23e800647c81c39cb49eb9a13306035f915138c8 100644 (file)
@@ -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();
index 868c607bbca6af9a08a1f45efc0716ff390cb792..cf535621480e71bf541cb8a7461e16ecf0a5869e 100644 (file)
@@ -45,6 +45,7 @@
 #include <QRadioButton>
 #include <QMenu>
 #include <QTimer>
+#include <QList>
 
 #include <gp_Pnt.hxx>
 #include <TopoDS_Shape.hxx>
@@ -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<int> 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<TopAbs_ShapeEnum> 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
index ddd413f7b96573070f2161a85d89d8c0c195ec80..ec691ae945fa654d5d01336508159f625aa27b1f 100644 (file)
@@ -99,7 +99,6 @@ private:
   QGroupBox*                         myParamGroup;
   QButtonGroup*                      myParamCoord;
 
-  QMenu*                             myBtnPopup;
   QMap<QAction*, int>                myActions;
 
   TopAbs_ShapeEnum                   myNeedType;
@@ -116,7 +115,6 @@ private slots:
   void                               SetDoubleSpinBoxStep( double );
   void                               ClickParamCoord( int );
   void                               CheckBoxClicked( int );
-  void                               onBtnPopup( QAction* );
   void                               updateSize();
 };
 
index bbf88ebe1687aa0b07f08defdadad638c8e3f350..9cc8c4a591aa125ac1acc9262291c8ef985c85a9 100644 (file)
@@ -199,6 +199,10 @@ void BooleanGUI_Dialog::Init()
 
   globalSelection(GEOM_ALLSHAPES);
 
+  std::list<int> 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 );
+  
   myGroup->PushButton1->click();
   SelectionIntoArgument();
   resize(100,100);
@@ -236,8 +240,7 @@ bool BooleanGUI_Dialog::ClickOnApply()
 //=================================================================================
 void BooleanGUI_Dialog::reset()
 {
-  myObjects = new GEOM::ListOfGO;
-  myObjects->length( 0 );       
+  myObjects.clear();
 }
 
 //=================================================================================
@@ -262,12 +265,11 @@ void BooleanGUI_Dialog::singleSelection()
 
     if (myEditCurrentArgument == myGroup->LineEdit1) {
       myObject1 = aSelectedObject;
-      if (!myGroup->PushButton2->isHidden() && !myObjects->length())
+      if (!myGroup->PushButton2->isHidden() && !myObjects.count())
         myGroup->PushButton2->click();
     }
     else if (myEditCurrentArgument == myGroup->LineEdit2) {
-      myObjects->length(1);
-      myObjects[0] = aSelectedObject.get();
+      myObjects << aSelectedObject;
       if (!myObject1)
         myGroup->PushButton1->click();
     }
@@ -287,23 +289,11 @@ void BooleanGUI_Dialog::multipleSelection()
   myEditCurrentArgument->setText( "" );
   reset();
         
-  LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
-  SALOME_ListIO aSelList;
-  aSelMgr->selectedObjects(aSelList);
-  myObjects->length(aSelList.Extent());
+  myObjects = getSelected( TopAbs_SHAPE, -1 );
 
-  int i = 0;
-  for (SALOME_ListIteratorOfListIO anIt (aSelList); anIt.More(); anIt.Next()) {
-    GEOM::GEOM_Object_var aSelectedObject = GEOMBase::ConvertIOinGEOMObject( anIt.Value() );
-
-    if ( !CORBA::is_nil( aSelectedObject ) ) {
-      myObjects[i++] = aSelectedObject;
-    }
-  }
-
-  myObjects->length( i );
+  int i = myObjects.count();
   if ( i == 1 ) {
-    myEditCurrentArgument->setText( GEOMBase::GetName( myObjects[0] ) );
+    myEditCurrentArgument->setText( GEOMBase::GetName( myObjects.first().get() ) );
   } else if ( i > 0 ) {
     myEditCurrentArgument->setText( QString::number( i ) + "_" + tr( "GEOM_OBJECTS" ) );
   }
@@ -315,6 +305,7 @@ void BooleanGUI_Dialog::multipleSelection()
 //=================================================================================
 void BooleanGUI_Dialog::SelectionIntoArgument()
 {
+  myEditCurrentArgument->setText("");
   if ( myOperation == BooleanGUI::SECTION ||
       (myOperation == BooleanGUI::CUT &&
        myEditCurrentArgument == myGroup->LineEdit1)) {
@@ -349,11 +340,19 @@ void BooleanGUI_Dialog::SetEditCurrentArgument()
     myGroup->LineEdit1->setEnabled(false);
   }
 
+  globalSelection(GEOM_ALLSHAPES);
+
+  std::list<int> 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 );
+
   // enable line edit
   myEditCurrentArgument->setEnabled(true);
   myEditCurrentArgument->setFocus();
   // after setFocus(), because it will be setDown(false) when loses focus
   send->setDown(true);
+
+  SelectionIntoArgument();
 }
 
 //=================================================================================
@@ -399,13 +398,13 @@ bool BooleanGUI_Dialog::isValid (QString&)
   switch (myOperation) {
     case BooleanGUI::FUSE:
     case BooleanGUI::COMMON:
-      isOK = myObjects->length() > 1;
+      isOK = myObjects.count() > 1;
     break;
   case BooleanGUI::CUT:
-      isOK = myObject1 && myObjects->length();
+    isOK = myObject1 && myObjects.count();
     break;
   case BooleanGUI::SECTION:
-      isOK = myObject1 && (myObjects->length() == 1);
+    isOK = myObject1 && (myObjects.count() == 1);
     break;
   default:
     break;
@@ -425,25 +424,30 @@ bool BooleanGUI_Dialog::execute (ObjectList& objects)
   GEOM::GEOM_IBooleanOperations_var anOper = GEOM::GEOM_IBooleanOperations::_narrow(getOperation());
   const bool isCheckSelfInte = myGroup->CheckBox1->isChecked();
 
+  GEOM::ListOfGO_var anObjects = new GEOM::ListOfGO();
+  anObjects->length( myObjects.count() );
+  for ( int i = 0; i < myObjects.count(); i++ )
+    anObjects[i] = myObjects[i].copy();
+
   switch (myOperation) {
     case BooleanGUI::FUSE:
       {
         const bool isRmExtraEdges = myGroup->CheckBox2->isChecked();
 
         anObj = anOper->MakeFuseList
-          (myObjects, isCheckSelfInte, isRmExtraEdges);
+          (anObjects, isCheckSelfInte, isRmExtraEdges);
       }
     break;
     case BooleanGUI::COMMON:
-      anObj = anOper->MakeCommonList(myObjects, isCheckSelfInte);
+      anObj = anOper->MakeCommonList(anObjects, isCheckSelfInte);
     break;
   case BooleanGUI::CUT:
       anObj =
-        anOper->MakeCutList(myObject1.get(), myObjects, isCheckSelfInte);
+        anOper->MakeCutList(myObject1.get(), anObjects, isCheckSelfInte);
     break;
   case BooleanGUI::SECTION:
       anObj = anOper->MakeBoolean
-        (myObject1.get(), myObjects[0], myOperation, isCheckSelfInte);
+        (myObject1.get(), anObjects[0], myOperation, isCheckSelfInte);
     break;
   default:
     break;
@@ -470,3 +474,14 @@ void BooleanGUI_Dialog::restoreSubShapes (SALOMEDS::Study_ptr   theStudy,
                                          mainFrame()->CheckBoxAddPrefix->isChecked()); // ? false
   }
 }
+
+//=================================================================================
+// function : addSubshapesToStudy
+// purpose  : virtual method to add new SubObjects if local selection
+//=================================================================================
+void BooleanGUI_Dialog::addSubshapesToStudy()
+{
+  GEOMBase::PublishSubObject( myObject1.get() );
+  for ( int i = 0; i < myObjects.count(); i++ )
+    GEOMBase::PublishSubObject( myObjects[i].get() );
+}
index 99ead05a6915a5751f31e79cf08a42d4a5446331..a43098bcb47731975716e734ce040baece15c894 100644 (file)
@@ -51,6 +51,7 @@ protected:
   virtual bool                       isValid( QString& );
   virtual bool                       execute( ObjectList& );
   virtual void                       restoreSubShapes( SALOMEDS::Study_ptr, SALOMEDS::SObject_ptr );
+  virtual void                       addSubshapesToStudy();
 
 private:
   void                               Init();
@@ -63,7 +64,7 @@ private:
   int                                myOperation;
   
   GEOM::GeomObjPtr                   myObject1;
-  GEOM::ListOfGO_var                 myObjects;
+  QList<GEOM::GeomObjPtr>            myObjects;
   
   DlgRef_2Sel2Spin3Check*            myGroup;
 
index 42ab59c1b0fde2abf95e05756c05dd6884e3404c..037fd087aa54751f8432874437bbe047aa51e16d 100755 (executable)
@@ -461,9 +461,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<int> modes )
 {
   SALOME_ListIO aListOfIO;
 
@@ -479,7 +479,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 );
 }
 
 //================================================================
@@ -487,19 +487,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<int> 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<int> 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<int> modes;
+  modes.push_back( mode );
+  localSelection( obj, modes );
+}
 
 //================================================================
 // Function : globalSelection
index 438c3c26dd3806ad10c591a50440cc5b1a5918f0..731b63d06a8db714d1ca95f7ff91d26cd11d82fb 100755 (executable)
@@ -95,7 +95,9 @@ protected:
                          const bool = true );
   void erasePreview    ( const bool = true );
 
+  void localSelection( const ObjectList&, const std::list<int> );
   void localSelection( const ObjectList&, const int );
+  void localSelection( GEOM::GEOM_Object_ptr, const std::list<int> );
   void localSelection( GEOM::GEOM_Object_ptr, const int );
   void activate( const int );
   void globalSelection( const int = GEOM_ALLOBJECTS, const bool = false  );
index f0cf6aa4febf26d484928e46634e666b267a2db0..1e4f76a6b222442842e27bfe628541bb6615af45 100644 (file)
@@ -1797,7 +1797,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<int> modes )
 {
   SUIT_Session* session = SUIT_Session::session();
   SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( session->activeApplication() );
@@ -1814,11 +1814,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<int> modes;
+  modes.push_back( theMode );
+  LocalSelection( theIO, modes );
+}
+
 //=================================================================
 /*!
  *  GEOM_Displayer::globalSelection
@@ -1932,11 +1946,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<int> 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<int> modes;
+  modes.push_back( theMode );
+  LocalSelection( theIOList, modes );
 }
 
 //=================================================================
index 0096c51b2cac3a5a30763e0627828d52e531dc61..03b00c0c6d0de66b31e893416583a65a8106e9de 100644 (file)
@@ -186,7 +186,9 @@ public:
   bool          ToActivate() const;
 
   /* Activate/Deactivate selection*/
+  void         LocalSelection( const Handle(SALOME_InteractiveObject)&, const std::list<int> );
   void         LocalSelection( const Handle(SALOME_InteractiveObject)&, const int );
+  void         LocalSelection( const SALOME_ListIO& theIOList, const std::list<int> );
   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<int>* = 0 );
index cb85fad52f26ee3f28ec277a714654155ca76b06..f0f996d8a27fb4de250fb09a248a21095a1d8f98 100644 (file)
@@ -202,7 +202,14 @@ void GenerationGUI_FillingDlg::initSelection()
   aTypes.Add( GEOM_EDGE );
   aTypes.Add( GEOM_WIRE );
   aTypes.Add( GEOM_COMPOUND );
+
+  std::list<int> needTypes;
+  needTypes.push_back( TopAbs_EDGE );
+  needTypes.push_back( TopAbs_WIRE );
+  needTypes.push_back( TopAbs_COMPOUND );
+
   globalSelection( aTypes );
+  localSelection(GEOM::GEOM_Object::_nil(), needTypes );
 }
 
 //=================================================================================
@@ -232,12 +239,11 @@ void GenerationGUI_FillingDlg::SelectionIntoArgument()
 void GenerationGUI_FillingDlg::SetEditCurrentArgument()
 {
   QPushButton* send = (QPushButton*)sender();
-  globalSelection(GEOM_ALLSHAPES);
 
   if (send == GroupPoints->PushButton1) {
     GroupPoints->LineEdit1->setFocus();
     myEditCurrentArgument = GroupPoints->LineEdit1;
-    globalSelection(GEOM_COMPOUND);
+    initSelection();
     this->SelectionIntoArgument();
   }
 }
@@ -388,3 +394,13 @@ bool GenerationGUI_FillingDlg::execute(ObjectList& objects)
 
   return true;
 }
+
+//=================================================================================
+// function : addSubshapesToStudy
+// purpose  : virtual method to add new SubObjects if local selection
+//=================================================================================
+void GenerationGUI_FillingDlg::addSubshapesToStudy()
+{
+  foreach( GEOM::GeomObjPtr o, myObjects )
+    GEOMBase::PublishSubObject( o.get() );
+}
index f849cc468c335ade558325280dac5e8381e10b19..1d74972f4da9318f647e2e76f44bfe35b3acca8e 100644 (file)
@@ -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();
index 2f8f47bbd4c5c4d0533e5ae3b62839a80f2bcbec..67e8eaa7f87f729ed8d88c6f1d6d174f31cd9fad 100644 (file)
@@ -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 );
 }
index 46615265d6c2578913099c8063b4eca48e92efa2..d12a22666cce69fa62cb308f4a5224e170b2f97c 100644 (file)
@@ -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
index 0da5051ba80048134ca09d06f4b8e36bcae91a15..436c4a0036760c978ead28b039b679a057fc54e2 100644 (file)
@@ -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<TopAbs_ShapeEnum> 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<int> 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() );
+}
index 1386f0c30a239f2d4a18cf23fda6b1ed66d922e7..0a7a3d9a11d244291df0d2b4ad1a7b48df178ce0 100644 (file)
@@ -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:
index 64a3f556eae2376a79452de55bd64dd0dfbbeadb..8a6a2cc22a6673a675b179caf93d46c2e1734ae0 100644 (file)
@@ -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<int> 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<TopAbs_ShapeEnum> 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() );
+}
index f279c6c3364e42a56a399d1a4904b99fb53c22bf..ce1bbf335ce518a77f09c599b97d674f87540050 100644 (file)
@@ -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;
 };
 
index 4fcbc5796127aa454981e4c186f4e60e315fd173..64e58fb082ff49f5ed39f1a630ffe12b75f44d03 100644 (file)
@@ -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<TopAbs_ShapeEnum> 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<int> 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  :
index 04c9ed8209f27e324edd70c271352126a3cbe8fc..9b0b35d268e40609b7058b9d7e455de44d06b53a 100644 (file)
@@ -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;
index 3a011a5fee16a6ea8e4f2bd6f9544891130b74c8..e5c8b5881c955166b75fd195d6afd5eaa02e230b 100644 (file)
@@ -122,6 +122,19 @@ void MeasureGUI_InertiaDlg::Init()
   MeasureGUI_Skeleton::Init();
 }
 
+//=================================================================================
+// function : activateSelection()
+// purpose  :
+//=================================================================================
+void MeasureGUI_InertiaDlg::activateSelection()
+{
+  MeasureGUI_Skeleton::activateSelection();
+  std::list<int> 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  :
@@ -176,13 +189,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 ),
@@ -198,3 +211,22 @@ bool MeasureGUI_InertiaDlg::getParameters( gp_Mat& I,
     return anOper->IsDone();
   }
 }
+
+void MeasureGUI_InertiaDlg::SelectionIntoArgument()
+{
+  myObj.nullify();
+  QList<TopAbs_ShapeEnum> 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();
+}
index 48fa73f3ee361b1f2f87ca302f59a72550b6fae7..79712359b2d4a97ccef764416d8dbf25dcd825fb 100644 (file)
@@ -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();
index 74ca035f59234d5577ff071c42cdb9642e97e063..334a37a693869c8c73a51a6d8319708651e41b7e 100644 (file)
@@ -26,6 +26,7 @@
 //
 #include "MeasureGUI_MaxToleranceDlg.h"
 #include "MeasureGUI_Widgets.h"
+#include <GEOMBase.h>
 #include "DlgRef.h"
 
 #include <SUIT_Session.h>
@@ -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<int> 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<TopAbs_ShapeEnum> 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();
+}
index c225d6efa3fd7e860dc100f0cfd2a63f31580ad6..69113b314248c2d6a5c3ce9250e0b64f7e9f6e73 100644 (file)
@@ -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& );
   
index 245bc0a1300cafbb331a992f2fd6ee5fe9727956..90538555563600d1dc01f3408319210469de1299 100644 (file)
@@ -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( "" );
index 9b850db9777f9c6a33a0d13c351ea1ab38d21b42..c8851b12a425f45fa4c8cf39ace1f018f5a5609a 100644 (file)
@@ -122,8 +122,30 @@ void MeasureGUI_PropertiesDlg::activateSelection()
   }
 
   globalSelection( aTypes );
+
+  std::list<int> 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<TopAbs_ShapeEnum> 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 );
index 4911b4c18bb1536ff4dd536d5f9e4fbd0884c495..41cf932fb6cbf82cb6ca8be4d7e79b72f9c074db 100644 (file)
@@ -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:
index 1a5943a07aa62489dff95c083986240b3995bc4c..b254c4f9ce12d1682f7213eb7ee0f865fcaa0e3f 100644 (file)
@@ -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;
 }
 
 //================================================================
index a12b40bf322b36b938bb0008ec39c33998c3ea9d..fa5ceef21c4c1f7b6e5319a0a3ca3695228b92f7 100644 (file)
@@ -77,7 +77,7 @@ protected:
 protected:    
   QPushButton*                       mySelBtn;
   QLineEdit*                         mySelEdit;
-  GEOM::GEOM_Object_var              myObj;
+  GEOM::GeomObjPtr                   myObj;
   
   GeometryGUI*                       myGeomGUI;
   GEOM_Displayer*                    myDisplayer;
index 55acc91955246541744ad37c2429b9d529f498db..bef4de91ea68f49e6d07cc31660ec9aacc827fb7 100644 (file)
@@ -187,6 +187,18 @@ void MeasureGUI_WhatisDlg::processObject()
   myParamsDlg->adjustSize();
 }
 
+//=================================================================================
+// function : activateSelection()
+// purpose  :
+//=================================================================================
+void MeasureGUI_WhatisDlg::activateSelection()
+{
+  MeasureGUI_Skeleton::activateSelection();
+  std::list<int> 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 : ClickOnProperties()
 // purpose  :
@@ -202,13 +214,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 +243,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 +254,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 );
@@ -601,3 +613,20 @@ QString MeasureGUI_WhatisDlg::getKindOfShape( QString& theParameters )
 
   return aKindStr;
 }
+
+void MeasureGUI_WhatisDlg::SelectionIntoArgument()
+{
+  myObj.nullify();
+  myObj = getSelected( TopAbs_SHAPE );
+  if (!myObj) {
+    mySelEdit->setText("");
+    processObject();
+    erasePreview();
+    return;
+  }
+
+  mySelEdit->setText(GEOMBase::GetName(myObj.get()));
+  processObject();
+  redisplayPreview();
+}
\ No newline at end of file
index 9c5ca644329cd0510b94c7f0307e572c2b06414c..eccf896a8db1191ad7b5e9abae9c4afb55cc84dc 100644 (file)
@@ -48,6 +48,8 @@ public:
 protected:
   // redefined from GEOMBase_Helper and MeasureGUI_Skeleton
   virtual void                        processObject();
+  virtual void                        activateSelection();
+  virtual void                        SelectionIntoArgument();
   
 protected slots:
   virtual void                        ClickOnProperties();
index 73b2c528baf56aa568d99af6c34fd6fad8d56ec0..93ed07b2a63190c0cde7ae9f3f98ec9d35bbc6fc 100644 (file)
@@ -237,6 +237,9 @@ void TransformationGUI_ProjectionDlg::SetEditCurrentArgument()
       aMap.Add( GEOM_EDGE );
       aMap.Add( GEOM_WIRE );
       globalSelection( aMap );
+      std::list<int> needTypes;
+      needTypes.push_back( TopAbs_VERTEX ), needTypes.push_back( TopAbs_EDGE ), needTypes.push_back( TopAbs_WIRE );
+      localSelection(GEOM::GEOM_Object::_nil(), needTypes );
       break;
     }
     case PROJ_ON_WIRE: