PD: Forward transform requests to Body
This commit is contained in:
@@ -382,6 +382,9 @@ void TaskTransform::setSelectionMode(SelectionMode mode)
|
||||
draggerPickStyle->style = SoPickStyle::SHAPE_ON_TOP;
|
||||
draggerPickStyle->setOverride(false);
|
||||
blockSelection(true);
|
||||
|
||||
vp->setTransformOrigin(vp->getTransformOrigin());
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -492,6 +495,11 @@ void TaskTransform::onAlignRotationChanged()
|
||||
|
||||
void TaskTransform::onAlignToOtherObject()
|
||||
{
|
||||
if (selectionMode == SelectionMode::SelectAlignTarget) {
|
||||
setSelectionMode(SelectionMode::None);
|
||||
return;
|
||||
}
|
||||
|
||||
setSelectionMode(SelectionMode::SelectAlignTarget);
|
||||
}
|
||||
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
#include "ViewProviderDragger.h"
|
||||
#include "Utilities.h"
|
||||
|
||||
#include <ViewProviderLink.h>
|
||||
#include <App/DocumentObjectGroup.h>
|
||||
#include <Base/Tools.h>
|
||||
|
||||
@@ -123,15 +124,17 @@ void ViewProviderDragger::setupContextMenu(QMenu* menu, QObject* receiver, const
|
||||
|
||||
ViewProvider* ViewProviderDragger::startEditing(int mode)
|
||||
{
|
||||
_linkDragger = nullptr;
|
||||
forwardedViewProvider = nullptr;
|
||||
|
||||
auto ret = ViewProviderDocumentObject::startEditing(mode);
|
||||
if (!ret) {
|
||||
return ret;
|
||||
}
|
||||
return _linkDragger ? _linkDragger : ret;
|
||||
|
||||
return forwardedViewProvider ? forwardedViewProvider : ret;
|
||||
}
|
||||
|
||||
bool ViewProviderDragger::checkLink()
|
||||
bool ViewProviderDragger::forwardToLink()
|
||||
{
|
||||
// Trying to detect if the editing request is forwarded by a link object,
|
||||
// usually by doubleClicked(). If so, we route the request back. There shall
|
||||
@@ -150,26 +153,24 @@ bool ViewProviderDragger::checkLink()
|
||||
return false;
|
||||
}
|
||||
|
||||
auto sobj = vpParent->getObject()->getSubObject(subname.c_str());
|
||||
if (!sobj || sobj == getObject() || sobj->getLinkedObject(true) != getObject()) {
|
||||
if (vpParent == this) {
|
||||
return false;
|
||||
}
|
||||
|
||||
auto vp = Application::Instance->getViewProvider(sobj);
|
||||
if (!vp) {
|
||||
if (!vpParent->isDerivedFrom<ViewProviderLink>()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
_linkDragger = vp->startEditing(ViewProvider::Transform);
|
||||
forwardedViewProvider = vpParent->startEditing(ViewProvider::Transform);
|
||||
|
||||
return _linkDragger != nullptr;
|
||||
return forwardedViewProvider != nullptr;
|
||||
}
|
||||
|
||||
bool ViewProviderDragger::setEdit(int ModNum)
|
||||
{
|
||||
Q_UNUSED(ModNum);
|
||||
|
||||
if (checkLink()) {
|
||||
if (forwardToLink()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -208,8 +209,8 @@ void ViewProviderDragger::setEditViewer(Gui::View3DInventorViewer* viewer, int M
|
||||
if (csysDragger && viewer) {
|
||||
csysDragger->setUpAutoScale(viewer->getSoRenderManager()->getCamera());
|
||||
|
||||
auto mat = viewer->getDocument()->getEditingTransform();
|
||||
mat *= getObjectPlacement().inverse().toMatrix();
|
||||
auto originPlacement = App::GeoFeature::getGlobalPlacement(getObject()) * getObjectPlacement().inverse();
|
||||
auto mat = originPlacement.toMatrix();
|
||||
|
||||
viewer->getDocument()->setEditingTransform(mat);
|
||||
viewer->setupEditingRoot(csysDragger, &mat);
|
||||
|
||||
@@ -90,6 +90,8 @@ protected:
|
||||
|
||||
void onChanged(const App::Property* prop) override;
|
||||
|
||||
bool forwardToLink();
|
||||
|
||||
/**
|
||||
* Returns a newly create dialog for the part to be placed in the task view
|
||||
* Must be reimplemented in subclasses.
|
||||
@@ -97,6 +99,7 @@ protected:
|
||||
virtual TaskView::TaskDialog* getTransformDialog();
|
||||
|
||||
CoinPtr<SoFCCSysDragger> csysDragger = nullptr;
|
||||
ViewProvider *forwardedViewProvider = nullptr;
|
||||
|
||||
private:
|
||||
static void dragStartCallback(void *data, SoDragger *d);
|
||||
@@ -105,9 +108,6 @@ private:
|
||||
|
||||
void updateDraggerPosition();
|
||||
|
||||
bool checkLink();
|
||||
|
||||
ViewProvider *_linkDragger = nullptr;
|
||||
Base::Placement draggerPlacement { };
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user