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)