Gui: fix ViewProviderLink transform with scale

Fixes FreeCAD/FreeCAD#7113
This commit is contained in:
Zheng, Lei
2022-07-07 12:17:59 +08:00
committed by Uwe
parent a4708192b0
commit 181d3f5536
2 changed files with 29 additions and 2 deletions

View File

@@ -1819,7 +1819,7 @@ void ViewProviderLink::updateDataPrivate(App::LinkBaseExtension *ext, const App:
if(canScale(v))
pcTransform->scaleFactor.setValue(v.x,v.y,v.z);
SbMatrix matrix = convert(ext->getTransform(false));
linkView->renderDoubleSide(matrix.det3() < 0);
linkView->renderDoubleSide(matrix.det3() < 1e-7);
}
}else if(prop == ext->getPlacementProperty() || prop == ext->getLinkPlacementProperty()) {
auto propLinkPlacement = ext->getLinkPlacementProperty();
@@ -1830,7 +1830,7 @@ void ViewProviderLink::updateDataPrivate(App::LinkBaseExtension *ext, const App:
if(canScale(v))
pcTransform->scaleFactor.setValue(v.x,v.y,v.z);
SbMatrix matrix = convert(ext->getTransform(false));
linkView->renderDoubleSide(matrix.det3() < 0);
linkView->renderDoubleSide(matrix.det3() < 1e-7);
}
}else if(prop == ext->getLinkCopyOnChangeGroupProperty()) {
if (auto group = ext->getLinkCopyOnChangeGroupValue()) {
@@ -3407,6 +3407,30 @@ ViewProviderDocumentObject *ViewProviderLink::getLinkedViewProvider(
return self;
}
void ViewProviderLink::setTransformation(const Base::Matrix4D &rcMatrix)
{
inherited::setTransformation(rcMatrix);
auto ext = getLinkExtension();
if(ext) {
if (ext->getScaleVectorProperty())
updateDataPrivate(getLinkExtension(),ext->getScaleVectorProperty());
else
updateDataPrivate(getLinkExtension(),ext->getScaleProperty());
}
}
void ViewProviderLink::setTransformation(const SbMatrix &rcMatrix)
{
inherited::setTransformation(rcMatrix);
auto ext = getLinkExtension();
if(ext) {
if (ext->getScaleVectorProperty())
updateDataPrivate(getLinkExtension(),ext->getScaleVectorProperty());
else
updateDataPrivate(getLinkExtension(),ext->getScaleProperty());
}
}
////////////////////////////////////////////////////////////////////////////////////////
namespace Gui {

View File

@@ -268,6 +268,9 @@ public:
return true;
}
virtual void setTransformation(const Base::Matrix4D &rcMatrix) override;
virtual void setTransformation(const SbMatrix &rcMatrix) override;
protected:
bool setEdit(int ModNum) override;
void setEditViewer(View3DInventorViewer*, int ModNum) override;