diff --git a/src/Mod/Sketcher/App/AppSketcher.cpp b/src/Mod/Sketcher/App/AppSketcher.cpp index c5ba7c20a8..2fa61fea1f 100644 --- a/src/Mod/Sketcher/App/AppSketcher.cpp +++ b/src/Mod/Sketcher/App/AppSketcher.cpp @@ -33,6 +33,7 @@ #include "SketchObject.h" #include "SketchGeometryExtension.h" #include "ExternalGeometryExtension.h" +#include "SolverGeometryExtension.h" #include "GeometryFacade.h" #include "ExternalGeometryFacade.h" #include "Constraint.h" @@ -80,6 +81,7 @@ PyMOD_INIT_FUNC(Sketcher) Sketcher::SketchGeometryExtension ::init(); Sketcher::ExternalGeometryExtension ::init(); + Sketcher::SolverGeometryExtension ::init(); Sketcher::GeometryFacade ::init(); Sketcher::ExternalGeometryFacade ::init(); Sketcher::SketchObjectSF ::init(); diff --git a/src/Mod/Sketcher/App/CMakeLists.txt b/src/Mod/Sketcher/App/CMakeLists.txt index 4ab1022875..c934e31fe5 100644 --- a/src/Mod/Sketcher/App/CMakeLists.txt +++ b/src/Mod/Sketcher/App/CMakeLists.txt @@ -58,6 +58,8 @@ SET(Features_SRCS SketchGeometryExtension.h ExternalGeometryExtension.cpp ExternalGeometryExtension.h + SolverGeometryExtension.cpp + SolverGeometryExtension.h SketchObject.cpp SketchObject.h SketchAnalysis.h diff --git a/src/Mod/Sketcher/App/SolverGeometryExtension.cpp b/src/Mod/Sketcher/App/SolverGeometryExtension.cpp new file mode 100644 index 0000000000..c05cfbe73b --- /dev/null +++ b/src/Mod/Sketcher/App/SolverGeometryExtension.cpp @@ -0,0 +1,66 @@ +/*************************************************************************** + * 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 "SolverGeometryExtension.h" + +using namespace Sketcher; + + +//---------- Geometry Extension +TYPESYSTEM_SOURCE(Sketcher::SolverGeometryExtension,Part::GeometryExtension) + +SolverGeometryExtension::SolverGeometryExtension(): + Edge(SolverGeometryExtension::Dependent), + Start(SolverGeometryExtension::Dependent), + Mid(SolverGeometryExtension::Dependent), + End(SolverGeometryExtension::Dependent) +{ + +} + +std::unique_ptr SolverGeometryExtension::copy(void) const +{ + auto cpy = std::make_unique(); + + cpy->Edge = this->Edge; + cpy->Start = this->Start; + cpy->End = this->End; + cpy->Mid = this->Mid; + + cpy->setName(this->getName()); // Base Class + +#if defined (__GNUC__) && (__GNUC__ <=4) + return std::move(cpy); +#else + return cpy; +#endif +} + +PyObject * SolverGeometryExtension::getPyObject(void) +{ + THROWM(Base::NotImplementedError, "SolverGeometryExtension does not have a Python counterpart"); +} + diff --git a/src/Mod/Sketcher/App/SolverGeometryExtension.h b/src/Mod/Sketcher/App/SolverGeometryExtension.h new file mode 100644 index 0000000000..abc531ec39 --- /dev/null +++ b/src/Mod/Sketcher/App/SolverGeometryExtension.h @@ -0,0 +1,94 @@ +/*************************************************************************** + * 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 SKETCHER_SOLVERGEOMETRYEXTENSION_H +#define SKETCHER_SOLVERGEOMETRYEXTENSION_H + +#include + +#include + +namespace Sketcher +{ + +class SketcherExport SolverGeometryExtension : public Part::GeometryExtension +{ + TYPESYSTEM_HEADER_WITH_OVERRIDE(); +public: + enum SolverStatus { + FullyConstraint = 0, + NotFullyConstraint = 1, + NumSolverStatus + }; + + enum ParameterStatus { + Dependent = 0, + Independent = 1, + NumParameterStatus + }; + + SolverGeometryExtension(); + SolverGeometryExtension(long cid); + virtual ~SolverGeometryExtension() override = default; + + virtual std::unique_ptr copy(void) const override; + + virtual PyObject *getPyObject(void) override; + + SolverStatus getGeometry() const {return ( Edge == Independent && + Start == Independent && + End == Independent && + Mid == Independent) ? FullyConstraint : NotFullyConstraint;} + + ParameterStatus getEdge() const {return Edge;} + void setEdge(ParameterStatus status) {Edge = status;} + + ParameterStatus getStart() const {return Start;} + void setStart(ParameterStatus status) {Start = status;} + + ParameterStatus getMid() const {return Mid;} + void setMid(ParameterStatus status) {Mid = status;} + + ParameterStatus getEnd() const {return End;} + void setEnd(ParameterStatus status) {End = status;} + + void init(ParameterStatus status) { + Edge = status; + Start = status; + Mid = status; + End = status; + } + +private: + SolverGeometryExtension(const SolverGeometryExtension&) = default; + +private: + ParameterStatus Edge; + ParameterStatus Start; + ParameterStatus Mid; + ParameterStatus End; +}; + +} //namespace Sketcher + + +#endif // SKETCHER_SOLVERGEOMETRYEXTENSION_H