This commit is contained in:
cjw
2026-03-15 12:22:20 +08:00
parent 5ad7fa97b2
commit 5a665242a3
+47 -51
View File
@@ -499,28 +499,46 @@ async def process_file_core(
db_session, task_id, "processing", 40, "生成模具型腔" 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 生成型腔数据 # 使用 MoldCavityGenerator 生成型腔数据
cavity_mesh_data = None cavity_mesh_data = None
try: try:
if shape: if shape:
# 生成型腔和型芯
cavity_result = mold_generator.generate_mold_cavities(shape)
if is_foam_material: if is_foam_material:
# 使用铝泡沫模具生成器
aluminum_foam_generator.set_material(selected_material["name"]) aluminum_foam_generator.set_material(selected_material["name"])
cavity_result = aluminum_foam_generator.generate_mold_cavities(shape) cavity_result = aluminum_foam_generator.generate_mold_cavities(shape)
cavity_mesh_data = aluminum_foam_generator.generate_detailed_cavity_json(cavity_result) cavity_mesh_data = aluminum_foam_generator.generate_detailed_cavity_json(cavity_result)
logger.info(f"使用铝泡沫模具生成器: {selected_material['name']}") logger.info(f"使用铝泡沫模具生成器: {selected_material['name']}")
else: else:
# 使用普通塑料模具生成器
cavity_result = mold_generator.generate_mold_cavities(shape) cavity_result = mold_generator.generate_mold_cavities(shape)
cavity_mesh_data = mold_generator.generate_detailed_cavity_json(cavity_result) cavity_mesh_data = mold_generator.generate_detailed_cavity_json(cavity_result)
logger.info(f"使用普通塑料模具生成器: {selected_material['name']}")
# 生成详细的型腔JSON数据(包含网格)
if cavity_mesh_data: if cavity_mesh_data:
logger.info(f"型腔网格数据生成完成: {cavity_mesh_data.get('mold_cavities', {}).get('cavity', {}).get('vertex_count', 0)} 顶点") logger.info(f"型腔网格数据生成完成: {cavity_mesh_data.get('mold_cavities', {}).get('cavity', {}).get('vertex_count', 0)} 顶点")
except Exception as cavity_err: except Exception as cavity_err:
logger.warning(f"型腔生成失败,使用简化数据: {cavity_err}") logger.warning(f"型腔生成失败,使用简化数据: {cavity_err}")
import traceback
traceback.print_exc()
cavity_mesh_data = None cavity_mesh_data = None
# 4. 生成详细JSON数据(使用计算值) # 4. 生成详细JSON数据(使用计算值)
@@ -534,30 +552,6 @@ async def process_file_core(
bbox = geometry_data.get("bounding_box", {}) bbox = geometry_data.get("bounding_box", {})
bbox_dims = bbox.get("dimensions", [0, 0, 0]) 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"] material_density = selected_material["density"]
shrinkage_rate = selected_material["shrinkage"] shrinkage_rate = selected_material["shrinkage"]
@@ -695,33 +689,35 @@ async def process_file_core(
}, },
"mold_cavities": { "mold_cavities": {
"cavity_count": cavity_count, "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_mesh_data and "mold_cavities" in cavity_mesh_data:
if "cavity" in cavity_mesh_data["mold_cavities"]: mold_cavities = cavity_mesh_data["mold_cavities"]
detailed_cavity_json["mold_cavities"]["cavity"] = cavity_mesh_data["mold_cavities"]["cavity"] if "cavity" in mold_cavities:
if "core" in cavity_mesh_data["mold_cavities"]: detailed_cavity_json["mold_cavities"]["cavity"] = mold_cavities["cavity"]
detailed_cavity_json["mold_cavities"]["core"] = cavity_mesh_data["mold_cavities"]["core"] if "core" in mold_cavities:
if "parting_surface" in cavity_mesh_data["mold_cavities"]: detailed_cavity_json["mold_cavities"]["core"] = mold_cavities["core"]
detailed_cavity_json["mold_cavities"]["parting_surface"] = cavity_mesh_data["mold_cavities"]["parting_surface"] if "parting_surface" in mold_cavities:
logger.info(f"型腔网格数据已合并: cavity {cavity_mesh_data['mold_cavities'].get('cavity', {}).get('vertex_count', 0)} 顶点") 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. 生成关键信息(模拟) # 5. 生成关键信息(模拟)
cavity_key_info = detailed_cavity_json["mold_cavities"]["cavity_key_info"] cavity_key_info = detailed_cavity_json["mold_cavities"]["cavity_key_info"]