diff --git a/src/Mod/Path/App/Command.cpp b/src/Mod/Path/App/Command.cpp index 2a7c5422e6..88785ec7aa 100644 --- a/src/Mod/Path/App/Command.cpp +++ b/src/Mod/Path/App/Command.cpp @@ -58,68 +58,38 @@ Command::~Command() // New methods -Placement Command::getPlacement (void) +Placement Command::getPlacement (void) const { - std::string x = "X"; - std::string y = "Y"; - std::string z = "Z"; - std::string a = "A"; - std::string b = "B"; - std::string c = "C"; - double xval = 0.0; - double yval = 0.0; - double zval = 0.0; - double aval = 0.0; - double bval = 0.0; - double cval = 0.0; - if (Parameters.count(x)) - xval = Parameters[x]; - if (Parameters.count(y)) - yval = Parameters[y]; - if (Parameters.count(z)) - zval = Parameters[z]; - if (Parameters.count(a)) - aval = Parameters[a]; - if (Parameters.count(b)) - bval = Parameters[b]; - if (Parameters.count(c)) - cval = Parameters[c]; - Vector3d vec(xval,yval,zval); + static const std::string x = "X"; + static const std::string y = "Y"; + static const std::string z = "Z"; + static const std::string a = "A"; + static const std::string b = "B"; + static const std::string c = "C"; + Vector3d vec(getParam(x),getParam(y),getParam(z)); Rotation rot; - rot.setYawPitchRoll(aval,bval,cval); + rot.setYawPitchRoll(getParam(a),getParam(b),getParam(c)); Placement plac(vec,rot); return plac; } -Vector3d Command::getCenter (void) +Vector3d Command::getCenter (void) const { - std::string i = "I"; - std::string j = "J"; - std::string k = "K"; - double ival = 0.0; - double jval = 0.0; - double kval = 0.0; - if (Parameters.count(i)) - ival = Parameters[i]; - if (Parameters.count(j)) - jval = Parameters[j]; - if (Parameters.count(k)) - kval = Parameters[k]; - Vector3d vec(ival,jval,kval); + static const std::string i = "I"; + static const std::string j = "J"; + static const std::string k = "K"; + Vector3d vec(getParam(i),getParam(j),getParam(k)); return vec; } -double Command::getValue(const std::string& attr) +double Command::getValue(const std::string& attr) const { std::string a(attr); boost::to_upper(a); - double val = 0.0; - if (Parameters.count(a)) - val = Parameters[a]; - return val; + return getParam(a); } -bool Command::has(const std::string& attr) +bool Command::has(const std::string& attr) const { std::string a(attr); boost::to_upper(a); @@ -210,12 +180,12 @@ void Command::setFromPlacement (const Base::Placement &plac) { Name = "G1"; Parameters.clear(); - std::string x = "X"; - std::string y = "Y"; - std::string z = "Z"; - std::string a = "A"; - std::string b = "B"; - std::string c = "C"; + static const std::string x = "X"; + static const std::string y = "Y"; + static const std::string z = "Z"; + static const std::string a = "A"; + static const std::string b = "B"; + static const std::string c = "C"; double xval, yval, zval, aval, bval, cval; xval = plac.getPosition().x; yval = plac.getPosition().y; @@ -242,9 +212,9 @@ void Command::setCenter(const Base::Vector3d &pos, bool clockwise) } else { Name = "G3"; } - std::string i = "I"; - std::string j = "J"; - std::string k = "K"; + static const std::string i = "I"; + static const std::string j = "J"; + static const std::string k = "K"; double ival, jval, kval; ival = pos.x; jval = pos.y; diff --git a/src/Mod/Path/App/Command.h b/src/Mod/Path/App/Command.h index ebd8f926bc..5ea75e076e 100644 --- a/src/Mod/Path/App/Command.h +++ b/src/Mod/Path/App/Command.h @@ -49,15 +49,21 @@ namespace Path virtual void Restore(Base::XMLReader &/*reader*/); // specific methods - Base::Placement getPlacement (void); // returns a placement from the x,y,z,a,b,c parameters - Base::Vector3d getCenter (void); // returns a 3d vector from the i,j,k parameters + Base::Placement getPlacement (void) const; // returns a placement from the x,y,z,a,b,c parameters + Base::Vector3d getCenter (void) const; // returns a 3d vector from the i,j,k parameters void setCenter(const Base::Vector3d&, bool clockwise=true); // sets the center coordinates and the command name std::string toGCode (void) const; // returns a GCode string representation of the command void setFromGCode (const std::string&); // sets the parameters from the contents of the given GCode string void setFromPlacement (const Base::Placement&); // sets the parameters from the contents of the given placement - bool has(const std::string&); // returns true if the given string exists in the parameters + bool has(const std::string&) const; // returns true if the given string exists in the parameters Command transform(const Base::Placement); // returns a transformed copy of this command - double getValue(const std::string&); // returns the value of a given parameter + double getValue(const std::string &name) const; // returns the value of a given parameter + + // this assumes the name is upper case + inline double getParam(const std::string &name) const { + auto it = Parameters.find(name); + return it==Parameters.end()?0.0:it->second; + } // attributes std::string Name;