X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketcherPrs%2FSketcherPrs_LengthDimension.cpp;h=347d8b12cd50e044fa905990b8f92a795f0af835;hb=64fc7e4fdd63997ec7a502b233ef5f88186d5bbb;hp=17c316afc3a414b606b02a66dc792276ac62f74b;hpb=33b3a43ad2266cb044e4232c902344842adbba7c;p=modules%2Fshaper.git diff --git a/src/SketcherPrs/SketcherPrs_LengthDimension.cpp b/src/SketcherPrs/SketcherPrs_LengthDimension.cpp index 17c316afc..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); - } - - 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; + myAspect->SetExtensionSize(myAspect->ArrowAspect()->Length()); + myAspect->SetArrowTailSize(myAspect->ArrowAspect()->Length()); - 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; @@ -159,6 +133,9 @@ void SketcherPrs_LengthDimension::ComputeSelection(const Handle(SelectMgr_Select { 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; @@ -168,8 +145,12 @@ void SketcherPrs_LengthDimension::ComputeSelection(const Handle(SelectMgr_Select case SketcherPrs_Tools::Sel_Dimension_Text: aMode = 2; break; - default: - aMode = theMode; + 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); }