def ram_horn2(): b0 = numpy.array([ [0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], ], dtype=numpy.float64) - [0.5, 0.5, 0] xf0_to_1 = meshutil.Transform().translate(0, 0, 1) b1 = xf0_to_1.apply_to(b0) meshes = [] meshes.append(meshutil.join_boundary_simple(b0, b1)) meshes.append(meshutil.close_boundary_simple(b0)) for i in range(4): # Opening boundary: xf = meshutil.Transform() \ .translate(0,0,-1) \ .scale(0.5) \ .translate(0.25,0.25,1) \ .rotate([0,0,1], i*numpy.pi/2) gen = ram_horn_gen(b1, xf) mesh = meshgen.gen2mesh(gen, count=128, close_last=True) meshes.append(mesh) mesh = meshutil.FaceVertexMesh.concat_many(meshes) return mesh
def twist_from_gen(): b = numpy.array([ [0, 0, 0], [1, 0, 0], [1, 0, 1], [0, 0, 1], ], dtype=numpy.float64) - [0.5, 0, 0.5] b = meshutil.subdivide_boundary(b) b = meshutil.subdivide_boundary(b) b = meshutil.subdivide_boundary(b) bs = [b] # since it needs a generator: gen_inner = itertools.repeat(bs) gen = meshgen.gen_inc_y(meshgen.gen_twisted_boundary(gen_inner)) mesh = meshgen.gen2mesh(gen, 100, True) return mesh
def branch_test(): b0 = numpy.array([ [0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], ], dtype=numpy.float64) - [0.5, 0.5, 0] parts = [ meshutil.Transform().scale(0.5).translate(dx, dy, 1) for dx in (-0.25, +0.25) for dy in (-0.25, +0.25) ] xf = meshutil.Transform().translate(0, 0, 0.1).scale(0.95) def gen(): b = b0 for i in range(10): b = xf.apply_to(b) yield [b] return meshgen.gen2mesh(gen(), close_first=True, close_last=True)
def twisty_torus(frames=200, turns=4, count=4, rad=4): b = numpy.array([ [0, 0, 0], [1, 0, 0], [1, 0, 1], [0, 0, 1], ], dtype=numpy.float64) - [0.5, 0, 0.5] b = meshutil.subdivide_boundary(b) b = meshutil.subdivide_boundary(b) b = meshutil.subdivide_boundary(b) bs = [b] # since it needs a generator: gen_inner = itertools.repeat(bs) # In order to make this line up properly: angle = numpy.pi * 2 * turns / frames gen = meshgen.gen_torus_xy(meshgen.gen_twisted_boundary(gen=gen_inner, count=count, ang=angle), rad=rad, frames=frames) return meshgen.gen2mesh(gen, 0, flip_order=True, loop=True)
def spiral_nested_2(): # Slow. b = numpy.array([ [0, 0, 0], [1, 0, 0], [1, 0, 1], [0, 0, 1], ], dtype=numpy.float64) - [0.5, 0, 0.5] b *= 0.3 b = meshutil.subdivide_boundary(b) b = meshutil.subdivide_boundary(b) bs = [b] # since it needs a generator: gen1 = itertools.repeat(bs) gen2 = meshgen.gen_twisted_boundary(gen1, ang=-0.2, dx0=0.5) gen3 = meshgen.gen_twisted_boundary(gen2, ang=0.05, dx0=1) gen = meshgen.gen_inc_y(gen3, dy=0.1) return meshgen.gen2mesh(gen, count=250, flip_order=True, close_first=True, close_last=True)