X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FFeaturesPlugin%2FFeaturesPlugin_Measurement.cpp;h=9f3f9f003f0f2ddbe48f2fcbca12b78d8b54a782;hb=539608b3f0642b0fc2d8c914411e621e01d5c8e5;hp=7d04b88d6103364ca634c3b9ad0d03ddb67dbbff;hpb=d4b0a5cb916f4eccf4a0bce02e43a54c7a67cb93;p=modules%2Fshaper.git diff --git a/src/FeaturesPlugin/FeaturesPlugin_Measurement.cpp b/src/FeaturesPlugin/FeaturesPlugin_Measurement.cpp index 7d04b88d6..9f3f9f003 100644 --- a/src/FeaturesPlugin/FeaturesPlugin_Measurement.cpp +++ b/src/FeaturesPlugin/FeaturesPlugin_Measurement.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2018-20xx CEA/DEN, EDF R&D +// Copyright (C) 2018-2022 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -12,10 +12,9 @@ // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or -// email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // #include "FeaturesPlugin_Measurement.h" @@ -42,9 +41,10 @@ #include #include #include -#include -#include -#include +#include +#include +#include +#include #include #include @@ -125,6 +125,15 @@ void FeaturesPlugin_Measurement::computeLength() std::ostringstream anOutput; anOutput << "Length = " << std::setprecision(10) << anEdge->length(); + if(anEdge->isLine()) + { + auto point1 = anEdge->firstPoint(); + auto point2 = anEdge->lastPoint(); + + anOutput <<"\n|dx| = " << std::setprecision(10) << std::abs(point2->x() - point1->x()) + <<"\n|dy| = " << std::setprecision(10) << std::abs(point2->y() - point1->y()) + <<"\n|dz| = " << std::setprecision(10) << std::abs(point2->z() - point1->z()); + } string(RESULT_ID())->setValue(anOutput.str()); AttributeDoubleArrayPtr aValues = @@ -156,10 +165,14 @@ void FeaturesPlugin_Measurement::computeDistance() return; } - double aDistance = GeomAlgoAPI_ShapeTools::minimalDistance(aShape1, aShape2); + std::array fromShape1To2; + double aDistance = GeomAlgoAPI_ShapeTools::minimalDistance(aShape1, aShape2, fromShape1To2); std::ostringstream anOutput; - anOutput << "Distance = " << std::setprecision(10) << aDistance; + anOutput << "Distance = " << std::setprecision(10) << aDistance + <<"\n|dx| = " << std::setprecision(10) << std::abs(fromShape1To2[0]) + <<"\n|dy| = " << std::setprecision(10) << std::abs(fromShape1To2[1]) + <<"\n|dz| = " << std::setprecision(10) << std::abs(fromShape1To2[2]); string(RESULT_ID())->setValue(anOutput.str()); AttributeDoubleArrayPtr aValues = @@ -381,13 +394,13 @@ AISObjectPtr FeaturesPlugin_Measurement::lengthDimension(AISObjectPtr thePreviou aPlane = gp_Pln(aPnt1, aPlane.XAxis().Direction()); } - Handle(AIS_LengthDimension) aDim; + Handle(PrsDim_LengthDimension) aDim; if (thePrevious.get()) { aAISObj = thePrevious; Handle(AIS_InteractiveObject) aAIS = aAISObj->impl(); - aDim = Handle(AIS_LengthDimension)::DownCast(aAIS); + aDim = Handle(PrsDim_LengthDimension)::DownCast(aAIS); if (aDim.IsNull()) { - aDim = new AIS_LengthDimension(aTEdge, aPlane); + aDim = new PrsDim_LengthDimension(aTEdge, aPlane); aAISObj = AISObjectPtr(new GeomAPI_AISObject()); aAISObj->setImpl(new Handle(AIS_InteractiveObject)(aDim)); } @@ -396,7 +409,7 @@ AISObjectPtr FeaturesPlugin_Measurement::lengthDimension(AISObjectPtr thePreviou } } else { - aDim = new AIS_LengthDimension(aTEdge, aPlane); + aDim = new PrsDim_LengthDimension(aTEdge, aPlane); aAISObj = AISObjectPtr(new GeomAPI_AISObject()); aAISObj->setImpl(new Handle(AIS_InteractiveObject)(aDim)); } @@ -444,13 +457,13 @@ AISObjectPtr FeaturesPlugin_Measurement::distanceDimension(AISObjectPtr thePrevi aPlane = gp_Pln(aPnt1, aPlane.XAxis().Direction()); } - Handle(AIS_LengthDimension) aDim; + Handle(PrsDim_LengthDimension) aDim; if (thePrevious.get()) { aAISObj = thePrevious; Handle(AIS_InteractiveObject) aAIS = aAISObj->impl(); - aDim = Handle(AIS_LengthDimension)::DownCast(aAIS); + aDim = Handle(PrsDim_LengthDimension)::DownCast(aAIS); if (aDim.IsNull()) { - aDim = new AIS_LengthDimension(aPnt1, aPnt2, aPlane); + aDim = new PrsDim_LengthDimension(aPnt1, aPnt2, aPlane); aAISObj = AISObjectPtr(new GeomAPI_AISObject()); aAISObj->setImpl(new Handle(AIS_InteractiveObject)(aDim)); } @@ -461,7 +474,7 @@ AISObjectPtr FeaturesPlugin_Measurement::distanceDimension(AISObjectPtr thePrevi } else { aAISObj = AISObjectPtr(new GeomAPI_AISObject()); - aDim = new AIS_LengthDimension(aPnt1, aPnt2, aPlane); + aDim = new PrsDim_LengthDimension(aPnt1, aPnt2, aPlane); aAISObj->setImpl(new Handle(AIS_InteractiveObject)(aDim)); } aDim->SetFlyout(aDistance / 3.); @@ -485,20 +498,19 @@ AISObjectPtr FeaturesPlugin_Measurement::radiusDimension(AISObjectPtr thePreviou } if (aShape.get()) { TopoDS_Shape aShp = aShape->impl(); - Handle(AIS_RadiusDimension) aDim; if (thePrevious.get()) { aAISObj = thePrevious; Handle(AIS_InteractiveObject) aAIS = aAISObj->impl(); - Handle(AIS_RadiusDimension) aDim = Handle(AIS_RadiusDimension)::DownCast(aAIS); + Handle(PrsDim_RadiusDimension) aDim = Handle(PrsDim_RadiusDimension)::DownCast(aAIS); if (aDim.IsNull()) { - aDim = new AIS_RadiusDimension(aShp); + aDim = new PrsDim_RadiusDimension(aShp); aAISObj = AISObjectPtr(new GeomAPI_AISObject()); aAISObj->setImpl(new Handle(AIS_InteractiveObject)(aDim)); } else aDim->SetMeasuredGeometry(aShp); } else { aAISObj = AISObjectPtr(new GeomAPI_AISObject()); - Handle(AIS_RadiusDimension) aDim = new AIS_RadiusDimension(aShp); + Handle(PrsDim_RadiusDimension) aDim = new PrsDim_RadiusDimension(aShp); aAISObj->setImpl(new Handle(AIS_InteractiveObject)(aDim)); } } @@ -534,20 +546,20 @@ AISObjectPtr FeaturesPlugin_Measurement::angleDimension(AISObjectPtr thePrevious TopoDS_Edge aTEdge1 = TopoDS::Edge(anEdge1->impl()); TopoDS_Edge aTEdge2 = TopoDS::Edge(anEdge2->impl()); - Handle(AIS_AngleDimension) aDim; + Handle(PrsDim_AngleDimension) aDim; if (thePrevious.get()) { aAISObj = thePrevious; Handle(AIS_InteractiveObject) aAIS = aAISObj->impl(); - aDim = Handle(AIS_AngleDimension)::DownCast(aAIS); + aDim = Handle(PrsDim_AngleDimension)::DownCast(aAIS); if (aDim.IsNull()) { - aDim = new AIS_AngleDimension(aTEdge1, aTEdge2); + aDim = new PrsDim_AngleDimension(aTEdge1, aTEdge2); aAISObj = AISObjectPtr(new GeomAPI_AISObject()); aAISObj->setImpl(new Handle(AIS_InteractiveObject)(aDim)); } else aDim->SetMeasuredGeometry(aTEdge1, aTEdge2); } else { aAISObj = AISObjectPtr(new GeomAPI_AISObject()); - aDim = new AIS_AngleDimension(aTEdge1, aTEdge2); + aDim = new PrsDim_AngleDimension(aTEdge1, aTEdge2); aAISObj->setImpl(new Handle(AIS_InteractiveObject)(aDim)); } } @@ -577,15 +589,15 @@ AISObjectPtr FeaturesPlugin_Measurement::angleByPointsDimension(AISObjectPtr the if (thePrevious.get()) { aAISObj = thePrevious; Handle(AIS_InteractiveObject) aAIS = aAISObj->impl(); - Handle(AIS_AngleDimension) aDim = Handle(AIS_AngleDimension)::DownCast(aAIS); + Handle(PrsDim_AngleDimension) aDim = Handle(PrsDim_AngleDimension)::DownCast(aAIS); if (aDim.IsNull()) { - aDim = new AIS_AngleDimension(aPnt1, aPnt2, aPnt3); + aDim = new PrsDim_AngleDimension(aPnt1, aPnt2, aPnt3); aAISObj = AISObjectPtr(new GeomAPI_AISObject()); aAISObj->setImpl(new Handle(AIS_InteractiveObject)(aDim)); } else aDim->SetMeasuredGeometry(aPnt1, aPnt2, aPnt3); } else { - Handle(AIS_AngleDimension) aDim = new AIS_AngleDimension(aPnt1, aPnt2, aPnt3); + Handle(PrsDim_AngleDimension) aDim = new PrsDim_AngleDimension(aPnt1, aPnt2, aPnt3); aAISObj = AISObjectPtr(new GeomAPI_AISObject()); aAISObj->setImpl(new Handle(AIS_InteractiveObject)(aDim)); } @@ -598,7 +610,7 @@ void FeaturesPlugin_Measurement::setupDimension(AISObjectPtr theDim) { if (theDim.get()) { Handle(AIS_InteractiveObject) aAIS = theDim->impl(); - Handle(AIS_Dimension) aDim = Handle(AIS_Dimension)::DownCast(aAIS); + Handle(PrsDim_Dimension) aDim = Handle(PrsDim_Dimension)::DownCast(aAIS); int aSize = Config_PropManager::integer("Visualization", "dimension_arrow_size"); int aTextSize = Config_PropManager::integer("Visualization", "dimension_value_size"); std::string aFont = Config_PropManager::string("Visualization", "dimension_font"); @@ -615,7 +627,7 @@ void FeaturesPlugin_Measurement::setupDimension(AISObjectPtr theDim) anAspect->SetExtensionSize((aTextSize / mySceenScale + aSize) / 2.0); aDim->SetDimensionAspect(anAspect); - aDim->SetZLayer(1); + aDim->SetZLayer(Graphic3d_ZLayerId_Top); std::vector aColor = Config_PropManager::color("Visualization", "sketch_dimension_color"); theDim->setColor(aColor[0], aColor[1], aColor[2]); }