예제 #1
0
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
예제 #2
0
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
예제 #3
0
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)
예제 #4
0
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)
예제 #5
0
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)