Merge pull request #23710 from kadet1090/fix-transform-basefeature-outside-body
Gui: Add handling for BaseFeatures outside of Body edge case
This commit is contained in:
@@ -72,9 +72,25 @@ void ViewProviderBase::setupContextMenu(QMenu* menu, QObject* receiver, const ch
|
||||
if (!base->Placement.testStatus(App::Property::Immutable) &&
|
||||
!base->Placement.testStatus(App::Property::ReadOnly) &&
|
||||
!base->Placement.testStatus(App::Property::Hidden)) {
|
||||
|
||||
// Handling of the edge case where some base features are outside the body
|
||||
// that should not happen, but it was possible to do in older FreeCAD versions.
|
||||
// This ensures that for older files it still works correctly.
|
||||
if (!getBodyViewProvider()) {
|
||||
ViewProviderPartExt::setupContextMenu(menu, receiver, member);
|
||||
}
|
||||
|
||||
ViewProvider::setupContextMenu(menu, receiver, member);
|
||||
}
|
||||
}
|
||||
Gui::ViewProvider* ViewProviderBase::startEditing(int ModNum)
|
||||
{
|
||||
if (!getBodyViewProvider()) {
|
||||
return ViewProviderPartExt::startEditing(ModNum);
|
||||
}
|
||||
|
||||
return ViewProvider::startEditing(ModNum);
|
||||
}
|
||||
|
||||
bool ViewProviderBase::setEdit(int ModNum)
|
||||
{
|
||||
@@ -82,6 +98,12 @@ bool ViewProviderBase::setEdit(int ModNum)
|
||||
if (!base->Placement.testStatus(App::Property::Immutable) &&
|
||||
!base->Placement.testStatus(App::Property::ReadOnly) &&
|
||||
!base->Placement.testStatus(App::Property::Hidden)) {
|
||||
|
||||
// same as in setupContextMenu
|
||||
if (!getBodyViewProvider()) {
|
||||
return ViewProviderPartExt::setEdit(ModNum);
|
||||
}
|
||||
|
||||
return ViewProvider::setEdit(ModNum);
|
||||
}
|
||||
|
||||
|
||||
@@ -41,6 +41,8 @@ public:
|
||||
bool doubleClicked() override;
|
||||
void setupContextMenu(QMenu* menu, QObject* receiver, const char* member) override;
|
||||
|
||||
Gui::ViewProvider* startEditing(int ModNum) override;
|
||||
|
||||
protected:
|
||||
bool setEdit(int ModNum) override;
|
||||
};
|
||||
|
||||
@@ -453,3 +453,13 @@ void ViewProviderBody::dropObject(App::DocumentObject* obj)
|
||||
}
|
||||
}
|
||||
}
|
||||
bool ViewProviderBody::canDragObjectToTarget(App::DocumentObject* obj,
|
||||
App::DocumentObject* target) const
|
||||
{
|
||||
if (obj->isDerivedFrom<PartDesign::Feature>()) {
|
||||
return target && target->is<PartDesign::Body>();
|
||||
}
|
||||
|
||||
return ViewProviderPart::canDragObjectToTarget(obj, target);
|
||||
}
|
||||
|
||||
|
||||
@@ -88,6 +88,7 @@ public:
|
||||
bool canDropObject(App::DocumentObject*) const override;
|
||||
/** Add an object to the view provider by drag and drop */
|
||||
void dropObject(App::DocumentObject*) override;
|
||||
bool canDragObjectToTarget(App::DocumentObject* obj, App::DocumentObject* target) const override;
|
||||
|
||||
protected:
|
||||
/// Copy over all visual properties to the child features
|
||||
|
||||
Reference in New Issue
Block a user