From 9853aaf56cae8a22eab00e681532e36b19da125a Mon Sep 17 00:00:00 2001 From: lh <2334563547@qq.com> Date: Fri, 23 Oct 2026 15:01:26 +0800 Subject: [PATCH] =?UTF-8?q?feat(nmNum):=20=E6=94=AF=E6=8C=81=E6=97=8B?= =?UTF-8?q?=E8=BD=AC=E4=B8=AD=E5=BF=83=E6=A0=87=E8=AE=B0=E6=98=BE=E9=9A=90?= =?UTF-8?q?=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Bin/Config/Lang/cn/nmNum_cn.qm | Bin 187933 -> 188031 bytes Bin/Config/Lang/cn/nmNum_cn.ts | 1 + .../nmRender/nmVTKViewCommandController.h | 10 +++- .../nmRender/nmWxVTKRenderContainerWidget.h | 5 ++ .../nmRender/nmVTKViewCommandController.cpp | 46 ++++++++++++++++-- .../nmRender/nmWxVTKRenderContainerWidget.cpp | 42 ++++++++++++++-- Src/nmNum/nmSubWxs/nmWxPebiGridViewWidget.cpp | 2 + .../nmSubWxs/nmWxPebiResultViewWidget.cpp | 2 + 8 files changed, 100 insertions(+), 8 deletions(-) diff --git a/Bin/Config/Lang/cn/nmNum_cn.qm b/Bin/Config/Lang/cn/nmNum_cn.qm index 8683a625e9ce53c52e8a58fabc682b1e399f410c..9c073bf41633b0d981dcf955885c9cd584570ed3 100644 GIT binary patch delta 11389 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 delta 11230 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 G#_9j4zkUY* diff --git a/Bin/Config/Lang/cn/nmNum_cn.ts b/Bin/Config/Lang/cn/nmNum_cn.ts index 939b0fdd..ff1638a0 100644 --- a/Bin/Config/Lang/cn/nmNum_cn.ts +++ b/Bin/Config/Lang/cn/nmNum_cn.ts @@ -5956,6 +5956,7 @@ Please check your input coordinates. Isometric View等轴测视图 Reset Rotation Center重置旋转中心 Set Rotation Center设置旋转中心 + Show Rotation Center Marker显示旋转中心标记 Save as Image保存图片 Copy Image复制图片 Print打印 diff --git a/Include/nmNum/nmRender/nmVTKViewCommandController.h b/Include/nmNum/nmRender/nmVTKViewCommandController.h index 3a48f5fd..7d09ef8a 100644 --- a/Include/nmNum/nmRender/nmVTKViewCommandController.h +++ b/Include/nmNum/nmRender/nmVTKViewCommandController.h @@ -37,7 +37,8 @@ public: ViewCommand_CopyImage = 0x0200, ViewCommand_Print = 0x0400, ViewCommand_PrintPreview = 0x0800, - ViewCommand_SetRotationCenter = 0x1000 + ViewCommand_SetRotationCenter = 0x1000, + ViewCommand_ShowRotationCenterMarker = 0x2000 ///< 显示或隐藏旋转中心标记。 }; Q_DECLARE_FLAGS(ViewCommands, ViewCommand) @@ -76,7 +77,7 @@ private: Q_DISABLE_COPY(nmVTKViewCommandController) - enum { ViewCommandCount = 13 }; + enum { ViewCommandCount = 14 }; /** @brief 仅供容器设置当前视图对外提供的命令集合。 */ void setCapabilities(ViewCommands eCommands); @@ -90,6 +91,10 @@ private: bool supports(ViewCommand eCommand) const; /** @brief 仅供容器同步拾取目标、标记和交互模式的综合可用状态。 */ void setRotationCenterPickingAvailable(bool bAvailable); + /** @brief 仅供容器同步旋转中心标记开关的可用状态。 */ + void setRotationCenterMarkerAvailable(bool bAvailable); + /** @brief 仅供容器无信号地同步旋转中心标记开关状态。 */ + void setRotationCenterMarkerVisible(bool bVisible); void updateActionStates(); nmWxVTKRenderContainerWidget* m_pContainer; ///< 非所有权命令接收者。 @@ -97,6 +102,7 @@ private: ViewCommands m_eCapabilities; bool m_bViewAvailable; bool m_bRotationCenterPickingAvailable; + bool m_bRotationCenterMarkerAvailable; ///< 标记开关当前是否具备操作条件。 }; Q_DECLARE_OPERATORS_FOR_FLAGS(nmVTKViewCommandController::ViewCommands) diff --git a/Include/nmNum/nmRender/nmWxVTKRenderContainerWidget.h b/Include/nmNum/nmRender/nmWxVTKRenderContainerWidget.h index 49b7fb4e..d3902d5c 100644 --- a/Include/nmNum/nmRender/nmWxVTKRenderContainerWidget.h +++ b/Include/nmNum/nmRender/nmWxVTKRenderContainerWidget.h @@ -80,6 +80,8 @@ public: void setRotationCenterPickTarget(vtkProp* pTarget); /** @brief 返回当前是否正在等待用户选择旋转中心。 */ bool isRotationCenterPicking() const; + /** @brief 返回当前窗口是否允许显示旋转中心标记。 */ + bool isRotationCenterMarkerVisible() const; /** @brief 隐藏旋转中心标记,不修改独立中心或相机且不主动渲染。 */ void hideRotationCenterMarker(); @@ -146,6 +148,8 @@ public slots: void resetRotationCenter(); /** @brief 请求开始或取消一次性旋转中心拾取模式。 */ void setRotationCenterPickingEnabled(bool bEnabled); + /** @brief 保存当前窗口的标记显隐偏好,并在画面变化时渲染一次。 */ + void setRotationCenterMarkerVisible(bool bVisible); protected: /** @brief 优先处理拾取事件,再处理 QVTKWidget 的右键菜单。 */ @@ -219,6 +223,7 @@ private: nmVTKOrientationMarkerController* m_pOrientationMarkerController; nmVTKRotationCenterPicker* m_pRotationCenterPicker; ///< 本容器独占。 nmVTKRotationCenterMarkerLayer* m_pRotationCenterMarkerLayer; ///< 系统 Scene 所有。 + bool m_bRotationCenterMarkerVisible; ///< 当前窗口独立保存的标记显隐偏好。 }; #endif // NMWXVTKRENDERCONTAINERWIDGET_H diff --git a/Src/nmNum/nmRender/nmVTKViewCommandController.cpp b/Src/nmNum/nmRender/nmVTKViewCommandController.cpp index 6c8c5ddd..fd583936 100644 --- a/Src/nmNum/nmRender/nmVTKViewCommandController.cpp +++ b/Src/nmNum/nmRender/nmVTKViewCommandController.cpp @@ -28,7 +28,8 @@ nmVTKViewCommandController::nmVTKViewCommandController( m_pContainer(pContainer), m_eCapabilities(0), m_bViewAvailable(false), - m_bRotationCenterPickingAvailable(false) + m_bRotationCenterPickingAvailable(false), + m_bRotationCenterMarkerAvailable(false) { for(int nIndex = 0; nIndex < ViewCommandCount; ++nIndex) { m_pActions[nIndex] = nullptr; @@ -63,6 +64,18 @@ nmVTKViewCommandController::nmVTKViewCommandController( SLOT(setRotationCenterPickingEnabled(bool))); } } + QAction* pShowRotationCenterMarkerAction = createAction( + ViewCommand_ShowRotationCenterMarker, + tr("Show Rotation Center Marker"), QString(), nullptr); + if(pShowRotationCenterMarkerAction != nullptr) { + pShowRotationCenterMarkerAction->setCheckable(true); + pShowRotationCenterMarkerAction->setChecked(true); + if(m_pContainer != nullptr) { + connect(pShowRotationCenterMarkerAction, SIGNAL(toggled(bool)), + m_pContainer, + SLOT(setRotationCenterMarkerVisible(bool))); + } + } createAction(ViewCommand_SaveImage, tr("Save as Image"), "SaveImg.png", SLOT(saveImage())); createAction(ViewCommand_CopyImage, tr("Copy Image"), @@ -160,7 +173,8 @@ void nmVTKViewCommandController::populateContextMenu(QMenu* pMenu) const ViewCommand_Right, ViewCommand_Isometric, ViewCommand_ResetRotationCenter, - ViewCommand_SetRotationCenter + ViewCommand_SetRotationCenter, + ViewCommand_ShowRotationCenterMarker }; bool bHasViewCommands = false; const int nViewCommandCount = @@ -233,6 +247,26 @@ void nmVTKViewCommandController::setRotationCenterPicking(bool bPicking) pAction->blockSignals(bOldBlockState); } +void nmVTKViewCommandController::setRotationCenterMarkerAvailable( + bool bAvailable) +{ + m_bRotationCenterMarkerAvailable = bAvailable; + updateActionStates(); +} + +void nmVTKViewCommandController::setRotationCenterMarkerVisible( + bool bVisible) +{ + QAction* pAction = getAction(ViewCommand_ShowRotationCenterMarker); + if(pAction == nullptr || !pAction->isCheckable()) { + return; + } + + const bool bOldBlockState = pAction->blockSignals(true); + pAction->setChecked(bVisible); + pAction->blockSignals(bOldBlockState); +} + QAction* nmVTKViewCommandController::createAction( ViewCommand eCommand, const QString& sText, @@ -272,6 +306,7 @@ int nmVTKViewCommandController::actionIndex(ViewCommand eCommand) const case ViewCommand_Print: return 10; case ViewCommand_PrintPreview: return 11; case ViewCommand_SetRotationCenter: return 12; + case ViewCommand_ShowRotationCenterMarker: return 13; default: return -1; } } @@ -296,7 +331,8 @@ void nmVTKViewCommandController::updateActionStates() ViewCommand_CopyImage, ViewCommand_Print, ViewCommand_PrintPreview, - ViewCommand_SetRotationCenter + ViewCommand_SetRotationCenter, + ViewCommand_ShowRotationCenterMarker }; for(int nIndex = 0; nIndex < ViewCommandCount; ++nIndex) { QAction* pAction = m_pActions[nIndex]; @@ -309,6 +345,10 @@ void nmVTKViewCommandController::updateActionStates() if(!bEnabled) { setRotationCenterPicking(false); } + } else if(eCommands[nIndex] == + ViewCommand_ShowRotationCenterMarker) { + bEnabled = bEnabled && + m_bRotationCenterMarkerAvailable; } pAction->setVisible(bSupported); pAction->setEnabled(bEnabled); diff --git a/Src/nmNum/nmRender/nmWxVTKRenderContainerWidget.cpp b/Src/nmNum/nmRender/nmWxVTKRenderContainerWidget.cpp index 16172d15..db01999b 100644 --- a/Src/nmNum/nmRender/nmWxVTKRenderContainerWidget.cpp +++ b/Src/nmNum/nmRender/nmWxVTKRenderContainerWidget.cpp @@ -55,7 +55,8 @@ nmWxVTKRenderContainerWidget::nmWxVTKRenderContainerWidget(QWidget* pParent) m_pViewCommandController(nullptr), m_pOrientationMarkerController(nullptr), m_pRotationCenterPicker(nullptr), - m_pRotationCenterMarkerLayer(nullptr) + m_pRotationCenterMarkerLayer(nullptr), + m_bRotationCenterMarkerVisible(true) { Q_ASSERT(isGuiThread()); @@ -336,6 +337,11 @@ bool nmWxVTKRenderContainerWidget::isRotationCenterPicking() const m_pRotationCenterPicker->isActive(); } +bool nmWxVTKRenderContainerWidget::isRotationCenterMarkerVisible() const +{ + return m_bRotationCenterMarkerVisible; +} + void nmWxVTKRenderContainerWidget::hideRotationCenterMarker() { Q_ASSERT(isGuiThread()); @@ -346,6 +352,30 @@ void nmWxVTKRenderContainerWidget::hideRotationCenterMarker() } } +void nmWxVTKRenderContainerWidget::setRotationCenterMarkerVisible( + bool bVisible) +{ + Q_ASSERT(isGuiThread()); + if(!isGuiThread() || m_bRotationCenterMarkerVisible == bVisible) { + return; + } + + m_bRotationCenterMarkerVisible = bVisible; + if(m_pViewCommandController != nullptr) { + m_pViewCommandController->setRotationCenterMarkerVisible(bVisible); + } + + nmVTKRotationCenterMarkerLayer* pMarkerLayer = + getRotationCenterMarkerLayer(); + const bool bWasVisible = pMarkerLayer != nullptr && + pMarkerLayer->isMarkerVisible(); + updateRotationCenterMarkerVisibility(); + if(pMarkerLayer != nullptr && + bWasVisible != pMarkerLayer->isMarkerVisible()) { + renderView(); + } +} + bool nmWxVTKRenderContainerWidget::installInteractionStyle( vtkInteractorStyle* pStyle) { @@ -548,7 +578,7 @@ bool nmWxVTKRenderContainerWidget::applyRotationCenter( return false; } if(bShowMarker) { - pMarkerLayer->setMarkerVisible(true); + updateRotationCenterMarkerVisibility(); } } synchronizeRotationCenterMarker(); @@ -641,7 +671,8 @@ void nmWxVTKRenderContainerWidget::updateRotationCenterMarkerVisibility() return; } - const bool bVisible = m_pViewCommandController != nullptr && + const bool bVisible = m_bRotationCenterMarkerVisible && + m_pViewCommandController != nullptr && m_pViewCommandController->isViewAvailable() && m_pViewCommandController->getCapabilities().testFlag( nmVTKViewCommandController::ViewCommand_SetRotationCenter) && @@ -664,6 +695,11 @@ void nmWxVTKRenderContainerWidget::updateRotationCenterCommandAvailability() m_pInteractionManager->isDefaultInteractionActive(); m_pViewCommandController->setRotationCenterPickingAvailable( bAvailable); + const bool bMarkerAvailable = m_pRotationCenterPicker != nullptr && + m_pRotationCenterPicker->hasPickTarget() && + getRotationCenterMarkerLayer() != nullptr; + m_pViewCommandController->setRotationCenterMarkerAvailable( + bMarkerAvailable); } nmVTKRotationCenterMarkerLayer* diff --git a/Src/nmNum/nmSubWxs/nmWxPebiGridViewWidget.cpp b/Src/nmNum/nmSubWxs/nmWxPebiGridViewWidget.cpp index 3a9665b0..b280df14 100644 --- a/Src/nmNum/nmSubWxs/nmWxPebiGridViewWidget.cpp +++ b/Src/nmNum/nmSubWxs/nmWxPebiGridViewWidget.cpp @@ -81,6 +81,8 @@ void nmWxPebiGridViewWidget::createUi() nmVTKViewCommandController::ViewCommand_Top | nmVTKViewCommandController::ViewCommand_Front | nmVTKViewCommandController::ViewCommand_SetRotationCenter | + nmVTKViewCommandController:: + ViewCommand_ShowRotationCenterMarker | nmVTKViewCommandController::ViewCommand_SaveImage | nmVTKViewCommandController::ViewCommand_CopyImage | nmVTKViewCommandController::ViewCommand_Print | diff --git a/Src/nmNum/nmSubWxs/nmWxPebiResultViewWidget.cpp b/Src/nmNum/nmSubWxs/nmWxPebiResultViewWidget.cpp index 0c0d15a0..01b38ea1 100644 --- a/Src/nmNum/nmSubWxs/nmWxPebiResultViewWidget.cpp +++ b/Src/nmNum/nmSubWxs/nmWxPebiResultViewWidget.cpp @@ -456,6 +456,8 @@ void nmWxPebiResultViewWidget::createUi() nmVTKViewCommandController::ViewCommand_Top | nmVTKViewCommandController::ViewCommand_Front | nmVTKViewCommandController::ViewCommand_SetRotationCenter | + nmVTKViewCommandController:: + ViewCommand_ShowRotationCenterMarker | nmVTKViewCommandController::ViewCommand_SaveImage | nmVTKViewCommandController::ViewCommand_CopyImage | nmVTKViewCommandController::ViewCommand_Print |