models.py
2.5 kB · python · 78 lines
1from dataclasses import dataclass2from typing import Any, Dict, List3from mrlypy.two import Cell2d4from .enums import Design, Group56# TILE78@dataclass9class Tile:1011 group: Group = None12 mask: int = None13 design: List[Design] = None14 number: List[int] = None15 level: List[int] = None16 rotation: List[int] = None17 invert: bool = None18 anti: List[bool] = None19 flip: bool = None20 density: float = None21 unit_width: int = None22 unit_height: int = None23 grid_size: int = None24 grid_unit_width: int = None25 grid_unit_height: int = None26 cell: Cell2d = None2728 def unit_size(self, width: int, height: int) -> "Tile":29 self.unit_width = width30 self.unit_height = height31 return self3233 @property34 def max_unit_size(self) -> int:35 return max(self.unit_width, self.unit_height)3637 @property38 def max_grid_unit_size(self) -> int:39 return max(self.grid_unit_width, self.grid_unit_height)4041 def to_dict(self) -> Dict[str, Any]:42 data = {}43 data["group"] = self.group.value if self.group else None44 data["mask"] = self.mask45 data["design"] = [d.value for d in self.design] if self.design else None46 data["number"] = self.number47 data["level"] = self.level48 data["rotation"] = self.rotation49 data["invert"] = self.invert50 data["anti"] = self.anti51 data["flip"] = self.flip52 data["density"] = self.density53 data["unit_width"] = self.unit_width54 data["unit_height"] = self.unit_height55 data["grid_size"] = self.grid_size56 data["grid_unit_width"] = self.grid_unit_width57 data["grid_unit_height"] = self.grid_unit_height58 return data5960 @classmethod61 def from_dict(cls, data: Dict[str, Any]) -> "Tile":62 t = cls()63 t.group = Group(data["group"]) if data.get("group") else None64 t.mask = data.get("mask")65 t.design = [Design(d) for d in data["design"]] if data.get("design") else None66 t.number = data.get("number")67 t.level = data.get("level")68 t.rotation = data.get("rotation")69 t.invert = data.get("invert")70 t.anti = data.get("anti")71 t.flip = data.get("flip")72 t.density = data.get("density")73 t.unit_width = data.get("unit_width")74 t.unit_height = data.get("unit_height")75 t.grid_size = data.get("grid_size")76 t.grid_unit_width = data.get("grid_unit_width")77 t.grid_unit_height = data.get("grid_unit_height")78 return t