Sketcher: Extend ViewProviderSketchGeometryExtension to hold the VisualLayerId

==============================================================================

In the Layers implementation there are User Layers, which have no direct impact on visualisation,
and allow to group conceptually related geometry into logical entities, and Visual Layers, which
define how geometries are visualised (or even whether they are visualised or not).

For User Layers, SketchObject is responsible for the definition of the layers, and SketcherGeometryExtension
is responsible for indicating the User Layer to which a geometry belongs (via a LayerId field).

For Visual Layers, ViewProviderSketch is responsible for the definition of the visual layers, and
ViewProviderSketchGeometryExtension is responsible for indicating the visual layer to which a geometry belongs.

With this commit, ViewProviderSketchGeometryExtension:
- takes over the responsibility of carrying a visual layer Id.
- is extended to be persistent and serialise the Id.
- is extended to be accesible from Python.
This commit is contained in:
Abdullah Tahiri
2023-02-28 07:12:50 +01:00
committed by abdullahtahiriyo
parent a7c37aacb0
commit 873e34cd6e
6 changed files with 168 additions and 9 deletions

View File

@@ -23,6 +23,10 @@
#include "PreCompiled.h"
#include <Base/Exception.h>
#include <Base/Reader.h>
#include <Base/Writer.h>
#include <Mod/Sketcher/Gui/ViewProviderSketchGeometryExtensionPy.h>
#include "ViewProviderSketchGeometryExtension.h"
@@ -30,10 +34,10 @@
using namespace SketcherGui;
//---------- Geometry Extension
TYPESYSTEM_SOURCE(SketcherGui::ViewProviderSketchGeometryExtension,Part::GeometryExtension)
TYPESYSTEM_SOURCE(SketcherGui::ViewProviderSketchGeometryExtension,Part::GeometryPersistenceExtension)
ViewProviderSketchGeometryExtension::ViewProviderSketchGeometryExtension():RepresentationFactor(1.0)
ViewProviderSketchGeometryExtension::ViewProviderSketchGeometryExtension():RepresentationFactor(1.0), VisualLayerId(0)
{
}
@@ -42,6 +46,7 @@ void ViewProviderSketchGeometryExtension::copyAttributes(Part::GeometryExtension
{
Part::GeometryExtension::copyAttributes(cpy);
static_cast<ViewProviderSketchGeometryExtension *>(cpy)->RepresentationFactor = this->RepresentationFactor;
static_cast<ViewProviderSketchGeometryExtension *>(cpy)->VisualLayerId = this->VisualLayerId;
}
std::unique_ptr<Part::GeometryExtension> ViewProviderSketchGeometryExtension::copy() const
@@ -57,7 +62,23 @@ std::unique_ptr<Part::GeometryExtension> ViewProviderSketchGeometryExtension::co
#endif
}
void ViewProviderSketchGeometryExtension::restoreAttributes(Base::XMLReader &reader)
{
Part::GeometryPersistenceExtension::restoreAttributes(reader);
if(reader.hasAttribute("visualLayerId"))
VisualLayerId = reader.getAttributeAsInteger("visualLayerId");
}
void ViewProviderSketchGeometryExtension::saveAttributes(Base::Writer &writer) const
{
Part::GeometryPersistenceExtension::saveAttributes(writer);
writer.Stream() << "\" visualLayerId=\"" << VisualLayerId;
}
PyObject * ViewProviderSketchGeometryExtension::getPyObject()
{
THROWM(Base::NotImplementedError, "ViewProviderSketchGeometryExtension does not have a Python counterpart");
return new ViewProviderSketchGeometryExtensionPy(new ViewProviderSketchGeometryExtension(*this));
}