#pragma once #include #include #include #include "TinyVector.h" #include "Tree.h" #define th_smooth_cos_value 0.939692 void greedy_graph_coloring(const size_t num_vertices, const std::vector>& edges, std::vector>& colored_vertices); void get_graph_component(const std::vector>& edges, std::vector>& components); template T compute_tri_area(const TinyVector& v0, const TinyVector& v1, const TinyVector& v2) { return ((v1 - v0).Cross(v2 - v0)).Length() * (T)0.5; } #include "Eigen/Dense" void compute_shortest_dist_AABB(const Eigen::MatrixXd& input_pts, const Eigen::MatrixXi input_faces, const std::vector>& queries, std::vector>& res, std::vector& dist, std::vector& faceid); void compute_vert_mean_curvature(const std::vector>& pos, const std::vector> &faces, std::vector& curvature); void update_tree_color(const std::vector& new_color, TreeNode* t); bool get_tree_from_convex_graph(const std::vector> &graph, const std::map, int>& flag_fpconvex, bool flag_convex, TreeNode* tn, int layer, std::vector &invalid_graphs); TinyVector perturb_normal(const TinyVector normal, double angle_noise1, double angle_noise2); bool sample_pts_from_mesh(const std::vector>& tri_verts, const std::vector>& tri_faces, const std::vector>& tri_normals, const std::vector& tri_face_masks, int n_sample, std::vector>& output_pts, std::vector>& output_normals, std::vector& output_masks, double sigma = -1.0, double sigma_n = -1.0); #include "Mesh3D.h" //cluster mesh faces according to feature edges void get_grouped_edges(Mesh3d& m, const std::vector& he_feautre_flag, const std::vector>& feature_v2he, std::vector>& grouped_features, std::vector& he2gid); int cluster_mesh_faces(Mesh3d* m, const std::vector& he_feature_flag, std::vector> &grouped_features, int cluster_begin_id, std::vector& face2cluster, std::vector>& feature_twoface_colors); void get_cluster_from_coloring(const std::vector& face_color, int color_start_id, std::vector>& face_clusters); int merge_clusters(Mesh3d* m, const std::vector& he_feature_flag, int cluster_start_id, int n_cluster, const std::vector>& feature_twoface_colors, std::vector& face_color); int get_mesh_edge_type(Mesh3d& m, int heid); //0: smooth, 1: convex, 2: concave void get_all_tri_area(Mesh3d& m, std::vector& area); void get_mesh_vert_faces(Mesh3d& m, std::vector>& pos, std::vector>& faces); bool dijkstra_mesh(Mesh3d* m, size_t start_vert, std::vector& prev_map, std::vector& dist); void repair_tree_features(Mesh3d& m, const std::vector& face_color, const std::vector& invalid_colors, std::vector>& ungrouped_features); void repair_tree_features_maxflow(Mesh3d& m, const std::vector& face_color, const std::vector& invalid_colors, std::vector>& ungrouped_features); typedef TinyVector vec3d; bool load_xyz_file(const char* filename, std::vector& pts, std::vector& normals);