From 5a665242a33c4b61d85056a54c8960ec41415100 Mon Sep 17 00:00:00 2001 From: cjw <792430652@qq.com> Date: Sun, 15 Mar 2026 12:22:20 +0800 Subject: [PATCH] x --- src/api/routes.py | 98 +++++++++++++++++++++++------------------------ 1 file changed, 47 insertions(+), 51 deletions(-) diff --git a/src/api/routes.py b/src/api/routes.py index 7e4f3ec..169c238 100644 --- a/src/api/routes.py +++ b/src/api/routes.py @@ -499,28 +499,46 @@ async def process_file_core( db_session, task_id, "processing", 40, "生成模具型腔" ) + # 材料属性(需在型腔生成前定义) + material_properties = { + "ABS": {"density": 1.05, "shrinkage": 0.005, "name": "ABS"}, + "PP": {"density": 0.90, "shrinkage": 0.016, "name": "PP"}, + "PE": {"density": 0.95, "shrinkage": 0.020, "name": "PE"}, + "PC": {"density": 1.20, "shrinkage": 0.007, "name": "PC"}, + "PA": {"density": 1.14, "shrinkage": 0.010, "name": "PA"}, + "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}, + } + + 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) + # 使用 MoldCavityGenerator 生成型腔数据 cavity_mesh_data = None try: 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) + logger.info(f"使用普通塑料模具生成器: {selected_material['name']}") - # 生成详细的型腔JSON数据(包含网格) 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}") + import traceback + traceback.print_exc() cavity_mesh_data = None # 4. 生成详细JSON数据(使用计算值) @@ -534,30 +552,6 @@ async def process_file_core( bbox = geometry_data.get("bounding_box", {}) bbox_dims = bbox.get("dimensions", [0, 0, 0]) - # 材料属性(可根据用户选择或自动检测) - material_properties = { - "ABS": {"density": 1.05, "shrinkage": 0.005, "name": "ABS"}, - "PP": {"density": 0.90, "shrinkage": 0.016, "name": "PP"}, - "PE": {"density": 0.95, "shrinkage": 0.020, "name": "PE"}, - "PC": {"density": 1.20, "shrinkage": 0.007, "name": "PC"}, - "PA": {"density": 1.14, "shrinkage": 0.010, "name": "PA"}, - "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 - # 获取材料属性(支持前端传递的材料参数) - 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"] @@ -695,33 +689,35 @@ async def process_file_core( }, "mold_cavities": { "cavity_count": cavity_count, - "cavity_layout": "single" if cavity_count == 1 else f"{cavity_count} cavities", - "cavity_key_info": { - "geometric_characteristics": { - "product_weight": f"{product_weight_g:.2f} g", - "wall_thickness_range": f"{wall_thickness_min:.2f} - {wall_thickness_max:.2f} mm", - "complexity_score": round(complexity_score, 2), - "product_volume": f"{volume_cm3:.2f} cm³", - "projected_area": f"{projected_area_cm2:.2f} cm²" - }, - "quality_considerations": { - "potential_weld_lines": "center" if cavity_count > 1 else "minimal", - "sink_mark_areas": "thick_sections" if wall_thickness_max > 4 else "minimal", - "warpage_risk": "medium" if wall_thickness_max > 5 else "low" - } - } } } # 合并型腔网格数据(如果有) if cavity_mesh_data and "mold_cavities" in cavity_mesh_data: - if "cavity" in cavity_mesh_data["mold_cavities"]: - detailed_cavity_json["mold_cavities"]["cavity"] = cavity_mesh_data["mold_cavities"]["cavity"] - if "core" in cavity_mesh_data["mold_cavities"]: - detailed_cavity_json["mold_cavities"]["core"] = cavity_mesh_data["mold_cavities"]["core"] - if "parting_surface" in cavity_mesh_data["mold_cavities"]: - detailed_cavity_json["mold_cavities"]["parting_surface"] = cavity_mesh_data["mold_cavities"]["parting_surface"] - logger.info(f"型腔网格数据已合并: cavity {cavity_mesh_data['mold_cavities'].get('cavity', {}).get('vertex_count', 0)} 顶点") + mold_cavities = cavity_mesh_data["mold_cavities"] + if "cavity" in mold_cavities: + detailed_cavity_json["mold_cavities"]["cavity"] = mold_cavities["cavity"] + if "core" in mold_cavities: + detailed_cavity_json["mold_cavities"]["core"] = mold_cavities["core"] + if "parting_surface" in mold_cavities: + detailed_cavity_json["mold_cavities"]["parting_surface"] = mold_cavities["parting_surface"] + logger.info(f"型腔网格数据已合并: cavity {mold_cavities.get('cavity', {}).get('vertex_count', 0)} 顶点") + + # 添加型腔关键信息 + detailed_cavity_json["mold_cavities"]["cavity_key_info"] = { + "geometric_characteristics": { + "product_weight": f"{product_weight_g:.2f} g", + "wall_thickness_range": f"{wall_thickness_min:.2f} - {wall_thickness_max:.2f} mm", + "complexity_score": round(complexity_score, 2), + "product_volume": f"{volume_cm3:.2f} cm³", + "projected_area": f"{projected_area_cm2:.2f} cm²" + }, + "quality_considerations": { + "potential_weld_lines": "center" if cavity_count > 1 else "minimal", + "sink_mark_areas": "thick_sections" if wall_thickness_max > 4 else "minimal", + "warpage_risk": "medium" if wall_thickness_max > 5 else "low" + } + } # 5. 生成关键信息(模拟) cavity_key_info = detailed_cavity_json["mold_cavities"]["cavity_key_info"]