This commit is contained in:
2026-07-20 10:16:27 +08:00
parent 8493f0df03
commit f3d2951dc3
24 changed files with 23623 additions and 1546 deletions
+9 -50
View File
@@ -29,6 +29,7 @@ from shared.models.schemas import create_mold_cavity_data, create_mold_key_info
from shared.utils.logger import get_logger
from moldinsight.core.base_mold_generator import BaseMoldGenerator
from moldinsight.core.side_action_designer import SideActionDesigner
from moldinsight.services.material_service import MaterialService
logger = get_logger(__name__)
@@ -54,48 +55,6 @@ class AluminumFoamMoldGenerator(BaseMoldGenerator):
self.foam_material = foam_material
self.foam_materials = {
"AlSi10Mg": {
"density": 0.45,
"expansion_ratio": 2.5,
"shrinkage_rate": 0.015,
"molding_temp": 380,
"description": "常用铝硅泡沫"
},
"AlSi12": {
"density": 0.50,
"expansion_ratio": 2.2,
"shrinkage_rate": 0.012,
"molding_temp": 360,
"description": "高强度铝泡沫"
},
"Pure Al Foam": {
"density": 0.35,
"expansion_ratio": 3.0,
"shrinkage_rate": 0.020,
"molding_temp": 400,
"description": "纯铝泡沫"
},
"AlSi7Mg": {
"density": 0.40,
"expansion_ratio": 2.8,
"shrinkage_rate": 0.018,
"molding_temp": 390,
"description": "轻质铝镁泡沫"
}
}
self.plastic_materials = {
"ABS": {"density": 1.05, "shrinkage": 0.005},
"PP": {"density": 0.90, "shrinkage": 0.016},
"PC": {"density": 1.20, "shrinkage": 0.005},
"PE": {"density": 0.95, "shrinkage": 0.025},
"PS": {"density": 1.05, "shrinkage": 0.004},
"PA": {"density": 1.14, "shrinkage": 0.015},
"POM": {"density": 1.42, "shrinkage": 0.020},
"PMMA": {"density": 1.18, "shrinkage": 0.004}
}
self.parting_line_tolerance = 0.1
self.max_draft_angle = 5.0
self.min_draft_angle = 1.0
@@ -107,21 +66,21 @@ class AluminumFoamMoldGenerator(BaseMoldGenerator):
def set_foam_material(self, material: str):
"""设置铝泡沫材料"""
if material in self.foam_materials:
props = self.foam_materials[material]
if MaterialService.is_foam_material(material):
props = MaterialService.get_material(material)
self.foam_material = material
self.material_density = props["density"]
self.shrinkage_rate = props["shrinkage_rate"]
self.shrinkage_rate = props["shrinkage"]
logger.info(f"铝泡沫材料设置为 {material}, 密度: {props['density']} g/cm³")
else:
logger.warning(f"未知材料 {material}, 使用当前设置")
def set_material(self, material: str):
"""设置材料(自动识别类型)"""
if material in self.foam_materials:
if MaterialService.is_foam_material(material):
self.set_foam_material(material)
elif material in self.plastic_materials:
props = self.plastic_materials[material]
elif MaterialService.has_material(material):
props = MaterialService.get_material(material)
self.material_density = props["density"]
self.shrinkage_rate = props["shrinkage"]
logger.info(f"塑料材料设置为 {material}, 密度: {props['density']} g/cm³")
@@ -204,7 +163,7 @@ class AluminumFoamMoldGenerator(BaseMoldGenerator):
parting_geometry = self._extract_parting_surface_geometry(parting_surface)
material_info = self.foam_materials.get(self.foam_material, {})
material_info = MaterialService.get_material(self.foam_material)
detailed_json = {
"metadata": {
@@ -251,7 +210,7 @@ class AluminumFoamMoldGenerator(BaseMoldGenerator):
def generate_cavity_key_info(self, cavity_data: Dict) -> Dict[str, Any]:
"""生成模具型腔的关键信息"""
analysis = cavity_data["analysis"]
material_info = self.foam_materials.get(self.foam_material, {})
material_info = MaterialService.get_material(self.foam_material)
key_info = {
"mold_parameters": {
+3 -9
View File
@@ -9,6 +9,7 @@ from shared.models.schemas import (
create_analysis_result
)
from shared.utils.logger import get_logger
from moldinsight.services.material_service import MaterialService
logger = get_logger(__name__)
@@ -25,12 +26,6 @@ class GeometryAnalyzer:
"high_complexity": 50,
}
self.product_materials = {
"ABS": {"shrinkage": 0.005, "min_wall": 1.2},
"PP": {"shrinkage": 0.016, "min_wall": 1.0},
"PC": {"shrinkage": 0.007, "min_wall": 1.5},
}
self.mold_materials = {
"Aluminum": {"thermal_conductivity": 200, "hardness": "HB80", "cost": "low"},
"P20_Steel": {"thermal_conductivity": 30, "hardness": "HRC30", "cost": "medium"},
@@ -54,7 +49,6 @@ class GeometryAnalyzer:
features = self._detect_features(geometry_data, shape)
product_props = self.product_materials.get(product_material, {})
mold_props = self.mold_materials.get(mold_material, {})
recommendations = self._generate_recommendations(
@@ -744,8 +738,8 @@ class GeometryAnalyzer:
avg_thickness = (volume / surface_area) * 0.6
if avg_thickness is not None:
material_props = self.product_materials.get(material, self.product_materials["ABS"])
min_wall = material_props["min_wall"]
material_props = MaterialService.get_material(material)
min_wall = material_props.get("min_wall", 1.2)
if avg_thickness < min_wall:
return create_design_recommendation(
+3 -13
View File
@@ -13,6 +13,7 @@ from shared.models.schemas import create_mold_cavity_data, create_mold_key_info
from shared.utils.logger import get_logger
from moldinsight.core.base_mold_generator import BaseMoldGenerator
from moldinsight.core.side_action_designer import SideActionDesigner
from moldinsight.services.material_service import MaterialService
logger = get_logger(__name__)
@@ -24,25 +25,14 @@ class MoldCavityGenerator(BaseMoldGenerator):
material_density: float = 1.05):
super().__init__(shrinkage_rate, draft_angle, material_density)
self.material_densities = {
"ABS": 1.05,
"PP": 0.90,
"PC": 1.20,
"PE": 0.95,
"PS": 1.05,
"PA": 1.14,
"POM": 1.42,
"PMMA": 1.18
}
self.parting_line_tolerance = 0.1
self.max_draft_angle = 5.0
self.side_action_designer = SideActionDesigner()
def set_material(self, material: str):
"""设置产品材料"""
if material in self.material_densities:
self.material_density = self.material_densities[material]
if MaterialService.has_material(material):
self.material_density = MaterialService.get_material(material)["density"]
logger.info(f"材料设置为 {material}, 密度: {self.material_density} g/cm³")
else:
logger.warning(f"未知材料 {material}, 使用默认密度 {self.material_density} g/cm³")