From de02063f052995d4f7cbef0d2ee78bebc3a34199 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Armandas=20Jaru=C5=A1auskas?= Date: Fri, 15 May 2020 20:57:52 +0900 Subject: [PATCH] PartDesign: Chamfer - updated parameter validation code. --- src/Mod/PartDesign/App/FeatureChamfer.cpp | 59 +++++++++++++++-------- 1 file changed, 40 insertions(+), 19 deletions(-) diff --git a/src/Mod/PartDesign/App/FeatureChamfer.cpp b/src/Mod/PartDesign/App/FeatureChamfer.cpp index a5e35b5241..d98d1e0318 100644 --- a/src/Mod/PartDesign/App/FeatureChamfer.cpp +++ b/src/Mod/PartDesign/App/FeatureChamfer.cpp @@ -56,6 +56,8 @@ const char* ChamferTypeEnums[] = {"Equal distance", "Two distances", "Distance a const App::PropertyQuantityConstraint::Constraints floatSize = {0.0,FLT_MAX,0.1}; const App::PropertyAngle::Constraints floatAngle = {0.0,180.0,0.1}; +static App::DocumentObjectExecReturn *validateParameters(int chamferType, double size, double size2, double angle); + Chamfer::Chamfer() { ADD_PROPERTY(ChamferType, ((long)0)); @@ -101,7 +103,12 @@ App::DocumentObjectExecReturn *Chamfer::execute(void) const int chamferType = ChamferType.getValue(); const double size = Size.getValue(); const double size2 = Size2.getValue(); - const double angle = Base::toRadians(Angle.getValue()); + const double angle = Angle.getValue(); + + auto res = validateParameters(chamferType, size, size2, angle); + if (res != App::DocumentObject::StdReturn) { + return res; + } this->positionByBaseFeature(); // create an untransformed copy of the basefeature shape @@ -119,26 +126,14 @@ App::DocumentObjectExecReturn *Chamfer::execute(void) TopoDS_Edge edge = TopoDS::Edge(baseShape.getSubShape(it->c_str())); const TopoDS_Face& face = TopoDS::Face(mapEdgeFace.FindFromKey(edge).First()); switch (chamferType) { - case 0: - if (size <= 0) { - return new App::DocumentObjectExecReturn("Size must be greater than zero"); - } else { - mkChamfer.Add(size, size, edge, face); - } + case 0: // Equal distance + mkChamfer.Add(size, size, edge, face); break; - case 1: - if (size <= 0 || size2 <= 0) { - return new App::DocumentObjectExecReturn("Sizes must be greater than zero"); - } else { - mkChamfer.Add(size, size2, edge, face); - } + case 1: // Two distances + mkChamfer.Add(size, size2, edge, face); break; - case 2: - if (angle <= 0 || angle >= 180.0) { - return new App::DocumentObjectExecReturn("Angle must be greater than 0 and less than 180"); - } else { - mkChamfer.AddDA(size, angle, edge, face); - } + case 2: // Distance and angle + mkChamfer.AddDA(size, Base::toRadians(angle), edge, face); break; } } @@ -211,3 +206,29 @@ void Chamfer::Restore(Base::XMLReader &reader) } reader.readEndElement("Properties"); } + +static App::DocumentObjectExecReturn *validateParameters(int chamferType, double size, double size2, double angle) +{ + // Size is common to all chamfer types. + if (size <= 0) { + return new App::DocumentObjectExecReturn("Size must be greater than zero"); + } + + switch (chamferType) { + case 0: // Equal distance + // Nothing to do. + break; + case 1: // Two distances + if (size2 <= 0) { + return new App::DocumentObjectExecReturn("Size2 must be greater than zero"); + } + break; + case 2: // Distance and angle + if (angle <= 0 || angle >= 180.0) { + return new App::DocumentObjectExecReturn("Angle must be greater than 0 and less than 180"); + } + break; + } + + return App::DocumentObject::StdReturn; +}