From 44ba318241b8dff6f594036edb4495d06f109a90 Mon Sep 17 00:00:00 2001 From: nds Date: Mon, 10 Nov 2014 13:39:42 +0300 Subject: [PATCH] Issue #208 - A correction to filter the selected/highlighted objects to belong the current sketch. --- src/PartSet/PartSet_Tools.cpp | 41 +++++++++++++++++++++++++---------- src/PartSet/PartSet_Tools.h | 12 ++++++++++ 2 files changed, 42 insertions(+), 11 deletions(-) diff --git a/src/PartSet/PartSet_Tools.cpp b/src/PartSet/PartSet_Tools.cpp index d13695361..364d7c9d2 100644 --- a/src/PartSet/PartSet_Tools.cpp +++ b/src/PartSet/PartSet_Tools.cpp @@ -152,13 +152,25 @@ ObjectPtr PartSet_Tools::nearestFeature(QPoint thePoint, Handle_V3d_View theView FeaturePtr theSketch, const QList& theSelected, const QList& theHighlighted) +{ + // firstly it finds the feature in the list of highlight + ObjectPtr aDeltaObject = nearestFeature(thePoint, theView, theSketch, theHighlighted); + if (!aDeltaObject) + // secondly it finds the feature in the list of selected objects + aDeltaObject = nearestFeature(thePoint, theView, theSketch, theSelected); + + return aDeltaObject; +} + +ObjectPtr PartSet_Tools::nearestFeature(QPoint thePoint, Handle_V3d_View theView, + FeaturePtr theSketch, + const QList& thePresentations) { ObjectPtr aDeltaObject; - // 1. find the object in the highlighted list - if (theHighlighted.size() > 0) { - aDeltaObject = theHighlighted.first().object(); - } - // 2. find it in the selected list by the selected point + + CompositeFeaturePtr aSketch = + boost::dynamic_pointer_cast(theSketch); + // 1. find it in the selected list by the selected point if (!aDeltaObject) { double aX, anY; gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(thePoint, theView); @@ -167,13 +179,13 @@ ObjectPtr PartSet_Tools::nearestFeature(QPoint thePoint, Handle_V3d_View theView FeaturePtr aFeature; double aMinDelta = -1; ModuleBase_ViewerPrs aPrs; - foreach (ModuleBase_ViewerPrs aPrs, theSelected) { + foreach (ModuleBase_ViewerPrs aPrs, thePresentations) { if (!aPrs.object()) continue; FeaturePtr aFeature = ModelAPI_Feature::feature(aPrs.object()); boost::shared_ptr aSketchFeature = boost::dynamic_pointer_cast< SketchPlugin_Feature>(aFeature); - if (!aSketchFeature) + if (!aSketchFeature || !aSketch->isSub(aSketchFeature)) continue; double aDelta = aSketchFeature->distanceToPoint( @@ -184,10 +196,17 @@ ObjectPtr PartSet_Tools::nearestFeature(QPoint thePoint, Handle_V3d_View theView } } } - // 3. if the object is not found, returns the first selected one - if (!aDeltaObject && theSelected.size() > 0) - aDeltaObject = theSelected.first().object(); - + // 2. if the object is not found, returns the first selected sketch feature + if (!aDeltaObject && thePresentations.size() > 0) { + // there can be some highlighted objects, e.g. a result of boolean operation and a sketch point + foreach (ModuleBase_ViewerPrs aPrs, thePresentations) { + if (!aPrs.object()) + continue; + FeaturePtr aFeature = ModelAPI_Feature::feature(aPrs.object()); + if (aFeature && aSketch->isSub(aFeature)) + aDeltaObject = aPrs.object(); + } + } return aDeltaObject; } diff --git a/src/PartSet/PartSet_Tools.h b/src/PartSet/PartSet_Tools.h index 912db7307..30838ae09 100644 --- a/src/PartSet/PartSet_Tools.h +++ b/src/PartSet/PartSet_Tools.h @@ -160,6 +160,18 @@ class PARTSET_EXPORT PartSet_Tools /// \param theY the output vertical coordinate of the point static bool hasVertexShape(const ModuleBase_ViewerPrs& thePrs, FeaturePtr theSketch, Handle_V3d_View theView, double& theX, double& theY); +protected: + /// Returns an object that is under the mouse point. Firstly it checks the highlighting, + /// if it exists, the first object is returned. Secondly, there is an iteration on + /// the selected list to find the point. Thirdly, if the object is not found under the + /// the point, the first selected object is returned. + /// \param thePoint a screen point + /// \param theView a 3D view + /// \param theSketch the sketch feature + /// \param thePresentations the list of presentations + static ObjectPtr nearestFeature(QPoint thePoint, Handle_V3d_View theView, FeaturePtr theSketch, + const QList& thePresentations); + }; #endif -- 2.39.2