Salome HOME
Delete key regression corrections: in previous implementation sketch entities did...
[modules/shaper.git] / src / SketcherPrs / SketcherPrs_Angle.cpp
index 085aa754cf5598dd2ad0d98b1813438d3ba40710..6304a51bdcde54a7e51c6eb4204614fe83b3a3bf 100644 (file)
@@ -26,8 +26,8 @@ IMPLEMENT_STANDARD_HANDLE(SketcherPrs_Angle, AIS_AngleDimension);
 IMPLEMENT_STANDARD_RTTIEXT(SketcherPrs_Angle, AIS_AngleDimension);
 
 
-
-
+static const Standard_ExtCharacter MyEmptySymbol(' ');
+static const Standard_ExtCharacter MySummSymbol(0x03A3);
 
 SketcherPrs_Angle::SketcherPrs_Angle(ModelAPI_Feature* theConstraint, 
                                      const std::shared_ptr<GeomAPI_Ax3>& thePlane)
@@ -85,30 +85,35 @@ void SketcherPrs_Angle::Compute(const Handle(PrsMgr_PresentationManager3d)& theP
   TopoDS_Edge aEdge2 = TopoDS::Edge(aTEdge2);
   SetMeasuredGeometry(aEdge1, aEdge2);
 
-  // Compute intersection point
-  TopoDS_Vertex aV1, aV2;
-  TopExp::Vertices(aEdge1, aV1, aV2);
-  gp_Pnt aPnt1 = BRep_Tool::Pnt(aV1);
-  gp_Pnt aPnt2 = BRep_Tool::Pnt(aV2);
-  std::shared_ptr<GeomAPI_Lin> aL1(new GeomAPI_Lin(aPnt1.X(), aPnt1.Y(), aPnt1.Z(),
-                                                   aPnt2.X(), aPnt2.Y(), aPnt2.Z()));
-  TopExp::Vertices(aEdge2, aV1, aV2);
-  aPnt1 = BRep_Tool::Pnt(aV1);
-  aPnt2 = BRep_Tool::Pnt(aV2);
-  std::shared_ptr<GeomAPI_Lin> aL2(new GeomAPI_Lin(aPnt1.X(), aPnt1.Y(), aPnt1.Z(),
-                                                   aPnt2.X(), aPnt2.Y(), aPnt2.Z()));
-
-  std::shared_ptr<GeomAPI_Pnt> aInter = aL1->intersect(aL2);
-  gp_Pnt aCenter = aInter->impl<gp_Pnt>();
-
-  gp_Pnt aFLyPnt(aFlyoutPnt->x(), aFlyoutPnt->y(), aFlyoutPnt->z());
-  double aDist = aCenter.Distance(aFLyPnt);
+  const gp_Pnt& aCenter = CenterPoint();
+  const gp_Pnt& aFirst = FirstPoint();
+  const gp_Pnt& aSecond = SecondPoint();
+
+  gp_Dir aBisector((aFirst.XYZ() + aSecond.XYZ()) * 0.5 - aCenter.XYZ());
+
+  gp_Pnt aFlyPnt(aFlyoutPnt->x(), aFlyoutPnt->y(), aFlyoutPnt->z());
+  gp_XYZ aFlyDir = aFlyPnt.XYZ() - aCenter.XYZ();
+  double aDist = aFlyDir.Dot(aBisector.XYZ());
   SetFlyout(aDist);
 
   // Angle value is in degrees
   AttributeDoublePtr aVal = aData->real(SketchPlugin_Constraint::VALUE());
   SetCustomValue(aVal->value() * PI / 180.0);
 
+  myAspect->SetExtensionSize(myAspect->ArrowAspect()->Length());
+  myAspect->SetArrowTailSize(myAspect->ArrowAspect()->Length());
+
+  AttributeDoublePtr aValue = myConstraint->data()->real(SketchPlugin_Constraint::VALUE());
+  std::set<std::string> aParams = aValue->usedParameters();
+  if (aParams.size() > 0) {
+    SetSpecialSymbol(MySummSymbol);
+    SetDisplaySpecialSymbol(AIS_DSS_Before);
+  }
+  else {
+    SetSpecialSymbol(MyEmptySymbol);
+    SetDisplaySpecialSymbol(AIS_DSS_Before);
+  }
+
   AIS_AngleDimension::Compute(thePresentationManager, thePresentation, theMode);
 }