X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketcherPrs%2FSketcherPrs_LengthDimension.cpp;h=8f93fd0eae6fcfd3dd7f3cd9f2e4e8a7d1662504;hb=752c9e02e6aa8ced24e9b53097cb42540d5e6a08;hp=ea58e65150922a2f14ebdeecaa74a6a7627f3d78;hpb=a8ed41e2ed5a9528335f0a5d1a2203f35048620e;p=modules%2Fshaper.git diff --git a/src/SketcherPrs/SketcherPrs_LengthDimension.cpp b/src/SketcherPrs/SketcherPrs_LengthDimension.cpp index ea58e6515..8f93fd0ea 100644 --- a/src/SketcherPrs/SketcherPrs_LengthDimension.cpp +++ b/src/SketcherPrs/SketcherPrs_LengthDimension.cpp @@ -21,12 +21,17 @@ #include #include +#include + +#include static const gp_Pnt MyDefStart(0,0,0); static const gp_Pnt MyDefEnd(1,0,0); static const gp_Pln MyDefPln(gp_Pnt(0,0,0), gp_Dir(0,0,1)); +static const Standard_ExtCharacter MySummSymbol(0x2211); + IMPLEMENT_STANDARD_HANDLE(SketcherPrs_LengthDimension, AIS_LengthDimension); IMPLEMENT_STANDARD_RTTIEXT(SketcherPrs_LengthDimension, AIS_LengthDimension); @@ -55,8 +60,25 @@ void SketcherPrs_LengthDimension::Compute(const Handle(PrsMgr_PresentationManage gp_Pnt aPnt1, aPnt2; if (!getPoints(aPnt1, aPnt2)) return; + + // compute flyout distance + double aD = SketcherPrs_Tools::getFlyoutDistance(myConstraint); SetFlyout(SketcherPrs_Tools::getFlyoutDistance(myConstraint)); SetMeasuredGeometry(aPnt1, aPnt2, myPlane->impl()); + + // Update variable aspect parameters (depending on viewer scale) + 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 aParams = aValue->usedParameters(); + if (aParams.size() > 0) { + SetSpecialSymbol(MySummSymbol); + SetDisplaySpecialSymbol(AIS_DSS_Before); + } + AIS_LengthDimension::Compute(thePresentationManager, thePresentation, theMode); } @@ -64,6 +86,7 @@ bool SketcherPrs_LengthDimension::getPoints(gp_Pnt& thePnt1, gp_Pnt& thePnt2) { DataPtr aData = myConstraint->data(); if (myConstraint->getKind() == SketchPlugin_ConstraintLength::ID()) { + // The constraint is length std::shared_ptr anAttr = std::dynamic_pointer_cast (aData->attribute(SketchPlugin_Constraint::ENTITY_A())); @@ -74,6 +97,7 @@ bool SketcherPrs_LengthDimension::getPoints(gp_Pnt& thePnt1, gp_Pnt& thePnt2) if (!aFeature || aFeature->getKind() != SketchPlugin_Line::ID()) return false; + // Get geometry of the object DataPtr aLineData = aFeature->data(); std::shared_ptr aStartPoint = std::dynamic_pointer_cast @@ -86,6 +110,7 @@ bool SketcherPrs_LengthDimension::getPoints(gp_Pnt& thePnt1, gp_Pnt& thePnt2) return true; } else if (myConstraint->getKind() == SketchPlugin_ConstraintDistance::ID()) { + // The constraint is distance std::shared_ptr aPoint_A = SketcherPrs_Tools::getFeaturePoint( aData, SketchPlugin_Constraint::ENTITY_A(), myPlane); std::shared_ptr aPoint_B = SketcherPrs_Tools::getFeaturePoint( @@ -94,9 +119,11 @@ bool SketcherPrs_LengthDimension::getPoints(gp_Pnt& thePnt1, gp_Pnt& thePnt2) std::shared_ptr aPnt_A; std::shared_ptr aPnt_B; if (aPoint_A && aPoint_B) { + // Both objects are points aPnt_A = aPoint_A->pnt(); aPnt_B = aPoint_B->pnt(); } else if (!aPoint_A && aPoint_B) { + // First object is line FeaturePtr aLine = SketcherPrs_Tools::getFeatureLine( aData, SketchPlugin_Constraint::ENTITY_A()); if (aLine) { @@ -104,6 +131,7 @@ bool SketcherPrs_LengthDimension::getPoints(gp_Pnt& thePnt1, gp_Pnt& thePnt2) aPnt_A = SketcherPrs_Tools::getProjectionPoint(aLine, aPnt_B); } } else if (aPoint_A && !aPoint_B) { + // Second object is line FeaturePtr aLine = SketcherPrs_Tools::getFeatureLine( aData, SketchPlugin_Constraint::ENTITY_B()); if (aLine) { @@ -111,9 +139,10 @@ bool SketcherPrs_LengthDimension::getPoints(gp_Pnt& thePnt1, gp_Pnt& thePnt2) aPnt_B = SketcherPrs_Tools::getProjectionPoint(aLine, aPnt_A); } } - if (!aPnt_A || !aPnt_B) + if (!aPnt_A || !aPnt_B) // Objects not found return false; + // Get points from these objects std::shared_ptr aPoint1 = myPlane->to3D(aPnt_A->x(), aPnt_A->y()); std::shared_ptr aPoint2 = myPlane->to3D(aPnt_B->x(), aPnt_B->y()); thePnt1 = aPoint1->impl(); @@ -128,6 +157,7 @@ bool SketcherPrs_LengthDimension::getPoints(gp_Pnt& thePnt1, gp_Pnt& thePnt2) void SketcherPrs_LengthDimension::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