Ejemplo n.º 1
0
    def build_tall(self, n):
        """

        :param c: int defining complexity of build
        :return:
        """
        self.block_tower = Tower_State()
        self.meshes = []
        results = []
        for i in range(n):
            b = Block(block_mesh, 'flat_wide', (0, 0, i))

            start = time.time()
            stable = Physics.is_stable(self.block_tower, b)
            elapse = time.time() - start
            results.append(elapse)
            if stable:
                self.block_tower.add(b)
                self.meshes.append(b.render())
            else:
                print("Block #{} {} was found to be unstable".format(
                    i, str(b)))
                return results

        return results
Ejemplo n.º 2
0
    def build(self, c, stability_check=False, timeit=False):
        """

        :param c: int defining complexity of build
        :return:
        """
        self.block_tower = Tower_State()
        self.meshes = []
        results = []
        for i, b in enumerate(block_seq[:c]):
            stable = True
            if stability_check:

                start = time.time()
                stable = Physics.is_stable(self.block_tower, b)
                elapse = time.time() - start
                results.append(elapse)
            if stable:
                self.block_tower.add(b)
                self.meshes.append(b.render())
            else:
                print("Block #{} {} was found to be unstable".format(
                    i, str(b)))
                return results

        return results
Ejemplo n.º 3
0
    def build_janga(self, n, stability_check=True):
        """

        :param c: int defining complexity of build
        :return:
        """
        self.block_tower: Tower_State = Tower_State()
        self.meshes = []
        results = []
        for l in range(0, n, 2):
            for i in range(-2, 3):
                b = Block(block_mesh, 'flat_wide', (i * 3, 0, l))
                if stability_check:
                    start = time.time()
                    stable = Physics.is_stable(self.block_tower, b)
                    elapse = time.time() - start
                    results.append(elapse)
                    if stable:
                        self.block_tower.add(b)
                        self.meshes.append(b.render())
                    else:
                        print("Block #{} {} was found to be unstable".format(
                            i, str(b)))
                        return results
                else:
                    self.block_tower.add(b)
                    self.meshes.append(b.render())

            for i in range(-2, 3):
                b = Block(block_mesh, 'flat_thin', (0, i * 3, l + 1))
                if stability_check:
                    start = time.time()
                    stable = Physics.is_stable(self.block_tower, b)
                    elapse = time.time() - start
                    results.append(elapse)
                    if stable:
                        self.block_tower.add(b)
                        self.meshes.append(b.render())
                    else:
                        print("Block #{} {} was found to be unstable".format(
                            i, str(b)))
                        return results
                else:
                    self.block_tower.add(b)
                    self.meshes.append(b.render())

        return results
Ejemplo n.º 4
0
 def can_add(self, new_block: Block):
     if not Physics.is_overlapping(self, new_block):  # no state changes
         if Physics.is_stable(self, new_block):  # no state changes made
             # not_saturated = True
             # for block_below in self.get_blocks_below(new_block):
             #     not_saturated &= not block_below.is_saturated(self, no_changes=True)
             # return True and not_saturated
             return True
     return False
Ejemplo n.º 5
0
    def test_stability(self):
        # # test blocks touching the floor
        self.build(1)
        first_block = Block(block_mesh, 'short_wide', (-3, 0, 1))
        self.assertTrue(Physics.is_stable(self.block_tower, first_block))
        if DISPLAY:
            display(self.meshes + [first_block.render()])

        self.build(2)
        new_block = Block(block_mesh, 'short_thin', (-5, 5, 4))
        self.assertTrue(Physics.is_stable(self.block_tower, new_block))
        if DISPLAY:
            display(self.meshes + [new_block.render()])

        self.build(14, stability_check=True)
        new_block = Block(block_mesh, 'short_thin', (4, -1, 16))
        self.assertTrue(Physics.is_stable(self.block_tower, new_block))
        if DISPLAY:
            display(self.meshes + [new_block.render()])
Ejemplo n.º 6
0
    def test_tower_not_stable(self):
        DISPLAY = False
        self.build(4, stability_check=True)
        bad_block = Block(block_mesh, ORIENTATION.SHORT_THIN, (-1, 0, 4))
        self.assertTrue(not Physics.is_stable(self.block_tower, bad_block))
        if DISPLAY:
            l = list(self.block_tower.gen_blocks())
            display_colored([b.render() for b in l] + [bad_block.render()],
                            ['gray'] * len(l) + ['blue'],
                            [b.get_aggregate_cog()
                             for b in l] + [bad_block.get_aggregate_cog()])

        self.build(10, stability_check=True)
        print("Before : " + str(self.block_tower))
        good_block = Block(block_mesh, ORIENTATION.SHORT_THIN, (-1, -1, 4))

        self.assertTrue(Physics.is_stable(self.block_tower, good_block))
        if DISPLAY:
            l = list(self.block_tower.gen_blocks())
            display_colored([b.render() for b in l] + [good_block.render()],
                            ['gray'] * len(l) + ['blue'],
                            [b.get_aggregate_cog()
                             for b in l] + [good_block.get_aggregate_cog()])
        print("After : " + str(self.block_tower))

        DISPLAY = True
        self.build(10, stability_check=True)
        print("Before : " + str(self.block_tower))
        bad_block = Block(block_mesh, 'flat_wide', (0, 0, 13))
        result = Physics.is_stable(self.block_tower, bad_block)
        self.assertTrue(True or result)
        print(result)
        if DISPLAY:
            l = list(self.block_tower.gen_blocks())
            display_colored([b.render() for b in l] + [bad_block.render()],
                            ['gray'] * len(l) + ['blue'],
                            [b.get_aggregate_cog()
                             for b in l] + [bad_block.get_aggregate_cog()])
        print("After : " + str(self.block_tower))
Ejemplo n.º 7
0
 def test_skew_arrangment(self):
     block1 = Block(block_mesh, (0, 0, 0), (0, 5, 1))
     block2 = Block(block_mesh, (0, 0, 0), (-2, -11, 1))
     block3 = Block(block_mesh, 'flat_wide', (-1, -6, 3))
     tower_state = Tower_State()
     tower_state.add(block1)
     tower_state.add(block2)
     result = Physics.is_stable(tower_state, block3)
     print(result)
     tower_state.add(block3)
     if DISPLAY:
         meshes = [b.render() for b in tower_state.gen_blocks()]
         display_colored(
             meshes, ['red', 'green', 'blue'],
             [b.get_aggregate_cog() for b in tower_state.gen_blocks()])