From 9d823f47728ae90359bdccb90c3b06278f001bac Mon Sep 17 00:00:00 2001 From: lh <2334563547@qq.com> Date: Tue, 4 Aug 2026 16:56:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=90=8E=E5=A4=84?= =?UTF-8?q?=E7=90=86=E4=BA=95=E6=98=BE=E7=A4=BA=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增井名和井线显示开关 - 切换时同步更新现有井名和井线 Actor - 补充中文翻译并更新 qm 文件 --- Bin/Config/Lang/cn/nmNum_cn.qm | Bin 103081 -> 103270 bytes Bin/Config/Lang/cn/nmNum_cn.ts | 8 +++++ .../nmWxPostprocessingAnimationWidget.h | 5 ++- .../nmWxPostprocessingAnimationWidget.cpp | 33 +++++++++++++++++- 4 files changed, 44 insertions(+), 2 deletions(-) diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm index bdc77257ab79843b77a2408f204d5cb53efec515..8cdbc9b4652648c867653897c635b28bec073d2b 100644 GIT binary patch delta 1413 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 Draw Region 绘制区域 + + Wells + + + + Show or hide well names and well lines + 显示或隐藏井名和井线 + No cells were found within the defined contour. 在已绘制的区域范围内未找到任何单元格。 diff --git a/Include/nmNum/nmSubWxs/nmWxPostprocessingAnimationWidget.h b/Include/nmNum/nmSubWxs/nmWxPostprocessingAnimationWidget.h index fa4ab3a..a8728d9 100644 --- a/Include/nmNum/nmSubWxs/nmWxPostprocessingAnimationWidget.h +++ b/Include/nmNum/nmSubWxs/nmWxPostprocessingAnimationWidget.h @@ -1,4 +1,4 @@ -#ifndef NMWXPOSTPROCESSINGANIMATIONWIDGET_H +#ifndef NMWXPOSTPROCESSINGANIMATIONWIDGET_H #define NMWXPOSTPROCESSINGANIMATIONWIDGET_H #include "nmSubWxs_global.h" @@ -184,6 +184,8 @@ private slots: void slotContourFinished(); // 清理轮廓 void slotClearContour(); + // 控制井名和井线的整体显示状态 + void slotSetWellActorsVisible(bool visible); private: // 布局 @@ -223,6 +225,7 @@ private: // === 新增:用于绘制井的 VTK 对象 (全部使用 vtkActor 指针,因为 vtkTextActor3D/vtkBillboardTextActor3D 都继承自 vtkActor) === QMap> m_mapWellNameActors; // 存储井名称的 vtkBillboardTextActor3D 文本 Actor QMap> m_mapWellLineActors; // 存储井线的 3D Actor + bool m_bShowWellActors; // 是否显示井名和井线 // 阈值过滤器 vtkSmartPointer m_thresholdFilter; diff --git a/Src/nmNum/nmSubWxs/nmWxPostprocessingAnimationWidget.cpp b/Src/nmNum/nmSubWxs/nmWxPostprocessingAnimationWidget.cpp index 645c185..552a75f 100644 --- a/Src/nmNum/nmSubWxs/nmWxPostprocessingAnimationWidget.cpp +++ b/Src/nmNum/nmSubWxs/nmWxPostprocessingAnimationWidget.cpp @@ -1,4 +1,4 @@ -#include "nmWxPostprocessingAnimationWidget.h" +#include "nmWxPostprocessingAnimationWidget.h" #include // 用于调试输出 #include // 用于 std::sort 排序算法 @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -177,6 +178,7 @@ nmWxPostprocessingAnimationWidget::nmWxPostprocessingAnimationWidget(QWidget* pa m_dMinValue = 0.0; m_bBelowMaxEnabled = false; m_dMaxValue = 0.0; + m_bShowWellActors = true; // 初始化区域平均压力计算内容 m_bIsDrawingMode = false; @@ -593,6 +595,7 @@ void nmWxPostprocessingAnimationWidget::initWellDrawing() textProperty->SetColor(0.898, 0.898, 0.0); textProperty->SetBold(true); // 文本加粗 //textActor->GetTextProperty()->SetJustificationToCentered(); // 文本中心对齐到其位置点 + textActor->SetVisibility(m_bShowWellActors ? 1 : 0); m_renderer->AddActor(textActor); // 对于所有 3D Actor,都使用 m_renderer->AddActor() m_mapWellNameActors.insert(sWellName, textActor); // 将 Actor 存储在 QMap 中,以便后续管理和清除 @@ -628,6 +631,7 @@ void nmWxPostprocessingAnimationWidget::initWellDrawing() lineActor->SetMapper(lineMapper); lineActor->GetProperty()->SetColor(0.647, 0.165, 0.165); lineActor->GetProperty()->SetLineWidth(1.1); + lineActor->SetVisibility(m_bShowWellActors ? 1 : 0); m_renderer->AddActor(lineActor); // 将 3D Actor 添加到渲染器 m_mapWellLineActors.insert(sWellName, lineActor); // 存储井线 Actor @@ -664,6 +668,27 @@ void nmWxPostprocessingAnimationWidget::clearWellActors() } } +void nmWxPostprocessingAnimationWidget::slotSetWellActorsVisible(bool visible) +{ + m_bShowWellActors = visible; + + for(auto it = m_mapWellNameActors.begin(); it != m_mapWellNameActors.end(); ++it) { + if(it.value()) { + it.value()->SetVisibility(visible ? 1 : 0); + } + } + + for(auto it = m_mapWellLineActors.begin(); it != m_mapWellLineActors.end(); ++it) { + if(it.value()) { + it.value()->SetVisibility(visible ? 1 : 0); + } + } + + if(m_pVtkWidget && m_pVtkWidget->GetRenderWindow()) { + m_pVtkWidget->GetRenderWindow()->Render(); + } +} + void nmWxPostprocessingAnimationWidget::initOperPannel() { QHBoxLayout* operLayout = new QHBoxLayout; // 创建操作面板的水平布局 @@ -717,6 +742,12 @@ void nmWxPostprocessingAnimationWidget::initOperPannel() operLayout->addWidget(drawButton, 2); connect(drawButton, SIGNAL(clicked()), this, SLOT(slotStartDrawPolygon())); + QCheckBox* wellActorsCheckBox = new QCheckBox(tr("Wells"), this); + wellActorsCheckBox->setToolTip(tr("Show or hide well names and well lines")); + wellActorsCheckBox->setChecked(m_bShowWellActors); + operLayout->addWidget(wellActorsCheckBox, 1); + connect(wellActorsCheckBox, SIGNAL(toggled(bool)), this, SLOT(slotSetWellActorsVisible(bool))); + // 创建切换显示模式的下拉框 QComboBox* showModeSelector = new QComboBox(this); // 创建下拉框 showModeSelector->addItem(tr("face")); // 添加“面”模式