实现Creo模型保存功能接口
新增功能:
- 添加SaveResult结构体用于保存操作结果
- 实现CreoManager::SaveModel()方法,使用OTK pfcModel::Save() API
- 添加SaveModelHandler HTTP路由处理器
- 注册/api/model/save接口支持POST请求
技术特性:
- 简化设计:只保存当前模型到原位置,无复杂另存为逻辑
- 完善的OTK异常处理:支持BadInputs、GeneralError、InvalidName等
- 标准JSON API格式:返回文件大小、保存时间、软件信息等
- 与现有架构完全兼容:不影响任何现有功能
API使用:
POST /api/model/save
请求: {"software_type": "creo"}
响应: 包含file_size、save_time、software、original_file等信息
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
f29fb303fe
commit
872a68d5be
@ -598,6 +598,63 @@ ExportResult CreoManager::ExportModelToSTEP(const std::string& export_path, cons
|
||||
return result;
|
||||
}
|
||||
|
||||
// 保存模型功能实现
|
||||
SaveResult CreoManager::SaveModel() {
|
||||
SaveResult result;
|
||||
|
||||
SessionInfo sessionInfo = GetSessionInfo();
|
||||
|
||||
if (!sessionInfo.is_valid) {
|
||||
result.error_message = "Creo session not available";
|
||||
return result;
|
||||
}
|
||||
|
||||
try {
|
||||
pfcModel_ptr current_model = sessionInfo.session->GetCurrentModel();
|
||||
if (!current_model) {
|
||||
result.error_message = "No current model loaded";
|
||||
return result;
|
||||
}
|
||||
|
||||
// 获取文件信息
|
||||
xstring original_name = current_model->GetFileName();
|
||||
result.original_file = XStringToString(original_name);
|
||||
result.software = "Creo Parametric";
|
||||
|
||||
// 执行保存操作
|
||||
current_model->Save();
|
||||
|
||||
// 设置成功结果
|
||||
result.save_time = GetCurrentTimeStringISO();
|
||||
result.file_size = GetModelFileSize(current_model);
|
||||
result.success = true;
|
||||
|
||||
}
|
||||
catch (const pfcXToolkitBadInputs&) {
|
||||
result.error_message = "Bad input parameters";
|
||||
}
|
||||
catch (const pfcXToolkitGeneralError&) {
|
||||
result.error_message = "Creo toolkit error";
|
||||
}
|
||||
catch (const pfcXToolkitInvalidName&) {
|
||||
result.error_message = "Invalid file name";
|
||||
}
|
||||
catch (const pfcXToolkitCantWrite&) {
|
||||
result.error_message = "Cannot write to file";
|
||||
}
|
||||
catch (const pfcXToolkitCantOpen&) {
|
||||
result.error_message = "Cannot open file";
|
||||
}
|
||||
catch (const std::exception& e) {
|
||||
result.error_message = "Standard error: " + std::string(e.what());
|
||||
}
|
||||
catch (...) {
|
||||
result.error_message = "Unknown error during save operation";
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// 层级分析主方法
|
||||
HierarchyAnalysisResult CreoManager::AnalyzeModelHierarchy(const HierarchyAnalysisRequest& request) {
|
||||
HierarchyAnalysisResult result;
|
||||
|
||||
@ -61,6 +61,16 @@ struct ExportResult {
|
||||
std::string error_message;
|
||||
};
|
||||
|
||||
// 保存结果结构
|
||||
struct SaveResult {
|
||||
bool success = false;
|
||||
std::string file_size;
|
||||
std::string save_time;
|
||||
std::string software;
|
||||
std::string original_file;
|
||||
std::string error_message;
|
||||
};
|
||||
|
||||
// 层级分析组件信息结构
|
||||
struct ComponentInfo {
|
||||
std::string id;
|
||||
@ -123,6 +133,9 @@ public:
|
||||
// 导出功能
|
||||
ExportResult ExportModelToSTEP(const std::string& export_path, const std::string& geom_flags = "solids");
|
||||
|
||||
// 保存功能
|
||||
SaveResult SaveModel();
|
||||
|
||||
// 层级分析功能
|
||||
HierarchyAnalysisResult AnalyzeModelHierarchy(const HierarchyAnalysisRequest& request);
|
||||
|
||||
|
||||
@ -788,6 +788,75 @@ HttpResponse ShellAnalysisHandler(const HttpRequest& request) {
|
||||
return response;
|
||||
}
|
||||
|
||||
// 保存模型路由处理器
|
||||
HttpResponse SaveModelHandler(const HttpRequest& request) {
|
||||
HttpResponse response;
|
||||
|
||||
if (request.method != "POST") {
|
||||
response.status_code = 405;
|
||||
response.body = "{\"success\": false, \"error\": \"Method not allowed\"}";
|
||||
return response;
|
||||
}
|
||||
|
||||
try {
|
||||
// 解析JSON请求参数
|
||||
std::string software_type = ExtractJsonValue(request.body, "software_type");
|
||||
|
||||
// 参数验证
|
||||
if (software_type.empty()) {
|
||||
response.status_code = 400;
|
||||
response.body = "{\"success\": false, \"error\": \"Missing required parameter: software_type\"}";
|
||||
return response;
|
||||
}
|
||||
|
||||
if (software_type != "creo") {
|
||||
response.status_code = 400;
|
||||
response.body = "{\"success\": false, \"error\": \"Invalid software_type, must be 'creo'\"}";
|
||||
return response;
|
||||
}
|
||||
|
||||
// 执行保存操作
|
||||
SaveResult result = CreoManager::Instance().SaveModel();
|
||||
|
||||
if (result.success) {
|
||||
// 构建成功响应
|
||||
std::ostringstream json;
|
||||
json << "{"
|
||||
<< "\"success\": true,"
|
||||
<< "\"data\": {"
|
||||
<< "\"file_size\": \"" << EscapeJsonString(result.file_size) << "\","
|
||||
<< "\"save_time\": \"" << EscapeJsonString(result.save_time) << "\","
|
||||
<< "\"software\": \"" << EscapeJsonString(result.software) << "\","
|
||||
<< "\"original_file\": \"" << EscapeJsonString(result.original_file) << "\""
|
||||
<< "},"
|
||||
<< "\"error\": null"
|
||||
<< "}";
|
||||
|
||||
response.body = json.str();
|
||||
} else {
|
||||
// 构建错误响应
|
||||
std::ostringstream json;
|
||||
json << "{"
|
||||
<< "\"success\": false,"
|
||||
<< "\"data\": null,"
|
||||
<< "\"error\": \"" << EscapeJsonString(result.error_message) << "\""
|
||||
<< "}";
|
||||
|
||||
response.status_code = 500;
|
||||
response.body = json.str();
|
||||
}
|
||||
|
||||
} catch (const std::exception& e) {
|
||||
response.status_code = 500;
|
||||
response.body = "{\"success\": false, \"data\": null, \"error\": \"JSON parsing error: " + std::string(e.what()) + "\"}";
|
||||
} catch (...) {
|
||||
response.status_code = 500;
|
||||
response.body = "{\"success\": false, \"data\": null, \"error\": \"Unknown error during save operation\"}";
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
extern "C" int user_initialize(
|
||||
int argc,
|
||||
@ -816,6 +885,7 @@ extern "C" int user_initialize(
|
||||
g_http_server->SetRouteHandler("/api/creo/analysis/hierarchy", HierarchyAnalysisHandler);
|
||||
g_http_server->SetRouteHandler("/api/creo/hierarchy/delete", HierarchyDeleteHandler);
|
||||
g_http_server->SetRouteHandler("/api/analysis/shell-analysis", ShellAnalysisHandler);
|
||||
g_http_server->SetRouteHandler("/api/model/save", SaveModelHandler);
|
||||
|
||||
|
||||
if (g_http_server->Start()) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user