]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Regression during edit operation. Edit sketch, select a line, as a result the propert...
authornds <natalia.donis@opencascade.com>
Wed, 5 Nov 2014 05:04:10 +0000 (08:04 +0300)
committernds <natalia.donis@opencascade.com>
Wed, 5 Nov 2014 05:04:10 +0000 (08:04 +0300)
It should be shown and filled with the parameters of the selected object.
The second regression: select a line, grab and try to drag any other object. The initially selected is moved as a result.

src/PartSet/PartSet_OperationFeatureEdit.cpp
src/PartSet/PartSet_OperationSketch.cpp
src/XGUI/XGUI_Selection.cpp

index 517c77caed72dfd7f0370bdad25eb3279b4db1fb..dcc8db879e8f72fab29e33c38786ab3d8186921b 100644 (file)
@@ -149,16 +149,20 @@ void PartSet_OperationFeatureEdit::mousePressed(QMouseEvent* theEvent, ModuleBas
     }
   }
   ObjectPtr aObject;
-  if (!aSelected.empty()) {
+  /*if (!aSelected.empty()) {
     aObject = aSelected.first().object();
   } else {   
     if (!aHighlighted.empty())
       aObject = aHighlighted.first().object();
+  }*/
+  // the priority to a highlighted object in order to edit it, even if the selected object is
+  // the feature of this operation. Otherwise, the highlighting is ignored and the selected
+  // object is moved
+  if (!aHighlighted.empty()) {
+    aObject = aHighlighted.front().object();
   }
-  //if (!theHighlighted.empty())
-  //  aObject = theHighlighted.front().object();
-  //if (!aObject && !theSelected.empty())  // changed for a constrain
-  //  aObject = theSelected.front().object();
+  if (!aObject && !aSelected.empty())  // changed for a constrain
+    aObject = aSelected.front().object();
 
   FeaturePtr aFeature = ModelAPI_Feature::feature(aObject);
   if (!aFeature || aFeature != feature() || (aSelected.size() > 1)) {
index 64f77867c74e9e8a503bc556a3ff0622a1229830..7f5dcd7583b840119ee2a7abf7344209e56e3178 100644 (file)
@@ -70,7 +70,10 @@ void PartSet_OperationSketch::mousePressed(QMouseEvent* theEvent, ModuleBase_IVi
     //if (aHasShift && aSelected.size() > 0)
     //  return;
 
-    if (aSelected.size() > 0) {
+    // there should be a start of operation, which uses the pre-highlighted objects,
+    // the selected ones are collected here and are processed by a mouse move
+    if (aHighlighted.size() == 1) {
+    //if (aSelected.size() > 0) {
       ObjectPtr aFeature = aSelected.first().object();
       if (aFeature) {
         std::string anOperationType =
@@ -78,7 +81,10 @@ void PartSet_OperationSketch::mousePressed(QMouseEvent* theEvent, ModuleBase_IVi
                 PartSet_OperationFeatureEditMulti::Type() : PartSet_OperationFeatureEdit::Type();
         restartOperation(anOperationType, aFeature);
       }
-    } //else
+    }
+    else
+      myFeatures = aHighlighted;
+    //else
     //myFeatures = aSelected;
 
   } 
index 7ef11f4f66cb2d08724364aaedf882d93e04fffa..d4fe690b11e08a4009bf58403d001399b4e74e1e 100644 (file)
@@ -51,7 +51,7 @@ QList<ModuleBase_ViewerPrs> XGUI_Selection::getSelected(int theShapeTypeToSkip)
 
 QList<ModuleBase_ViewerPrs> XGUI_Selection::getHighlighted(int theShapeTypeToSkip) const
 {
-  std::set<ObjectPtr> aPrsFeatures;
+  //std::set<ObjectPtr> aPrsFeatures;
   QList<ModuleBase_ViewerPrs> aPresentations;
   XGUI_Displayer* aDisplayer = myWorkshop->displayer();
 
@@ -62,10 +62,12 @@ QList<ModuleBase_ViewerPrs> XGUI_Selection::getHighlighted(int theShapeTypeToSki
     aPrs.setInteractive(anIO);
 
     ObjectPtr aResult = aDisplayer->getObject(anIO);
-    if (aPrsFeatures.find(aResult) == aPrsFeatures.end()) {
+    // we should not check the appearance of this feature because there can be some selected shapes
+    // for one feature
+    //if (aPrsFeatures.find(aResult) == aPrsFeatures.end()) {
       aPrs.setFeature(aResult);
-      aPrsFeatures.insert(aResult);
-    }
+      //aPrsFeatures.insert(aResult);
+    //}
     if (aContext->HasOpenedContext()) {
       TopoDS_Shape aShape = aContext->DetectedShape();
       if (!aShape.IsNull() && aShape.ShapeType() != theShapeTypeToSkip)