From d32e9602b0e77c2a6be1a45eff92b9839216b06c Mon Sep 17 00:00:00 2001 From: lh <2334563547@qq.com> Date: Fri, 18 Sep 2026 11:38:18 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E8=A7=86=E5=9B=BE=E4=BA=95=E5=90=8D=E6=97=A0=E6=B3=95=E9=9A=90?= =?UTF-8?q?=E8=97=8F=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 由场景控制器统一控制井标注顶层图层显隐 - 确保井名与引线随按钮状态一起显示或隐藏 - 移除井标注图层内部重复的显隐状态和接口 - 保留跨快照显示偏好及候选标注事务提交机制 --- .../nmPebiResultWellAnnotationLayer.h | 7 ----- .../nmSubWxs/nmPebiResultSceneController.cpp | 13 ++++---- .../nmPebiResultWellAnnotationLayer.cpp | 30 +------------------ 3 files changed, 7 insertions(+), 43 deletions(-) diff --git a/Include/nmNum/nmSubWxs/nmPebiResultWellAnnotationLayer.h b/Include/nmNum/nmSubWxs/nmPebiResultWellAnnotationLayer.h index 6697b229..f5675c1a 100644 --- a/Include/nmNum/nmSubWxs/nmPebiResultWellAnnotationLayer.h +++ b/Include/nmNum/nmSubWxs/nmPebiResultWellAnnotationLayer.h @@ -45,19 +45,12 @@ public: /** @brief 返回活动快照是否已有完整井标注子树。 */ bool hasActiveAnnotations() const; - /** @brief 统一设置二维井名及其引线显隐。 */ - void setWellNamesVisible(bool bVisible); - bool areWellNamesVisible() const; - private: Q_DISABLE_COPY(nmPebiResultWellAnnotationLayer) vtkSmartPointer m_pRootAssembly; ///< Scene 挂载的稳定根。 vtkSmartPointer m_pActiveSnapshotAssembly; ///< 当前快照子树。 - vtkSmartPointer m_pActiveAnnotationGroup; ///< 当前井名与引线组。 vtkSmartPointer m_pCandidateSnapshotAssembly; ///< 待提交子树。 - vtkSmartPointer m_pCandidateAnnotationGroup; ///< 候选井名与引线组。 - bool m_bWellNamesVisible; ///< 跨快照保留的文字与引线显隐偏好。 }; #endif // NMPEBIRESULTWELLANNOTATIONLAYER_H diff --git a/Src/nmNum/nmSubWxs/nmPebiResultSceneController.cpp b/Src/nmNum/nmSubWxs/nmPebiResultSceneController.cpp index 4ae6c258..7086e017 100644 --- a/Src/nmNum/nmSubWxs/nmPebiResultSceneController.cpp +++ b/Src/nmNum/nmSubWxs/nmPebiResultSceneController.cpp @@ -597,7 +597,6 @@ public: new nmPebiResultWellAnnotationLayer( QString::fromLatin1(RESULT_WELLS_LAYER_ID)); pLayer->setVisible(false); - pLayer->setWellNamesVisible(m_bWellNamesVisible); if(!pScene->addLayer(pLayer)) { delete pLayer; rollbackCreatedLayers( @@ -721,8 +720,9 @@ public: bHasData && m_bScaleGridVisible); } if(m_pWellLayer != nullptr) { - m_pWellLayer->setWellNamesVisible(m_bWellNamesVisible); - m_pWellLayer->setVisible(bHasData); + // 井图层只包含文字和引线,由 SceneController 统一控制顶层 Prop。 + m_pWellLayer->setVisible( + bHasData && m_bWellNamesVisible); } if(m_pContainer != nullptr) { m_pContainer->setRotationCenterPickTarget( @@ -1355,10 +1355,9 @@ void nmPebiResultSceneController::setWellNamesVisible(bool bVisible) return; } m_pPrivate->m_bWellNamesVisible = bVisible; - if(m_pPrivate->m_pWellLayer != nullptr) { - m_pPrivate->m_pWellLayer->setWellNamesVisible(bVisible); - } - if(hasSnapshot()) { + const bool bHasData = hasSnapshot(); + m_pPrivate->applyLayerVisibility(bHasData); + if(bHasData) { m_pPrivate->m_pContainer->renderView(); } } diff --git a/Src/nmNum/nmSubWxs/nmPebiResultWellAnnotationLayer.cpp b/Src/nmNum/nmSubWxs/nmPebiResultWellAnnotationLayer.cpp index 1ed074f8..9c06636a 100644 --- a/Src/nmNum/nmSubWxs/nmPebiResultWellAnnotationLayer.cpp +++ b/Src/nmNum/nmSubWxs/nmPebiResultWellAnnotationLayer.cpp @@ -43,10 +43,7 @@ nmPebiResultWellAnnotationLayer::nmPebiResultWellAnnotationLayer( : nmVTKRenderLayer(sLayerId), m_pRootAssembly(vtkSmartPointer::New()), m_pActiveSnapshotAssembly(nullptr), - m_pActiveAnnotationGroup(nullptr), - m_pCandidateSnapshotAssembly(nullptr), - m_pCandidateAnnotationGroup(nullptr), - m_bWellNamesVisible(true) + m_pCandidateSnapshotAssembly(nullptr) { Q_ASSERT(isWellAnnotationGuiThread()); // setRenderProp 只在未挂载时可调用,因此根 Assembly 在构造时一次固定。 @@ -167,19 +164,16 @@ bool nmPebiResultWellAnnotationLayer::prepareCandidate( } } - pAnnotationGroup->SetVisibility(m_bWellNamesVisible ? 1 : 0); pSnapshotAssembly->AddPart(pAnnotationGroup); // 所有校验和 VTK 对象构造成功后才记录候选;活动子树仍未触碰。 m_pCandidateSnapshotAssembly = pSnapshotAssembly; - m_pCandidateAnnotationGroup = pAnnotationGroup; return true; } void nmPebiResultWellAnnotationLayer::discardCandidate() { Q_ASSERT(isWellAnnotationGuiThread()); - m_pCandidateAnnotationGroup = nullptr; m_pCandidateSnapshotAssembly = nullptr; } @@ -192,7 +186,6 @@ void nmPebiResultWellAnnotationLayer::commitCandidate() m_pRootAssembly->RemovePart(m_pActiveSnapshotAssembly); } m_pActiveSnapshotAssembly = m_pCandidateSnapshotAssembly; - m_pActiveAnnotationGroup = m_pCandidateAnnotationGroup; m_pRootAssembly->AddPart(m_pActiveSnapshotAssembly); discardCandidate(); } @@ -205,7 +198,6 @@ void nmPebiResultWellAnnotationLayer::clear() m_pActiveSnapshotAssembly != nullptr) { m_pRootAssembly->RemovePart(m_pActiveSnapshotAssembly); } - m_pActiveAnnotationGroup = nullptr; m_pActiveSnapshotAssembly = nullptr; } @@ -213,23 +205,3 @@ bool nmPebiResultWellAnnotationLayer::hasActiveAnnotations() const { return m_pActiveSnapshotAssembly != nullptr; } - -void nmPebiResultWellAnnotationLayer::setWellNamesVisible(bool bVisible) -{ - Q_ASSERT(isWellAnnotationGuiThread()); - if(!isWellAnnotationGuiThread()) { - return; - } - m_bWellNamesVisible = bVisible; - if(m_pActiveAnnotationGroup != nullptr) { - m_pActiveAnnotationGroup->SetVisibility(bVisible ? 1 : 0); - } - if(m_pCandidateAnnotationGroup != nullptr) { - m_pCandidateAnnotationGroup->SetVisibility(bVisible ? 1 : 0); - } -} - -bool nmPebiResultWellAnnotationLayer::areWellNamesVisible() const -{ - return m_bWellNamesVisible; -}