X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketcherPrs%2FSketcherPrs_LengthDimension.cpp;h=24977ecee183754414167f5ef6bf6ea5e1cd766a;hb=497397f795254cb5adf0d727f5858d5aeb16eaf3;hp=d2b062bfd10b70f8c0d30629f677de10584378a5;hpb=0eee839530dc4220014d03e30887e9a3c7773e33;p=modules%2Fshaper.git diff --git a/src/SketcherPrs/SketcherPrs_LengthDimension.cpp b/src/SketcherPrs/SketcherPrs_LengthDimension.cpp index d2b062bfd..24977ecee 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,45 +55,26 @@ 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; - - //SetFlyout(aFlyout); - SetFlyout(SketcherPrs_Tools::getFlyoutDistance(myConstraint, myPlane)); + + // 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); + 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()) { + // The constraint is length std::shared_ptr anAttr = std::dynamic_pointer_cast (aData->attribute(SketchPlugin_Constraint::ENTITY_A())); @@ -104,6 +85,7 @@ bool SketcherPrs_LengthDimension::getPoints(gp_Pnt& thePnt1, gp_Pnt& thePnt2) co 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 @@ -116,17 +98,20 @@ bool SketcherPrs_LengthDimension::getPoints(gp_Pnt& thePnt1, gp_Pnt& thePnt2) co 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()); + 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; 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) { @@ -134,6 +119,7 @@ bool SketcherPrs_LengthDimension::getPoints(gp_Pnt& thePnt1, gp_Pnt& thePnt2) co 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) { @@ -141,9 +127,10 @@ bool SketcherPrs_LengthDimension::getPoints(gp_Pnt& thePnt1, gp_Pnt& thePnt2) co 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(); @@ -158,8 +145,12 @@ bool SketcherPrs_LengthDimension::getPoints(gp_Pnt& thePnt1, gp_Pnt& thePnt2) co 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 + aMode = 0; + break; case SketcherPrs_Tools::Sel_Dimension_All: aMode = 0; break; @@ -169,8 +160,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); }