mirror of
https://github.com/deepmodeling/Uni-Lab-OS
synced 2026-05-23 10:50:08 +00:00
50 lines
1.1 KiB
Python
50 lines
1.1 KiB
Python
"""解析实验室平面图 JSON。
|
|
|
|
简单格式:
|
|
{
|
|
"width": 6.0,
|
|
"depth": 4.0,
|
|
"obstacles": [
|
|
{"x": 2.0, "y": 0.0, "width": 0.1, "depth": 1.0}
|
|
]
|
|
}
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
from pathlib import Path
|
|
|
|
from .models import Lab, Obstacle
|
|
|
|
|
|
def parse_lab(data: dict) -> Lab:
|
|
"""从字典解析实验室平面图。"""
|
|
obstacles = []
|
|
for obs in data.get("obstacles", []):
|
|
obstacles.append(
|
|
Obstacle(
|
|
x=float(obs["x"]),
|
|
y=float(obs["y"]),
|
|
width=float(obs["width"]),
|
|
depth=float(obs["depth"]),
|
|
)
|
|
)
|
|
return Lab(
|
|
width=float(data["width"]),
|
|
depth=float(data["depth"]),
|
|
obstacles=obstacles,
|
|
)
|
|
|
|
|
|
def load_lab_from_file(path: str | Path) -> Lab:
|
|
"""从 JSON 文件加载实验室平面图。"""
|
|
with open(path) as f:
|
|
data = json.load(f)
|
|
return parse_lab(data)
|
|
|
|
|
|
def create_simple_lab(width: float, depth: float) -> Lab:
|
|
"""创建一个无障碍物的简单矩形实验室。"""
|
|
return Lab(width=width, depth=depth)
|