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")
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)
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")
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)
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")
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)
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")
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")
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
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")
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()