]> SALOME platform Git repositories - modules/shaper.git/blobdiff - src/SketcherPrs/SketcherPrs_LengthDimension.cpp
Salome HOME
Prepare version 1.2.1: quick fix for iteration 2 release
[modules/shaper.git] / src / SketcherPrs / SketcherPrs_LengthDimension.cpp
index a1564129b502605fd0456b6c8bee5b6da81f1fc1..9a4509794036c4cfdca5447d6441b4b3b27b54d8 100644 (file)
@@ -55,36 +55,37 @@ void SketcherPrs_LengthDimension::Compute(const Handle(PrsMgr_PresentationManage
   gp_Pnt aPnt1, aPnt2;
   if (!getPoints(aPnt1, aPnt2))
     return;
-  DataPtr aData = myConstraint->data();
-
-  AttributePtr aFlyOutAttribute = aData->attribute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT());
-  if (!aFlyOutAttribute->isInitialized()) {
-    return; // not possible to show length because points are not defined
-  }
-  std::shared_ptr<GeomDataAPI_Point2D> aFlyOutAttr = 
-    std::dynamic_pointer_cast<GeomDataAPI_Point2D>(aFlyOutAttribute);
-  std::shared_ptr<GeomAPI_Pnt> aFlyoutPnt = myPlane->to3D(aFlyOutAttr->x(), aFlyOutAttr->y());
-  gp_Pnt aFlyPnt = aFlyoutPnt->impl<gp_Pnt>();
-
-  double aDistance = aPnt1.Distance(aPnt2);
-
-  double aFlyout = 0;
-  double aDist = 0.0;
-  if (aDistance < Precision::Confusion())
-    aDist = aPnt1.Distance(aFlyPnt);
-  else {
-    gp_Lin aLine(aPnt1, gp_Vec(aPnt1, aPnt2));
-    aDist = aLine.Distance(aFlyPnt);
-  }
-
-  gp_XYZ aLineDir = aPnt2.XYZ().Subtracted(aPnt1.XYZ());
-  gp_XYZ aFOutDir = aFlyPnt.XYZ().Subtracted(aPnt1.XYZ());
-  gp_XYZ aNorm = myPlane->norm()->xyz()->impl<gp_XYZ>();
-  if (aLineDir.Crossed(aFOutDir).Dot(aNorm) < 0)
-    aDist = -aDist;
-  aFlyout = aDist;
-
-  SetFlyout(aFlyout);
+  //DataPtr aData = myConstraint->data();
+
+  //AttributePtr aFlyOutAttribute = aData->attribute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT());
+  //if (!aFlyOutAttribute->isInitialized()) {
+  //  return; // not possible to show length because points are not defined
+  //}
+  //std::shared_ptr<GeomDataAPI_Point2D> aFlyOutAttr = 
+  //  std::dynamic_pointer_cast<GeomDataAPI_Point2D>(aFlyOutAttribute);
+  //std::shared_ptr<GeomAPI_Pnt> aFlyoutPnt = myPlane->to3D(aFlyOutAttr->x(), aFlyOutAttr->y());
+  //gp_Pnt aFlyPnt = aFlyoutPnt->impl<gp_Pnt>();
+
+  //double aDistance = aPnt1.Distance(aPnt2);
+
+  //double aFlyout = 0;
+  //double aDist = 0.0;
+  //if (aDistance < Precision::Confusion())
+  //  aDist = aPnt1.Distance(aFlyPnt);
+  //else {
+  //  gp_Lin aLine(aPnt1, gp_Vec(aPnt1, aPnt2));
+  //  aDist = aLine.Distance(aFlyPnt);
+  //}
+
+  //gp_XYZ aLineDir = aPnt2.XYZ().Subtracted(aPnt1.XYZ());
+  //gp_XYZ aFOutDir = aFlyPnt.XYZ().Subtracted(aPnt1.XYZ());
+  //gp_XYZ aNorm = myPlane->norm()->xyz()->impl<gp_XYZ>();
+  //if (aLineDir.Crossed(aFOutDir).Dot(aNorm) < 0)
+  //  aDist = -aDist;
+  //aFlyout = aDist;
+
+  //SetFlyout(aFlyout);
+  SetFlyout(SketcherPrs_Tools::getFlyoutDistance(myConstraint));
   SetMeasuredGeometry(aPnt1, aPnt2, myPlane->impl<gp_Ax3>());
   AIS_LengthDimension::Compute(thePresentationManager, thePresentation, theMode);
 }
@@ -151,3 +152,31 @@ bool SketcherPrs_LengthDimension::getPoints(gp_Pnt& thePnt1, gp_Pnt& thePnt2) co
   }
   return false;
 }
+
+
+
+void SketcherPrs_LengthDimension::ComputeSelection(const Handle(SelectMgr_Selection)& aSelection,
+                                                   const Standard_Integer theMode)
+{
+  Standard_Integer aMode;
+  switch (theMode) {
+  case 0: // we should use selection of all objects
+    aMode = 0;
+    break;
+  case SketcherPrs_Tools::Sel_Dimension_All:
+    aMode = 0;
+    break;
+  case SketcherPrs_Tools::Sel_Dimension_Line:
+    aMode = 1;
+    break;
+  case SketcherPrs_Tools::Sel_Dimension_Text:
+    aMode = 2;
+    break;
+  default: {
+    // there are own selection modes, so the others should be ignored
+    // otherwise, the text selection appears in the viewer
+    return;
+  }
+  }
+  AIS_LengthDimension::ComputeSelection(aSelection, aMode);
+}