diff --git a/src/Mod/Path/App/ToolPy.xml b/src/Mod/Path/App/ToolPy.xml index 8465cb7290..0f515c8491 100644 --- a/src/Mod/Path/App/ToolPy.xml +++ b/src/Mod/Path/App/ToolPy.xml @@ -1,13 +1,13 @@ - @@ -16,7 +16,7 @@ The Tool objects holds the properties of a CNC tool. optional attributes: name: a user-defined name for this tool - tooltype: Drill, CenterDrill, CounterSink, CounterBore, Reamer, Tap, EndMill, SlotCutter, BallEndMill, ChamferMill, CornerRound, Engraver or Undefined + tooltype: Drill, CenterDrill, CounterSink, CounterBore, Reamer, Tap, EndMill, SlotCutter, BallEndMill, ChamferMill, CornerRound, Engraver or Undefined material: HighSpeedSteel, HighCarbonToolSteel, Carbide, CastAlloy, Ceramics, Diamond, Sialon or Undefined diameter : the diameter of this tool lengthOffset @@ -86,6 +86,16 @@ HighCarbonToolSteel CastAlloy, Ceramics, Diamond, Sialon or Undefined returns a copy of this tool + + + returns all available tool types + + + + + returns all available tool materials + + setFromTemplate(xmlString|dictionary) ... fills receiver with values from the template string or dictionary diff --git a/src/Mod/Path/App/Tooltable.cpp b/src/Mod/Path/App/Tooltable.cpp index 512789f985..b7774d0609 100644 --- a/src/Mod/Path/App/Tooltable.cpp +++ b/src/Mod/Path/App/Tooltable.cpp @@ -45,7 +45,7 @@ TYPESYSTEM_SOURCE(Path::Tool , Base::Persistence); Tool::Tool(const char* name, ToolType type, ToolMaterial /*material*/, - double diameter, + double diameter, double lengthoffset, double flatradius, double cornerradius, @@ -108,6 +108,49 @@ void Tool::Restore(XMLReader &reader) std::string type = reader.hasAttribute("type") ? reader.getAttribute("type") : ""; std::string mat = reader.hasAttribute("mat") ? reader.getAttribute("mat") : ""; + Type = getToolType(type); + Material = getToolMaterial(mat); + + +} + +const std::vector Tool::ToolTypes(void) +{ + std::vector toolTypes(13); + toolTypes[0] ="EndMill"; + toolTypes[1] ="Drill"; + toolTypes[2] ="CenterDrill"; + toolTypes[3] ="CounterSink"; + toolTypes[4] ="CounterBore"; + toolTypes[5] ="FlyCutter"; + toolTypes[6] ="Reamer"; + toolTypes[7] ="Tap"; + toolTypes[8] ="SlotCutter"; + toolTypes[9] ="BallEndMill"; + toolTypes[10] ="ChamferMill"; + toolTypes[11] ="CornerRound"; + toolTypes[12] ="Engraver"; + return toolTypes; + +} + +const std::vector Tool::ToolMaterials(void) +{ + std::vector toolMat(7); + toolMat[0] ="Carbide"; + toolMat[1] ="HighSpeedSteel"; + toolMat[2] ="HighCarbonToolSteel"; + toolMat[3] ="CastAlloy"; + toolMat[4] ="Ceramics"; + toolMat[5] ="Diamond"; + toolMat[6] ="Sialon"; + return toolMat; + +} + +Tool::ToolType Tool::getToolType(std::string type) +{ + Tool::ToolType Type; if(type=="EndMill") Type = Tool::ENDMILL; else if(type=="Drill") @@ -118,6 +161,8 @@ void Tool::Restore(XMLReader &reader) Type = Tool::COUNTERSINK; else if(type=="CounterBore") Type = Tool::COUNTERBORE; + else if(type=="FlyCutter") + Type = Tool::FLYCUTTER; else if(type=="Reamer") Type = Tool::REAMER; else if(type=="Tap") @@ -132,9 +177,15 @@ void Tool::Restore(XMLReader &reader) Type = Tool::CORNERROUND; else if(type=="Engraver") Type = Tool::ENGRAVER; - else + else Type = Tool::UNDEFINED; - + + return Type; +} + +Tool::ToolMaterial Tool::getToolMaterial(std::string mat) +{ + Tool::ToolMaterial Material; if(mat=="Carbide") Material = Tool::CARBIDE; else if(mat=="HighSpeedSteel") @@ -151,6 +202,8 @@ void Tool::Restore(XMLReader &reader) Material = Tool::SIALON; else Material = Tool::MATUNDEFINED; + + return Material; } const char* Tool::TypeName(Tool::ToolType typ) { @@ -163,6 +216,8 @@ const char* Tool::TypeName(Tool::ToolType typ) { return "CounterSink"; case Tool::COUNTERBORE: return "CounterBore"; + case Tool::FLYCUTTER: + return "FlyCutter"; case Tool::REAMER: return "Reamer"; case Tool::TAP: @@ -292,7 +347,3 @@ void Tooltable::Restore (XMLReader &reader) Tools[id] = tmp; } } - - - - diff --git a/src/Mod/Path/App/Tooltable.h b/src/Mod/Path/App/Tooltable.h index 6303f6c518..450ea826b2 100644 --- a/src/Mod/Path/App/Tooltable.h +++ b/src/Mod/Path/App/Tooltable.h @@ -31,12 +31,12 @@ namespace Path { - + /** The representation of a single tool */ class PathExport Tool : public Base::Persistence { TYPESYSTEM_HEADER(); - + public: enum ToolType { UNDEFINED, @@ -44,6 +44,7 @@ namespace Path CENTERDRILL, COUNTERSINK, COUNTERBORE, + FLYCUTTER, REAMER, TAP, ENDMILL, @@ -52,7 +53,7 @@ namespace Path CHAMFERMILL, CORNERROUND, ENGRAVER }; - + enum ToolMaterial { MATUNDEFINED, HIGHSPEEDSTEEL, @@ -62,25 +63,25 @@ namespace Path CERAMICS, DIAMOND, SIALON }; - + //constructors Tool(); - Tool(const char* name, + Tool(const char* name, ToolType type=Tool::UNDEFINED, ToolMaterial material=Tool::MATUNDEFINED, - double diameter=10.0, + double diameter=10.0, double lengthoffset=100, double flatradius=0, double cornerradius=0, double cuttingedgeangle=0, double cuttingedgeheight=0); ~Tool(); - + // from base class virtual unsigned int getMemSize (void) const; virtual void Save (Base::Writer &/*writer*/) const; virtual void Restore(Base::XMLReader &/*reader*/); - + // attributes std::string Name; ToolType Type; @@ -91,21 +92,25 @@ namespace Path double CornerRadius; double CuttingEdgeAngle; double CuttingEdgeHeight; - + + static const std::vector ToolTypes(void); + static const std::vector ToolMaterials(void); static const char* TypeName(ToolType typ); + static ToolType getToolType(std::string type); + static ToolMaterial getToolMaterial(std::string mat); static const char* MaterialName(ToolMaterial mat); }; - + /** The representation of a table of tools */ class PathExport Tooltable : public Base::Persistence { TYPESYSTEM_HEADER(); - + public: //constructors Tooltable(); ~Tooltable(); - + // from base class virtual unsigned int getMemSize (void) const; virtual void Save (Base::Writer &/*writer*/) const; @@ -115,7 +120,7 @@ namespace Path void addTool(const Tool &tool); // adds a tool at the end void setTool(const Tool &tool, int); // inserts a tool void deleteTool(int); // deletes a tool - + // auto unsigned int getSize(void) const {return Tools.size();} const Tool &getTool(int pos) {return *Tools[pos];} @@ -125,7 +130,7 @@ namespace Path // attributes std::map Tools; }; - + } //namespace Path #endif // PATH_TOOLTABLE_H diff --git a/src/Mod/Path/App/TooltablePy.xml b/src/Mod/Path/App/TooltablePy.xml index 305af57f4d..39230d35cb 100644 --- a/src/Mod/Path/App/TooltablePy.xml +++ b/src/Mod/Path/App/TooltablePy.xml @@ -1,13 +1,13 @@ - diff --git a/src/Mod/Path/App/TooltablePyImp.cpp b/src/Mod/Path/App/TooltablePyImp.cpp index df98151148..fd9f3b7a94 100644 --- a/src/Mod/Path/App/TooltablePyImp.cpp +++ b/src/Mod/Path/App/TooltablePyImp.cpp @@ -51,7 +51,7 @@ std::string ToolPy::representation(void) const PyObject *ToolPy::PyMake(struct _typeobject *, PyObject *, PyObject *) // Python wrapper { - // create a new instance of ToolPy and the Twin object + // create a new instance of ToolPy and the Twin object return new ToolPy(new Tool); } @@ -93,51 +93,12 @@ int ToolPy::PyInit(PyObject* args, PyObject* kwd) } getToolPtr()->Name = name; + std::string typeStr(type); - if(typeStr=="Drill") - getToolPtr()->Type = Tool::DRILL; - else if(typeStr=="CenterDrill") - getToolPtr()->Type = Tool::CENTERDRILL; - if(typeStr=="CounterSink") - getToolPtr()->Type = Tool::COUNTERSINK; - if(typeStr=="CounterBore") - getToolPtr()->Type = Tool::COUNTERBORE; - if(typeStr=="Reamer") - getToolPtr()->Type = Tool::REAMER; - if(typeStr=="Tap") - getToolPtr()->Type = Tool::TAP; - else if(typeStr=="EndMill") - getToolPtr()->Type = Tool::ENDMILL; - else if(typeStr=="SlotCutter") - getToolPtr()->Type = Tool::SLOTCUTTER; - else if(typeStr=="BallEndMill") - getToolPtr()->Type = Tool::BALLENDMILL; - else if(typeStr=="ChamferMill") - getToolPtr()->Type = Tool::CHAMFERMILL; - else if(typeStr=="CornerRound") - getToolPtr()->Type = Tool::CORNERROUND; - else if(typeStr=="Engraver") - getToolPtr()->Type = Tool::ENGRAVER; - else - getToolPtr()->Type = Tool::UNDEFINED; - + getToolPtr()->Type = Tool::getToolType(typeStr); + std::string matStr(mat); - if(matStr=="HighSpeedSteel") - getToolPtr()->Material = Tool::HIGHSPEEDSTEEL; - else if(matStr=="Carbide") - getToolPtr()->Material = Tool::CARBIDE; - else if(matStr=="HighCarbonToolSteel") - getToolPtr()->Material = Tool::HIGHCARBONTOOLSTEEL; - else if(matStr=="CastAlloy") - getToolPtr()->Material = Tool::CASTALLOY; - else if(matStr=="Ceramics") - getToolPtr()->Material = Tool::CERAMICS; - else if(matStr=="Diamond") - getToolPtr()->Material = Tool::DIAMOND; - else if(matStr=="Sialon") - getToolPtr()->Material = Tool::SIALON; - else - getToolPtr()->Material = Tool::MATUNDEFINED; + getToolPtr()->Material = Tool::getToolMaterial(matStr); getToolPtr()->Diameter = dia ? PyFloat_AsDouble(dia) : 0.0; getToolPtr()->LengthOffset = len ? PyFloat_AsDouble(len) : 0.0; @@ -170,33 +131,8 @@ Py::String ToolPy::getToolType(void) const void ToolPy::setToolType(Py::String arg) { std::string typeStr(arg.as_std_string()); - if(typeStr=="Drill") - getToolPtr()->Type = Tool::DRILL; - else if(typeStr=="CenterDrill") - getToolPtr()->Type = Tool::CENTERDRILL; - else if(typeStr=="CounterSink") - getToolPtr()->Type = Tool::COUNTERSINK; - else if(typeStr=="CounterBore") - getToolPtr()->Type = Tool::COUNTERBORE; - else if(typeStr=="Reamer") - getToolPtr()->Type = Tool::REAMER; - else if(typeStr=="Tap") - getToolPtr()->Type = Tool::TAP; - else if(typeStr=="EndMill") - getToolPtr()->Type = Tool::ENDMILL; - else if(typeStr=="SlotCutter") - getToolPtr()->Type = Tool::SLOTCUTTER; - else if(typeStr=="BallEndMill") - getToolPtr()->Type = Tool::BALLENDMILL; - else if(typeStr=="ChamferMill") - getToolPtr()->Type = Tool::CHAMFERMILL; - else if(typeStr=="CornerRound") - getToolPtr()->Type = Tool::CORNERROUND; + getToolPtr()->Type = Tool::getToolType(typeStr); - else if(typeStr=="Engraver") - getToolPtr()->Type = Tool::ENGRAVER; - else - getToolPtr()->Type = Tool::UNDEFINED; } Py::String ToolPy::getMaterial(void) const @@ -207,22 +143,7 @@ Py::String ToolPy::getMaterial(void) const void ToolPy::setMaterial(Py::String arg) { std::string matStr(arg.as_std_string()); - if(matStr=="HighSpeedSteel") - getToolPtr()->Material = Tool::HIGHSPEEDSTEEL; - else if(matStr=="Carbide") - getToolPtr()->Material = Tool::CARBIDE; - else if(matStr=="HighCarbonToolSteel") - getToolPtr()->Material = Tool::HIGHCARBONTOOLSTEEL; - else if(matStr=="CastAlloy") - getToolPtr()->Material = Tool::CASTALLOY; - else if(matStr=="Ceramics") - getToolPtr()->Material = Tool::CERAMICS; - else if(matStr=="Diamond") - getToolPtr()->Material = Tool::DIAMOND; - else if(matStr=="Sialon") - getToolPtr()->Material = Tool::SIALON; - else - getToolPtr()->Material = Tool::MATUNDEFINED; + getToolPtr()->Material = Tool::getToolMaterial(matStr); } Py::Float ToolPy::getDiameter(void) const @@ -294,7 +215,7 @@ PyObject *ToolPy::getCustomAttributes(const char* /*attr*/) const int ToolPy::setCustomAttributes(const char* /*attr*/, PyObject* /*obj*/) { - return 0; + return 0; } PyObject* ToolPy::copy(PyObject * args) @@ -305,7 +226,6 @@ PyObject* ToolPy::copy(PyObject * args) throw Py::Exception("This method accepts no argument"); } - PyObject* ToolPy::setFromTemplate(PyObject * args) { char *pstr = 0; @@ -359,6 +279,35 @@ PyObject* ToolPy::templateAttrs(PyObject * args) throw Py::Exception("This method accepts no argument"); } +PyObject* ToolPy::getToolTypes(PyObject * args) +{ + if (PyArg_ParseTuple(args, "")) { + std::vector toolTypes = Tool::ToolTypes(); + PyObject *list = PyList_New(0); + for(unsigned i = 0; i != toolTypes.size(); i++) { + + PyList_Append(list, PYSTRING_FROMSTRING(toolTypes[i].c_str())); + } + return list; + } + throw Py::Exception("This method accepts no argument"); +} + +PyObject* ToolPy::getToolMaterials(PyObject * args) +{ + if (PyArg_ParseTuple(args, "")) { + std::vector toolMaterials = Tool::ToolMaterials(); + PyObject *list = PyList_New(0); + for(unsigned i = 0; i != toolMaterials.size(); i++) { + + PyList_Append(list, PYSTRING_FROMSTRING(toolMaterials[i].c_str())); + } + return list; + } + throw Py::Exception("This method accepts no argument"); +} + + // TooltablePy @@ -544,7 +493,7 @@ PyObject *TooltablePy::getCustomAttributes(const char* /*attr*/) const int TooltablePy::setCustomAttributes(const char* /*attr*/, PyObject* /*obj*/) { - return 0; + return 0; } diff --git a/src/Mod/Path/Gui/Resources/panels/ToolEdit.ui b/src/Mod/Path/Gui/Resources/panels/ToolEdit.ui index eabcce43d9..f89e879ee2 100644 --- a/src/Mod/Path/Gui/Resources/panels/ToolEdit.ui +++ b/src/Mod/Path/Gui/Resources/panels/ToolEdit.ui @@ -52,71 +52,7 @@ 0 - - - Drill - - - - - CenterDrill - - - - - CounterSink - - - - - CounterBore - - - - - Flycutter - - - - - Reamer - - - - - Tap - - - - - EndMill - - - - - SlotCutter - - - - - BallEndMill - - - - - ChamferMill - - - - - CornerRound - - - - - Engraver - - + @@ -128,41 +64,7 @@ - - - HighSpeedSteel - - - - - HighCarbonSteel - - - - - CastAlloy - - - - - Carbide - - - - - Ceramics - - - - - Diamond - - - - - Sialon - - + diff --git a/src/Mod/Path/PathScripts/PathToolLibraryManager.py b/src/Mod/Path/PathScripts/PathToolLibraryManager.py index fd530e5a87..59ca60d198 100644 --- a/src/Mod/Path/PathScripts/PathToolLibraryManager.py +++ b/src/Mod/Path/PathScripts/PathToolLibraryManager.py @@ -415,9 +415,7 @@ class EditorPanel(): def getType(self, tooltype): "gets a combobox index number for a given type or viceversa" - toolslist = ["Drill", "CenterDrill", "CounterSink", "CounterBore", - "Reamer", "Tap", "EndMill", "SlotCutter", "BallEndMill", - "ChamferMill", "CornerRound", "Engraver"] + toolslist = Path.Tool.getToolTypes(Path.Tool()) if isinstance(tooltype, str): if tooltype in toolslist: return toolslist.index(tooltype) @@ -428,8 +426,7 @@ class EditorPanel(): def getMaterial(self, material): "gets a combobox index number for a given material or viceversa" - matslist = ["HighSpeedSteel", "HighCarbonToolSteel", "CastAlloy", - "Carbide", "Ceramics", "Diamond", "Sialon"] + matslist = Path.Tool.getToolMaterials(Path.Tool()) if isinstance(material, str): if material in matslist: return matslist.index(material) @@ -441,6 +438,13 @@ class EditorPanel(): def addTool(self): t = Path.Tool() editform = FreeCADGui.PySideUic.loadUi(":/panels/ToolEdit.ui") + editform.TypeField.clear() + for tooltype in Path.Tool.getToolTypes(t): + editform.TypeField.addItem(tooltype) + + editform.MaterialField.clear() + for material in Path.Tool.getToolMaterials(t): + editform.MaterialField.addItem(material) r = editform.exec_() if r: @@ -513,6 +517,14 @@ class EditorPanel(): tool = self.TLM.getTool(listname, toolnum) editform = FreeCADGui.PySideUic.loadUi(":/panels/ToolEdit.ui") + editform.TypeField.clear() + for tooltype in Path.Tool.getToolTypes(tool): + editform.TypeField.addItem(tooltype) + + editform.MaterialField.clear() + for material in Path.Tool.getToolMaterials(tool): + editform.MaterialField.addItem(material) + editform.NameField.setText(tool.Name) editform.TypeField.setCurrentIndex(self.getType(tool.ToolType)) editform.MaterialField.setCurrentIndex(self.getMaterial(tool.Material)) @@ -661,4 +673,3 @@ class CommandToolLibraryEdit(): if FreeCAD.GuiUp: # register the FreeCAD command FreeCADGui.addCommand('Path_ToolLibraryEdit',CommandToolLibraryEdit()) -