46 lines
2.0 KiB
Python
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"
|