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