Beispiel #1
0
    def test_two_grow_regions(self):
        viz.add_bmesh(self.seed, "seed before grow")
        vert_a = self.seed.verts[0]
        vert_b = self.seed.verts[2500]

        Coral.grow_site(self.seed, vert_a)
        Coral.grow_site(self.seed, vert_b)
        viz.add_bmesh(self.seed, "seed after two grow sites")
Beispiel #2
0
    def test_divide_long_edges(self):
        viz.add_bmesh(self.coral.bme, "before divide")
        before_num_edges = len(self.coral.bme.edges)
        before_num_verts = len(self.coral.bme.verts)
        self.coral.divide_long_edges(threshold_length=0.01)
        viz.add_bmesh(self.coral.bme, "after divide")
        after_num_verts = len(self.coral.bme.verts)

        self.assertEqual(before_num_verts + before_num_edges, after_num_verts)
Beispiel #3
0
    def test_feed_off_of_base_case(self):
        # viz.add_sphere(self.particle.position, "particle init pos")
        self.particle.move(magnitude=30.0, randomness=0.0)
        # viz.add_sphere(self.particle.position, "particle final pos")
        self.particle.show(viz.add_polyline)
        self.coral.prepare_for_interaction()
        location = self.coral.interact_with(self.particle)
        self.assertTrue(location)

        viz.add_bmesh(self.coral.bme, "coral after collision")
Beispiel #4
0
    def test_divide_long_edges_cube(self):
        coral_cube = Coral.Coral(prims.cube(side=50))
        viz.add_bmesh(coral_cube.bme, "cube before divide")
        before_num_edges = len(coral_cube.bme.edges)
        before_num_verts = len(coral_cube.bme.verts)
        coral_cube.divide_long_edges(threshold_length=0.01)
        after_num_verts = len(coral_cube.bme.verts)
        viz.add_bmesh(coral_cube.bme, "cube after divide")

        self.assertEqual(before_num_verts + before_num_edges, after_num_verts)
Beispiel #5
0
    def test_on_ico_sphere(self):
        seed = prims.ico_seed(radius=100)
        seed.verts.ensure_lookup_table()
        vert = seed.verts[0]

        levels = 10
        neighbors = Coral.neighbor_levels(seed, vert, levels=levels)
        grow_lengths = Coral.falloff_neighborhood_grow_lengths(
            n_levels=levels, center_grow_length=10, last_grow_length=1)
        Coral.grow_neighborhood(neighbors, grow_lengths)
        viz.add_bmesh(seed, "ico after grow")
Beispiel #6
0
 def test_displaces_one_vert(self):
     # viz.add_bmesh(self.cube, "before vert displace")
     # checked visually using bpy.app.debug=True (display mesh indices)
     # know that this should be in unitZ direction
     cube = self.cube.copy()
     cube.verts.ensure_lookup_table()
     vert = cube.verts[0]
     original_pos = vert.co.copy()
     length = 20.0
     Coral.displace_vert(vert, length)
     viz.add_bmesh(cube, "after vert displace")
     vu.assert_nearly_same_vecs(vert.co, original_pos + vu.UNIT_Z * length)
Beispiel #7
0
    def test_three_grow_regions(self):
        viz.add_bmesh(self.seed, "seed before grow")
        vert_a = self.seed.verts[0]
        vert_b = self.seed.verts[2500]
        vert_c = self.seed.verts[2279]
        viz.add_sphere(vert_a.co, "vert_a")
        viz.add_sphere(vert_b.co, "vert_b")
        viz.add_sphere(vert_c.co, "vert_c")

        Coral.grow_site(self.seed, vert_a)
        Coral.grow_site(self.seed, vert_b)
        Coral.grow_site(self.seed, vert_c)
        viz.add_bmesh(self.seed, "seed after three grow sites")
Beispiel #8
0
    def test_on_grid(self):
        grid = bmesh.new()
        bmesh.ops.create_grid(grid, x_segments=10, y_segments=10, size=100)
        grid.verts.ensure_lookup_table()
        viz.add_bmesh(grid, "grid before grow")
        vert = grid.verts[45]

        levels = 6
        neighbors = Coral.neighbor_levels(grid, vert, levels=levels)
        grow_lengths = Coral.falloff_neighborhood_grow_lengths(
            n_levels=levels, center_grow_length=40, last_grow_length=20)

        Coral.grow_neighborhood(neighbors, grow_lengths)
        viz.add_bmesh(grid, "grid after grow")
Beispiel #9
0
    def test(self):
        """get a visual that neighbors look right and no dup spheres
        """
        viz.add_bmesh(self.seed)
        vert = self.seed.verts[0]
        # viz.add_sphere(vert.co, str(0), diam=1)
        levels = 20
        neighbors = Coral.neighbor_levels(self.seed, vert, levels=levels)

        diam = 1.0
        step = (diam - 0.1) / levels
        for neighborhood in neighbors:
            for vert in neighborhood:
                # commented to make run faster
                # viz.add_sphere(vert.co, diam=diam)
                pass
            diam -= step
Beispiel #10
0
import unittest

import bmesh
import mathutils
import primitives as prims
import vector_utils as vu
import viz

bme = prims.ico_seed(radius=10)
viz.add_bmesh(bme, "seed")

tree = mathutils.bvhtree.BVHTree.FromBMesh(bme, epsilon=0.0)
origin = mathutils.Vector((0, 0, 15))
direction = -vu.UNIT_Z
distance = 9.0
result = tree.ray_cast(origin, direction, distance)
print(result)

if result[0] != None:
    viz.add_sphere(result[0], name="intersection")
Beispiel #11
0
coral = Coral.Coral(prims.ico_seed(radius=0.4))
long_thresh = 0.06
short_thresh = 0.001


def interact(coral, particle_system):
    coral.prepare_for_interaction()
    for particle in particle_system.particles:
        did_collide = coral.interact_with(particle)
        if did_collide == True:
            particle_system.re_spawn_particle(particle)


steps = 50
for i in range(steps):
    print("iteration: ", i)
    particle_system.move_particles()
    particle_system.re_spawn_escaped_particles()
    interact(coral, particle_system)
    coral.divide_long_edges(long_thresh)
    coral.collapse_short_edges(short_thresh)
    # box.resize_to_fit(
    #    coral.bbox_lower, coral.bbox_upper, padding=particle_system.radius * box.padding_multiplier
    # )
particle_system.show_particles(viz.add_polyline)
viz.add_bmesh(coral.bme, "coral after {} steps".format(steps))

# weed.show()
box.show()