Example #1
0
void Tool::read(const XMLAttributes &attrs) {
  if (attrs.has("units")) try {
      setUnits(ToolUnits::parse(attrs["units"]));
    } CATCH_ERROR;

  if (attrs.has("shape")) try {
      setShape(ToolShape::parse(attrs["shape"]));
    } CATCH_ERROR;

  double scale = getUnits() == ToolUnits::UNITS_INCH ? 25.4 : 1;

  if (attrs.has("length"))
    setLength(String::parseDouble(attrs["length"]) * scale);
  else THROWS("Tool " << number << " missing length");

  if (attrs.has("radius"))
    setRadius(String::parseDouble(attrs["radius"]) * scale);
  else if (attrs.has("diameter"))
    setRadius(String::parseDouble(attrs["diameter"]) / 2.0 * scale);
  else THROWS("Tool " << number << " has neither radius or diameter");

  if (attrs.has("snub_diameter"))
    setSnubDiameter(String::parseDouble(attrs["snub_diameter"]) * scale);

  if (attrs.has("front_angle"))
    setFrontAngle(String::parseDouble(attrs["front_angle"]));

  if (attrs.has("back_angle"))
    setBackAngle(String::parseDouble(attrs["back_angle"]));

  if (attrs.has("orientation"))
    setOrientation(String::parseDouble(attrs["orientation"]));
}
Example #2
0
void ToolTable::startElement(const string &name, const XMLAttributes &attrs) {
  if (name == "tool") {
    unsigned number;
    if (attrs.has("number")) number = String::parseU32(attrs["number"]);
    else number = size();

    SmartPointer<Tool> tool = new Tool(number);
    current = tool;

    tool->read(attrs);

    add(tool);
  }
}