#pragma once #include #include #include "TinyVector.h" #include "TinyMatrix.h" #define TH_CIRCLE (M_PI / 12.0) typedef TinyVector vec3d; using std::string; double safe_acos(double u); double safe_asin(double u); void update_minmax(const std::vector& vs, double& vmin, double& vmax, int split = 20); void get_pcs_bb(const std::vector& pcs, vec3d& bb_min, vec3d& bb_max); bool check_patch_uv_order(const std::vector& input, int udim, int vdim, std::vector& output); vec3d get_tri_normal(const vec3d& p1, const vec3d& p2, const vec3d& p3); void save_pts_normal_xyz(const std::string& fn, const std::vector& pts, const std::vector& normals); void save_pts_xyz(const std::string& fn, const std::vector& pts); vec3d get_nn_xyz(const vec3d& dir1, double max_angle_diff_degree); void save_pts_ply(const std::string& fn, const std::vector& pts); void save_pts_ply(const std::string& fn, const std::vector>& pts); void save_valid_curves_obj(const std::string& fn, const std::vector>& pts, const std::vector& curve_valid, const std::vector& curve_close); void save_curves_obj(const std::string& fn, const std::vector>& pts, const std::vector& curve_close); void save_pts_color_ply(const std::string& fn, const std::vector& pts, const std::vector& pts_mask); void save_obj(const std::string& fn, const std::vector& pts, const std::vector>& faces); void save_obj_grouped(const std::string& fn, const std::vector>& pts, const std::vector>>& faces); void split_quad(const std::vector>& quad_faces, std::vector>& tri_faces, std::vector &face2patch); void get_vertical_vectors(const vec3d& input, vec3d& u, vec3d& v); void get_rotmat_from_normal(const vec3d& normal, ColumnMatrix3d& mat); void get_tri_area(const std::vector& pts, const std::vector>& faces, std::vector& area); void get_tri_area_normal(const std::vector& pts, const std::vector>& faces, std::vector& area, std::vector &normals); void convert_grid_to_trimesh(const std::vector& pts, int u_split, int v_split, bool u_closed, bool v_closed, std::vector>& output_faces); void estimate_normal_from_grid(const std::vector& input_pts, std::vector& input_normals, int xdim, int ydim, bool flag_xclose = false); void expand_grid_points(const std::vector& input_pts, int dim_u_input, int dim_v_input, double dist, bool u_closed, std::vector& output_pts); bool sample_pts_from_mesh_parametric(const std::vector>& tri_verts, const std::vector>& tri_faces, const std::vector>& tri_normals, int n_sample, std::vector>& output_pts, std::vector>& output_normals, std::vector& output_pts_faces);