]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
[bos #35153][EDF](2023-T1) Construction grid.
authordish <dmitrii.shvydkoi@opencascade.com>
Mon, 27 May 2024 12:37:57 +0000 (12:37 +0000)
committerdish <dmitrii.shvydkoi@opencascade.com>
Mon, 27 May 2024 12:37:57 +0000 (12:37 +0000)
Add vertex snapping of already drawn sketch primitives.

src/PartSet/PartSet_MouseProcessor.cpp
src/PartSet/PartSet_MouseProcessor.h
src/PartSet/PartSet_SketcherMgr.cpp
src/PartSet/PartSet_SketcherMgr.h
src/PartSet/PartSet_WidgetBSplinePoints.cpp
src/PartSet/PartSet_WidgetPoint2d.cpp

index 2a68166c4db39abdd5f34e3627253f7751c1e4ac..5c8dbc57ecfe5f54f9b34002168742f8f00be4af 100644 (file)
@@ -47,15 +47,16 @@ double slightlyChangeVal(double theVal)
 }
 
 
-bool PartSet_MouseProcessor::convertPointToLocal(
+/*static*/ bool PartSet_MouseProcessor::convertPointToLocal(
   ModuleBase_IWorkshop* theWorkshop,
   const std::shared_ptr<ModelAPI_CompositeFeature>& theSketch,
   ModuleBase_IViewWindow* theWindow,
   const QPoint& theEventPos,
   double& theX, double& theY,
+  bool theSnap,
   bool theHighlight,
   bool theAddOffset
-) const {
+) {
   ModuleBase_IViewer* const viewer = theWorkshop->viewer();
   if (!viewer)
     return false;
@@ -68,7 +69,7 @@ bool PartSet_MouseProcessor::convertPointToLocal(
   const Handle(V3d_View) view = theWindow->v3dView();
 
   PartSet_PreviewSketchPlane* previewPlane = module->sketchMgr()->previewSketchPlane();
-  if (!aV3dViewer || !aV3dViewer->Grid()->IsActive() || previewPlane->getGridSnappingMode() == PartSet_PreviewSketchPlane::GridSnappingMode::Off) {
+  if (!theSnap || !aV3dViewer || !aV3dViewer->Grid()->IsActive() || previewPlane->getGridSnappingMode() == PartSet_PreviewSketchPlane::GridSnappingMode::Off) {
     const gp_Pnt mousePoint = PartSet_Tools::convertClickToPoint(theEventPos, view);
     PartSet_Tools::convertTo2D(mousePoint, theSketch, view, theX, theY);
     return true;
index 4f759249fc799fe3292a5fe38fca0d9431c87903..597ecb492baa07050f847bad79d491c4bfbad436 100644 (file)
@@ -65,23 +65,24 @@ public:
                                ModuleBase_IViewWindow* theWnd,
                                QMouseEvent* theEvent) {}
 
-  protected:
   /// \brief Converts position of mouse cursor to local coordinates on sketch plane.
   ///  Snaps on-sketch-plane-coordinates to closest construction grid node.
   /// \param theEventPos is position of mouse cursor.
   /// \param theX and \param theY are local coordinates on sketch plane.
+  /// \param theSnap theX and theY are snapped to construction grid if both theSnap == true and snapping is enabled.
   /// \param theHighlight If point is snapped, hightlight grid point.
   /// \param theAddOffset If true, serves as a remedy for odd crash during drawing of a line on a sketch.
-  /// \return true on success.
-  virtual bool convertPointToLocal(
+  /// \returns true on success.
+  static bool convertPointToLocal(
     ModuleBase_IWorkshop* theWorkshop,
     const std::shared_ptr<ModelAPI_CompositeFeature>& theSketch, // Passing by reference is intentionally.
     ModuleBase_IViewWindow* theWindow,
     const QPoint& theEventPos,
     double& theX, double& theY,
+    bool theSnap = true,
     bool theHighlight = false,
     bool theAddOffset = false
-  ) const;
+  );
 };
 
 #endif
index 6b95b8a539176e5c303fb5ef93ef0ce03e34f5c3..f4478d220e0ffa49c0c5431a39e1219930a61fbc 100644 (file)
 
 #include <set>
 
+#include <iostream>
+
 //#define DEBUG_DO_NOT_BY_ENTER
 //#define DEBUG_SKETCHER_ENTITIES
 //#define DEBUG_SKETCH_ENTITIES_ON_MOVE
@@ -376,6 +378,8 @@ static bool MyMultiselectionState = true;
 
 void PartSet_SketcherMgr::onMousePressed(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent)
 {
+  std::wcout << "PartSet_SketcherMgr::onMousePressed BEGIN" << std::endl;
+
   MyModeByDrag = isDragModeCreation();
 
   // Clear dragging mode
@@ -384,11 +388,15 @@ void PartSet_SketcherMgr::onMousePressed(ModuleBase_IViewWindow* theWnd, QMouseE
   myMousePoint.setX(theEvent->x());
   myMousePoint.setY(theEvent->y());
 
-  if (myModule->sketchReentranceMgr()->processMousePressed(theWnd, theEvent))
+  if (myModule->sketchReentranceMgr()->processMousePressed(theWnd, theEvent)) {
+    std::wcout << "PartSet_SketcherMgr::onMousePressed END A" << std::endl;
     return;
+  }
   //get2dPoint(theWnd, theEvent, myClickedPoint);
-  if (!(theEvent->buttons() & Qt::LeftButton))
+  if (!(theEvent->buttons() & Qt::LeftButton)) {
+    std::wcout << "PartSet_SketcherMgr::onMousePressed END B" << std::endl;
     return;
+  }
 
   ModuleBase_IWorkshop* aWorkshop = myModule->workshop();
   ModuleBase_IViewer* aViewer = aWorkshop->viewer();
@@ -397,8 +405,10 @@ void PartSet_SketcherMgr::onMousePressed(ModuleBase_IViewWindow* theWnd, QMouseE
 
   ModuleBase_OperationFeature* aFOperation = dynamic_cast<ModuleBase_OperationFeature*>
                                                                (getCurrentOperation());
-  if (!aFOperation)
+  if (!aFOperation) {
+    std::wcout << "PartSet_SketcherMgr::onMousePressed END C" << std::endl;
     return;
+  }
 
   bool isEditing = aFOperation->isEditOperation();
   bool aCanDrag = aViewer->canDragByMouse();
@@ -412,21 +422,26 @@ void PartSet_SketcherMgr::onMousePressed(ModuleBase_IViewWindow* theWnd, QMouseE
     // If the current widget is a selector, do nothing, it processes the mouse press
     ModuleBase_ModelWidget* anActiveWidget = getActiveWidget();
     if(anActiveWidget && anActiveWidget->isViewerSelector()) {
+      std::wcout << "PartSet_SketcherMgr::onMousePressed END D" << std::endl;
       return;
     }
   }
 
   // Use only for sketch operations
   if (myCurrentSketch) {
-    if (!PartSet_Tools::sketchPlane(myCurrentSketch))
+    if (!PartSet_Tools::sketchPlane(myCurrentSketch)) {
+      std::wcout << "PartSet_SketcherMgr::onMousePressed END E" << std::endl;
       return;
+    }
 
     bool isSketcher = isSketchOperation(aFOperation);
     bool isSketchOpe = isNestedSketchOperation(aFOperation);
 
     // Avoid non-sketch operations
-    if ((!isSketchOpe) && (!isSketcher))
+    if ((!isSketchOpe) && (!isSketcher)) {
+      std::wcout << "PartSet_SketcherMgr::onMousePressed END F" << std::endl;
       return;
+    }
 
     // Ignore creation sketch operation
     if ((!isSketcher) && (!isEditing)) {
@@ -445,6 +460,7 @@ void PartSet_SketcherMgr::onMousePressed(ModuleBase_IViewWindow* theWnd, QMouseE
             aProcessor->mouseReleased(theWnd, theEvent);
         }
       }
+      std::wcout << "PartSet_SketcherMgr::onMousePressed END G" << std::endl;
       return;
     }
     bool aHasShift = (theEvent->modifiers() & Qt::ShiftModifier);
@@ -455,6 +471,8 @@ void PartSet_SketcherMgr::onMousePressed(ModuleBase_IViewWindow* theWnd, QMouseE
         // commit previous operation
         if (!aFOperation->commit())
           aFOperation->abort();
+
+      std::wcout << "PartSet_SketcherMgr::onMousePressed END H" << std::endl;
       return;
     }
     // Init flyout point for radius rotation
@@ -523,6 +541,7 @@ void PartSet_SketcherMgr::onMousePressed(ModuleBase_IViewWindow* theWnd, QMouseE
       }
     }
   }
+  std::wcout << "PartSet_SketcherMgr::onMousePressed END LAST" << std::endl;
 }
 
 void PartSet_SketcherMgr::onMouseReleased(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent)
@@ -645,6 +664,7 @@ void PartSet_SketcherMgr::onMouseReleased(ModuleBase_IViewWindow* theWnd, QMouse
 
 void PartSet_SketcherMgr::onMouseMoved(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent)
 {
+  std::wcout << "PartSet_SketcherMgr::onMouseMoved START" << std::endl;
 #ifdef DEBUG_SKETCH_ENTITIES_ON_MOVE
   CompositeFeaturePtr aSketch = activeSketch();
   if (aSketch.get()) {
@@ -659,8 +679,10 @@ void PartSet_SketcherMgr::onMouseMoved(ModuleBase_IViewWindow* theWnd, QMouseEve
   }
 #endif
 
-  if (myModule->sketchReentranceMgr()->processMouseMoved(theWnd, theEvent))
+  if (myModule->sketchReentranceMgr()->processMouseMoved(theWnd, theEvent)) {
+    std::wcout << "PartSet_SketcherMgr::onMouseMoved END A" << std::endl;
     return;
+  }
 
   ModuleBase_IWorkshop* aWorkshop = myModule->workshop();
   XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(aWorkshop);
@@ -707,9 +729,11 @@ void PartSet_SketcherMgr::onMouseMoved(ModuleBase_IViewWindow* theWnd, QMouseEve
     // deselected). This flag should be restored in the slot, processed the mouse release signal.
     ModuleBase_Operation* aCurrentOperation = getCurrentOperation();
     if (!aCurrentOperation) {
+      std::wcout << "PartSet_SketcherMgr::onMouseMoved END B" << std::endl;
       return;
     }
     if (isSketchOperation(aCurrentOperation)) {
+      std::wcout << "PartSet_SketcherMgr::onMouseMoved END C" << std::endl;
       return; // No edit operation activated
     }
 
@@ -720,12 +744,10 @@ void PartSet_SketcherMgr::onMouseMoved(ModuleBase_IViewWindow* theWnd, QMouseEve
 
     Handle(V3d_View) aView = theWnd->v3dView();
     Point aMousePnt;
-    get2dPoint(theWnd, theEvent, aMousePnt);
+    get2dPoint(theWnd, theEvent, aMousePnt, true /*theSnap*/);
 
-    std::shared_ptr<GeomAPI_Pnt2d> anOriginalPosition = std::shared_ptr<GeomAPI_Pnt2d>(
-      new GeomAPI_Pnt2d(myCurrentPoint.myCurX, myCurrentPoint.myCurY));
-    std::shared_ptr<GeomAPI_Pnt2d> aCurrentPosition = std::shared_ptr<GeomAPI_Pnt2d>(
-      new GeomAPI_Pnt2d(aMousePnt.myCurX, aMousePnt.myCurY));
+    auto anOriginalPosition = std::shared_ptr<GeomAPI_Pnt2d>(new GeomAPI_Pnt2d(myCurrentPoint.myCurX, myCurrentPoint.myCurY));
+    auto aCurrentPosition = std::shared_ptr<GeomAPI_Pnt2d>(new GeomAPI_Pnt2d(aMousePnt.myCurX, aMousePnt.myCurY));
 
     // 3. the flag to disable the update viewer should be set in order to avoid blinking in the
     // viewer happens by deselect/select the modified objects. The flag should be restored after
@@ -758,8 +780,7 @@ void PartSet_SketcherMgr::onMouseMoved(ModuleBase_IViewWindow* theWnd, QMouseEve
                 aPoint->attributeType() == GeomDataAPI_Point2DArray::typeId()) {
               bool isImmutable = aPoint->setImmutable(true);
 
-              std::shared_ptr<ModelAPI_ObjectMovedMessage> aMessage = std::shared_ptr
-                <ModelAPI_ObjectMovedMessage>(new ModelAPI_ObjectMovedMessage(this));
+              auto aMessage = std::shared_ptr<ModelAPI_ObjectMovedMessage>(new ModelAPI_ObjectMovedMessage(this));
               aMessage->setMovedAttribute(aPoint, anAttIt->second);
               aMessage->setOriginalPosition(anOriginalPosition);
               aMessage->setCurrentPosition(aCurrentPosition);
@@ -773,11 +794,9 @@ void PartSet_SketcherMgr::onMouseMoved(ModuleBase_IViewWindow* theWnd, QMouseEve
       }
       else {
         // Process selection by feature
-        std::shared_ptr<SketchPlugin_Feature> aSketchFeature =
-          std::dynamic_pointer_cast<SketchPlugin_Feature>(aFeature);
+        auto aSketchFeature = std::dynamic_pointer_cast<SketchPlugin_Feature>(aFeature);
         if (aSketchFeature) {
-          std::shared_ptr<ModelAPI_ObjectMovedMessage> aMessage = std::shared_ptr
-            <ModelAPI_ObjectMovedMessage>(new ModelAPI_ObjectMovedMessage(this));
+          auto aMessage = std::shared_ptr<ModelAPI_ObjectMovedMessage>(new ModelAPI_ObjectMovedMessage(this));
           aMessage->setMovedObject(aFeature);
           aMessage->setOriginalPosition(anOriginalPosition);
           aMessage->setCurrentPosition(aCurrentPosition);
@@ -806,8 +825,11 @@ void PartSet_SketcherMgr::onMouseMoved(ModuleBase_IViewWindow* theWnd, QMouseEve
 #endif
 
     myDragDone = true;
+    get2dPoint(theWnd, theEvent, aMousePnt, true /*theSnap*/);
     myCurrentPoint = aMousePnt;
   }
+
+  std::wcout << "PartSet_SketcherMgr::onMouseMoved END LAST" << std::endl;
 }
 
 void PartSet_SketcherMgr::onMouseDoubleClick(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent)
@@ -892,14 +914,19 @@ void PartSet_SketcherMgr::onAfterContextMenu()
   myIsPopupMenuActive = false;
 }
 
-void PartSet_SketcherMgr::get2dPoint(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent,
-                                     Point& thePoint)
+void PartSet_SketcherMgr::get2dPoint(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent, Point& thePoint, bool theSnap)
 {
-  Handle(V3d_View) aView = theWnd->v3dView();
-  gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), aView);
-  double aX, anY;
-  PartSet_Tools::convertTo2D(aPoint, myCurrentSketch, aView, aX, anY);
-  thePoint.setValue(aX, anY);
+
+  double aX = 0, aY = 0; // Coords at sketch plane.
+  bool success = PartSet_MouseProcessor::convertPointToLocal(workshop()->moduleConnector(), myCurrentSketch, theWnd, theEvent->pos(), aX, aY, theSnap, true, true);
+  if (!success)
+    return;
+
+  //Handle(V3d_View) aView = theWnd->v3dView();
+  //gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), aView);
+  //double aX, anY;
+  //PartSet_Tools::convertTo2D(aPoint, myCurrentSketch, aView, aX, anY);
+  thePoint.setValue(aX, aY);
 }
 
 void PartSet_SketcherMgr::launchEditing()
index 312021601fa32382e60ce9edb8a2627cfddc5e6b..9b4e8ac3c3e135602b6c48d9dc9f087379432d85 100644 (file)
@@ -427,8 +427,9 @@ private:
 
   /// Converts mouse position to 2d coordinates.
   /// Member myCurrentSketch has to be correctly defined
+  /// \param theSnap If true and snapping is enabled, snaps coordinates to the grid.
   void get2dPoint(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent,
-                  Point& thePoint);
+                  Point& thePoint, bool theSnap = true);
 
   /// Show distance value editor if it is a distance operation and all attribute references
   /// are filled by preseletion
index 192078248bee8140725055456a1fff51a643ed24..a05ad5d82f6cae5784e7ec89cf87445c0d765d0f 100644 (file)
@@ -562,6 +562,7 @@ void PartSet_WidgetBSplinePoints::mouseMoved(ModuleBase_IViewWindow* theWindow,
     theWindow,
     theEvent->pos(),
     aX, aY,
+    true,
     true
   );
 
index dfaccf2ed32f0379b69a5ea51af50c7136b3af7d..51d4dbf6ec9fe34ca14c446ffced3326e2d2eca9 100644 (file)
@@ -82,6 +82,8 @@
 #include <cfloat>
 #include <climits>
 
+#include <iostream>
+
 const double MaxCoordinate = 1e12;
 
 static QStringList MyFeaturesForCoincedence;
@@ -134,6 +136,8 @@ PartSet_WidgetPoint2D::PartSet_WidgetPoint2D(QWidget* theParent,
 
 bool PartSet_WidgetPoint2D::isValidSelectionCustom(const ModuleBase_ViewerPrsPtr& theValue)
 {
+  std::wcout << "PartSet_WidgetPoint2D::isValidSelectionCustom BEGIN" << std::endl;
+
   PartSet_Module* aModule = dynamic_cast<PartSet_Module*>(myWorkshop->module());
   if (aModule->sketchReentranceMgr()->isInternalEditActive())
     return true; /// when internal edit is started a new feature is created. I has not results, AIS
@@ -189,6 +193,8 @@ bool PartSet_WidgetPoint2D::isValidSelectionForAttribute_(
                                             const ModuleBase_ViewerPrsPtr& theValue,
                                             const AttributePtr& theAttribute)
 {
+  std::wcout << "PartSet_WidgetPoint2D::isValidSelectionForAttribute_ BEGIN" << std::endl;
+
   bool aValid = false;
 
   // stores the current values of the widget attribute
@@ -216,6 +222,8 @@ bool PartSet_WidgetPoint2D::isValidSelectionForAttribute_(
 
 bool PartSet_WidgetPoint2D::setSelectionCustom(const ModuleBase_ViewerPrsPtr& theValue)
 {
+  std::wcout << "PartSet_WidgetPoint2D::setSelectionCustom BEGIN" << std::endl;
+
   bool isDone = false;
   GeomShapePtr aShape = theValue->shape();
   if (aShape.get() && !aShape->isNull()) {
@@ -236,6 +244,8 @@ bool PartSet_WidgetPoint2D::setSelectionCustom(const ModuleBase_ViewerPrsPtr& th
 
 bool PartSet_WidgetPoint2D::resetCustom()
 {
+  std::wcout << "PartSet_WidgetPoint2D::resetCustom BEGIN" << std::endl;
+
   bool aDone = false;
   if (!isUseReset() || isComputedDefault()
       /*|| myXSpin->hasVariable() || myYSpin->hasVariable()*/) {
@@ -273,6 +283,8 @@ PartSet_WidgetPoint2D::~PartSet_WidgetPoint2D()
 bool PartSet_WidgetPoint2D::setSelection(QList<ModuleBase_ViewerPrsPtr>& theValues,
                                          const bool theToValidate)
 {
+  std::wcout << "PartSet_WidgetPoint2D::setSelection BEGIN" << std::endl;
+
   bool isDone = false;
   if (theValues.empty())
     return isDone;
@@ -304,6 +316,8 @@ bool PartSet_WidgetPoint2D::setSelection(QList<ModuleBase_ViewerPrsPtr>& theValu
 
 bool PartSet_WidgetPoint2D::setPoint(double theX, double theY)
 {
+  std::wcout << "PartSet_WidgetPoint2D::setPoint BEGIN" << std::endl;
+
   if (fabs(theX) >= MaxCoordinate)
     return false;
   if (fabs(theY) >= MaxCoordinate)
@@ -321,6 +335,8 @@ bool PartSet_WidgetPoint2D::setPoint(double theX, double theY)
 
 bool PartSet_WidgetPoint2D::storeValueCustom()
 {
+  std::wcout << "PartSet_WidgetPoint2D::storeValueCustom BEGIN" << std::endl;
+
   std::shared_ptr<ModelAPI_Data> aData = myFeature->data();
   if (!aData || !aData->isValid()) // can be on abort of sketcher element
     return false;
@@ -363,11 +379,15 @@ bool PartSet_WidgetPoint2D::storeValueCustom()
 
 bool PartSet_WidgetPoint2D::restoreValueCustom()
 {
+  std::wcout << "PartSet_WidgetPoint2D::restoreValueCustom BEGIN" << std::endl;
+
   std::shared_ptr<ModelAPI_Data> aData = myFeature->data();
   AttributePoint2DPtr aPoint = std::dynamic_pointer_cast<GeomDataAPI_Point2D>(
       aData->attribute(attributeID()));
+
   double aValueX = aPoint->isInitialized() ? aPoint->x() : 0.;
   double aValueY = aPoint->isInitialized() ? aPoint->y() : 0.;
+
   myXSpin->setValue(aValueX);
   myYSpin->setValue(aValueY);
 
@@ -376,6 +396,8 @@ bool PartSet_WidgetPoint2D::restoreValueCustom()
 
 void PartSet_WidgetPoint2D::storeCurentValue()
 {
+  std::wcout << "PartSet_WidgetPoint2D::storeCurentValue BEGIN" << std::endl;
+
   // do not use cash if a variable is used
   //if (myXSpin->hasVariable() || myYSpin->hasVariable())
   //  return;
@@ -389,6 +411,8 @@ void PartSet_WidgetPoint2D::storeCurentValue()
 
 bool PartSet_WidgetPoint2D::restoreCurentValue()
 {
+  std::wcout << "PartSet_WidgetPoint2D::restoreCurentValue BEGIN" << std::endl;
+
   bool aRestoredAndHidden = true;
 
   bool isVisible = myIsFeatureVisibleInCash;
@@ -415,6 +439,8 @@ bool PartSet_WidgetPoint2D::restoreCurentValue()
 
 QList<QWidget*> PartSet_WidgetPoint2D::getControls() const
 {
+  std::wcout << "PartSet_WidgetPoint2D::getControls BEGIN" << std::endl;
+
   QList<QWidget*> aControls;
   aControls.append(myXSpin);
   aControls.append(myYSpin);
@@ -424,6 +450,8 @@ QList<QWidget*> PartSet_WidgetPoint2D::getControls() const
 //********************************************************************
 void PartSet_WidgetPoint2D::selectionModes(int& theModuleSelectionModes, QIntList& theModes)
 {
+  std::wcout << "PartSet_WidgetPoint2D::selectionModes BEGIN" << std::endl;
+
   theModuleSelectionModes = -1;
   theModes << TopAbs_VERTEX;
   theModes << TopAbs_EDGE;
@@ -432,6 +460,8 @@ void PartSet_WidgetPoint2D::selectionModes(int& theModuleSelectionModes, QIntLis
 //********************************************************************
 void PartSet_WidgetPoint2D::activateCustom()
 {
+  std::wcout << "PartSet_WidgetPoint2D::activateCustom BEGIN" << std::endl;
+
   if (!isEditingMode()) {
     FeaturePtr aFeature = feature();
     if (aFeature.get() && aFeature->getKind() == SketchPlugin_Point::ID())
@@ -445,6 +475,8 @@ void PartSet_WidgetPoint2D::setHighlighted(bool isHighlighted)
 
 void PartSet_WidgetPoint2D::deactivate()
 {
+  std::wcout << "PartSet_WidgetPoint2D::deactivate BEGIN" << std::endl;
+
   // the value of the control should be stored to model if it was not
   // initialized yet. It is important when we leave this control by Tab key.
   // It should not be performed by the widget activation as the preview
@@ -459,6 +491,8 @@ void PartSet_WidgetPoint2D::deactivate()
 bool PartSet_WidgetPoint2D::setConstraintToPoint(double theClickedX, double theClickedY,
                                   const std::shared_ptr<ModuleBase_ViewerPrs>& theValue)
 {
+  std::wcout << "PartSet_WidgetPoint2D::setConstraintToPoint BEGIN" << std::endl;
+
   AttributeRefAttrPtr aRefAttr = attributeRefAttr();
   if (aRefAttr.get())
     fillRefAttribute(theClickedX, theClickedY, theValue);
@@ -499,6 +533,8 @@ bool PartSet_WidgetPoint2D::setConstraintToPoint(double theClickedX, double theC
 
 bool PartSet_WidgetPoint2D::setConstraintToObject(const ObjectPtr& theObject)
 {
+  std::wcout << "PartSet_WidgetPoint2D::setConstraintToObject BEGIN" << std::endl;
+
   AttributeRefAttrPtr aRefAttr = attributeRefAttr();
   if (aRefAttr.get()) {
     fillRefAttribute(theObject);
@@ -571,7 +607,7 @@ void PartSet_WidgetPoint2D::mouseReleased(ModuleBase_IViewWindow* theWindow, QMo
     }
   }
   if (!aHasPoint) {
-    bool success = convertPointToLocal(myWorkshop, mySketch, theWindow, theEvent->pos(), aX, aY, false);
+    bool success = PartSet_MouseProcessor::convertPointToLocal(myWorkshop, mySketch, theWindow, theEvent->pos(), aX, aY, true, false);
     if (!success)
       return;
   }
@@ -581,6 +617,8 @@ void PartSet_WidgetPoint2D::mouseReleased(ModuleBase_IViewWindow* theWindow, QMo
 void PartSet_WidgetPoint2D::processSelection(const ModuleBase_ViewerPrsPtr& theValue,
   double theX, double theY)
 {
+  std::wcout << "PartSet_WidgetPoint2D::processSelection BEGIN" << std::endl;
+
   if (!setPoint(theX, theY))
     return;
   // if we have selection and use it
@@ -723,6 +761,8 @@ void PartSet_WidgetPoint2D::setPreSelection(
                                ModuleBase_IViewWindow* theWnd,
                                QMouseEvent* theEvent)
 {
+  std::wcout << "PartSet_WidgetPoint2D::setPreSelection BEGIN" << std::endl;
+
   myPreSelected = thePreSelected;
   mouseReleased(theWnd, theEvent);
 }
@@ -736,13 +776,17 @@ void PartSet_WidgetPoint2D::getGeomSelection_(const std::shared_ptr<ModuleBase_V
 
 void PartSet_WidgetPoint2D::mouseMoved(ModuleBase_IViewWindow* theWindow, QMouseEvent* theEvent)
 {
+  std::wcout << "PartSet_WidgetPoint2D:::mouseMoved BEGIN" << std::endl;
+
   PartSet_Module* aModule = dynamic_cast<PartSet_Module*>(myWorkshop->module());
 
-  if (isEditingMode() || aModule->sketchReentranceMgr()->isInternalEditActive())
+  if (isEditingMode() || aModule->sketchReentranceMgr()->isInternalEditActive()) {
+    std::wcout << "PartSet_WidgetPoint2D:::mouseMoved if (isEditingMode() || aModule->sketchReentranceMgr()->isInternalEditActive()) BEGIN" << std::endl;
     return;
+  }
 
   double aX = 0, aY = 0; // Coords at sketch plane.
-  bool success = convertPointToLocal(myWorkshop, mySketch, theWindow, theEvent->pos(), aX, aY, true, true);
+  bool success = PartSet_MouseProcessor::convertPointToLocal(myWorkshop, mySketch, theWindow, theEvent->pos(), aX, aY, true, true, true);
   if (!success)
     return;
 
@@ -769,6 +813,8 @@ double PartSet_WidgetPoint2D::y() const
 bool PartSet_WidgetPoint2D::isFeatureContainsPoint(const FeaturePtr& theFeature,
                                                    double theX, double theY)
 {
+  std::wcout << "PartSet_WidgetPoint2D:::isFeatureContainsPoint BEGIN" << std::endl;
+
   bool aPointIsFound = false;
 
   if (feature()->getKind() != SketchPlugin_Line::ID())