]> 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 65b067782dcf50b1a9e48efc7241a5c66b3b5ea8..9a4509794036c4cfdca5447d6441b4b3b27b54d8 100644 (file)
@@ -30,7 +30,7 @@ static const gp_Pln MyDefPln(gp_Pnt(0,0,0), gp_Dir(0,0,1));
 IMPLEMENT_STANDARD_HANDLE(SketcherPrs_LengthDimension, AIS_LengthDimension);
 IMPLEMENT_STANDARD_RTTIEXT(SketcherPrs_LengthDimension, AIS_LengthDimension);
 
-SketcherPrs_LengthDimension::SketcherPrs_LengthDimension(SketchPlugin_Constraint* theConstraint, 
+SketcherPrs_LengthDimension::SketcherPrs_LengthDimension(ModelAPI_Feature* theConstraint, 
                         const std::shared_ptr<GeomAPI_Ax3>& thePlane)
 : AIS_LengthDimension(MyDefStart, MyDefEnd, MyDefPln), 
 myConstraint(theConstraint), myPlane(thePlane)
@@ -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);
 }
@@ -126,14 +127,14 @@ bool SketcherPrs_LengthDimension::getPoints(gp_Pnt& thePnt1, gp_Pnt& thePnt2) co
       aPnt_A = aPoint_A->pnt();
       aPnt_B = aPoint_B->pnt();
     } else if (!aPoint_A && aPoint_B) {
-      std::shared_ptr<SketchPlugin_Line> aLine = SketcherPrs_Tools::getFeatureLine(
+      FeaturePtr aLine = SketcherPrs_Tools::getFeatureLine(
           aData, SketchPlugin_Constraint::ENTITY_A());
       if (aLine) {
         aPnt_B = aPoint_B->pnt();
         aPnt_A = SketcherPrs_Tools::getProjectionPoint(aLine, aPnt_B);
       }
     } else if (aPoint_A && !aPoint_B) {
-      std::shared_ptr<SketchPlugin_Line> aLine = SketcherPrs_Tools::getFeatureLine(
+      FeaturePtr aLine = SketcherPrs_Tools::getFeatureLine(
           aData, SketchPlugin_Constraint::ENTITY_B());
       if (aLine) {
         aPnt_A = aPoint_A->pnt();
@@ -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);
+}