Files
geMoldInsight/src/services/material_service.py
T
2026-04-13 09:43:24 +08:00

46 lines
2.0 KiB
Python

# services/material_service.py
"""材料属性管理服务"""
from typing import Dict, Any, List, Optional
MATERIAL_PROPERTIES: Dict[str, Dict[str, Any]] = {
"ABS": {"density": 1.05, "shrinkage": 0.005, "name": "ABS", "is_foam": False},
"PP": {"density": 0.90, "shrinkage": 0.016, "name": "PP", "is_foam": False},
"PE": {"density": 0.95, "shrinkage": 0.020, "name": "PE", "is_foam": False},
"PC": {"density": 1.20, "shrinkage": 0.007, "name": "PC", "is_foam": False},
"PA": {"density": 1.14, "shrinkage": 0.010, "name": "PA", "is_foam": False},
"POM": {"density": 1.41, "shrinkage": 0.020, "name": "POM", "is_foam": False},
"PMMA": {"density": 1.18, "shrinkage": 0.005, "name": "PMMA", "is_foam": False},
"PBT": {"density": 1.31, "shrinkage": 0.015, "name": "PBT", "is_foam": False},
"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},
}
# 默认回退材料
_DEFAULT_MATERIAL = MATERIAL_PROPERTIES["ABS"]
class MaterialService:
"""材料属性管理服务 — 集中管理材料字典,便于扩展和单测"""
@staticmethod
def get_material(material_name: str) -> Dict[str, Any]:
"""获取材料属性,不存在则回退到 ABS"""
return MATERIAL_PROPERTIES.get(material_name, _DEFAULT_MATERIAL)
@staticmethod
def is_foam_material(material_name: str) -> bool:
return MATERIAL_PROPERTIES.get(material_name, _DEFAULT_MATERIAL).get("is_foam", False)
@staticmethod
def list_all_materials() -> List[str]:
return list(MATERIAL_PROPERTIES.keys())
@staticmethod
def resolve_material(requested: str) -> str:
"""解析请求的材料名,若不在字典中则回退为 ABS"""
return requested if requested in MATERIAL_PROPERTIES else "ABS"