From 98f50c218a2a899f72d4165f710f2340f6e73a21 Mon Sep 17 00:00:00 2001 From: wandererfan Date: Sat, 20 Sep 2025 13:57:25 -0400 Subject: [PATCH 1/2] [TD]fix dimension not exported to dxf --- src/Mod/TechDraw/App/AppTechDrawPy.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/TechDraw/App/AppTechDrawPy.cpp b/src/Mod/TechDraw/App/AppTechDrawPy.cpp index da2d0caebb..7654068dff 100644 --- a/src/Mod/TechDraw/App/AppTechDrawPy.cpp +++ b/src/Mod/TechDraw/App/AppTechDrawPy.cpp @@ -730,7 +730,7 @@ private: } double grandParentX = 0.0; double grandParentY = 0.0; - if (dvp->isDerivedFrom()) { + if (DrawView::isProjGroupItem(dvp)) { TechDraw::DrawProjGroupItem* dpgi = static_cast(dvp); TechDraw::DrawProjGroup* dpg = dpgi->getPGroup(); if (!dpg) { From 2df371f50f53096b47b2230bac9ae1d62de67767 Mon Sep 17 00:00:00 2001 From: wandererfan Date: Sun, 21 Sep 2025 09:56:35 -0400 Subject: [PATCH 2/2] [TD] Use isProjectGroupItem() in remaining cases - isDerivedFrom() is no longer reliable due to smart view creation changes. --- src/Mod/TechDraw/App/AppTechDrawPy.cpp | 2 +- src/Mod/TechDraw/App/DrawPagePyImp.cpp | 6 ++++-- src/Mod/TechDraw/Gui/QGIProjGroup.cpp | 3 ++- src/Mod/TechDraw/Gui/ViewProviderPageExtension.cpp | 4 +++- src/Mod/TechDraw/Gui/ViewProviderViewClip.cpp | 4 +++- 5 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/Mod/TechDraw/App/AppTechDrawPy.cpp b/src/Mod/TechDraw/App/AppTechDrawPy.cpp index 7654068dff..10926ef699 100644 --- a/src/Mod/TechDraw/App/AppTechDrawPy.cpp +++ b/src/Mod/TechDraw/App/AppTechDrawPy.cpp @@ -572,7 +572,7 @@ private: TopoDS_Shape shape = ShapeUtils::mirrorShape(gObj->getVisHard()); double offX = 0.0; double offY = 0.0; - if (dvp->isDerivedFrom()) { + if (DrawView::isProjGroupItem(dvp)) { TechDraw::DrawProjGroupItem* dpgi = static_cast(dvp); TechDraw::DrawProjGroup* dpg = dpgi->getPGroup(); if (dpg) { diff --git a/src/Mod/TechDraw/App/DrawPagePyImp.cpp b/src/Mod/TechDraw/App/DrawPagePyImp.cpp index d0b4ce140b..b12a4e211f 100644 --- a/src/Mod/TechDraw/App/DrawPagePyImp.cpp +++ b/src/Mod/TechDraw/App/DrawPagePyImp.cpp @@ -87,7 +87,8 @@ PyObject* DrawPagePy::getViews(PyObject* args) Py::List ret; for (auto v: allViews) { - if (v->isDerivedFrom()) { + auto dvp = freecad_cast(v); + if (dvp && DrawView::isProjGroupItem(dvp)) { TechDraw::DrawProjGroupItem* dpgi = static_cast(v); ret.append(Py::asObject(new TechDraw::DrawProjGroupItemPy(dpgi))); } @@ -119,7 +120,8 @@ PyObject* DrawPagePy::getAllViews(PyObject* args) Py::List ret; for (auto v: allViews) { - if (v->isDerivedFrom()) { + auto dvp = freecad_cast(v); + if (dvp && DrawView::isProjGroupItem(dvp)) { TechDraw::DrawProjGroupItem* dpgi = static_cast(v); ret.append(Py::asObject(new TechDraw::DrawProjGroupItemPy(dpgi))); } diff --git a/src/Mod/TechDraw/Gui/QGIProjGroup.cpp b/src/Mod/TechDraw/Gui/QGIProjGroup.cpp index 6a81d1a68e..0f67b84135 100644 --- a/src/Mod/TechDraw/Gui/QGIProjGroup.cpp +++ b/src/Mod/TechDraw/Gui/QGIProjGroup.cpp @@ -109,7 +109,8 @@ QVariant QGIProjGroup::itemChange(GraphicsItemChange change, const QVariant &val QGIView* gView = dynamic_cast(childItem); if(gView) { TechDraw::DrawView *fView = gView->getViewObject(); - if(fView->isDerivedFrom()) { + auto dvp = freecad_cast(fView); + if (dvp && TechDraw::DrawView::isProjGroupItem(dvp)) { auto *projItemPtr = static_cast(fView); QString type = QString::fromLatin1(projItemPtr->Type.getValueAsString()); diff --git a/src/Mod/TechDraw/Gui/ViewProviderPageExtension.cpp b/src/Mod/TechDraw/Gui/ViewProviderPageExtension.cpp index 3e852d810c..daca80b09a 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderPageExtension.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderPageExtension.cpp @@ -32,6 +32,7 @@ using namespace TechDrawGui; +using namespace TechDraw; EXTENSION_PROPERTY_SOURCE(TechDrawGui::ViewProviderPageExtension, Gui::ViewProviderExtension) @@ -122,7 +123,8 @@ void ViewProviderPageExtension::extensionDropObject(App::DocumentObject* obj) //this code used to live in ViewProviderPage void ViewProviderPageExtension::dropObject(App::DocumentObject* obj) { - if (obj->isDerivedFrom()) { + auto dvp = freecad_cast(obj); + if (dvp && DrawView::isProjGroupItem(dvp)) { //DPGI can not be dropped onto the Page if it belongs to DPG auto* dpgi = static_cast(obj); if (dpgi->getPGroup()) { diff --git a/src/Mod/TechDraw/Gui/ViewProviderViewClip.cpp b/src/Mod/TechDraw/Gui/ViewProviderViewClip.cpp index 9d54bebf0a..bf8e7be7e4 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderViewClip.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderViewClip.cpp @@ -35,6 +35,7 @@ #include "QGIViewClip.h" using namespace TechDrawGui; +using namespace TechDraw; PROPERTY_SOURCE(TechDrawGui::ViewProviderViewClip, TechDrawGui::ViewProviderDrawingView) @@ -123,7 +124,8 @@ void ViewProviderViewClip::dragObject(App::DocumentObject* docObj) void ViewProviderViewClip::dropObject(App::DocumentObject* docObj) { - if (docObj->isDerivedFrom()) { + auto dvp = freecad_cast(docObj); + if (dvp && DrawView::isProjGroupItem(dvp)) { //DPGI can not be dropped onto the Page if it belongs to DPG auto* dpgi = static_cast(docObj); if (dpgi->getPGroup()) {