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('/')
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')
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('/')
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'))
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('/')
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'))
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'))
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'))
def convert_mesh(): os.system("start /wait cmd /c OgreXMLConverter {}".format( in_models("model.mesh.xml")))
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"))