- 新增XCAF转换器,直接从STP到GLB保留完整装配层级 - 修复HTTP API与CLI参数不一致问题 - 修复静默吞没错误的问题,遵循快速失败原则 - 清理旧文件,整理测试文件到tests目录 - 添加URL下载支持,可直接转换远程STP文件 - 更新文档,准确描述XCAF装配保留功能 技术改进: - 使用STEPCAFControl_Reader读取带装配信息的STEP文件 - 通过RWGltf_CafWriter直接导出GLB,无需STL中间格式 - 支持CPU多线程并行三角化 - HTTP API和CLI使用完全一致的转换参数 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
55 lines
2.4 KiB
Python
55 lines
2.4 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
API数据模式定义
|
|
"""
|
|
|
|
from pydantic import BaseModel, Field
|
|
from typing import Optional
|
|
from datetime import datetime
|
|
|
|
|
|
class PrecisionOptionsSchema(BaseModel):
|
|
"""精度选项模式"""
|
|
linear_deflection: float = Field(default=0.01, ge=0.001, le=1.0, description="线性偏差")
|
|
angular_deflection: float = Field(default=0.1, ge=0.01, le=1.0, description="角度偏差")
|
|
mesh_quality: str = Field(default="medium", pattern="^(low|medium|high|custom)$", description="网格质量等级")
|
|
|
|
|
|
class ConvertOptionsSchema(BaseModel):
|
|
"""转换选项模式"""
|
|
auto_scale: bool = Field(default=True, description="是否自动缩放")
|
|
auto_center: bool = Field(default=True, description="是否自动居中")
|
|
precision: PrecisionOptionsSchema = Field(default_factory=PrecisionOptionsSchema, description="精度选项")
|
|
|
|
|
|
class ConvertRequestSchema(BaseModel):
|
|
"""转换请求模式"""
|
|
input_path: str = Field(..., description="输入STP文件路径或URL")
|
|
output_path: str = Field(..., description="输出GLB文件路径")
|
|
options: ConvertOptionsSchema = Field(default_factory=ConvertOptionsSchema, description="转换选项")
|
|
|
|
|
|
class ConvertResponseSchema(BaseModel):
|
|
"""转换响应模式"""
|
|
task_id: str = Field(..., description="任务ID")
|
|
status: str = Field(..., description="任务状态")
|
|
message: str = Field(default="", description="状态消息")
|
|
|
|
|
|
class TaskStatusSchema(BaseModel):
|
|
"""任务状态模式"""
|
|
task_id: str = Field(..., description="任务ID")
|
|
status: str = Field(..., description="任务状态")
|
|
progress: int = Field(..., description="进度百分比(0-100)")
|
|
message: str = Field(default="", description="状态消息")
|
|
created_at: datetime = Field(..., description="创建时间")
|
|
started_at: Optional[datetime] = Field(default=None, description="开始时间")
|
|
completed_at: Optional[datetime] = Field(default=None, description="完成时间")
|
|
error_message: Optional[str] = Field(default=None, description="错误信息")
|
|
|
|
|
|
class HealthResponseSchema(BaseModel):
|
|
"""健康检查响应模式"""
|
|
status: str = Field(default="healthy", description="服务状态")
|
|
timestamp: datetime = Field(default_factory=datetime.now, description="检查时间")
|
|
version: str = Field(default="1.0.0", description="服务版本") |