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