X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketcherPrs%2FSketcherPrs_LengthDimension.cpp;h=347d8b12cd50e044fa905990b8f92a795f0af835;hb=64fc7e4fdd63997ec7a502b233ef5f88186d5bbb;hp=a1564129b502605fd0456b6c8bee5b6da81f1fc1;hpb=a1f792970074d097f2f8a408dfcae5f6c263a6ca;p=modules%2Fshaper.git diff --git a/src/SketcherPrs/SketcherPrs_LengthDimension.cpp b/src/SketcherPrs/SketcherPrs_LengthDimension.cpp index a1564129b..347d8b12c 100644 --- a/src/SketcherPrs/SketcherPrs_LengthDimension.cpp +++ b/src/SketcherPrs/SketcherPrs_LengthDimension.cpp @@ -40,10 +40,10 @@ myConstraint(theConstraint), myPlane(thePlane) myAspect->MakeText3d(false); myAspect->MakeTextShaded(false); myAspect->MakeUnitsDisplayed(false); - myAspect->TextAspect()->SetHeight(MyTextHeight); + myAspect->TextAspect()->SetHeight(SketcherPrs_Tools::getDefaultTextHeight()); myAspect->ArrowAspect()->SetLength(SketcherPrs_Tools::getArrowSize()); - SetSelToleranceForText2d(MyTextHeight); + SetSelToleranceForText2d(SketcherPrs_Tools::getTextHeight()); SetDimensionAspect(myAspect); } @@ -55,41 +55,15 @@ 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 aFlyOutAttr = - std::dynamic_pointer_cast(aFlyOutAttribute); - std::shared_ptr aFlyoutPnt = myPlane->to3D(aFlyOutAttr->x(), aFlyOutAttr->y()); - gp_Pnt aFlyPnt = aFlyoutPnt->impl(); - - 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); - } + myAspect->SetExtensionSize(myAspect->ArrowAspect()->Length()); + myAspect->SetArrowTailSize(myAspect->ArrowAspect()->Length()); - gp_XYZ aLineDir = aPnt2.XYZ().Subtracted(aPnt1.XYZ()); - gp_XYZ aFOutDir = aFlyPnt.XYZ().Subtracted(aPnt1.XYZ()); - gp_XYZ aNorm = myPlane->norm()->xyz()->impl(); - if (aLineDir.Crossed(aFOutDir).Dot(aNorm) < 0) - aDist = -aDist; - aFlyout = aDist; - - SetFlyout(aFlyout); + SetFlyout(SketcherPrs_Tools::getFlyoutDistance(myConstraint)); SetMeasuredGeometry(aPnt1, aPnt2, myPlane->impl()); AIS_LengthDimension::Compute(thePresentationManager, thePresentation, theMode); } -bool SketcherPrs_LengthDimension::getPoints(gp_Pnt& thePnt1, gp_Pnt& thePnt2) const +bool SketcherPrs_LengthDimension::getPoints(gp_Pnt& thePnt1, gp_Pnt& thePnt2) { DataPtr aData = myConstraint->data(); if (myConstraint->getKind() == SketchPlugin_ConstraintLength::ID()) { @@ -116,9 +90,9 @@ bool SketcherPrs_LengthDimension::getPoints(gp_Pnt& thePnt1, gp_Pnt& thePnt2) co } else if (myConstraint->getKind() == SketchPlugin_ConstraintDistance::ID()) { std::shared_ptr aPoint_A = SketcherPrs_Tools::getFeaturePoint( - aData, SketchPlugin_Constraint::ENTITY_A()); + aData, SketchPlugin_Constraint::ENTITY_A(), myPlane); std::shared_ptr aPoint_B = SketcherPrs_Tools::getFeaturePoint( - aData, SketchPlugin_Constraint::ENTITY_B()); + aData, SketchPlugin_Constraint::ENTITY_B(), myPlane); std::shared_ptr aPnt_A; std::shared_ptr aPnt_B; @@ -151,3 +125,32 @@ 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; + } + } + SetSelToleranceForText2d(SketcherPrs_Tools::getTextHeight()); + AIS_LengthDimension::ComputeSelection(aSelection, aMode); +}