- 添加模块化HTTP服务器架构,支持路由注册和请求处理 - 实现Creo状态检测API,提供连接状态和模型状态实时监控 - 完成STEP格式模型导出功能,支持装配体和零件导出 - 实现装配体层级结构分析,支持无限深度遍历和组件信息提取 - 添加层级组件安全删除功能,使用抑制策略保持装配体完整性 - 集成WebSocket服务器框架,为实时通信和长操作做准备 - 完善JSON处理、日志记录和认证管理基础设施 - 修复OTK API兼容性问题和内存管理优化 - 解决DeleteFeatures崩溃问题,采用SuppressFeatures替代方案 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
225 lines
7.1 KiB
C++
225 lines
7.1 KiB
C++
#pragma once
|
||
|
||
// 基础OTK头文件 - 确保正确的包含顺序
|
||
#include <pfcGlobal.h>
|
||
#include <pfcSession.h>
|
||
#include <wfcSession.h>
|
||
#include <wfcGlobal.h>
|
||
#include <pfcModel.h>
|
||
#include <pfcExceptions.h>
|
||
#include <pfcExport.h>
|
||
#include <pfcFeature.h>
|
||
#include <pfcComponentFeat.h>
|
||
#include <pfcFeature_s.h>
|
||
#include <pfcSolid.h>
|
||
#include <wfcSolid.h>
|
||
#include <wfcSolidInstructions.h>
|
||
#include <string>
|
||
#include <vector>
|
||
#include <map>
|
||
#include <set>
|
||
#include <algorithm>
|
||
|
||
// Creo状态信息结构
|
||
struct CreoStatus {
|
||
bool is_connected = false;
|
||
std::string version;
|
||
std::string build;
|
||
std::string working_directory;
|
||
int session_id = 0;
|
||
};
|
||
|
||
// 模型状态信息结构
|
||
struct ModelStatus {
|
||
bool has_model = false;
|
||
std::string name;
|
||
std::string filename;
|
||
std::string type;
|
||
std::string software; // 从OTK API获取,不设默认值
|
||
std::string version; // 从OTK API获取,不设默认值
|
||
std::string connection_time;
|
||
bool is_assembly = false;
|
||
int total_parts = 0;
|
||
int assembly_levels = 0;
|
||
std::string file_size;
|
||
std::string connection_status;
|
||
std::string open_time;
|
||
};
|
||
|
||
// 导出结果结构
|
||
struct ExportResult {
|
||
bool success = false;
|
||
std::string export_path;
|
||
std::string file_size;
|
||
std::string format;
|
||
std::string export_time;
|
||
std::string software;
|
||
std::string original_file;
|
||
std::string dirname;
|
||
std::string filename;
|
||
std::string error_message;
|
||
};
|
||
|
||
// 层级分析组件信息结构
|
||
struct ComponentInfo {
|
||
std::string id;
|
||
std::string name;
|
||
std::string type; // "assembly" 或 "part"
|
||
int level;
|
||
int children_count;
|
||
std::string path;
|
||
std::string file_size;
|
||
std::string deletion_safety; // "forbidden", "risky", "moderate"
|
||
bool is_visible;
|
||
std::string model_type; // "MDL_ASSEMBLY", "MDL_PART", "MDL_DRAWING" 等
|
||
std::string full_path; // 完整的组件路径
|
||
};
|
||
|
||
// 层级分析请求结构
|
||
struct HierarchyAnalysisRequest {
|
||
std::string software_type;
|
||
std::string project_name;
|
||
int max_depth;
|
||
bool include_geometry;
|
||
std::map<std::string, std::string> analysis_options;
|
||
};
|
||
|
||
// 删除建议结构
|
||
struct DeletionRecommendation {
|
||
std::string component_id;
|
||
std::string component_name;
|
||
int level;
|
||
std::string reason;
|
||
std::vector<std::string> risk_factors;
|
||
double confidence;
|
||
};
|
||
|
||
// 层级分析结果结构
|
||
struct HierarchyAnalysisResult {
|
||
bool success = false;
|
||
std::string message;
|
||
std::string project_name;
|
||
int total_levels;
|
||
int total_components;
|
||
std::vector<std::vector<ComponentInfo>> hierarchy;
|
||
std::vector<DeletionRecommendation> safe_deletions;
|
||
std::vector<DeletionRecommendation> risky_deletions;
|
||
std::string error_message;
|
||
};
|
||
|
||
// Creo管理器类
|
||
class CreoManager {
|
||
public:
|
||
static CreoManager& Instance();
|
||
|
||
// 状态检测
|
||
CreoStatus GetCreoStatus();
|
||
ModelStatus GetModelStatus();
|
||
|
||
// 基础操作
|
||
bool ShowMessage(const std::string& message);
|
||
|
||
// 导出功能
|
||
ExportResult ExportModelToSTEP(const std::string& export_path, const std::string& geom_flags = "solids");
|
||
|
||
// 层级分析功能
|
||
HierarchyAnalysisResult AnalyzeModelHierarchy(const HierarchyAnalysisRequest& request);
|
||
|
||
// 层级删除功能
|
||
struct HierarchyDeleteResult {
|
||
bool success = false;
|
||
std::string message;
|
||
int original_levels;
|
||
int target_level;
|
||
int final_levels;
|
||
std::map<int, std::vector<std::string>> deleted_components;
|
||
int total_deleted;
|
||
int successful;
|
||
int failed;
|
||
std::string error_message;
|
||
};
|
||
|
||
HierarchyDeleteResult DeleteHierarchyComponents(const std::string& project_name, int target_level);
|
||
|
||
|
||
|
||
// 辅助功能
|
||
std::string GetCurrentTimeString();
|
||
std::string GetCurrentTimeStringISO();
|
||
std::string GetFileSize(const std::string& filepath);
|
||
int SafeCalculateAssemblyLevels(wfcWAssembly_ptr assembly);
|
||
|
||
// 文件大小统计
|
||
std::string GetModelFileSize(pfcModel_ptr model);
|
||
std::string CalculateAssemblyTotalSize(pfcModel_ptr model);
|
||
double ParseMBFromSizeString(const std::string& size_str);
|
||
|
||
private:
|
||
CreoManager(); // 需要自定义构造函数来设置配置
|
||
~CreoManager() = default;
|
||
CreoManager(const CreoManager&) = delete;
|
||
CreoManager& operator=(const CreoManager&) = delete;
|
||
|
||
// 辅助函数
|
||
std::string XStringToString(const xstring& xstr);
|
||
xstring StringToXString(const std::string& str);
|
||
|
||
// 层级分析私有方法 (新SOTA算法)
|
||
void AnalyzeAssemblyNode(wfcWAssembly_ptr assembly,
|
||
int level,
|
||
const std::string& parentName,
|
||
const std::string& currentPath,
|
||
HierarchyAnalysisResult& result);
|
||
|
||
ComponentInfo CreateComponentFromFeature(pfcComponentFeat_ptr compFeat,
|
||
int level,
|
||
const std::string& parentName,
|
||
const std::string& currentPath,
|
||
pfcModel_ptr preloadedModel = nullptr);
|
||
|
||
pfcModel_ptr LoadComponentModel(pfcComponentFeat_ptr compFeat);
|
||
|
||
|
||
// 旧方法 (保留用于兼容)
|
||
void TraverseAssemblyLevels(wfcWAssembly_ptr assembly,
|
||
int current_level,
|
||
const std::string& parent_path,
|
||
std::vector<std::vector<ComponentInfo>>& hierarchy_levels,
|
||
std::vector<ComponentInfo>& all_components);
|
||
|
||
void ClearStaticVisitedModels();
|
||
|
||
ComponentInfo CreateComponentInfo(wfcWComponentPath_ptr component_path,
|
||
int level, const std::string& parent_path);
|
||
|
||
// 新增CREOSON风格的安全方法
|
||
ComponentInfo CreateComponentInfoSafe(wfcWComponentPath_ptr component_path,
|
||
int level, const std::string& parent_path);
|
||
|
||
bool CheckCanRecurseSafely(wfcWComponentPath_ptr component_path);
|
||
|
||
wfcWAssembly_ptr GetSubAssemblySafely(wfcWComponentPath_ptr component_path);
|
||
|
||
std::string GetComponentTypeSafe(wfcWComponentPath_ptr component_path);
|
||
|
||
std::string GenerateComponentPathId(wfcWComponentPath_ptr component_path);
|
||
|
||
std::string EvaluateDeletionSafety(const ComponentInfo& component);
|
||
|
||
std::string GetComponentFileSize(wfcWComponentPath_ptr component_path);
|
||
|
||
std::string GetModelTypeString(pfcModelType model_type);
|
||
|
||
int CountChildComponents(wfcWComponentPath_ptr component_path);
|
||
|
||
// 会话管理(避免重复代码)
|
||
struct SessionInfo {
|
||
pfcSession_ptr session;
|
||
wfcWSession_ptr wSession;
|
||
bool is_valid;
|
||
std::string version;
|
||
std::string build;
|
||
};
|
||
SessionInfo GetSessionInfo();
|
||
};
|