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"])); }
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); } }