x
This commit is contained in:
+39
-43
@@ -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,8 +689,22 @@ 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": {
|
}
|
||||||
|
|
||||||
|
# 合并型腔网格数据(如果有)
|
||||||
|
if cavity_mesh_data and "mold_cavities" in cavity_mesh_data:
|
||||||
|
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": {
|
"geometric_characteristics": {
|
||||||
"product_weight": f"{product_weight_g:.2f} g",
|
"product_weight": f"{product_weight_g:.2f} g",
|
||||||
"wall_thickness_range": f"{wall_thickness_min:.2f} - {wall_thickness_max:.2f} mm",
|
"wall_thickness_range": f"{wall_thickness_min:.2f} - {wall_thickness_max:.2f} mm",
|
||||||
@@ -710,18 +718,6 @@ async def process_file_core(
|
|||||||
"warpage_risk": "medium" if wall_thickness_max > 5 else "low"
|
"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)} 顶点")
|
|
||||||
|
|
||||||
# 5. 生成关键信息(模拟)
|
# 5. 生成关键信息(模拟)
|
||||||
cavity_key_info = detailed_cavity_json["mold_cavities"]["cavity_key_info"]
|
cavity_key_info = detailed_cavity_json["mold_cavities"]["cavity_key_info"]
|
||||||
|
|||||||
Reference in New Issue
Block a user