You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
4.7 KiB
C++
88 lines
4.7 KiB
C++
#ifndef NMWXVOLUMESLICESETTINGSDLG_H
|
|
#define NMWXVOLUMESLICESETTINGSDLG_H
|
|
|
|
#include "iDlgBase.h"
|
|
#include "nmSubWxs_global.h"
|
|
#include "nmVolumeData.h"
|
|
#include "nmVolumeSliceSettings.h"
|
|
|
|
class QCheckBox;
|
|
class QHideEvent;
|
|
class QLabel;
|
|
class QLineEdit;
|
|
class QPushButton;
|
|
|
|
/** @brief 复用通用参数对话框基类的非模态切片窗口;草稿与已应用参数分离。 */
|
|
class NM_SUB_WXS_EXPORT nmWxVolumeSliceSettingsDlg : public iDlgBase
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
/** @brief 创建原点、法向及显示选项控件,不自动显示窗口;着色属性由底栏控制。 */
|
|
explicit nmWxVolumeSliceSettingsDlg(QWidget* pParent = nullptr);
|
|
/** @brief 更换当前模型及已应用参数,清除前一模型的草稿和错误。 */
|
|
void setData(const QSharedPointer<const nmVolumeData>& pData, const nmVolumeSliceSettings& oApplied);
|
|
/** @brief 提交成功后同步归一化参数,同时更新重置目标。 */
|
|
void setAppliedSettings(const nmVolumeSliceSettings& oSettings);
|
|
/** @brief 同步底栏已应用的着色属性,保留原点和法向的未应用草稿。 */
|
|
void setAppliedProperty(const QString& sPropertyId);
|
|
/** @brief 从当前输入读取并校验草稿,失败不改变输出。 */
|
|
bool getDraft(nmVolumeSliceSettings& oSettings, QString* pError = nullptr) const;
|
|
/** @brief 从拖动事件更新原点和法向,不改变底栏已应用的属性,不回发预览信号。 */
|
|
void setPlanePreview(const nmVolumeSliceSettings& oSettings);
|
|
/** @brief 在窗口内显示计算或绑定错误,不弹出阻塞对话框。 */
|
|
void setError(const QString& sError);
|
|
|
|
signals:
|
|
/** @brief 请求应用当前有效草稿,由所属结果窗口负责事务提交。 */
|
|
void applyRequested();
|
|
/** @brief 有效草稿变化,仅用于同步辅助平面,不能触发截面计算。 */
|
|
void previewChanged();
|
|
/** @brief 显示选项立即生效,与原点、法向草稿的应用周期分离。 */
|
|
void displayOptionsChanged(bool bShowPlane, bool bShowSource);
|
|
/** @brief 窗口隐藏后通知宿主关闭交互手柄;截面继续显示。 */
|
|
void dialogHidden();
|
|
|
|
protected:
|
|
/** @brief 任何隐藏路径均丢弃未应用草稿,避免重开后显示过期参数。 */
|
|
virtual void hideEvent(QHideEvent* pEvent);
|
|
|
|
private slots:
|
|
/** @brief 校验当前输入并更新应用按钮;有效输入更新平面预览。 */
|
|
void onDraftChanged();
|
|
/** @brief 将平面法向设置为 XY/XZ/YZ 对应轴,保持原点。 */
|
|
void onAxisRequested();
|
|
/** @brief 将草稿原点移到模型中心,保持法向与属性。 */
|
|
void onCenterRequested();
|
|
/** @brief 恢复最后已应用参数并同步辅助平面。 */
|
|
void onResetRequested();
|
|
/** @brief 校验有效后请求宿主提交当前草稿。 */
|
|
void onApplyRequested();
|
|
/** @brief 更新已应用状态中的显示偏好,不提交原点和法向草稿。 */
|
|
void onDisplayOptionsChanged();
|
|
|
|
private:
|
|
/** @brief 按现有参数窗口样式创建分组、对齐的编辑控件及固定顺序的底部按钮。 */
|
|
void createUi();
|
|
/** @brief 阻止信号递归地把值对象写入所有控件,然后更新校验提示。 */
|
|
void writeSettings(const nmVolumeSliceSettings& oSettings);
|
|
/** @brief 保存单个字段的完整精度并回填简洁文字,清除该字段修改标记。 */
|
|
void writePlaneValue(int nField, double dValue);
|
|
/** @brief 未编辑字段返回原值;已编辑字段按完整输入精度读取。 */
|
|
bool readPlaneValue(int nField, double& dValue) const;
|
|
/** @brief 更新按钮及校验消息,不发送预览或应用信号。 */
|
|
void updateValidation();
|
|
QSharedPointer<const nmVolumeData> m_pData; ///< 当前只读模型,用于有效性检查及中心位置。
|
|
nmVolumeSliceSettings m_oApplied; ///< 最后成功提交的参数,含立即生效的显示偏好。
|
|
double m_dPlaneValues[6]; ///< 原点、法向各三项最近一次程序回填的完整精度值。
|
|
QString m_sPlaneDisplayTexts[6]; ///< 对应回填文字,配合输入框修改标记判断是否需要解析。
|
|
QLineEdit* m_pOriginEdits[3]; ///< 原点 X/Y/Z 文本输入,支持科学计数法。
|
|
QLineEdit* m_pNormalEdits[3]; ///< 法向 X/Y/Z 文本输入,应用时归一化。
|
|
QCheckBox* m_pShowPlaneCheck; ///< 参数窗口打开时显示辅助平面的开关。
|
|
QCheckBox* m_pShowSourceCheck; ///< 灰色半透明原模型的即时显示开关。
|
|
QLabel* m_pErrorLabel; ///< 非模态输入或计算错误提示。
|
|
QPushButton* m_pApplyButton; ///< 草稿合法且模型存在时才启用。
|
|
bool m_bUpdating; ///< 程序同步控件时屏蔽业务信号,防止反馈循环。
|
|
};
|
|
|
|
#endif // NMWXVOLUMESLICESETTINGSDLG_H
|