Ejemplo n.º 1
0
def translate_csg(inst):
    dim = len(inst) - 1
    obj, desc = mesh_pop("translate")

    if dim == 2:
        off = inst[1:3]
        key = "%s%f%ftrans" % (desc, off[0], off[1])
    else:
        off = inst[1:4]
        print(off)
        key = "%s%f%f%ftrans" % (desc, off[0], off[1], off[2])

    newobj = cache_find(key)
    if newobj is not None:
        mesh_push(newobj, key)
        return

    if dim == 2:
        newobj = Object2d()
        newobj.vertices = np.empty([len(obj.vertices), 2], dtype=float)
        newobj.faces = obj.faces
        for i in range(len(obj.vertices)):
            newobj.vertices[i][0] = obj.vertices[i][0] + off[0]
            newobj.vertices[i][1] = obj.vertices[i][1] + off[1]
    else:
        newobj = CSG.clone(obj)
        newobj.translate(off)

    cache_put(key, newobj)
    mesh_push(newobj, key)
Ejemplo n.º 2
0
def scale(s):
    obj, desc = mesh_pop("scale")
    dim = get_dimension(obj)
    if dim == 2:
        if type(s) is not list:
            s = [s, s]
        key = "%s%f%fscale" % (desc, s[0], s[1])
        instructions.append(["scale", s[0], s[1]])

        inst = instructions[-1]
        s = inst[1:3]

    else:
        if type(s) is not list:
            s = [s, s, s]
        key = "%s%f%f%fscale" % (desc, s[0], s[1], s[2])
        instructions.append(["scale", s[0], s[1], s[2]])

        inst = instructions[-1]
        s = inst[1:4]

    newobj = cache_find(key)
    if newobj is not None:
        mesh_push(newobj, key)
        return

    if dim == 3:
        newobj = CSG.clone(obj)
        for polygon in newobj.polygons:
            for vert in polygon.vertices:
                vert.pos.x *= s[0]
                vert.pos.y *= s[1]
                vert.pos.z *= s[2]
        cache_put(key, newobj)
        mesh_push(newobj, key)
    elif dim == 2:
        newobj = Object2d()
        newobj.vertices = np.empty([len(obj.vertices), 2], dtype=float)
        newobj.faces = obj.faces
        for i in range(len(newobj.vertices)):
            vertices[i][0] = obj.vertices[i][0] * s[0]
            vertices[i][1] = obj.vertices[i][1] * s[1]
        cache_put(key, newobj)
        mesh_push(newobj, key)
    else:
        message("Dimension %d not supported" % (dim))