From b5f5d1c32fcc8e5afe5c1421973fd2d97e787fb1 Mon Sep 17 00:00:00 2001 From: Abdullah Tahiri Date: Fri, 25 Jan 2019 16:01:16 +0100 Subject: [PATCH] Part: GeometryStringExtension to extend a geometry by a string --- src/Mod/Part/App/AppPart.cpp | 4 + src/Mod/Part/App/CMakeLists.txt | 5 + src/Mod/Part/App/GeometryStringExtension.cpp | 84 +++++++++++++++++ src/Mod/Part/App/GeometryStringExtension.h | 55 +++++++++++ .../Part/App/GeometryStringExtensionPy.xml | 27 ++++++ .../Part/App/GeometryStringExtensionPyImp.cpp | 93 +++++++++++++++++++ 6 files changed, 268 insertions(+) create mode 100644 src/Mod/Part/App/GeometryStringExtension.cpp create mode 100644 src/Mod/Part/App/GeometryStringExtension.h create mode 100644 src/Mod/Part/App/GeometryStringExtensionPy.xml create mode 100644 src/Mod/Part/App/GeometryStringExtensionPyImp.cpp diff --git a/src/Mod/Part/App/AppPart.cpp b/src/Mod/Part/App/AppPart.cpp index 5a46a176e7..6f2f32e0b5 100644 --- a/src/Mod/Part/App/AppPart.cpp +++ b/src/Mod/Part/App/AppPart.cpp @@ -59,8 +59,10 @@ #include "Geometry.h" #include "GeometryExtension.h" #include "GeometryIntExtension.h" +#include "GeometryStringExtension.h" #include "Geometry2d.h" #include "Mod/Part/App/GeometryIntExtensionPy.h" +#include "Mod/Part/App/GeometryStringExtensionPy.h" #include "Mod/Part/App/TopoShapePy.h" #include "Mod/Part/App/TopoShapeVertexPy.h" #include "Mod/Part/App/TopoShapeFacePy.h" @@ -357,6 +359,7 @@ PyMOD_INIT_FUNC(Part) Base::Interpreter().addType(&Attacher::AttachEnginePy ::Type,partModule,"AttachEngine"); Base::Interpreter().addType(&Part::GeometryIntExtensionPy ::Type,partModule,"GeometryIntExtension"); + Base::Interpreter().addType(&Part::GeometryStringExtensionPy ::Type,partModule,"GeometryStringExtension"); #if PY_MAJOR_VERSION >= 3 static struct PyModuleDef BRepOffsetAPIDef = { @@ -484,6 +487,7 @@ PyMOD_INIT_FUNC(Part) // Geometry types Part::GeometryExtension ::init(); Part::GeometryIntExtension ::init(); + Part::GeometryStringExtension ::init(); Part::Geometry ::init(); Part::GeomPoint ::init(); Part::GeomCurve ::init(); diff --git a/src/Mod/Part/App/CMakeLists.txt b/src/Mod/Part/App/CMakeLists.txt index e385266738..1db8c4ffcc 100644 --- a/src/Mod/Part/App/CMakeLists.txt +++ b/src/Mod/Part/App/CMakeLists.txt @@ -53,6 +53,7 @@ generate_from_xml(OffsetCurvePy) generate_from_xml(GeometryPy) generate_from_xml(GeometryExtensionPy) generate_from_xml(GeometryIntExtensionPy) +generate_from_xml(GeometryStringExtensionPy) generate_from_xml(GeometryCurvePy) generate_from_xml(BoundedCurvePy) generate_from_xml(TrimmedCurvePy) @@ -217,6 +218,8 @@ SET(Python_SRCS GeometryExtensionPyImp.cpp GeometryIntExtensionPy.xml GeometryIntExtensionPyImp.cpp + GeometryStringExtensionPy.xml + GeometryStringExtensionPyImp.cpp GeometryCurvePy.xml GeometryCurvePyImp.cpp BoundedCurvePy.xml @@ -350,6 +353,8 @@ SET(Part_SRCS GeometryExtension.h GeometryIntExtension.cpp GeometryIntExtension.h + GeometryStringExtension.cpp + GeometryStringExtension.h Geometry.cpp Geometry.h Geometry2d.cpp diff --git a/src/Mod/Part/App/GeometryStringExtension.cpp b/src/Mod/Part/App/GeometryStringExtension.cpp new file mode 100644 index 0000000000..7019b8dd26 --- /dev/null +++ b/src/Mod/Part/App/GeometryStringExtension.cpp @@ -0,0 +1,84 @@ +/*************************************************************************** + * Copyright (c) 2019 Abdullah Tahiri * + * * + * This file is part of the FreeCAD CAx development system. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Library General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Library General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this library; see the file COPYING.LIB. If not, * + * write to the Free Software Foundation, Inc., 59 Temple Place, * + * Suite 330, Boston, MA 02111-1307, USA * + * * + ***************************************************************************/ + + +#include "PreCompiled.h" + +#include +#include +#include + +#include "GeometryStringExtension.h" + +#include "GeometryStringExtensionPy.h" + +using namespace Part; + +//---------- Geometry Extension + +TYPESYSTEM_SOURCE(Part::GeometryStringExtension,Part::GeometryExtension) + +GeometryStringExtension::GeometryStringExtension() +{ + +} + +GeometryStringExtension::GeometryStringExtension(std::string strp):str(strp) +{ + +} + +GeometryStringExtension::~GeometryStringExtension() +{ +} + +// Persistence implementer +unsigned int GeometryStringExtension::getMemSize (void) const +{ + return 1; +} + +void GeometryStringExtension::Save(Base::Writer &writer) const +{ + + writer.Stream() << writer.ind() << "getTypeId().getName() + << "\" value=\"" << str << "\"/>" << std::endl; +} + +void GeometryStringExtension::Restore(Base::XMLReader &reader) +{ + str = reader.getAttribute("value"); +} + +std::unique_ptr GeometryStringExtension::copy(void) const +{ + std::unique_ptr cpy = std::make_unique(); + + cpy->str = this->str; + + return std::move(cpy); +} + +PyObject * GeometryStringExtension::getPyObject(void) +{ + return new GeometryStringExtensionPy(new GeometryStringExtension(this->str)); +} diff --git a/src/Mod/Part/App/GeometryStringExtension.h b/src/Mod/Part/App/GeometryStringExtension.h new file mode 100644 index 0000000000..b6a9f7163a --- /dev/null +++ b/src/Mod/Part/App/GeometryStringExtension.h @@ -0,0 +1,55 @@ +/*************************************************************************** + * Copyright (c) 2019 Abdullah Tahiri * + * * + * This file is part of the FreeCAD CAx development system. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Library General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Library General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this library; see the file COPYING.LIB. If not, * + * write to the Free Software Foundation, Inc., 59 Temple Place, * + * Suite 330, Boston, MA 02111-1307, USA * + * * + ***************************************************************************/ + + +#ifndef PART_GEOMETRYSTRINGEXTENSION_H +#define PART_GEOMETRYSTRINGEXTENSION_H + +#include +#include "GeometryExtension.h" + +namespace Part { + + class PartExport GeometryStringExtension: public Part::GeometryExtension + { + TYPESYSTEM_HEADER(); + public: + GeometryStringExtension(); + GeometryStringExtension(std::string strp); + virtual ~GeometryStringExtension(); + + // Persistence implementer --------------------- + virtual unsigned int getMemSize(void) const; + virtual void Save(Base::Writer &/*writer*/) const; + virtual void Restore(Base::XMLReader &/*reader*/); + + virtual std::unique_ptr copy(void) const; + + virtual PyObject *getPyObject(void); + + public: + std::string str; + }; + +} + +#endif // PART_GEOMETRYSTRINGEXTENSION_H diff --git a/src/Mod/Part/App/GeometryStringExtensionPy.xml b/src/Mod/Part/App/GeometryStringExtensionPy.xml new file mode 100644 index 0000000000..9d3787acff --- /dev/null +++ b/src/Mod/Part/App/GeometryStringExtensionPy.xml @@ -0,0 +1,27 @@ + + + + + + A GeometryExtension extending geometry objects with a string. + + + + + returns the value of the GeometryStringExtension. + + + + + + diff --git a/src/Mod/Part/App/GeometryStringExtensionPyImp.cpp b/src/Mod/Part/App/GeometryStringExtensionPyImp.cpp new file mode 100644 index 0000000000..64516d64d4 --- /dev/null +++ b/src/Mod/Part/App/GeometryStringExtensionPyImp.cpp @@ -0,0 +1,93 @@ +/*************************************************************************** + * Copyright (c) 2019 Abdullah Tahiri * + * * + * This file is part of the FreeCAD CAx development system. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Library General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Library General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this library; see the file COPYING.LIB. If not, * + * write to the Free Software Foundation, Inc., 59 Temple Place, * + * Suite 330, Boston, MA 02111-1307, USA * + * * + ***************************************************************************/ + + +#include "PreCompiled.h" + +#ifndef _PreComp_ +# include +#endif + +#include "GeometryStringExtension.h" + +#include "GeometryStringExtensionPy.h" +#include "GeometryStringExtensionPy.cpp" + +using namespace Part; + +// returns a string which represents the object e.g. when printed in python +std::string GeometryStringExtensionPy::representation(void) const +{ + std::stringstream str; + str << "str << ") >"; + return str.str(); +} + +PyObject *GeometryStringExtensionPy::PyMake(struct _typeobject *, PyObject *, PyObject *) // Python wrapper +{ + // create a new instance of PointPy and the Twin object + return new GeometryStringExtensionPy(new GeometryStringExtension); +} + +// constructor method +int GeometryStringExtensionPy::PyInit(PyObject* args, PyObject* /*kwd*/) +{ + + if (PyArg_ParseTuple(args, "")) { + // default extension + return 0; + } + + PyErr_Clear(); + char *pstr; + if (PyArg_ParseTuple(args, "s", &pstr)) { + this->getGeometryStringExtensionPtr()->str=pstr; + return 0; + } + + + + PyErr_SetString(PyExc_TypeError, "GeometryStringExtension constructor accepts:\n" + "-- empty parameter list\n" + "-- string\n"); + return -1; +} + +Py::String GeometryStringExtensionPy::getValue(void) const +{ + return Py::String(this->getGeometryStringExtensionPtr()->str); +} + +void GeometryStringExtensionPy::setValue(Py::String value) +{ + this->getGeometryStringExtensionPtr()->str = value.as_std_string(); +} + +PyObject *GeometryStringExtensionPy::getCustomAttributes(const char* /*attr*/) const +{ + return 0; +} + +int GeometryStringExtensionPy::setCustomAttributes(const char* /*attr*/, PyObject* /*obj*/) +{ + return 0; +}