Salome HOME
Fix for the issue #1202 : update the shape of the referenced plane
[modules/shaper.git] / src / SketcherPrs / SketcherPrs_Radius.cpp
index 011555ffae0a6d237e35dca44dc8d750e6594928..458bf517b8fb06c9d64cbf088bc78637a1c85492 100644 (file)
@@ -25,10 +25,14 @@ static const gp_Circ MyDefCirc(gp_Ax2(gp_Pnt(0,0,0), gp_Dir(0,0,1)), 1);
 IMPLEMENT_STANDARD_HANDLE(SketcherPrs_Radius, AIS_RadiusDimension);
 IMPLEMENT_STANDARD_RTTIEXT(SketcherPrs_Radius, AIS_RadiusDimension);
 
+static const Standard_ExtCharacter MyEmptySymbol(' ');
+static const Standard_ExtCharacter MySummSymbol(0x03A3);
+
 SketcherPrs_Radius::SketcherPrs_Radius(ModelAPI_Feature* theConstraint, 
                                        const std::shared_ptr<GeomAPI_Ax3>& thePlane)
 : AIS_RadiusDimension(MyDefCirc), myConstraint(theConstraint), myPlane(thePlane)
 {
+  // Set default values of the presentation
   myAspect = new Prs3d_DimensionAspect();
   myAspect->MakeArrows3d(false);
   myAspect->MakeText3d(false);
@@ -83,7 +87,7 @@ void SketcherPrs_Radius::Compute(const Handle(PrsMgr_PresentationManager3d)& the
     aRadius = aCenterAttr->pnt()->distance(aStartAttr->pnt());
   }
   std::shared_ptr<GeomAPI_Pnt> aCenter = myPlane->to3D(aCenterAttr->x(), aCenterAttr->y());
-  std::shared_ptr<GeomAPI_Dir> aNormal = myPlane->norm();
+  std::shared_ptr<GeomAPI_Dir> aNormal = myPlane->normal();
 
   GeomAPI_Circ aCircle(aCenter, aNormal, aRadius);
     
@@ -100,6 +104,19 @@ void SketcherPrs_Radius::Compute(const Handle(PrsMgr_PresentationManager3d)& the
 
   myAspect->SetExtensionSize(myAspect->ArrowAspect()->Length());
   myAspect->SetArrowTailSize(myAspect->ArrowAspect()->Length());
+  // The value of vertical aligment is sometimes changed
+  myAspect->TextAspect()->SetVerticalJustification(Graphic3d_VTA_CENTER);
+
+  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_RadiusDimension::Compute(thePresentationManager, thePresentation, theMode);
 }
@@ -107,6 +124,7 @@ void SketcherPrs_Radius::Compute(const Handle(PrsMgr_PresentationManager3d)& the
 void SketcherPrs_Radius::ComputeSelection(const Handle(SelectMgr_Selection)& aSelection,
                                                    const Standard_Integer theMode)
 {
+  // Map the application selection modes to standard ones
   Standard_Integer aMode;
   switch (theMode) {
   case 0: // we should use selection of all objects