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)
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);
}