Extensions: GeoFeatureGroup only for GeoFeature

This commit is contained in:
Stefan Tröger 2016-12-10 14:44:13 +01:00 committed by wmayer
parent dfbd6aa237
commit 47ed29fffd
15 changed files with 40 additions and 23 deletions

View File

@ -37,7 +37,7 @@ EXTENSION_PROPERTY_SOURCE(App::DocumentObjectExtension, App::Extension)
DocumentObjectExtension::DocumentObjectExtension() DocumentObjectExtension::DocumentObjectExtension()
{ {
initExtension(App::DocumentObjectExtension::getExtensionClassTypeId()); initExtensionType(App::DocumentObjectExtension::getExtensionClassTypeId());
} }
DocumentObjectExtension::~DocumentObjectExtension() DocumentObjectExtension::~DocumentObjectExtension()

View File

@ -71,7 +71,7 @@ Extension::~Extension()
} }
} }
void Extension::initExtension(Base::Type type) { void Extension::initExtensionType(Base::Type type) {
m_extensionType = type; m_extensionType = type;
if(m_extensionType.isBad()) if(m_extensionType.isBad())

View File

@ -215,7 +215,7 @@ public:
Extension(); Extension();
virtual ~Extension(); virtual ~Extension();
void initExtension(App::ExtensionContainer* obj); virtual void initExtension(App::ExtensionContainer* obj);
App::ExtensionContainer* getExtendedContainer() {return m_base;} App::ExtensionContainer* getExtendedContainer() {return m_base;}
const App::ExtensionContainer* getExtendedContainer() const {return m_base;} const App::ExtensionContainer* getExtendedContainer() const {return m_base;}
@ -272,7 +272,7 @@ protected:
friend class App::ExtensionContainer; friend class App::ExtensionContainer;
protected: protected:
void initExtension(Base::Type type); void initExtensionType(Base::Type type);
bool m_isPythonExtension = false; bool m_isPythonExtension = false;
Py::Object ExtensionPythonObject; Py::Object ExtensionPythonObject;
@ -309,7 +309,7 @@ public:
ExtensionPythonT() { ExtensionPythonT() {
ExtensionT::m_isPythonExtension = true; ExtensionT::m_isPythonExtension = true;
ExtensionT::initExtension(ExtensionPythonT::getExtensionClassTypeId()); ExtensionT::initExtensionType(ExtensionPythonT::getExtensionClassTypeId());
EXTENSION_ADD_PROPERTY(ExtensionProxy,(Py::Object())); EXTENSION_ADD_PROPERTY(ExtensionProxy,(Py::Object()));
} }

View File

@ -45,21 +45,36 @@ EXTENSION_PROPERTY_SOURCE(App::GeoFeatureGroupExtension, App::GroupExtension)
GeoFeatureGroupExtension::GeoFeatureGroupExtension(void) GeoFeatureGroupExtension::GeoFeatureGroupExtension(void)
{ {
initExtension(GeoFeatureGroupExtension::getExtensionClassTypeId()); initExtensionType(GeoFeatureGroupExtension::getExtensionClassTypeId());
EXTENSION_ADD_PROPERTY(Placement,(Base::Placement()));
} }
GeoFeatureGroupExtension::~GeoFeatureGroupExtension(void) GeoFeatureGroupExtension::~GeoFeatureGroupExtension(void)
{ {
} }
void GeoFeatureGroupExtension::initExtension(ExtensionContainer* obj) {
if(!obj->isDerivedFrom(App::GeoFeature::getClassTypeId()))
throw Base::Exception("GeoFeatureGroupExtension can only be applied to GeoFeatures");
App::Extension::initExtension(obj);
}
PropertyPlacement& GeoFeatureGroupExtension::placement() {
if(!getExtendedContainer())
throw Base::Exception("GeoFeatureGroupExtension was not applied to GeoFeature");
return static_cast<App::GeoFeature*>(getExtendedContainer())->Placement;
}
void GeoFeatureGroupExtension::transformPlacement(const Base::Placement &transform) void GeoFeatureGroupExtension::transformPlacement(const Base::Placement &transform)
{ {
// NOTE: Keep in sync with APP::GeoFeature // NOTE: Keep in sync with APP::GeoFeature
Base::Placement plm = this->Placement.getValue(); Base::Placement plm = this->placement().getValue();
plm = transform * plm; plm = transform * plm;
this->Placement.setValue(plm); this->placement().setValue(plm);
} }
std::vector<App::DocumentObject*> GeoFeatureGroupExtension::getGeoSubObjects () const { std::vector<App::DocumentObject*> GeoFeatureGroupExtension::getGeoSubObjects () const {

View File

@ -41,7 +41,9 @@ class AppExport GeoFeatureGroupExtension : public App::GroupExtension
EXTENSION_PROPERTY_HEADER(App::GeoFeatureGroupExtension); EXTENSION_PROPERTY_HEADER(App::GeoFeatureGroupExtension);
public: public:
PropertyPlacement Placement; PropertyPlacement& placement();
virtual void initExtension(ExtensionContainer* obj);
/** /**
* @brief transformPlacement applies transform to placement of this shape. * @brief transformPlacement applies transform to placement of this shape.

View File

@ -38,7 +38,7 @@ EXTENSION_PROPERTY_SOURCE(App::GroupExtension, App::DocumentObjectExtension)
GroupExtension::GroupExtension() GroupExtension::GroupExtension()
{ {
initExtension(GroupExtension::getExtensionClassTypeId()); initExtensionType(GroupExtension::getExtensionClassTypeId());
EXTENSION_ADD_PROPERTY_TYPE(Group,(0),"Base",(App::PropertyType)(Prop_Output),"List of referenced objects"); EXTENSION_ADD_PROPERTY_TYPE(Group,(0),"Base",(App::PropertyType)(Prop_Output),"List of referenced objects");
} }

View File

@ -39,7 +39,7 @@ EXTENSION_PROPERTY_SOURCE(App::OriginGroupExtension, App::GeoFeatureGroupExtensi
OriginGroupExtension::OriginGroupExtension () { OriginGroupExtension::OriginGroupExtension () {
initExtension(OriginGroupExtension::getExtensionClassTypeId()); initExtensionType(OriginGroupExtension::getExtensionClassTypeId());
EXTENSION_ADD_PROPERTY_TYPE ( Origin, (0), 0, App::Prop_Hidden, "Origin linked to the group" ); EXTENSION_ADD_PROPERTY_TYPE ( Origin, (0), 0, App::Prop_Hidden, "Origin linked to the group" );
} }

View File

@ -35,7 +35,7 @@
using namespace App; using namespace App;
PROPERTY_SOURCE_WITH_EXTENSIONS(App::Part, App::DocumentObject) PROPERTY_SOURCE_WITH_EXTENSIONS(App::Part, App::GeoFeature)
//=========================================================================== //===========================================================================

View File

@ -35,7 +35,7 @@ namespace App
/** Base class of all geometric document objects. /** Base class of all geometric document objects.
*/ */
class AppExport Part : public App::DocumentObject, public App::OriginGroupExtension class AppExport Part : public App::GeoFeature, public App::OriginGroupExtension
{ {
PROPERTY_HEADER_WITH_EXTENSIONS(App::Part); PROPERTY_HEADER_WITH_EXTENSIONS(App::Part);

View File

@ -37,7 +37,7 @@ EXTENSION_PROPERTY_SOURCE(Gui::ViewProviderExtension, App::Extension)
ViewProviderExtension::ViewProviderExtension() ViewProviderExtension::ViewProviderExtension()
{ {
initExtension(Gui::ViewProviderExtension::getExtensionClassTypeId()); initExtensionType(Gui::ViewProviderExtension::getExtensionClassTypeId());
} }
ViewProviderExtension::~ViewProviderExtension() ViewProviderExtension::~ViewProviderExtension()

View File

@ -97,7 +97,7 @@ public:
ViewProviderExtensionPythonT() { ViewProviderExtensionPythonT() {
ExtensionT::m_isPythonExtension = true; ExtensionT::m_isPythonExtension = true;
ExtensionT::initExtension(ViewProviderExtensionPythonT::getExtensionClassTypeId()); ExtensionT::initExtensionType(ViewProviderExtensionPythonT::getExtensionClassTypeId());
EXTENSION_ADD_PROPERTY(ExtensionProxy,(Py::Object())); EXTENSION_ADD_PROPERTY(ExtensionProxy,(Py::Object()));
} }

View File

@ -38,7 +38,7 @@ EXTENSION_PROPERTY_SOURCE(Gui::ViewProviderGeoFeatureGroupExtension, Gui::ViewPr
ViewProviderGeoFeatureGroupExtension::ViewProviderGeoFeatureGroupExtension() ViewProviderGeoFeatureGroupExtension::ViewProviderGeoFeatureGroupExtension()
{ {
initExtension(ViewProviderGeoFeatureGroupExtension::getExtensionClassTypeId()); initExtensionType(ViewProviderGeoFeatureGroupExtension::getExtensionClassTypeId());
pcGroupChildren = new SoGroup(); pcGroupChildren = new SoGroup();
pcGroupChildren->ref(); pcGroupChildren->ref();
@ -84,8 +84,8 @@ std::vector<std::string> ViewProviderGeoFeatureGroupExtension::extensionGetDispl
void ViewProviderGeoFeatureGroupExtension::extensionUpdateData(const App::Property* prop) void ViewProviderGeoFeatureGroupExtension::extensionUpdateData(const App::Property* prop)
{ {
auto obj = getExtendedViewProvider()->getObject()->getExtensionByType<App::GeoFeatureGroupExtension>(); auto obj = getExtendedViewProvider()->getObject()->getExtensionByType<App::GeoFeatureGroupExtension>();
if (obj && prop == &obj->Placement) { if (obj && prop == &obj->placement()) {
getExtendedViewProvider()->setTransformation ( obj->Placement.getValue().toMatrix() ); getExtendedViewProvider()->setTransformation ( obj->placement().getValue().toMatrix() );
} else { } else {
ViewProviderGroupExtension::extensionUpdateData ( prop ); ViewProviderGroupExtension::extensionUpdateData ( prop );
} }

View File

@ -45,7 +45,7 @@ EXTENSION_PROPERTY_SOURCE(Gui::ViewProviderGroupExtension, Gui::ViewProviderExte
ViewProviderGroupExtension::ViewProviderGroupExtension() : visible(false) ViewProviderGroupExtension::ViewProviderGroupExtension() : visible(false)
{ {
initExtension(ViewProviderGroupExtension::getExtensionClassTypeId()); initExtensionType(ViewProviderGroupExtension::getExtensionClassTypeId());
} }
ViewProviderGroupExtension::~ViewProviderGroupExtension() ViewProviderGroupExtension::~ViewProviderGroupExtension()

View File

@ -48,7 +48,7 @@ EXTENSION_PROPERTY_SOURCE(Gui::ViewProviderOriginGroupExtension, Gui::ViewProvid
ViewProviderOriginGroupExtension::ViewProviderOriginGroupExtension() ViewProviderOriginGroupExtension::ViewProviderOriginGroupExtension()
{ {
initExtension(ViewProviderOriginGroupExtension::getExtensionClassTypeId()); initExtensionType(ViewProviderOriginGroupExtension::getExtensionClassTypeId());
} }
ViewProviderOriginGroupExtension::~ViewProviderOriginGroupExtension() ViewProviderOriginGroupExtension::~ViewProviderOriginGroupExtension()

View File

@ -59,7 +59,7 @@ AttachExtension::AttachExtension()
EXTENSION_ADD_PROPERTY_TYPE(superPlacement, (Base::Placement()), "Attachment", App::Prop_None, "Extra placement to apply in addition to attachment (in local coordinates)"); EXTENSION_ADD_PROPERTY_TYPE(superPlacement, (Base::Placement()), "Attachment", App::Prop_None, "Extra placement to apply in addition to attachment (in local coordinates)");
setAttacher(new AttachEngine3D);//default attacher setAttacher(new AttachEngine3D);//default attacher
initExtension(AttachExtension::getExtensionClassTypeId()); initExtensionType(AttachExtension::getExtensionClassTypeId());
} }
AttachExtension::~AttachExtension() AttachExtension::~AttachExtension()