Ejemplo n.º 1
0
    def overlaping_zone(self, other):
        if not isinstance(other, ZoneBase):
            raise TypeError("Expected other to be type ZoneBase.")

        self_min, self_max = self.min_corner, self.max_corner
        other_min, other_max = other.min_corner, other.max_corner

        for axis in range(len(self._pos)):
            if other_max[axis] < self_min[axis]:
                return None

            if self_max[axis] < other_min[axis]:
                return None

        result_min = self_min.max_corner(other_min)
        result_max = self_max.min_corner(other_max)

        result_size = result_max - result_min + Pos([1] * len(self._pos))

        result = ZoneBase(pos=result_min, size=result_size)

        if not result:
            return None

        return result
Ejemplo n.º 2
0
    def split_by_overlap(self, overlap):
        """Returns a list of fragments of this zone, split by an overlapping zone."""
        # overlap is a ZoneBase that overlaps and doesn't extend beyond this ZoneFragment.
        if not isinstance(overlap, ZoneBase):
            raise TypeError("Expected overlap to be type ZoneBase.")

        center_zone = ZoneFragment(self)

        other_min = overlap.min_corner
        other_max = overlap.max_corner + Pos([1] * len(other_min))

        result = []

        for axis in self.axis_order:
            if axis > len(other_max):
                # Skip axis if they don't apply
                continue

            work_zones = result
            result = []

            for work_zone in work_zones:
                # Add zones split from existing split zones
                lower, work_zone = work_zone.split_axis(other_min, axis)
                work_zone, upper = work_zone.split_axis(other_max, axis)

                if lower:
                    result.append(lower)
                if work_zone:
                    result.append(work_zone)
                if upper:
                    result.append(upper)

            # Add zones split from center, but not the center (overlap) itself
            lower, center_zone = center_zone.split_axis(other_min, axis)
            center_zone, upper = center_zone.split_axis(other_max, axis)

            if lower:
                result.append(lower)
            if upper:
                result.append(upper)

        return result
Ejemplo n.º 3
0
 def true_max_corner(self, other):
     new_max = Pos(other)
     old_max = self.true_max_corner
     self._size += new_max - old_max
Ejemplo n.º 4
0
 def max_corner(self, other):
     new_max = Pos(other)
     old_max = self.pos2
     self._size += new_max - old_max
Ejemplo n.º 5
0
 def min_corner(self, other):
     new_pos1 = Pos(other)
     self._size += self._pos - new_pos1
     self._pos = new_pos1
Ejemplo n.º 6
0
 def pos2(self):
     return self._pos + self._size - Pos([1] * len(self._pos))
Ejemplo n.º 7
0
 def _init_from_values(self, pos, size):
     self._pos = Pos(pos)
     self._size = Pos(size)
Ejemplo n.º 8
0
    def _init_from_config(self, other):
        a = Pos(other["pos1"])
        b = Pos(other["pos2"])

        self._pos = a.min_corner(b)
        self._size = a.max_corner(b) + Pos([1] * len(self._pos)) - self._pos
#!/usr/bin/env python3

import json
from lib.pos import Pos
from lib.zone_manager import ZoneManager

with open("../config/region_1.json", "r") as fp:
    region_1_prop = json.load(fp)
    fp.close()

test = ZoneManager(region_1_prop["locationBounds"])
tree = test.tree

print("-" * 120)
print("Ave depth:  {:04.2f}".format(tree.average_depth()))
print("Max depth:  {}".format(tree.max_depth()))
print("Leaf nodes: {}".format(len(tree)))

print("=" * 120)
print("Look out for that tree!")
tree.show_tree()

print("-" * 120)
print("Golden block's zone is:")
print("{!r}".format(tree.get_zone(Pos("-1441 2 -1441"))))