TellmeStpToGlb/api/schemas.py
sladro 90ba65e484 feat: 实现基于XCAF的真正装配结构保留转换
- 新增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>
2025-09-09 16:50:48 +08:00

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="服务版本")