OpenLexocad  28.0
GeometryExtension.h
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (c) 2019 Abdullah Tahiri <abdullah.tahiri.yo@gmail.com> *
3  * *
4  * This file is part of the FreeCAD CAx development system. *
5  * *
6  * This library is free software; you can redistribute it and/or *
7  * modify it under the terms of the GNU Library General Public *
8  * License as published by the Free Software Foundation; either *
9  * version 2 of the License, or (at your option) any later version. *
10  * *
11  * This library is distributed in the hope that it will be useful, *
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14  * GNU Library General Public License for more details. *
15  * *
16  * You should have received a copy of the GNU Library General Public *
17  * License along with this library; see the file COPYING.LIB. If not, *
18  * write to the Free Software Foundation, Inc., 59 Temple Place, *
19  * Suite 330, Boston, MA 02111-1307, USA *
20  * *
21  ***************************************************************************/
22 
23 
24 #pragma once
25 
26 #include <Base/Base.h>
27 #include <memory>
28 
29 namespace Base
30 {
31 class PersistenceVersion;
32 class AbstractWriter;
33 class AbstractXMLReader;
34 }
35 
36 namespace Geom {
37 
38  class Geometry;
39  class LX_GEOM_EXPORT GeometryExtension : public Base::BaseClass
40 {
42 
43 public:
44  virtual ~GeometryExtension() = default;
45 
46  virtual std::unique_ptr<GeometryExtension> copy(void) const = 0;
47 
48  inline void setName(const std::string& str) { name = str; }
49  inline const std::string& getName() const { return name; }
50 
51  // Default method to notify an extension that it has been attached
52  // to a given geometry
53  virtual void notifyAttachment(Geom::Geometry*) {}
54 
55 protected:
57  GeometryExtension(const GeometryExtension& obj) = default;
59 
60  virtual void copyAttributes(Geom::GeometryExtension* cpy) const;
61 
62 private:
63  std::string name;
64 };
65 
66 
67 
69 {
71 
72 public:
73  virtual ~GeometryPersistenceExtension() = default;
74 
75  // Own Persistence implementer - Not Base::Persistence - managed by Geom::Geometry
76  virtual void save(Base::AbstractWriter& /*writer*/, Base::PersistenceVersion& /*save_version*/);
77  virtual void restore(Base::AbstractXMLReader& /*reader*/, Base::PersistenceVersion& /*version*/);
78 
79 protected:
80  virtual void restoreAttributes(Base::AbstractXMLReader& /*reader*/);
81  virtual void saveAttributes(Base::AbstractWriter& /*writer*/) const;
82 };
83 }
84 
Geom::GeometryPersistenceExtension::restoreAttributes
virtual void restoreAttributes(Base::AbstractXMLReader &)
Base::BaseClass
BaseClass class and root of the type system.
Definition: Base.h:78
Geom::Geometry
Definition: Geometry.h:73
Geom::GeometryExtension::GeometryExtension
GeometryExtension()
Geom::GeometryExtension::GeometryExtension
GeometryExtension(const GeometryExtension &obj)=default
Geom::GeometryExtension::setName
void setName(const std::string &str)
Definition: GeometryExtension.h:48
Geom::GeometryExtension::getName
const std::string & getName() const
Definition: GeometryExtension.h:49
Geom::GeometryPersistenceExtension::~GeometryPersistenceExtension
virtual ~GeometryPersistenceExtension()=default
Geom::GeometryPersistenceExtension::restore
virtual void restore(Base::AbstractXMLReader &, Base::PersistenceVersion &)
Base::PersistenceVersion
Definition: Persistence.h:13
Base::AbstractWriter
Definition: Writer.h:13
Geom::GeometryExtension::copyAttributes
virtual void copyAttributes(Geom::GeometryExtension *cpy) const
Base.h
Geom::GeometryPersistenceExtension
Definition: GeometryExtension.h:69
Geom::GeometryExtension::~GeometryExtension
virtual ~GeometryExtension()=default
Geom::GeometryExtension::copy
virtual std::unique_ptr< GeometryExtension > copy(void) const =0
Base::AbstractXMLReader
Definition: AbstractXMLReader.h:7
Geom::GeometryExtension
Definition: GeometryExtension.h:40
Geom::GeometryPersistenceExtension::saveAttributes
virtual void saveAttributes(Base::AbstractWriter &) const
Geom::GeometryExtension::notifyAttachment
virtual void notifyAttachment(Geom::Geometry *)
Definition: GeometryExtension.h:53
Geom::GeometryExtension::operator=
GeometryExtension & operator=(const GeometryExtension &obj)=default
TYPESYSTEM_HEADER
#define TYPESYSTEM_HEADER()
define for subclassing Base::BaseClass
Definition: Base.h:12
Base
Definition: AbstractXMLReader.h:5
Geom
Definition: PropertyContainer.h:33
Geom::GeometryPersistenceExtension::save
virtual void save(Base::AbstractWriter &, Base::PersistenceVersion &)