From 89b33f018e699615ae5dd2d49ccbda29bea4ef53 Mon Sep 17 00:00:00 2001 From: Hugues Delorme Date: Fri, 20 Sep 2024 16:31:04 +0200 Subject: [PATCH] WIP0 --- src/app/widget_gui_document.cpp | 4 +++- src/gui/gui_document.cpp | 35 +++++++++++++++++++++++++++++++-- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/src/app/widget_gui_document.cpp b/src/app/widget_gui_document.cpp index 21820e96..768b210b 100644 --- a/src/app/widget_gui_document.cpp +++ b/src/app/widget_gui_document.cpp @@ -122,7 +122,9 @@ WidgetGuiDocument::WidgetGuiDocument(GuiDocument* guiDoc, QWidget* parent) m_qtOccView->redraw(); }); QObject::connect(m_btnFitAll, &ButtonFlat::clicked, this, [=]{ - m_guiDoc->runViewCameraAnimation(&GraphicsUtils::V3dView_fitAll); + m_guiDoc->runViewCameraAnimation([=](OccHandle view) { + view->FitAll(this->guiDocument()->graphicsBoundingBox()); + }); }); QObject::connect( m_btnGrid, &ButtonFlat::checked, diff --git a/src/gui/gui_document.cpp b/src/gui/gui_document.cpp index 39fe3f48..767debc4 100644 --- a/src/gui/gui_document.cpp +++ b/src/gui/gui_document.cpp @@ -105,6 +105,7 @@ GuiDocument::GuiDocument(const DocumentPtr& doc, GuiApplication* guiApp) for (int i = 0; i < doc->entityCount(); ++i) this->mapEntity(doc->entityTreeNodeId(i)); + doc->signalEntityAdded.connectSlot(&GuiDocument::onDocumentEntityAdded, this); doc->signalEntityAboutToBeDestroyed.connectSlot(&GuiDocument::onDocumentEntityAboutToBeDestroyed, this); m_gfxScene.signalSelectionChanged.connectSlot(&GuiDocument::onGraphicsSelectionChanged, this); @@ -370,11 +371,41 @@ bool GuiDocument::processAction(const GraphicsOwnerPtr& gfxOwner) return false; } +Bnd_Box boundingBoxForFitAll(const GuiDocument* guiDoc) +{ + Bnd_Box bndBox; + + //GraphicsUtils::AisObject_isVisible(gfxObject); + auto appSelectionModel = guiDoc->guiApplication()->selectionModel(); + std::vector appItems; + for (const ApplicationItem& item : appSelectionModel->selectedItems()) { + if (item.document() == guiDoc->document()) + appItems = item; + } + + if (appItems.empty()) + appItems = ApplicationItem{guiDoc->document()}; + + for (const ApplicationItem& item : appItems) { + if (item.isDocument()) { + traverseTree(item.document()->modelTree(), [=](TreeNodeId nodeId) { + if (guiDoc->nodeVisibleState(nodeId) == CheckState::On) { + guiDoc->foreachGraphicsObject(nodeId, [](GraphicsObjectPtr gfxObject) { + BndUtils::add(&bndBox, GraphicsUtils::AisObject_boundingBox(gfxObject)); + }); + } + }); + } + } + + return bndBox; +} + void GuiDocument::setViewCameraOrientation(V3d_TypeOfOrientation projection) { this->runViewCameraAnimation([=](OccHandle view) { view->SetProj(projection); - GraphicsUtils::V3dView_fitAll(view); + view->FitAll(this->graphicsBoundingBox()); }); } @@ -516,6 +547,7 @@ void GuiDocument::onDocumentEntityAdded(TreeNodeId entityTreeNodeId) { this->mapEntity(entityTreeNodeId); BndUtils::add(&m_gfxBoundingBox, m_vecGraphicsEntity.back().bndBox); + m_v3dView->FitAll(m_gfxBoundingBox); this->signalGraphicsBoundingBoxChanged.send(m_gfxBoundingBox); } @@ -642,7 +674,6 @@ void GuiDocument::mapEntity(TreeNodeId entityTreeNodeId) m_mapTreeNodeCheckState.insert({ id, CheckState::On }); }); - GraphicsUtils::V3dView_fitAll(m_v3dView); m_vecGraphicsEntity.push_back(std::move(gfxEntity)); }