Extensions: GeoFeatureGroup only for GeoFeature
This commit is contained in:
parent
dfbd6aa237
commit
47ed29fffd
|
@ -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()
|
||||||
|
|
|
@ -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())
|
||||||
|
|
|
@ -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()));
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
|
@ -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" );
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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()));
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 );
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user