Example #1
0
def func3():
    if request.method == 'POST':
        try:
            with open(in_models('model.obj'), 'w') as fd1:
                if bool(request.form.getlist('t3d3')):
                    xz_func_gen.generate_xz_func_file_tex_len(
                        functions.eval_xyz(request.form['func']),
                        float(request.form['min_x']),
                        float(request.form['max_x']),
                        int(request.form['grid_x']),
                        float(request.form['min_z']),
                        float(request.form['max_z']),
                        int(request.form['grid_z']), fd1)
                else:
                    xz_func_gen.generate_xz_func_file(
                        functions.eval_xyz(request.form['func']),
                        float(request.form['min_x']),
                        float(request.form['max_x']),
                        int(request.form['grid_x']),
                        float(request.form['min_z']),
                        float(request.form['max_z']),
                        int(request.form['grid_z']), fd1)
        except (NameError, ValueError, ZeroDivisionError, TypeError,
                ArithmeticError, FloatingPointError):
            shutil.copy(in_models('error.obj'), in_models('model.obj'))
            file_handler.remove_temps()
            print(sys.exc_info()[0])
        except:  # TODO: remove
            print(sys.exc_info()[0])
    return redirect('/')
Example #2
0
def remove_temps():
    try:
        os.remove(in_models('texture_temp.obj'))
    except (FileExistsError, FileNotFoundError):
        print('Failed attempt to remove texture temp')
    try:
        os.remove(in_models('normal_temp.obj'))
    except (FileExistsError, FileNotFoundError):
        print('Failed attempt to remove normal temp')
    try:
        os.remove(in_models('face_temp.obj'))
    except (FileExistsError, FileNotFoundError):
        print('Failed attempt to remove face temp')
Example #3
0
def func_para():
    if request.method == 'POST':
        try:
            with open(in_models('model.obj'), 'w') as fd1:
                para_func_gen.generate_parametric_func_file(
                    functions.eval_parametric(request.form['funcX'],
                                              request.form['funcY'],
                                              request.form['funcZ']),
                    float(request.form['min_u']), float(request.form['max_u']),
                    int(request.form['grid_u']), float(request.form['min_v']),
                    float(request.form['max_v']), int(request.form['grid_v']),
                    fd1, bool(request.form.getlist('double_sided')))
        except (NameError, ValueError, ZeroDivisionError, TypeError,
                ArithmeticError, FloatingPointError):
            shutil.copy(in_models('error.obj'), in_models('model.obj'))
            file_handler.remove_temps()
            print(sys.exc_info()[0])
        except:  # TODO: remove
            print(sys.exc_info()[0])
    return redirect('/')
Example #4
0
def generate_noise_file_tex_len(f, x_max, x_grid_count, z_max, z_grid_count, fd_main):
    dx = x_max / x_grid_count
    dz = z_max / z_grid_count

    h_dict = {}
    v_dict = {}
    for z in range(0, x_grid_count+1):
        if not h_dict.__contains__(z):
            h_dict[z] = 0
        for x in range(0, z_grid_count):
            p_from = [x*dx, f(x*dx, z*dz), z*dz]
            p_to = [x*dx+dx, f(x*dx+dx, z*dz), z*dz]
            h_dict[z] += vector_math.vec_length(vector_math.vec_from_to(p_from, p_to))
    for x in range(0, z_grid_count + 1):
        if not v_dict.__contains__(x):
            v_dict[x] = 0
        for z in range(0, x_grid_count):
            p_from = [x*dx, f(x*dx, z*dz), z*dz]
            p_to = [x*dx, f(x*dx, z*dz + dz), z*dz + dz]
            v_dict[x] += vector_math.vec_length(vector_math.vec_from_to(p_from, p_to))

    u_map = {}
    v_map = {}
    for z in range(0, z_grid_count+1):
        u_map[(0,z)] = 0.0
        for x in range(1,x_grid_count + 1):
            p_to = [x*dx, f(x*dx, z*dz), z*dz]
            p_from = [x*dx-dx, f(x*dx-dx, z*dz), z*dz]
            u_map[(x,z)] = u_map[(x-1,z)] + vector_math.vec_length(vector_math.vec_from_to(p_from, p_to)) / h_dict[z]
    for x in range(0, x_grid_count+1):
        v_map[(x,0)] = 0.0
        for z in range(1, z_grid_count + 1):
            p_to = [x*dx, f(x*dx,z*dz), z*dz]
            p_from = [x*dx, f(x*dx, z*dz - dz), z*dz - dz]
            v_map[(x,z)] = v_map[(x,z-1)] + vector_math.vec_length(vector_math.vec_from_to(p_from, p_to)) / v_dict[x]

    with open(in_models('face_temp.obj'), 'w') as face_fd:
        with open(in_models('normal_temp.obj'), 'w') as normal_fd:
            with open(in_models('texture_temp.obj'), 'w') as texture_fd:
                for x in range(0, x_grid_count):
                    for z in range(0, z_grid_count):
                        u_li = []
                        v_li = []
                        u_li += [u_map[(x,z)]]
                        u_li += [u_map[(x+1,z)]]
                        u_li += [u_map[(x,z+1)]]
                        u_li += [u_map[(x+1,z+1)]]
                        v_li += [v_map[(x,z)]]
                        v_li += [v_map[(x+1,z)]]
                        v_li += [v_map[(x,z+1)]]
                        v_li += [v_map[(x+1,z+1)]]

                        quad = grid_xyz(f, x * dx, z * dz, dx, dz)
                        write_obj_quad_tex_len(quad, z * 4 + (z_grid_count * 4 * x),
                                               fd_main, texture_fd, normal_fd, face_fd,
                                               u_li, v_li)
    append_file(fd_main, in_models('texture_temp.obj'))
    append_file(fd_main, in_models('normal_temp.obj'))
    append_file(fd_main, in_models('face_temp.obj'))
Example #5
0
def func_noise():
    if request.method == 'POST':
        try:
            with open(in_models('model.obj'), 'w') as fd1:
                if bool(request.form.getlist('t3d')):
                    noise_gen.generate_noise_file_tex_len(
                        lambda x, z: float(request.form['amplitude']) *
                        pnoise2(x,
                                z,
                                octaves=int(request.form['octaves']),
                                persistence=float(request.form['persistence']),
                                lacunarity=float(request.form['lacunarity'])),
                        float(request.form['gridWidth']),
                        int(request.form['gridCountX']),
                        float(request.form['gridLength']),
                        int(request.form['gridCountZ']), fd1)
                else:
                    noise_gen.generate_noise_file(
                        lambda x, z: float(request.form['amplitude']) *
                        pnoise2(x,
                                z,
                                octaves=int(request.form['octaves']),
                                persistence=float(request.form['persistence']),
                                lacunarity=float(request.form['lacunarity'])),
                        float(request.form['gridWidth']),
                        int(request.form['gridCountX']),
                        float(request.form['gridLength']),
                        int(request.form['gridCountZ']), fd1)
        except (NameError, ValueError, ZeroDivisionError, TypeError,
                ArithmeticError, FloatingPointError):
            shutil.copy(in_models('error.obj'), in_models('model.obj'))
            file_handler.remove_temps()
            print(sys.exc_info()[0])
        except:  # TODO: remove
            print(sys.exc_info())
    return redirect('/')
Example #6
0
def generate_noise_file(f, x_max, x_grid_count, z_max, z_grid_count, fd_main):
    dx = x_max / x_grid_count
    dz = z_max / z_grid_count
    with open(in_models('face_temp.obj'), 'w') as face_fd:
        with open(in_models('normal_temp.obj'), 'w') as normal_fd:
            with open(in_models('texture_temp.obj'), 'w') as texture_fd:
                for x in range(0, x_grid_count):
                    for z in range(0, z_grid_count):
                        quad = grid_xyz(f, x * dx, z * dz, dx, dz)
                        write_obj_quad(quad, z * 4 + (z_grid_count * 4 * x),
                                       fd_main, texture_fd, normal_fd, face_fd,
                                       lambda u: u / x_max,
                                       lambda v: v / z_max)
    append_file(fd_main, in_models('texture_temp.obj'))
    append_file(fd_main, in_models('normal_temp.obj'))
    append_file(fd_main, in_models('face_temp.obj'))
Example #7
0
def generate_xz_func_file(f, x_min, x_max, x_grid_count, z_min, z_max,
                          z_grid_count, fd_main):
    dx = (x_max - x_min) / x_grid_count
    dz = (z_max - z_min) / z_grid_count
    with open(in_models('face_temp.obj'), 'w') as face_fd:
        with open(in_models('normal_temp.obj'), 'w') as normal_fd:
            with open(in_models('texture_temp.obj'), 'w') as texture_fd:
                for x in range(0, x_grid_count):
                    for z in range(0, z_grid_count):
                        quad = grid_xyz(f, x_min + x * dx, z_min + z * dz, dx,
                                        dz)
                        write_obj_quad(quad, z * 4 + (z_grid_count * 4 * x),
                                       fd_main, texture_fd, normal_fd, face_fd,
                                       lambda u: (u - x_min) / (x_max - x_min),
                                       lambda v: (v - z_min) / (z_max - z_min))
    append_file(fd_main, in_models('texture_temp.obj'))
    append_file(fd_main, in_models('normal_temp.obj'))
    append_file(fd_main, in_models('face_temp.obj'))
Example #8
0
def generate_parametric_func_file(f, u_min, u_max, u_grid_count, v_min, v_max,
                                  v_grid_count, fd_main, d_sided):
    du = (u_max - u_min) / u_grid_count
    dv = (v_max - v_min) / v_grid_count
    with open(in_models('face_temp.obj'), 'w') as face_fd:
        with open(in_models('normal_temp.obj'), 'w') as normal_fd:
            with open(in_models('texture_temp.obj'), 'w') as texture_fd:
                if d_sided:
                    for u in range(0, u_grid_count):
                        for v in range(0, v_grid_count):
                            quad = grid_parametric(f, u_min + u * du,
                                                   v_min + v * dv, du, dv)
                            write_obj_quad2(
                                quad, v * 4 + (v_grid_count * 4 * u), fd_main,
                                texture_fd, normal_fd, face_fd, lambda _u:
                                (_u - u_min) / (u_max - u_min), lambda _v:
                                (_v - v_min) / (v_max - v_min), [
                                    u_min + u * du, u_min + (u + 1) * du,
                                    v_min + v * dv, v_min + (v + 1) * dv
                                ])
                else:
                    for u in range(0, u_grid_count):
                        for v in range(0, v_grid_count):
                            quad = grid_parametric(f, u_min + u * du,
                                                   v_min + v * dv, du, dv)
                            write_obj_quad(
                                quad, v * 4 + (v_grid_count * 4 * u), fd_main,
                                texture_fd, normal_fd, face_fd, lambda _u:
                                (_u - u_min) / (u_max - u_min), lambda _v:
                                (_v - v_min) / (v_max - v_min), [
                                    u_min + u * du, u_min + (u + 1) * du,
                                    v_min + v * dv, v_min + (v + 1) * dv
                                ])
    append_file(fd_main, in_models('texture_temp.obj'))
    append_file(fd_main, in_models('normal_temp.obj'))
    append_file(fd_main, in_models('face_temp.obj'))
Example #9
0
def convert_mesh():
    os.system("start /wait cmd /c OgreXMLConverter {}".format(
        in_models("model.mesh.xml")))
Example #10
0
def zip_objects():
    with zipfile.ZipFile(in_download('objects.zip'), 'w') as zip_fd:
        # zip_fd.write(in_models('model.mesh'), basename('model.mesh'))
        zip_fd.write(in_models('model.obj'), basename("model.obj"))