x
This commit is contained in:
+35
-6
@@ -15,6 +15,8 @@ from database.database import get_db_session
|
||||
from utils.logger import get_logger
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from core.mold_generator import MoldCavityGenerator
|
||||
from core.aluminum_foam_mold import AluminumFoamMoldGenerator
|
||||
from core.mold_quality_inspector import AluminumFoamMoldQualityInspector
|
||||
from core.mesh_generator import MeshGenerator
|
||||
|
||||
logger = get_logger(__name__)
|
||||
@@ -26,6 +28,10 @@ geometry_analyzer = GeometryAnalyzer()
|
||||
file_handler = FileHandler()
|
||||
html_generator = HTMLGenerator()
|
||||
mold_generator = MoldCavityGenerator(shrinkage_rate=0.005)
|
||||
# 铝泡沫模具生成器
|
||||
aluminum_foam_generator = AluminumFoamMoldGenerator(shrinkage_rate=0.015, draft_angle=3.0)
|
||||
# 铝泡沫模具质量检测器
|
||||
mold_quality_inspector = AluminumFoamMoldQualityInspector()
|
||||
mesh_generator = MeshGenerator(quality="medium")
|
||||
|
||||
tasks = {}
|
||||
@@ -45,6 +51,7 @@ async def health():
|
||||
async def upload_stp(
|
||||
background_tasks: BackgroundTasks,
|
||||
file: UploadFile = File(...),
|
||||
material: Optional[str] = "ABS",
|
||||
db_session: AsyncSession = Depends(get_db_session)
|
||||
):
|
||||
"""上传STP文件并存储到数据库"""
|
||||
@@ -82,7 +89,7 @@ async def upload_stp(
|
||||
)
|
||||
|
||||
# 后台处理(包含数据库存储)
|
||||
background_tasks.add_task(process_file_with_storage, task_id, file_path, stp_file.id, db_session)
|
||||
background_tasks.add_task(process_file_with_storage, task_id, file_path, stp_file.id, db_session, material)
|
||||
|
||||
return {
|
||||
"task_id": task_id,
|
||||
@@ -300,7 +307,8 @@ async def process_file_with_storage(
|
||||
task_id: str,
|
||||
file_path: str,
|
||||
stp_file_id: int,
|
||||
db_session: AsyncSession
|
||||
db_session: AsyncSession,
|
||||
material: str = "ABS"
|
||||
):
|
||||
"""处理文件的后台任务"""
|
||||
|
||||
@@ -319,7 +327,7 @@ async def process_file_with_storage(
|
||||
|
||||
# 使用超时保护
|
||||
try:
|
||||
await asyncio.wait_for(process_file_core(storage_service, task_id, file_path, stp_file_id, db_session), timeout_seconds)
|
||||
await asyncio.wait_for(process_file_core(storage_service, task_id, file_path, stp_file_id, db_session, material), timeout_seconds)
|
||||
except asyncio.TimeoutError:
|
||||
logger.error(f"处理超时: {task_id}")
|
||||
raise Exception(f"处理超时,超过{timeout_seconds}秒未完成")
|
||||
@@ -403,7 +411,8 @@ async def process_file_core(
|
||||
task_id: str,
|
||||
file_path: str,
|
||||
stp_file_id: int,
|
||||
db_session: AsyncSession
|
||||
db_session: AsyncSession,
|
||||
material: str = "ABS"
|
||||
):
|
||||
"""核心处理逻辑"""
|
||||
|
||||
@@ -496,9 +505,19 @@ async def process_file_core(
|
||||
if shape:
|
||||
# 生成型腔和型芯
|
||||
cavity_result = mold_generator.generate_mold_cavities(shape)
|
||||
if is_foam_material:
|
||||
# 使用铝泡沫模具生成器
|
||||
aluminum_foam_generator.set_material(selected_material["name"])
|
||||
cavity_result = aluminum_foam_generator.generate_mold_cavities(shape)
|
||||
cavity_mesh_data = aluminum_foam_generator.generate_detailed_cavity_json(cavity_result)
|
||||
logger.info(f"使用铝泡沫模具生成器: {selected_material['name']}")
|
||||
else:
|
||||
# 使用普通塑料模具生成器
|
||||
cavity_result = mold_generator.generate_mold_cavities(shape)
|
||||
cavity_mesh_data = mold_generator.generate_detailed_cavity_json(cavity_result)
|
||||
|
||||
# 生成详细的型腔JSON数据(包含网格)
|
||||
cavity_mesh_data = mold_generator.generate_detailed_cavity_json(cavity_result)
|
||||
if cavity_mesh_data:
|
||||
logger.info(f"型腔网格数据生成完成: {cavity_mesh_data.get('mold_cavities', {}).get('cavity', {}).get('vertex_count', 0)} 顶点")
|
||||
except Exception as cavity_err:
|
||||
logger.warning(f"型腔生成失败,使用简化数据: {cavity_err}")
|
||||
@@ -525,10 +544,20 @@ async def process_file_core(
|
||||
"POM": {"density": 1.41, "shrinkage": 0.020, "name": "POM"},
|
||||
"PMMA": {"density": 1.18, "shrinkage": 0.005, "name": "PMMA"},
|
||||
"PBT": {"density": 1.31, "shrinkage": 0.015, "name": "PBT"},
|
||||
# 铝泡沫材料
|
||||
"AlSi10Mg": {"density": 0.45, "shrinkage": 0.015, "name": "AlSi10Mg", "is_foam": True},
|
||||
"AlSi12": {"density": 0.50, "shrinkage": 0.012, "name": "AlSi12", "is_foam": True},
|
||||
"Pure Al Foam": {"density": 0.35, "shrinkage": 0.020, "name": "Pure Al Foam", "is_foam": True},
|
||||
"AlSi7Mg": {"density": 0.40, "shrinkage": 0.018, "name": "AlSi7Mg", "is_foam": True},
|
||||
}
|
||||
|
||||
# 默认使用 ABS
|
||||
selected_material = material_properties["ABS"]
|
||||
# 获取材料属性(支持前端传递的材料参数)
|
||||
requested_material = material if material in material_properties else "ABS"
|
||||
selected_material = material_properties.get(requested_material, material_properties["ABS"])
|
||||
|
||||
# 检查是否是泡沫材料
|
||||
is_foam_material = selected_material.get("is_foam", False)
|
||||
material_density = selected_material["density"]
|
||||
shrinkage_rate = selected_material["shrinkage"]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user