App: implement the private class OriginExtension to simulate a geometric group behaviour

This commit is contained in:
wmayer
2020-06-05 18:17:40 +02:00
parent db74aa8cef
commit 229e8dd375
2 changed files with 40 additions and 1 deletions

View File

@@ -48,11 +48,12 @@ PROPERTY_SOURCE(App::Origin, App::DocumentObject)
const char* Origin::AxisRoles[3] = {"X_Axis", "Y_Axis", "Z_Axis"};
const char* Origin::PlaneRoles[3] = {"XY_Plane", "XZ_Plane", "YZ_Plane"};
Origin::Origin(void) {
Origin::Origin(void) : extension(this) {
ADD_PROPERTY_TYPE ( OriginFeatures, (0), 0, App::Prop_Hidden,
"Axis and baseplanes controlled by the origin" );
setStatus(App::NoAutoExpand,true);
extension.GroupExtension::initExtension(this);
}
@@ -182,3 +183,31 @@ void Origin::unsetupObject () {
}
}
}
// ----------------------------------------------------------------------------
Origin::OriginExtension::OriginExtension(Origin* obj)
: obj(obj)
{
Group.setStatus(Property::Transient, true);
}
void Origin::OriginExtension::initExtension(ExtensionContainer* obj) {
App::GroupExtension::initExtension(obj);
}
bool Origin::OriginExtension::extensionGetSubObject(DocumentObject *&ret, const char *subname,
PyObject **, Base::Matrix4D *, bool, int) const {
const char* dot;
if (!subname || subname[0] == '\0') {
return false;
}
std::string name(subname);
if ((dot=strchr(subname,'.'))) {
name = std::string(subname,dot);
}
ret = obj->getOriginFeature(name.c_str());
return true;
}

View File

@@ -28,6 +28,7 @@
#include "GeoFeature.h"
#include "OriginFeature.h"
#include "GeoFeatureGroupExtension.h"
#include "PropertyLinks.h"
namespace App
@@ -135,6 +136,15 @@ private:
struct SetupData;
void setupOriginFeature (App::PropertyLink &featProp, const SetupData &data);
class OriginExtension : public GeoFeatureGroupExtension {
Origin* obj;
public:
OriginExtension(Origin* obj);
void initExtension(ExtensionContainer* obj);
bool extensionGetSubObject(DocumentObject *&ret, const char *subname,
PyObject **, Base::Matrix4D *, bool, int) const;
};
OriginExtension extension;
};
} //namespace App