designs.py
1.9 kB · python · 56 lines
1import numpy as np2from typing import TYPE_CHECKING3from mrlypy.core import binary, rules4from mrlypy.core.state import state56if TYPE_CHECKING:7 from .models import Cell3d89def build_3d(pattern: np.ndarray, level: int = 1) -> "Cell3d":10 from .models import Cell3d11 cell = Cell3d(types=pattern)12 if level > 1:13 cell.fractal(level)14 return cell1516def zeros_3d(number: int, level: int = 1) -> "Cell3d":17 return build_3d(binary.zeros_3d(number), level)1819def ones_3d(number: int, level: int = 1) -> "Cell3d":20 return build_3d(binary.ones_3d(number), level)2122def noise_3d(number: int, level: int = 1, density: float = 0.5) -> "Cell3d":23 pattern = binary.noise_3d(number, density, state.rng)24 return build_3d(pattern, level)2526def carpet_3d(number: int, level: int = 1) -> "Cell3d":27 return build_3d(binary.carpet_3d(number), level)2829def net_3d(number: int, level: int = 1) -> "Cell3d":30 return build_3d(binary.net_3d(number), level)3132def tree_3d(number: int, level: int = 1) -> "Cell3d":33 return build_3d(binary.tree_3d(number), level)3435def void_3d(number: int, level: int = 1) -> "Cell3d":36 return build_3d(binary.void_3d(number), level)3738def level_set_3d(number: int, levels, level: int = 1) -> "Cell3d":39 return build_3d(rules.level_set(number, 3, levels), level)4041def xtree_3d(number: int, level: int = 1) -> "Cell3d":42 return build_3d(rules.tree(number, 3, free_axis=0), level)4344def ytree_3d(number: int, level: int = 1) -> "Cell3d":45 return build_3d(rules.tree(number, 3, free_axis=1), level)4647def ztree_3d(number: int, level: int = 1) -> "Cell3d":48 return build_3d(rules.tree(number, 3, free_axis=2), level)4950def anti_3d(design: "Cell3d") -> "Cell3d":51 return design.invert()5253def random_3d(number: int, level: int = 1) -> "Cell3d":54 choices = [carpet_3d, net_3d, tree_3d, void_3d]55 idx = state.rng.choice(len(choices))56 return choices[idx](number, level)