Core: Add getPlacementOf replacing previous getGlobalPlacement logic. (#26059)
* Core: Add getPlacementOf replacing previous getGlobalPlacement logic. * Update src/App/DocumentObject.cpp Co-authored-by: Kacper Donat <kadet1090@gmail.com> * Update DocumentObject.cpp * Fix error when called from python with targetObj == None --------- Co-authored-by: Kacper Donat <kadet1090@gmail.com>
This commit is contained in:
@@ -91,6 +91,11 @@ public:
|
||||
|
||||
bool editProperty(const char* propName);
|
||||
|
||||
ValueT isLink() const;
|
||||
ValueT isLinkGroup() const;
|
||||
|
||||
bool getPlacementOf(Base::Placement& ret, const char* subname, App::DocumentObject* target) const;
|
||||
|
||||
private:
|
||||
App::DocumentObject* object;
|
||||
bool has__object__ {false};
|
||||
@@ -114,7 +119,10 @@ private:
|
||||
FC_PY_ELEMENT(hasChildElement) \
|
||||
FC_PY_ELEMENT(isElementVisible) \
|
||||
FC_PY_ELEMENT(setElementVisible) \
|
||||
FC_PY_ELEMENT(editProperty)
|
||||
FC_PY_ELEMENT(editProperty) \
|
||||
FC_PY_ELEMENT(isLink) \
|
||||
FC_PY_ELEMENT(isLinkGroup) \
|
||||
FC_PY_ELEMENT(getPlacementOf)
|
||||
|
||||
#define FC_PY_ELEMENT_DEFINE(_name) Py::Object py_##_name;
|
||||
|
||||
@@ -349,6 +357,41 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
bool isLink() const override
|
||||
{
|
||||
switch (imp->isLink()) {
|
||||
case FeaturePythonImp::Accepted:
|
||||
return true;
|
||||
case FeaturePythonImp::Rejected:
|
||||
return false;
|
||||
default:
|
||||
return FeatureT::isLink();
|
||||
}
|
||||
}
|
||||
|
||||
bool isLinkGroup() const override
|
||||
{
|
||||
switch (imp->isLinkGroup()) {
|
||||
case FeaturePythonImp::Accepted:
|
||||
return true;
|
||||
case FeaturePythonImp::Rejected:
|
||||
return false;
|
||||
default:
|
||||
return FeatureT::isLinkGroup();
|
||||
}
|
||||
}
|
||||
|
||||
Base::Placement getPlacementOf(const std::string& sub, DocumentObject* targetObj = nullptr) override
|
||||
{
|
||||
Base::Placement ret;
|
||||
// Try to call the python implementation first
|
||||
if (imp->getPlacementOf(ret, sub.c_str(), targetObj)) {
|
||||
return ret;
|
||||
}
|
||||
// Fallback to C++ implementation
|
||||
return FeatureT::getPlacementOf(sub, targetObj);
|
||||
}
|
||||
|
||||
PyObject* getPyObject() override
|
||||
{
|
||||
if (FeatureT::PythonObject.is(Py::_None())) {
|
||||
|
||||
Reference in New Issue
Block a user