#pragma once #include #include #include #include #include #include "repo/RepoTypes.hpp" // StructNode #include "repo/VolumeBuildParams.hpp" class QLineEdit; class QComboBox; class QDoubleSpinBox; class QTreeWidget; namespace geopro::app { // 源数据集(参与生成):id + 显示名 + 结构归属(structParentId,用于在左侧树里挂到其 GS/TM 下)。 struct VolumeSourceItem { QString id; QString name; QString structParentId; }; // 「生成三维体」对话框(spec §7/§8):左侧·源数据集**树**(项目/GS/TM/ds,可勾选/取消); // 右侧·参数(名称 + 生成位置**树**[GS/项目根/TM 层级单选] + 插值模型 + cellXY/cellZ/power/maxDist)。 class VolumeParamsDialog : public QDialog { Q_OBJECT public: // sources:参与生成的源 ds(含结构归属);structure:项目结构(GS/TM),左右两树共用; // defaultMountId:默认选中的生成位置 id(空=选首个)。 VolumeParamsDialog(const QVector& sources, const std::vector& structure, const QString& defaultMountId, QWidget* parent = nullptr); QString volumeName() const; geopro::data::VolumeBuildParams params() const; QStringList sourceDatasetIds() const; // 左侧树最终勾选的源 ds id QString mountTargetId() const; // 生成位置 id(structParentId) int mountConfType() const; // 生成位置 confType(1=GS/项目根 2=TM) private: QLineEdit* name_ = nullptr; QComboBox* model_ = nullptr; QDoubleSpinBox* cellXY_ = nullptr; QDoubleSpinBox* cellZ_ = nullptr; QDoubleSpinBox* power_ = nullptr; QDoubleSpinBox* maxDist_ = nullptr; QTreeWidget* sourceTree_ = nullptr; // 左:源数据集树(可勾选) QComboBox* mount_ = nullptr; // 右:生成位置下拉(下拉面板是 GS/项目根/TM 层级树) }; } // namespace geopro::app