#pragma once #include #include #include #include #include #include "DatasetCategory.hpp" // CategoryBuckets #include "interact/SlicePlaneMath.hpp" // geopro::render::interact::SliceAxis #include "repo/RepoTypes.hpp" namespace geopro::data { class DatasetFieldDictionary; } namespace geopro::app { class CategorySection; // 「三维分析」tab:QScrollArea 竖向堆叠 5 个数据类型大类段(spec §4)。 // 各段勾选合并为并集上抛;生成/详情请求透传。 class CategoryAnalysisTab : public QWidget { Q_OBJECT public: explicit CategoryAnalysisTab(geopro::data::DatasetFieldDictionary* dict, QWidget* parent = nullptr); void setBuckets(const CategoryBuckets& b); // 分发到 5 段(与 categoryConfigs 同序) void setStructure(const std::vector& nodes); // 转发各段 void refreshArrayFilters(); // 装置枚举异步加载后,重填各段装置筛选下拉 CategorySection* section(const std::string& id) const; // 按 CategorySpec.id 取段 signals: void checkedDatasetsChanged(const QStringList& dsIds); // 5 段勾选并集 void generateVolumeRequested(const QString& dsTypeCode, const QStringList& sourceDsIds); void detailRequested(const QString& dsId, const QString& ddCode, const QString& name); void deleteDatasetRequested(const QString& dsId, const QString& ddCode); // 右键删除切片/异常 // ── 三维体段操作转发(迁自旧 Column3DAnalysis,全接)── void sliceRequested(geopro::render::interact::SliceAxis axis, const QString& volumeDsId); void colorScaleRequested(const QString& dsId); void sliceSaveRequested(const QString& dsId); void sliceSaveAsRequested(const QString& dsId); void sliceExportImageRequested(const QString& dsId); void sliceExportDatRequested(const QString& dsId); void anomalyVisibilityChanged(const QString& dsId, bool vis); void datasetSelected(const QString& dsId, const QString& ddCode); // 树选中→VTK 高亮联动 private: void recomputeCheckedUnion(); std::map sections_; std::map checkedBySeg_; // 各段当前勾选(合并成并集) }; } // namespace geopro::app