Skip to main content

Crate oxihuman_mesh

Crate oxihuman_mesh 

Source
Expand description

Mesh processing, topology, and geometry algorithms for OxiHuman.

This crate sits between the morph engine and the export pipeline. It takes raw oxihuman_morph::engine::MeshBuffers output and enriches it with recomputed normals, tangents, optional vertex colors, UV atlasing, LOD decimation, Catmull-Clark subdivision, cloth/skeleton skinning, geodesic distances, and a suite of topology repair routines.

§Key types

§Example: build and repair a mesh

use oxihuman_mesh::mesh::MeshBuffers;
use oxihuman_mesh::repair::repair_mesh;
use oxihuman_morph::engine::MeshBuffers as MorphBuffers;

let morph_out = MorphBuffers {
    positions: vec![[0.0, 0.0, 0.0], [1.0, 0.0, 0.0], [0.0, 1.0, 0.0]],
    normals:   vec![[0.0, 0.0, 1.0]; 3],
    uvs:       vec![[0.0, 0.0]; 3],
    indices:   vec![0, 1, 2],
    has_suit:  false,
};
let mut mesh = MeshBuffers::from_morph(morph_out);
let report = repair_mesh(&mut mesh);
assert!(report.degenerate_faces_removed == 0 || report.duplicate_faces_removed == 0);

Re-exports§

pub use color_utils::set_uniform_color;
pub use groups::VertexGroup;
pub use groups::VertexGroupMap;
pub use uvgen::flip_v;
pub use uvgen::normalize_uvs;
pub use uvgen::offset_uvs;
pub use uvgen::project_uvs;
pub use uvgen::rotate_uvs;
pub use uvgen::tile_uvs;
pub use uvgen::UvProjection;
pub use decimate::decimate;
pub use decimate::decimate_ratio;
pub use decimate::decimate_with_info;
pub use decimate::DecimateResult;
pub use catmull_clark::catmull_clark_subdivide;
pub use catmull_clark::catmull_clark_subdivide_n;
pub use catmull_clark::catmull_clark_with_config;
pub use catmull_clark::CatmullClarkConfig;
pub use retarget::retarget_pose;
pub use retarget::retarget_sequence;
pub use retarget::RetargetMap;
pub use shapes::capsule;
pub use shapes::cone;
pub use shapes::cylinder;
pub use shapes::quad;
pub use shapes::sphere;
pub use vpaint::build_adjacency;
pub use vpaint::WeightMap;
pub use convex_hull::convex_hull;
pub use convex_hull::mesh_convex_hull;
pub use convex_hull::point_in_hull;
pub use convex_hull::ConvexHull;
pub use atlas::mesh_to_island;
pub use atlas::pack_atlas;
pub use atlas::AtlasConfig;
pub use atlas::AtlasPlacement;
pub use atlas::AtlasResult;
pub use atlas::UvIsland;
pub use octree::Octree;
pub use octree::OctreeAabb;
pub use subdivide::loop_subdivide;
pub use subdivide::midpoint_subdivide;
pub use repair::count_zero_length_edges;
pub use repair::ensure_complete_triangles;
pub use repair::fix_out_of_range_indices;
pub use repair::flip_face_winding;
pub use repair::flip_winding;
pub use repair::has_degenerate_faces;
pub use repair::has_valid_indices;
pub use repair::remove_degenerate_faces;
pub use repair::remove_duplicate_faces;
pub use repair::repair_mesh;
pub use repair::MeshRepairReport;
pub use connectivity::connected_component_count;
pub use connectivity::connectivity_stats;
pub use connectivity::find_boundary_edges;
pub use connectivity::find_boundary_loops;
pub use connectivity::find_connected_components;
pub use connectivity::find_non_manifold_edges;
pub use connectivity::split_components;
pub use connectivity::vertex_valence;
pub use connectivity::ConnectivityStats;
pub use edge_loops::boundary_edges;
pub use edge_loops::edge_adjacency;
pub use edge_loops::edges_to_chains;
pub use edge_loops::edges_to_loops;
pub use edge_loops::extract_edge_loop;
pub use edge_loops::extract_edges;
pub use edge_loops::sharp_edges;
pub use edge_loops::uv_seam_edges;
pub use edge_loops::Edge;
pub use ik::fabrik_solve;
pub use ik::solve_2bone_ik;
pub use ik::IkJoint;
pub use ik::IkResult;
pub use uv_quality::compute_face_stretches;
pub use uv_quality::compute_uv_utilization;
pub use uv_quality::count_uv_overlaps;
pub use uv_quality::face_conformal_distortion;
pub use uv_quality::face_uv_stretch;
pub use uv_quality::is_degenerate_uv_face;
pub use uv_quality::uv_quality_report;
pub use uv_quality::uv_triangle_area;
pub use uv_quality::worst_stretch_faces;
pub use uv_quality::UvQualityReport;
pub use geodesic::geodesic_all_pairs;
pub use geodesic::geodesic_from_vertex;
pub use geodesic::geodesic_from_vertices;
pub use geodesic::geodesic_heat_map;
pub use geodesic::mesh_diameter;
pub use geodesic::GeodesicResult;
pub use visibility::backface_cull;
pub use visibility::classify_aabb;
pub use visibility::count_front_facing;
pub use visibility::is_front_facing;
pub use visibility::Frustum;
pub use visibility::Plane;
pub use visibility::Visibility;
pub use bounds::compute_bounds;
pub use bounds::Aabb;
pub use bounds::BoundingSphere;
pub use bounds::BoundsResult;
pub use bounds::Obb;
pub use clothing::apply_clothing;
pub use clothing::ClothingMesh;
pub use integrity::check_index_bounds;
pub use integrity::check_integrity;
pub use integrity::check_positions_finite;
pub use integrity::IntegrityReport;
pub use measurements::compute_aabb;
pub use measurements::compute_measurements;
pub use measurements::Aabb as MeasAabb;
pub use measurements::BodyMeasurements;
pub use mesh::MeshBuffers;
pub use normals::compute_normals;
pub use normals::compute_tangents;
pub use pose_library::Pose;
pub use pose_library::PoseLibrary;
pub use pose_library::IDENTITY_QUAT;
pub use skeleton::Joint;
pub use skeleton::Skeleton;
pub use skinning::apply_lbs;
pub use skinning::bind_pose_matrices;
pub use skinning::SkinWeights;
pub use smooth::laplacian_smooth;
pub use smooth::smooth_normals;
pub use smooth::taubin_smooth;
pub use smooth::SmoothConfig;
pub use stats::compute_stats;
pub use stats::edge_lengths;
pub use stats::face_areas;
pub use stats::surface_area;
pub use stats::volume_estimate;
pub use stats::MeshStats;
pub use suit::ensure_suit_mesh;
pub use weld::deduplicate_faces;
pub use weld::remove_unused_vertices;
pub use weld::weld_by_position;
pub use weld::weld_by_position_and_uv;
pub use weld::WeldResult;
pub use sampling::face_area;
pub use sampling::sample_one_per_face;
pub use sampling::sample_poisson_disk;
pub use sampling::sample_surface;
pub use sampling::total_surface_area;
pub use sampling::Lcg;
pub use sampling::SurfacePoint;
pub use curvature::compute_curvature;
pub use curvature::compute_gaussian_curvature;
pub use curvature::compute_mean_curvature;
pub use curvature::curvature_stats;
pub use curvature::find_curvature_peaks;
pub use curvature::find_feature_vertices;
pub use curvature::find_saddle_points;
pub use curvature::CurvatureStats;
pub use curvature::VertexCurvature;
pub use ao_bake::ao_to_vertex_colors;
pub use ao_bake::bake_vertex_ao;
pub use ao_bake::fast_vertex_ao;
pub use ao_bake::hemisphere_samples;
pub use ao_bake::ray_hits_mesh;
pub use ao_bake::ray_triangle_intersect;
pub use ao_bake::tangent_to_world;
pub use ao_bake::AoBakeConfig;
pub use bvh::Bvh;
pub use bvh::BvhAabb;
pub use bvh::RayHit;
pub use dqs::apply_dqs;
pub use dqs::joint_delta_dq;
pub use dqs::matrix_to_dual_quat;
pub use dqs::DualQuat;
pub use dqs::Quat;
pub use seam_cut::count_uv_islands;
pub use seam_cut::cut_uv_seams;
pub use seam_cut::face_uv_bounds;
pub use seam_cut::find_uv_seam_edges_detailed;
pub use seam_cut::has_uv_seams;
pub use seam_cut::split_uv_islands;
pub use seam_cut::SeamCutResult;
pub use marching_cubes::marching_cubes;
pub use marching_cubes::marching_cubes_welded;
pub use marching_cubes::ScalarField;
pub use winding::classify_points;
pub use winding::is_inside;
pub use winding::mesh_surface_area;
pub use winding::triangle_solid_angle;
pub use winding::winding_number;
pub use winding::winding_numbers_batch;
pub use winding::winding_sign;
pub use winding::WINDING_THRESHOLD;
pub use remesh::collapse_short_edges;
pub use remesh::compute_mean_edge_length;
pub use remesh::compute_target_edge_length;
pub use remesh::flip_edges_for_valence;
pub use remesh::remesh;
pub use remesh::smooth_vertices;
pub use remesh::split_long_edges;
pub use remesh::RemeshParams;
pub use remesh::RemeshResult;
pub use voxelize::mesh_bounds;
pub use voxelize::voxel_to_mesh;
pub use voxelize::voxelize;
pub use voxelize::voxelize_solid;
pub use voxelize::voxelize_surface;
pub use voxelize::VoxelGrid;
pub use voxelize::VoxelizeParams;
pub use heat_map::color3_to_u8;
pub use heat_map::lerp_color;
pub use heat_map::sample_ramp;
pub use heat_map::scalars_to_colors;
pub use heat_map::scalars_to_colors_range;
pub use heat_map::Color3;
pub use heat_map::Color4;
pub use heat_map::ColorRamp;
pub use heat_map::HeatMap;
pub use ffd::apply_ffd;
pub use ffd::bernstein;
pub use ffd::binomial;
pub use ffd::make_bend_lattice;
pub use ffd::make_twist_lattice;
pub use ffd::FfdLattice;
pub use mesh_diff::blend_meshes;
pub use mesh_diff::compute_displacement;
pub use mesh_diff::displacement_to_heat_mesh;
pub use mesh_diff::interpolate_mesh_sequence;
pub use mesh_diff::mesh_diff_stats;
pub use mesh_diff::meshes_approx_equal;
pub use mesh_diff::DisplacementField;
pub use mesh_diff::MeshDiffStats;
pub use normal_map_bake::bake_normal_map;
pub use normal_map_bake::closest_surface_point;
pub use normal_map_bake::normal_to_rgb;
pub use normal_map_bake::rasterize_uv_triangle;
pub use normal_map_bake::rgb_to_normal;
pub use normal_map_bake::NormalMapBakeParams;
pub use normal_map_bake::NormalMapTexture;
pub use terrain::compute_slope;
pub use terrain::generate_dome_terrain;
pub use terrain::generate_grid;
pub use terrain::generate_sine_terrain;
pub use terrain::mesh_to_heightfield;
pub use terrain::smooth_heightfield;
pub use terrain::terrain_from_heightfield;
pub use terrain::HeightField;
pub use terrain::TerrainParams;
pub use spring_deform::build_edge_springs;
pub use spring_deform::find_boundary_vertices;
pub use spring_deform::jiggle_deform;
pub use spring_deform::SpringParams;
pub use spring_deform::SpringSystem;
pub use mesh_merge::append_mesh;
pub use mesh_merge::extract_face_range;
pub use mesh_merge::filter_faces;
pub use mesh_merge::merge_many;
pub use mesh_merge::merge_two;
pub use mesh_merge::merge_with_params;
pub use mesh_merge::rotate_mesh;
pub use mesh_merge::scale_mesh;
pub use mesh_merge::split_by_connectivity;
pub use mesh_merge::translate_mesh;
pub use mesh_merge::MergeParams;
pub use mesh_merge::MergeResult;
pub use microdisp::apply_micro_displacement;
pub use microdisp::fbm_noise_3d;
pub use microdisp::sample_displacement;
pub use microdisp::skin_displacement;
pub use microdisp::value_noise_3d;
pub use microdisp::voronoi_3d;
pub use microdisp::wrinkle_displacement;
pub use microdisp::DisplacementPattern;
pub use microdisp::MicroDispParams;
pub use microdisp::MicroDispResult;
pub use thickness::compute_thickness;
pub use thickness::cone_samples;
pub use thickness::ray_mesh_hits;
pub use thickness::ray_triangle_hit;
pub use thickness::sample_thickness_at;
pub use thickness::ThicknessMap;
pub use thickness::ThicknessParams;
pub use proxy_gen::capsule_mesh;
pub use proxy_gen::fit_aabb;
pub use proxy_gen::fit_capsule;
pub use proxy_gen::fit_obb;
pub use proxy_gen::fit_sphere;
pub use proxy_gen::mesh_proxy;
pub use proxy_gen::proxy_to_mesh;
pub use proxy_gen::region_proxy;
pub use proxy_gen::sphere_mesh;
pub use proxy_gen::ProxyFitResult;
pub use proxy_gen::ProxyShape;
pub use proxy_gen::ProxyShapeType;
pub use ray_pick::box_select_vertices;
pub use ray_pick::closest_ray_point;
pub use ray_pick::pick_all_faces;
pub use ray_pick::pick_face;
pub use ray_pick::pick_vertex;
pub use ray_pick::point_to_ray_distance;
pub use ray_pick::project_onto_ray;
pub use ray_pick::sphere_select_vertices;
pub use ray_pick::PickParams;
pub use ray_pick::PickResult;
pub use ray_pick::Ray;
pub use hair_cards::curled_hair_card;
pub use hair_cards::guides_from_mesh;
pub use hair_cards::hair_card_from_guide;
pub use hair_cards::hair_cards_from_guides;
pub use hair_cards::straight_hair_card;
pub use hair_cards::CardNormalMode;
pub use hair_cards::HairCardParams;
pub use hair_cards::HairGuide;
pub use displacement_map::apply_displacement_map;
pub use displacement_map::apply_displacement_masked;
pub use displacement_map::mesh_to_displacement_map;
pub use displacement_map::DisplacedMeshResult;
pub use displacement_map::DisplacementApplyParams;
pub use displacement_map::DisplacementMap2D;
pub use cloth_panel::circular_panel;
pub use cloth_panel::join_panels;
pub use cloth_panel::layout_panels_flat;
pub use cloth_panel::rectangular_panel;
pub use cloth_panel::sleeve_panel;
pub use cloth_panel::total_panel_area;
pub use cloth_panel::trapezoid_panel;
pub use cloth_panel::triangle_panel;
pub use cloth_panel::tshirt_panels;
pub use cloth_panel::ClothPanel;
pub use cloth_panel::PanelParams;
pub use cloth_sim::apply_sim_to_mesh;
pub use cloth_sim::build_cloth_grid;
pub use cloth_sim::simulate_n_steps;
pub use cloth_sim::ClothParticle;
pub use cloth_sim::ClothSim;
pub use cloth_sim::ClothSimParams;
pub use cloth_sim::ClothSimResult;
pub use cloth_sim::DistanceConstraint;
pub use mesh_paint::apply_brush;
pub use mesh_paint::brush_falloff_weight;
pub use mesh_paint::brush_flatten;
pub use mesh_paint::brush_grab;
pub use mesh_paint::brush_inflate;
pub use mesh_paint::brush_pinch;
pub use mesh_paint::brush_smooth;
pub use mesh_paint::build_adjacency as mesh_paint_build_adjacency;
pub use mesh_paint::BrushParams;
pub use mesh_paint::BrushStroke;
pub use mesh_paint::BrushStrokeResult;
pub use mesh_paint::BrushType;
pub use mesh_slice::circumference_at_height;
pub use mesh_slice::edge_plane_intersect;
pub use mesh_slice::horizontal_slice;
pub use mesh_slice::ray_plane_intersect;
pub use mesh_slice::slice_mesh;
pub use mesh_slice::split_mesh;
pub use mesh_slice::width_profile;
pub use mesh_slice::CrossSection;
pub use mesh_slice::SlicePlane;
pub use mesh_slice::SliceResult;
pub use mesh_hollow::area_weighted_normals;
pub use mesh_hollow::boundary_loops;
pub use mesh_hollow::hollow_mesh;
pub use mesh_hollow::offset_mesh;
pub use mesh_hollow::shell_thickness;
pub use mesh_hollow::stitch_boundary_loops;
pub use mesh_hollow::HollowParams;
pub use mesh_hollow::HollowResult;
pub use mesh_warp::displacement_field;
pub use mesh_warp::dist3;
pub use mesh_warp::simple_warp;
pub use mesh_warp::warp_mesh;
pub use mesh_warp::RbfKernel;
pub use mesh_warp::RbfWarp;
pub use mesh_warp::RbfWarpConfig;
pub use mesh_warp::WarpHandle;
pub use mesh_label::body_seed_vertices;
pub use mesh_label::flood_fill_label;
pub use mesh_label::label_by_height;
pub use mesh_label::propagate_labels;
pub use mesh_label::region_boundary_edges;
pub use mesh_label::BodyRegion;
pub use mesh_label::MeshLabels;
pub use mesh_patch::ear_clip;
pub use mesh_patch::fan_patch;
pub use mesh_patch::fill_hole;
pub use mesh_patch::fill_holes;
pub use mesh_patch::find_holes;
pub use mesh_patch::hole_count;
pub use mesh_patch::is_ear;
pub use mesh_patch::is_watertight;
pub use mesh_patch::polygon_signed_area_2d;
pub use mesh_patch::project_polygon_2d;
pub use mesh_patch::MeshHole;
pub use mesh_patch::PatchResult;
pub use mesh_patch::PatchStrategy;
pub use mesh_mirror::extract_half;
pub use mesh_mirror::find_symmetry_pairs;
pub use mesh_mirror::flip_normals_axis;
pub use mesh_mirror::flip_positions;
pub use mesh_mirror::mirror_copy;
pub use mesh_mirror::mirror_mesh;
pub use mesh_mirror::reverse_winding;
pub use mesh_mirror::symmetrize_mesh;
pub use mesh_mirror::symmetry_error;
pub use mesh_mirror::MirrorAxis;
pub use mesh_mirror::MirrorConfig;
pub use mesh_mirror::MirrorResult;
pub use mesh_feature::build_edge_face_map;
pub use mesh_feature::chain_edges;
pub use mesh_feature::dihedral_angle;
pub use mesh_feature::extract_all_features;
pub use mesh_feature::extract_boundary_edges_fl;
pub use mesh_feature::extract_sharp_edges;
pub use mesh_feature::extract_silhouette;
pub use mesh_feature::face_normal as feature_face_normal;
pub use mesh_feature::FeatureEdge;
pub use mesh_feature::FeatureLines;
pub use mesh_feature::FeatureType;
pub use mesh_normal_delta::apply_morph_normals;
pub use mesh_normal_delta::compute_batch_normal_deltas;
pub use mesh_normal_delta::compute_normal_deltas;
pub use mesh_normal_delta::compute_vertex_normals as compute_vertex_normals_v;
pub use mesh_normal_delta::normals_approx_equal;
pub use mesh_normal_delta::safe_normalize;
pub use mesh_normal_delta::to_tangent_space_delta;
pub use mesh_normal_delta::MorphNormalDeltas;
pub use mesh_normal_delta::NormalDelta;
pub use mesh_boolean::boolean_op;
pub use mesh_boolean::classify_vertices;
pub use mesh_boolean::combine_meshes as boolean_combine;
pub use mesh_boolean::filter_faces_by_classification;
pub use mesh_boolean::flip_winding as boolean_flip_winding;
pub use mesh_boolean::BooleanOp;
pub use mesh_boolean::BooleanResult;
pub use mesh_crease::apply_crease_to_subdivision_config;
pub use mesh_crease::auto_crease_by_angle;
pub use mesh_crease::crease_stats;
pub use mesh_crease::mark_boundary_edges;
pub use mesh_crease::merge_crease_maps;
pub use mesh_crease::CreaseConfig;
pub use mesh_crease::CreaseEdge;
pub use mesh_crease::CreaseMap;
pub use mesh_crease::CreaseStats;
pub use mesh_crease::CreaseSubdivData;
pub use mesh_crease::EdgeKey;
pub use mesh_decal::affected_faces as decal_affected_faces;
pub use mesh_decal::apply_decal_colors;
pub use mesh_decal::decal_falloff_weight;
pub use mesh_decal::decal_stats;
pub use mesh_decal::project_decal;
pub use mesh_decal::standard_decal;
pub use mesh_decal::DecalBounds;
pub use mesh_decal::DecalConfig;
pub use mesh_decal::DecalFalloff;
pub use mesh_decal::DecalResult;
pub use mesh_decal::DecalStats;
pub use mesh_decal::DecalVertex;
pub use mesh_bridge::align_loops;
pub use mesh_bridge::bridge_loops;
pub use mesh_bridge::loop_centroid;
pub use mesh_bridge::loop_from_boundary;
pub use mesh_bridge::open_cylinder;
pub use mesh_bridge::BridgeConfig;
pub use mesh_bridge::BridgeInterpolation;
pub use mesh_bridge::BridgeResult;
pub use mesh_bridge::EdgeLoop;
pub use mesh_offset::closest_point_on_triangle;
pub use mesh_offset::grow_mesh;
pub use mesh_offset::offset_mesh as normal_offset_mesh;
pub use mesh_offset::offset_mesh_variable;
pub use mesh_offset::shell_offset;
pub use mesh_offset::shrink_mesh;
pub use mesh_offset::shrink_wrap;
pub use mesh_offset::OffsetParams;
pub use mesh_offset::OffsetResult;
pub use mesh_uv_pack::pack_from_mesh;
pub use mesh_uv_pack::pack_stats;
pub use mesh_uv_pack::pack_uv_rects;
pub use mesh_uv_pack::transform_island_uvs;
pub use mesh_uv_pack::uv_rect_bounds;
pub use mesh_uv_pack::PackConfig;
pub use mesh_uv_pack::PackResult;
pub use mesh_uv_pack::PackSort;
pub use mesh_uv_pack::UvRect;
pub use mesh_sdf::box_sdf;
pub use mesh_sdf::compute_sdf;
pub use mesh_sdf::sample_sdf;
pub use mesh_sdf::sdf_intersection;
pub use mesh_sdf::sdf_smooth_union;
pub use mesh_sdf::sdf_stats;
pub use mesh_sdf::sdf_subtraction;
pub use mesh_sdf::sdf_to_mesh;
pub use mesh_sdf::sdf_union;
pub use mesh_sdf::sphere_sdf;
pub use mesh_sdf::SdfGrid;
pub use mesh_sdf::SdfParams;
pub use mesh_sdf::SdfStats;
pub use mesh_clip::clip_above_y;
pub use mesh_clip::clip_below_y;
pub use mesh_clip::clip_mesh;
pub use mesh_clip::clip_to_box;
pub use mesh_clip::ClipConfig;
pub use mesh_clip::ClipPlane;
pub use mesh_clip::ClipResult;
pub use adaptive_subdivide::adaptive_subdivide;
pub use adaptive_subdivide::build_face_adjacency;
pub use adaptive_subdivide::dihedral_angle as adaptive_dihedral_angle;
pub use adaptive_subdivide::face_max_dihedral_angle;
pub use adaptive_subdivide::face_normal as adaptive_face_normal;
pub use adaptive_subdivide::loop_subdivide_marked;
pub use adaptive_subdivide::AdaptiveSubdivideConfig;
pub use adaptive_subdivide::AdaptiveSubdivideResult;
pub use feature_decimation::collapse_edge;
pub use feature_decimation::compute_edge_dihedral;
pub use feature_decimation::count_valid_triangles;
pub use feature_decimation::edge_collapse_error;
pub use feature_decimation::feature_decimate;
pub use feature_decimation::mark_feature_edges;
pub use feature_decimation::FeatureDecimateConfig;
pub use feature_decimation::FeatureDecimateResult;
pub use mesh_repair_advanced::fill_hole_fan;
pub use mesh_repair_advanced::fill_hole_smooth;
pub use mesh_repair_advanced::find_boundary_holes;
pub use mesh_repair_advanced::find_t_junctions;
pub use mesh_repair_advanced::is_manifold_mesh;
pub use mesh_repair_advanced::remove_t_junction;
pub use mesh_repair_advanced::repair_mesh_advanced;
pub use mesh_repair_advanced::AdvancedRepairConfig;
pub use mesh_repair_advanced::AdvancedRepairReport;
pub use mesh_arap::arap_deform;
pub use mesh_arap::arap_energy;
pub use mesh_arap::arap_global_step;
pub use mesh_arap::arap_local_step;
pub use mesh_arap::build_arap_laplacian;
pub use mesh_arap::mat3_mul_vec;
pub use mesh_arap::nearest_rotation_3x3;
pub use mesh_arap::ArapConfig;
pub use mesh_arap::ArapHandle;
pub use mesh_arap::ArapResult;
pub use mesh_arap::ArapWeight;
pub use mesh_cage::apply_cage_weights;
pub use mesh_cage::cage_encloses_point;
pub use mesh_cage::mean_value_coordinates;
pub use mesh_cage::validate_cage_weights;
pub use mesh_cage::CageDeformResult;
pub use mesh_cage::CageDeformer;
pub use mesh_flow::build_adjacency_list;
pub use mesh_flow::flow_mesh;
pub use mesh_flow::laplacian_step;
pub use mesh_flow::mean_curvature_step;
pub use mesh_flow::mesh_volume_from_positions;
pub use mesh_flow::rescale_to_volume;
pub use mesh_flow::taubin_step;
pub use mesh_flow::vertex_laplacian;
pub use mesh_flow::FlowConfig;
pub use mesh_flow::FlowMethod;
pub use mesh_flow::FlowResult;
pub use mesh_lscm::compute_local_frame;
pub use mesh_lscm::lscm_parameterize;
pub use mesh_lscm::normalize_uvs_lscm;
pub use mesh_lscm::project_to_uv;
pub use mesh_lscm::triangle_conformal_energy;
pub use mesh_lscm::uv_area;
pub use mesh_lscm::uv_stretch_metric;
pub use mesh_lscm::LscmConfig;
pub use mesh_lscm::LscmResult;
pub use mesh_skin_weights::bone_heat;
pub use mesh_skin_weights::compute_auto_skin_weights;
pub use mesh_skin_weights::diffuse_weights;
pub use mesh_skin_weights::dominant_bone;
pub use mesh_skin_weights::max_influences_per_vertex;
pub use mesh_skin_weights::normalize_skin_weights;
pub use mesh_skin_weights::prune_small_weights;
pub use mesh_skin_weights::skin_weights_to_json;
pub use mesh_skin_weights::AutoSkinResult;
pub use mesh_skin_weights::BoneEndpoint;
pub use mesh_skin_weights::SkinWeightConfig;
pub use mesh_skin_weights::WeightFalloff;
pub use mesh_tet::tet_centroid;
pub use mesh_tet::tet_dihedral_angles;
pub use mesh_tet::tet_mesh_volume;
pub use mesh_tet::tet_volume;
pub use mesh_tet::tetrahedralize;
pub use mesh_tet::validate_tet_mesh;
pub use mesh_tet::TetGenConfig;
pub use mesh_tet::TetGenResult;
pub use mesh_tet::TetMesh;
pub use mesh_noise_gen::apply_noise_texture;
pub use mesh_noise_gen::displace_mesh_noise;
pub use mesh_noise_gen::fbm_noise;
pub use mesh_noise_gen::generate_organic_surface;
pub use mesh_noise_gen::generate_sphere_bumps;
pub use mesh_noise_gen::lcg_value_noise;
pub use mesh_noise_gen::noise_magnitude_stats;
pub use mesh_noise_gen::NoiseDisplaceResult;
pub use mesh_noise_gen::NoiseGenConfig;
pub use mesh_pca::compute_shape_pca;
pub use mesh_pca::explained_variance_ratio;
pub use mesh_pca::flat_to_shape;
pub use mesh_pca::mean_shape;
pub use mesh_pca::pca_reconstruction_error;
pub use mesh_pca::project_shape;
pub use mesh_pca::reconstruct_shape;
pub use mesh_pca::shape_to_flat;
pub use mesh_pca::PcaConfig;
pub use mesh_pca::PcaResult;
pub use mesh_pca::ShapePca;
pub use mesh_progressive::build_progressive_mesh;
pub use mesh_progressive::collapse_error_sequence;
pub use mesh_progressive::extract_lod_level;
pub use mesh_progressive::extract_lod_ratio;
pub use mesh_progressive::progressive_lod_levels;
pub use mesh_progressive::refine_lod;
pub use mesh_progressive::CollapseRecord;
pub use mesh_progressive::ProgressiveMesh;
pub use mesh_progressive::ProgressiveMeshConfig;
pub use mesh_remesh_isotropic::average_edge_length;
pub use mesh_remesh_isotropic::collapse_short_edges as isotropic_collapse_short_edges;
pub use mesh_remesh_isotropic::edge_length_stats;
pub use mesh_remesh_isotropic::flip_edges_for_valence as isotropic_flip_edges_for_valence;
pub use mesh_remesh_isotropic::isotropic_remesh;
pub use mesh_remesh_isotropic::split_long_edges as isotropic_split_long_edges;
pub use mesh_remesh_isotropic::tangential_relaxation;
pub use mesh_bilaplacian::bilaplacian_energy;
pub use mesh_bilaplacian::bilaplacian_fairing;
pub use mesh_bilaplacian::bilaplacian_smooth;
pub use mesh_bilaplacian::cotangent_weight;
pub use mesh_bilaplacian::mesh_laplacian_energy;
pub use mesh_featureline::compute_all_gaussian_curvatures;
pub use mesh_featureline::compute_all_mean_curvatures;
pub use mesh_featureline::extract_feature_lines;
pub use mesh_featureline::extract_ridges;
pub use mesh_featureline::extract_valleys;
pub use mesh_featureline::feature_line_density;
pub use mesh_featureline::shape_index_at_vertex;
pub use mesh_topology_repair::count_topology_issues;
pub use mesh_topology_repair::detect_degenerate_faces;
pub use mesh_topology_repair::detect_duplicate_vertices;
pub use mesh_topology_repair::find_isolated_vertices;
pub use mesh_topology_repair::find_non_manifold_edges_advanced;
pub use mesh_topology_repair::new_topology_issue;
pub use mesh_topology_repair::remove_isolated_vertices;
pub use mesh_topology_repair::remove_non_manifold_faces;
pub use mesh_topology_repair::stitch_boundary_edges;
pub use mesh_topology_repair::topology_issue_name;
pub use mesh_topology_repair::topology_repair_report;
pub use mesh_topology_repair::vertex_face_count;
pub use mesh_topology_repair::TopologyIssue;
pub use mesh_curvature_tensor::classify_surface_point;
pub use mesh_curvature_tensor::compute_all_curvature_tensors;
pub use mesh_curvature_tensor::compute_vertex_curvature_tensor;
pub use mesh_curvature_tensor::curvedness_from_tensor;
pub use mesh_curvature_tensor::gaussian_curvature_from_tensor;
pub use mesh_curvature_tensor::mean_curvature_from_tensor;
pub use mesh_curvature_tensor::shape_index_from_tensor;
pub use mesh_curvature_tensor::CurvatureTensor;
pub use mesh_geodesic_path::dijkstra_geodesic;
pub use mesh_geodesic_path::dijkstra_geodesic_between;
pub use mesh_geodesic_path::farthest_point_sampling;
pub use mesh_geodesic_path::geodesic_centroid;
pub use mesh_geodesic_path::geodesic_distance;
pub use mesh_geodesic_path::geodesic_voronoi;
pub use mesh_geodesic_path::mesh_diameter_geodesic;
pub use mesh_geodesic_path::GeodesicPath;
pub use mesh_texture_bake::bake_ambient_occlusion;
pub use mesh_texture_bake::bake_curvature;
pub use mesh_texture_bake::bake_dispatch;
pub use mesh_texture_bake::bake_normal_map as texture_bake_normal_map;
pub use mesh_texture_bake::bake_target_to_u8;
pub use mesh_texture_bake::bake_thickness;
pub use mesh_texture_bake::load_bake_from_f32_slice;
pub use mesh_texture_bake::new_bake_target;
pub use mesh_texture_bake::sample_bake_at_uv;
pub use mesh_texture_bake::save_bake_ppm;
pub use mesh_texture_bake::BakeMode;
pub use mesh_texture_bake::BakeRay;
pub use mesh_texture_bake::BakeTarget;
pub use mesh_segment::assign_face_colors;
pub use mesh_segment::compute_segment_adjacency;
pub use mesh_segment::largest_segment;
pub use mesh_segment::merge_small_segments;
pub use mesh_segment::segment_boundary_edges;
pub use mesh_segment::segment_by_connectivity;
pub use mesh_segment::segment_by_normal_deviation;
pub use mesh_segment::segment_by_planarity;
pub use mesh_segment::segment_dispatch;
pub use mesh_segment::segment_stats;
pub use mesh_segment::MeshSegment;
pub use mesh_segment::SegmentCriteria;
pub use mesh_seam_welder::compute_average_normal;
pub use mesh_seam_welder::count_boundary_verts;
pub use mesh_seam_welder::detect_uv_islands;
pub use mesh_seam_welder::find_duplicate_positions;
pub use mesh_seam_welder::find_seam_edges;
pub use mesh_seam_welder::merge_vertex_groups;
pub use mesh_seam_welder::project_uv_along_edge;
pub use mesh_seam_welder::seam_boundary_length;
pub use mesh_seam_welder::seam_weld_report;
pub use mesh_seam_welder::weld_seams;
pub use mesh_seam_welder::MergeGroupResult;
pub use mesh_seam_welder::SeamEdge;
pub use mesh_seam_welder::WeldSeamResult;
pub use mesh_projection::barycentric_to_point;
pub use mesh_projection::compute_barycentric;
pub use mesh_projection::interpolate_uv_at_barycentric;
pub use mesh_projection::project_along_axis;
pub use mesh_projection::project_mesh_onto_mesh;
pub use mesh_projection::project_point_to_mesh;
pub use mesh_projection::project_point_to_triangle;
pub use mesh_projection::shrink_wrap_proj;
pub use mesh_projection::snap_to_surface;
pub use mesh_projection::transfer_attributes;
pub use mesh_projection::ProjectionMode;
pub use mesh_projection::ProjectionResult;
pub use mesh_curve_deform::bezier_arc_length;
pub use mesh_curve_deform::bezier_tangent;
pub use mesh_curve_deform::cross3 as curve_cross3;
pub use mesh_curve_deform::deform_mesh_along_curve;
pub use mesh_curve_deform::evaluate_bezier;
pub use mesh_curve_deform::normalize3 as curve_normalize3;
pub use mesh_curve_deform::project_to_curve_param;
pub use mesh_curve_deform::sample_curve_points;
pub use mesh_curve_deform::BezierCurve;
pub use mesh_curve_deform::CurveAxis;
pub use mesh_curve_deform::CurvePoint;
pub use mesh_curve_deform::SplineDeformResult;
pub use mesh_align::align_bounding_boxes;
pub use mesh_align::align_to_axes;
pub use mesh_align::apply_rotation;
pub use mesh_align::bounding_box as align_bounding_box;
pub use mesh_align::compute_centroid;
pub use mesh_align::covariance_matrix_3x3;
pub use mesh_align::find_nearest;
pub use mesh_align::icp_align;
pub use mesh_align::normalize_to_unit_box;
pub use mesh_align::scale_mesh as align_scale_mesh;
pub use mesh_align::translate_mesh as align_translate_mesh;
pub use mesh_align::AlignResult;
pub use mesh_align::IcpResult;
pub use mesh_parametric::make_capsule;
pub use mesh_parametric::make_cone;
pub use mesh_parametric::make_cylinder;
pub use mesh_parametric::make_plane;
pub use mesh_parametric::make_sphere;
pub use mesh_parametric::make_torus;
pub use mesh_parametric::merge_parametric;
pub use mesh_parametric::parametric_index_count;
pub use mesh_parametric::parametric_vertex_count;
pub use mesh_parametric::validate_parametric_mesh;
pub use mesh_parametric::ParametricMesh;
pub use mesh_parametric::ParametricShape;
pub use mesh_topology_flow::adjacent_faces;
pub use mesh_topology_flow::adjacent_vertices;
pub use mesh_topology_flow::boundary_vertices;
pub use mesh_topology_flow::build_topology;
pub use mesh_topology_flow::face_vertex_count;
pub use mesh_topology_flow::find_edge_loop;
pub use mesh_topology_flow::find_edge_ring;
pub use mesh_topology_flow::find_poles;
pub use mesh_topology_flow::is_closed_mesh;
pub use mesh_topology_flow::is_manifold;
pub use mesh_topology_flow::topology_stats;
pub use mesh_topology_flow::vertex_valence as topo_vertex_valence;
pub use mesh_topology_flow::FlowDir;
pub use mesh_topology_flow::HalfEdge;
pub use mesh_topology_flow::Pole;
pub use mesh_topology_flow::TopoEdgeLoop;
pub use mesh_topology_flow::TopologyMesh;
pub use mesh_extrude::compute_face_normal as extrude_face_normal;
pub use mesh_extrude::default_extrude_config;
pub use mesh_extrude::extrude_along_curve;
pub use mesh_extrude::extrude_distance;
pub use mesh_extrude::extrude_edges;
pub use mesh_extrude::extrude_faces;
pub use mesh_extrude::extrude_vertex_count;
pub use mesh_extrude::extrude_vertices;
pub use mesh_extrude::inset_faces;
pub use mesh_extrude::solidify_mesh;
pub use mesh_extrude::ExtrudeConfig;
pub use mesh_extrude::ExtrudeMode;
pub use mesh_extrude::ExtrudeResult;
pub use mesh_fillet::arc_points;
pub use mesh_fillet::bevel_vertices;
pub use mesh_fillet::blend_edge_points;
pub use mesh_fillet::chamfer_amount_from_radius;
pub use mesh_fillet::chamfer_edge;
pub use mesh_fillet::chamfer_edges;
pub use mesh_fillet::default_fillet_config;
pub use mesh_fillet::edge_dihedral_angle;
pub use mesh_fillet::fillet_edge;
pub use mesh_fillet::find_sharp_edges;
pub use mesh_fillet::ChamferResult;
pub use mesh_fillet::FilletConfig;
pub use mesh_fillet::FilletResult;
pub use mesh_heat_diffuse::build_adjacency as heat_build_adjacency;
pub use mesh_heat_diffuse::default_heat_config;
pub use mesh_heat_diffuse::diffuse_heat;
pub use mesh_heat_diffuse::diffuse_step;
pub use mesh_heat_diffuse::geodesic_heat_distance;
pub use mesh_heat_diffuse::heat_field_max;
pub use mesh_heat_diffuse::heat_field_min;
pub use mesh_heat_diffuse::heat_gradient;
pub use mesh_heat_diffuse::heat_to_color;
pub use mesh_heat_diffuse::new_heat_field;
pub use mesh_heat_diffuse::normalize_field as heat_normalize_field;
pub use mesh_heat_diffuse::set_heat_source;
pub use mesh_heat_diffuse::threshold_field;
pub use mesh_heat_diffuse::HeatDiffuseConfig;
pub use mesh_heat_diffuse::HeatField;
pub use mesh_heat_diffuse::HeatSource;
pub use mesh_uv_stitch::boundary_uv_edges;
pub use mesh_uv_stitch::clamp_uvs;
pub use mesh_uv_stitch::detect_uv_islands_stitched;
pub use mesh_uv_stitch::find_uv_seams;
pub use mesh_uv_stitch::island_area_s;
pub use mesh_uv_stitch::mirror_uvs_horizontal;
pub use mesh_uv_stitch::mirror_uvs_vertical;
pub use mesh_uv_stitch::pack_islands_simple;
pub use mesh_uv_stitch::stitch_all_seams;
pub use mesh_uv_stitch::stitch_seam;
pub use mesh_uv_stitch::stitch_seam_count;
pub use mesh_uv_stitch::uv_seam_length;
pub use mesh_uv_stitch::uv_stretch;
pub use mesh_uv_stitch::StitchResult;
pub use mesh_uv_stitch::UvIslandS;
pub use mesh_uv_stitch::UvSeam;
pub use mesh_voronoi::cell_count;
pub use mesh_voronoi::centroidal_voronoi_step;
pub use mesh_voronoi::compute_voronoi;
pub use mesh_voronoi::default_voronoi_config;
pub use mesh_voronoi::largest_cell;
pub use mesh_voronoi::smallest_cell;
pub use mesh_voronoi::vertex_cell_id;
pub use mesh_voronoi::voronoi_balance_score;
pub use mesh_voronoi::voronoi_boundary_edges;
pub use mesh_voronoi::voronoi_cell_area;
pub use mesh_voronoi::voronoi_cell_centroid;
pub use mesh_voronoi::voronoi_from_seeds;
pub use mesh_voronoi::voronoi_random_seeds;
pub use mesh_voronoi::VoronoiCell;
pub use mesh_voronoi::VoronoiConfig;
pub use mesh_voronoi::VoronoiDiagram;
pub use mesh_voronoi::VoronoiMetric;
pub use mesh_wave_deform::apply_multiple_ripples;
pub use mesh_wave_deform::apply_ripple;
pub use mesh_wave_deform::apply_wave_deform;
pub use mesh_wave_deform::default_wave_params;
pub use mesh_wave_deform::distance3 as wave_distance3;
pub use mesh_wave_deform::dot3 as wave_dot3;
pub use mesh_wave_deform::normalize3 as wave_normalize3;
pub use mesh_wave_deform::ripple_value;
pub use mesh_wave_deform::standing_wave;
pub use mesh_wave_deform::wave_envelope;
pub use mesh_wave_deform::wave_interference;
pub use mesh_wave_deform::wave_value;
pub use mesh_wave_deform::RippleSource;
pub use mesh_wave_deform::WaveParams;
pub use mesh_wave_deform::WaveShape;
pub use mesh_dual::average_dual_edge_length;
pub use mesh_dual::build_face_adjacency as dual_build_face_adjacency;
pub use mesh_dual::compute_dual_mesh;
pub use mesh_dual::dual_edge_count;
pub use mesh_dual::dual_edge_lengths;
pub use mesh_dual::dual_mesh_bounds;
pub use mesh_dual::dual_to_graph_adjacency;
pub use mesh_dual::dual_to_positions;
pub use mesh_dual::dual_vertex_count;
pub use mesh_dual::dual_vertex_degree;
pub use mesh_dual::face_centroid;
pub use mesh_dual::is_dual_connected;
pub use mesh_dual::DualMesh;
pub use mesh_sweep::circle_profile;
pub use mesh_sweep::cross3_sweep;
pub use mesh_sweep::frame_at_path_point;
pub use mesh_sweep::helix_path;
pub use mesh_sweep::line_path;
pub use mesh_sweep::normalize3_sweep;
pub use mesh_sweep::path_arc_lengths;
pub use mesh_sweep::path_length as sweep_path_length;
pub use mesh_sweep::profile_perimeter;
pub use mesh_sweep::rectangle_profile;
pub use mesh_sweep::sweep_profile_along_path;
pub use mesh_sweep::sweep_result_face_count;
pub use mesh_sweep::sweep_result_vertex_count;
pub use mesh_sweep::transform_profile_point;
pub use mesh_sweep::SweepPath;
pub use mesh_sweep::SweepProfile;
pub use mesh_sweep::SweepResult;
pub use mesh_medial_axis::approximate_medial_axis;
pub use mesh_medial_axis::default_medial_config;
pub use mesh_medial_axis::medial_axis_bounds;
pub use mesh_medial_axis::medial_axis_connectivity;
pub use mesh_medial_axis::medial_axis_length;
pub use mesh_medial_axis::medial_axis_to_json;
pub use mesh_medial_axis::medial_edge_count;
pub use mesh_medial_axis::medial_point_count;
pub use mesh_medial_axis::medial_to_spheres;
pub use mesh_medial_axis::nearest_surface_distance;
pub use mesh_medial_axis::prune_short_branches;
pub use mesh_medial_axis::thickest_point;
pub use mesh_medial_axis::MedialAxis;
pub use mesh_medial_axis::MedialAxisConfig;
pub use mesh_medial_axis::MedialPoint;
pub use mesh_vertex_cluster::apply_vertex_remap;
pub use mesh_vertex_cluster::build_cluster_grid;
pub use mesh_vertex_cluster::cluster_centroid;
pub use mesh_vertex_cluster::cluster_face_count;
pub use mesh_vertex_cluster::cluster_reduction_ratio;
pub use mesh_vertex_cluster::cluster_vertex_count;
pub use mesh_vertex_cluster::cluster_vertices;
pub use mesh_vertex_cluster::default_cluster_config;
pub use mesh_vertex_cluster::merge_close_vertices;
pub use mesh_vertex_cluster::merge_duplicate_uvs;
pub use mesh_vertex_cluster::remove_degenerate_triangles;
pub use mesh_vertex_cluster::verify_cluster_remap;
pub use mesh_vertex_cluster::ClusterConfig;
pub use mesh_vertex_cluster::ClusterResult;
pub use mesh_orient::all_normals_outward;
pub use mesh_orient::compute_mesh_normals as orient_compute_mesh_normals;
pub use mesh_orient::consistent_winding_check;
pub use mesh_orient::default_orient_config;
pub use mesh_orient::face_normal as orient_face_normal;
pub use mesh_orient::flip_all_faces;
pub use mesh_orient::flip_face;
pub use mesh_orient::mesh_centroid as orient_mesh_centroid;
pub use mesh_orient::orient_mesh;
pub use mesh_orient::orient_result_summary;
pub use mesh_orient::triangle_normal as orient_triangle_normal;
pub use mesh_orient::triangle_normal_normalized;
pub use mesh_orient::OrientConfig;
pub use mesh_orient::OrientResult;
pub use mesh_simplicial::add_simplex1;
pub use mesh_simplicial::add_simplex2;
pub use mesh_simplicial::betti_0;
pub use mesh_simplicial::boundary_edges_simplex;
pub use mesh_simplicial::boundary_of_edge;
pub use mesh_simplicial::boundary_of_triangle;
pub use mesh_simplicial::dual_graph_simplex;
pub use mesh_simplicial::euler_characteristic;
pub use mesh_simplicial::from_mesh_indices;
pub use mesh_simplicial::is_manifold_simplex;
pub use mesh_simplicial::new_simplicial_complex;
pub use mesh_simplicial::simplex1_count;
pub use mesh_simplicial::simplex2_count;
pub use mesh_simplicial::Simplex0;
pub use mesh_simplicial::Simplex1;
pub use mesh_simplicial::Simplex2;
pub use mesh_simplicial::SimplicialComplex;
pub use mesh_spectral::build_laplacian;
pub use mesh_spectral::default_spectral_config;
pub use mesh_spectral::degree_centrality;
pub use mesh_spectral::graph_laplacian_energy;
pub use mesh_spectral::laplacian_operator;
pub use mesh_spectral::laplacian_smooth_signal;
pub use mesh_spectral::laplacian_vertex_count;
pub use mesh_spectral::mesh_diameter_spectral;
pub use mesh_spectral::normalize_signal as spectral_normalize_signal;
pub use mesh_spectral::power_iterate;
pub use mesh_spectral::spectral_embedding_1d;
pub use mesh_spectral::spectral_partition;
pub use mesh_spectral::GraphLaplacian;
pub use mesh_spectral::SpectralConfig;
pub use mesh_polar_decomp::compute_deformation_gradient;
pub use mesh_polar_decomp::deformation_field_divergence;
pub use mesh_polar_decomp::mat3_det;
pub use mesh_polar_decomp::mat3_identity;
pub use mesh_polar_decomp::mat3_mul;
pub use mesh_polar_decomp::mat3_scale;
pub use mesh_polar_decomp::mat3_transpose;
pub use mesh_polar_decomp::per_face_deformation;
pub use mesh_polar_decomp::polar_decompose;
pub use mesh_polar_decomp::rigid_body_deformation;
pub use mesh_polar_decomp::rotation_error;
pub use mesh_polar_decomp::stretch_ratio;
pub use mesh_polar_decomp::DeformationGradient;
pub use mesh_polar_decomp::PolarDecomp;
pub use mesh_geodesic::build_edge_graph;
pub use mesh_geodesic::default_geodesic_config;
pub use mesh_geodesic::farthest_point;
pub use mesh_geodesic::geodesic_diameter;
pub use mesh_geodesic::geodesic_distances;
pub use mesh_geodesic::geodesic_distances_multi;
pub use mesh_geodesic::geodesic_heat;
pub use mesh_geodesic::geodesic_path;
pub use mesh_geodesic::geodesic_vertex_count;
pub use mesh_geodesic::geodesic_voronoi as mesh_geodesic_voronoi;
pub use mesh_geodesic::level_set_isolines;
pub use mesh_geodesic::normalize_geodesic;
pub use mesh_geodesic::EdgeGraph;
pub use mesh_geodesic::GeodesicConfig;
pub use mesh_geodesic::GeodesicResult as MeshGeodesicResult;
pub use mesh_geodesic::VoronoiLabels;
pub use mesh_mean_curvature::compute_gaussian_curvature as mc_gaussian_curvature;
pub use mesh_mean_curvature::compute_mean_curvature as mc_mean_curvature;
pub use mesh_mean_curvature::cotangent_weight as mean_curv_cotangent_weight;
pub use mesh_mean_curvature::curvature_color_map;
pub use mesh_mean_curvature::curvature_max;
pub use mesh_mean_curvature::curvature_mean_value;
pub use mesh_mean_curvature::curvature_min;
pub use mesh_mean_curvature::default_curvature_config;
pub use mesh_mean_curvature::laplacian_smooth_positions;
pub use mesh_mean_curvature::mean_curvature_vector;
pub use mesh_mean_curvature::principal_curvatures;
pub use mesh_mean_curvature::vertex_area_mixed;
pub use mesh_mean_curvature::CurvatureColor;
pub use mesh_mean_curvature::CurvatureConfig;
pub use mesh_mean_curvature::CurvaturePair;
pub use mesh_mean_curvature::CurvatureResult;
pub use mesh_convex_hull::compute_convex_hull;
pub use mesh_convex_hull::convex_hull_surface_area;
pub use mesh_convex_hull::convex_hull_volume;
pub use mesh_convex_hull::default_hull_config;
pub use mesh_convex_hull::hull_bounding_box;
pub use mesh_convex_hull::hull_centroid;
pub use mesh_convex_hull::hull_edge_count;
pub use mesh_convex_hull::hull_face_count;
pub use mesh_convex_hull::hull_vertex_count;
pub use mesh_convex_hull::is_point_inside_hull;
pub use mesh_convex_hull::project_to_hull_surface;
pub use mesh_convex_hull::support_point;
pub use mesh_convex_hull::ConvexHullResult;
pub use mesh_convex_hull::HullConfig;
pub use mesh_decimate::collapse_edge as mesh_collapse_edge;
pub use mesh_decimate::compute_quadric;
pub use mesh_decimate::count_boundary_edges as mesh_count_boundary_edges;
pub use mesh_decimate::decimate_mesh;
pub use mesh_decimate::decimate_step;
pub use mesh_decimate::decimate_to_target_faces;
pub use mesh_decimate::decimation_ratio;
pub use mesh_decimate::default_decimate_config;
pub use mesh_decimate::edge_collapse_cost as mesh_edge_collapse_cost;
pub use mesh_decimate::find_cheapest_edge;
pub use mesh_decimate::mesh_complexity_score;
pub use mesh_decimate::validate_decimated_mesh;
pub use mesh_decimate::DecimateConfig;
pub use mesh_decimate::DecimateResult as MeshDecimateResult;
pub use mesh_catmull_clark::compute_edge_points;
pub use mesh_catmull_clark::compute_face_points;
pub use mesh_catmull_clark::compute_vertex_points;
pub use mesh_catmull_clark::default_subdiv_config;
pub use mesh_catmull_clark::is_quad_mesh;
pub use mesh_catmull_clark::smooth_boundary_vertices;
pub use mesh_catmull_clark::subdivide_catmull_clark;
pub use mesh_catmull_clark::subdivide_n_levels;
pub use mesh_catmull_clark::subdivision_face_count_estimate;
pub use mesh_catmull_clark::subdivision_level;
pub use mesh_catmull_clark::subdivision_vertex_count_estimate;
pub use mesh_catmull_clark::triangulate_quads;
pub use mesh_catmull_clark::SubdivConfig;
pub use mesh_catmull_clark::SubdivResult;
pub use mesh_remesh::adaptive_target_length;
pub use mesh_remesh::collapse_short_edges as mesh_remesh_collapse_short_edges;
pub use mesh_remesh::compute_target_edge_length as mesh_remesh_target_edge_length;
pub use mesh_remesh::count_irregular_vertices;
pub use mesh_remesh::default_remesh_config;
pub use mesh_remesh::edge_lengths_stats;
pub use mesh_remesh::equalize_valence;
pub use mesh_remesh::isotropic_remesh as mesh_isotropic_remesh;
pub use mesh_remesh::remesh_iterations;
pub use mesh_remesh::remesh_quality_score;
pub use mesh_remesh::split_long_edges as mesh_remesh_split_long_edges;
pub use mesh_remesh::tangential_smooth;
pub use mesh_remesh::RemeshConfig;
pub use mesh_remesh::RemeshResult as MeshRemeshResult;
pub use mesh_remesh::RemeshStats;
pub use mesh_bezier_patch::default_patch_config;
pub use mesh_bezier_patch::evaluate_patch;
pub use mesh_bezier_patch::new_bezier_patch;
pub use mesh_bezier_patch::patch_bounding_box;
pub use mesh_bezier_patch::patch_midpoint;
pub use mesh_bezier_patch::patch_normal;
pub use mesh_bezier_patch::patch_tangent_u;
pub use mesh_bezier_patch::patch_tangent_v;
pub use mesh_bezier_patch::patch_triangle_count;
pub use mesh_bezier_patch::patch_vertex_count;
pub use mesh_bezier_patch::subdivide_patch;
pub use mesh_bezier_patch::tessellate_patch;
pub use mesh_bezier_patch::BezierPatch;
pub use mesh_bezier_patch::PatchConfig;
pub use mesh_bezier_patch::PatchSample;
pub use mesh_bezier_patch::PatchTessellation;
pub use mesh_bezier_patch::SubPatches;
pub use mesh_octree::build_octree;
pub use mesh_octree::default_octree_config;
pub use mesh_octree::octree_bounds;
pub use mesh_octree::octree_depth;
pub use mesh_octree::octree_leaf_count;
pub use mesh_octree::octree_node_count;
pub use mesh_octree::octree_stats;
pub use mesh_octree::query_aabb;
pub use mesh_octree::query_nearest_point;
pub use mesh_octree::query_sphere;
pub use mesh_octree::ray_intersect_octree;
pub use mesh_octree::refit_octree;
pub use mesh_octree::AabbBounds;
pub use mesh_octree::OctreeConfig;
pub use mesh_octree::OctreeNode;
pub use mesh_octree::OctreeQuery;
pub use mesh_octree::OctreeStats;
pub use mesh_octree::RayHit as OctreeRayHit;
pub use mesh_apex_vertex::apex_angle;
pub use mesh_apex_vertex::apex_count;
pub use mesh_apex_vertex::apex_frequency;
pub use mesh_apex_vertex::apex_result_to_json;
pub use mesh_apex_vertex::dist_sq;
pub use mesh_apex_vertex::find_apex_vertices;
pub use mesh_apex_vertex::is_apex_vertex;
pub use mesh_apex_vertex::triangle_apex;
pub use mesh_apex_vertex::vertex_angle;
pub use mesh_apex_vertex::ApexResult;
pub use mesh_border_edge::border_analysis;
pub use mesh_border_edge::border_edge_count as border_edge_count_be;
pub use mesh_border_edge::border_result_to_json;
pub use mesh_border_edge::border_total_length;
pub use mesh_border_edge::border_vertex_count;
pub use mesh_border_edge::build_edge_count_map;
pub use mesh_border_edge::detect_border_edges;
pub use mesh_border_edge::is_border_vertex;
pub use mesh_border_edge::BorderResult;
pub use mesh_border_edge::DirectedEdge;
pub use mesh_centroid_decompose::all_face_centroids;
pub use mesh_centroid_decompose::centroid_decompose;
pub use mesh_centroid_decompose::decomp_region_count;
pub use mesh_centroid_decompose::decomp_result_to_json;
pub use mesh_centroid_decompose::decomp_total_faces;
pub use mesh_centroid_decompose::default_centroid_decomp_config;
pub use mesh_centroid_decompose::face_centroid as decomp_face_centroid;
pub use mesh_centroid_decompose::CentroidDecompConfig;
pub use mesh_centroid_decompose::CentroidDecompResult;
pub use mesh_centroid_decompose::DecompRegion;
pub use mesh_collapse_edge::collapse_n_edges;
pub use mesh_collapse_edge::collapse_result_to_json_v2;
pub use mesh_collapse_edge::collapse_single_edge;
pub use mesh_collapse_edge::edge_length_v2;
pub use mesh_collapse_edge::edge_midpoint_v2;
pub use mesh_collapse_edge::find_shortest_edge;
pub use mesh_collapse_edge::unique_edge_count;
pub use mesh_collapse_edge::CollapseEdgeV2;
pub use mesh_collapse_edge::CollapseResultV2;
pub use mesh_cusp_detect::angle_between;
pub use mesh_cusp_detect::compute_face_normals as cusp_compute_face_normals;
pub use mesh_cusp_detect::cusp_count;
pub use mesh_cusp_detect::cusp_result_to_json;
pub use mesh_cusp_detect::default_cusp_threshold;
pub use mesh_cusp_detect::detect_cusps;
pub use mesh_cusp_detect::face_normal_raw;
pub use mesh_cusp_detect::is_cusp;
pub use mesh_cusp_detect::normalize3 as cusp_normalize3;
pub use mesh_cusp_detect::CuspDetectResult;
pub use mesh_cusp_detect::CuspVertex;
pub use mesh_dihedral_angle::compute_dihedral_angles;
pub use mesh_dihedral_angle::dihedral_angle_from_normals;
pub use mesh_dihedral_angle::dihedral_edge_count;
pub use mesh_dihedral_angle::dihedral_result_to_json;
pub use mesh_dihedral_angle::face_normal as dihedral_face_normal;
pub use mesh_dihedral_angle::sharp_edges_by_angle as dihedral_sharp_edges;
pub use mesh_dihedral_angle::DihedralEdge;
pub use mesh_dihedral_angle::DihedralResult;
pub use mesh_disk_map::default_disk_map_config;
pub use mesh_disk_map::disk_map;
pub use mesh_disk_map::disk_map_to_json;
pub use mesh_disk_map::disk_map_vertex_count;
pub use mesh_disk_map::is_in_unit_disk;
pub use mesh_disk_map::map_boundary_to_circle;
pub use mesh_disk_map::uv_triangle_area as disk_uv_triangle_area;
pub use mesh_disk_map::DiskMapConfig;
pub use mesh_disk_map::DiskMapResult;
pub use mesh_edge_hash::boundary_edges as hash_boundary_edges;
pub use mesh_edge_hash::build_edge_hash_map;
pub use mesh_edge_hash::edge_count as edge_hash_count;
pub use mesh_edge_hash::edge_exists;
pub use mesh_edge_hash::edge_hash_to_json;
pub use mesh_edge_hash::faces_for_edge;
pub use mesh_edge_hash::make_edge_key;
pub use mesh_edge_hash::non_manifold_edges;
pub use mesh_edge_hash::unique_vertices;
pub use mesh_edge_hash::EdgeHashMap;
pub use mesh_edge_hash::EdgeKey as HashEdgeKey;
pub use mesh_face_centroid::centroid_bounds as fc_centroid_bounds;
pub use mesh_face_centroid::centroid_distance;
pub use mesh_face_centroid::compute_all_face_centroids;
pub use mesh_face_centroid::face_centroid_count;
pub use mesh_face_centroid::face_centroid_to_json;
pub use mesh_face_centroid::get_face_centroid;
pub use mesh_face_centroid::mean_centroid;
pub use mesh_face_centroid::nearest_face_centroid;
pub use mesh_face_centroid::triangle_centroid;
pub use mesh_face_centroid::FaceCentroidData;
pub use mesh_edge_valence::avg_valence as valence_avg;
pub use mesh_edge_valence::boundary_edge_count as valence_boundary_edge_count;
pub use mesh_edge_valence::compute_edge_valences;
pub use mesh_edge_valence::edge_valence;
pub use mesh_edge_valence::edge_valence_to_json;
pub use mesh_edge_valence::manifold_edge_count;
pub use mesh_edge_valence::max_valence as valence_max;
pub use mesh_edge_valence::non_manifold_edge_count;
pub use mesh_edge_valence::total_edge_count;
pub use mesh_edge_valence::EdgeValenceResult;
pub use mesh_face_ring::all_face_rings;
pub use mesh_face_ring::avg_ring_size;
pub use mesh_face_ring::face_ring_for_vertex;
pub use mesh_face_ring::face_ring_to_json;
pub use mesh_face_ring::max_ring_size;
pub use mesh_face_ring::ring_contains_face;
pub use mesh_face_ring::ring_face_count;
pub use mesh_face_ring::vertices_with_ring_size;
pub use mesh_face_ring::FaceRing;
pub use mesh_fan_mesh::fan_area;
pub use mesh_fan_mesh::fan_from_boundary;
pub use mesh_fan_mesh::fan_mesh_to_json;
pub use mesh_fan_mesh::fan_triangle_count;
pub use mesh_fan_mesh::fan_vertex_count;
pub use mesh_fan_mesh::generate_fan;
pub use mesh_fan_mesh::FanMesh;
pub use mesh_geodesic_voronoi::build_adjacency as voronoi_build_adjacency;
pub use mesh_geodesic_voronoi::compute_geodesic_voronoi;
pub use mesh_geodesic_voronoi::largest_cell_size;
pub use mesh_geodesic_voronoi::vertex_label;
pub use mesh_geodesic_voronoi::voronoi_cell_count;
pub use mesh_geodesic_voronoi::voronoi_result_to_json;
pub use mesh_geodesic_voronoi::GeoVoronoiCell;
pub use mesh_geodesic_voronoi::GeoVoronoiResult;
pub use mesh_hex_mesh::generate_hex_mesh;
pub use mesh_hex_mesh::hex_cell_count;
pub use mesh_hex_mesh::hex_diagonal_factor;
pub use mesh_hex_mesh::hex_mesh_area;
pub use mesh_hex_mesh::hex_mesh_to_json;
pub use mesh_hex_mesh::hex_triangle_count;
pub use mesh_hex_mesh::hex_vertex_count;
pub use mesh_hex_mesh::HexMesh;
pub use mesh_index_remap::apply_remap;
pub use mesh_index_remap::compact_remap;
pub use mesh_index_remap::indices_in_bounds;
pub use mesh_index_remap::max_index;
pub use mesh_index_remap::remap_result_to_json;
pub use mesh_index_remap::reverse_winding as remap_reverse_winding;
pub use mesh_index_remap::unused_index_count;
pub use mesh_index_remap::used_index_count;
pub use mesh_index_remap::RemapResult;
pub use mesh_vertex_degree::avg_degree;
pub use mesh_vertex_degree::compute_vertex_degrees;
pub use mesh_vertex_degree::degree_result_to_json;
pub use mesh_vertex_degree::irregular_vertex_count as degree_irregular_count;
pub use mesh_vertex_degree::max_degree;
pub use mesh_vertex_degree::min_nonzero_degree;
pub use mesh_vertex_degree::vertex_degree;
pub use mesh_vertex_degree::vertices_with_degree;
pub use mesh_vertex_degree::VertexDegreeResult;
pub use mesh_angle_bisector::angle_bisector;
pub use mesh_angle_bisector::bisector_count;
pub use mesh_angle_bisector::bisector_result_to_json;
pub use mesh_angle_bisector::compute_bisectors;
pub use mesh_angle_bisector::dot3 as bisector_dot3;
pub use mesh_angle_bisector::is_valid_bisector;
pub use mesh_angle_bisector::normalize3 as bisector_normalize3;
pub use mesh_angle_bisector::vec_length;
pub use mesh_angle_bisector::vertex_angle as bisector_vertex_angle;
pub use mesh_angle_bisector::AngleBisectorResult;
pub use mesh_aspect_ratio::aspect_ratio_to_json;
pub use mesh_aspect_ratio::compute_aspect_ratios;
pub use mesh_aspect_ratio::count_poor_triangles;
pub use mesh_aspect_ratio::edge_length as aspect_edge_length;
pub use mesh_aspect_ratio::min_aspect_ratio;
pub use mesh_aspect_ratio::ratio_at;
pub use mesh_aspect_ratio::triangle_area as aspect_triangle_area;
pub use mesh_aspect_ratio::triangle_aspect_ratio;
pub use mesh_aspect_ratio::AspectRatioResult;
pub use mesh_bary_coord::bary_distance_to_center;
pub use mesh_bary_coord::bary_interpolate;
pub use mesh_bary_coord::bary_interpolate3;
pub use mesh_bary_coord::bary_to_json;
pub use mesh_bary_coord::clamp_bary;
pub use mesh_bary_coord::compute_bary;
pub use mesh_bary_coord::dot3 as bary_dot3;
pub use mesh_bary_coord::is_inside_triangle;
pub use mesh_bary_coord::BaryCoord;
pub use mesh_bbox_tree::bbox_overlap;
pub use mesh_bbox_tree::bbox_tree_to_json;
pub use mesh_bbox_tree::bbox_volume;
pub use mesh_bbox_tree::build_bbox_tree;
pub use mesh_bbox_tree::merge_bbox;
pub use mesh_bbox_tree::node_count as bbox_node_count;
pub use mesh_bbox_tree::point_in_bbox;
pub use mesh_bbox_tree::triangle_bbox;
pub use mesh_bbox_tree::BboxNode;
pub use mesh_bbox_tree::BboxTree;
pub use mesh_bilinear_patch::evaluate_patch as evaluate_bilinear_patch;
pub use mesh_bilinear_patch::new_bilinear_patch;
pub use mesh_bilinear_patch::patch_area_approx;
pub use mesh_bilinear_patch::patch_center as bilinear_patch_center;
pub use mesh_bilinear_patch::patch_du;
pub use mesh_bilinear_patch::patch_dv;
pub use mesh_bilinear_patch::patch_to_json as bilinear_patch_to_json;
pub use mesh_bilinear_patch::tessellate_patch as tessellate_bilinear;
pub use mesh_bilinear_patch::BilinearPatch;
pub use mesh_boundary_vertex::boundary_count;
pub use mesh_boundary_vertex::boundary_fraction;
pub use mesh_boundary_vertex::boundary_vertex_to_json;
pub use mesh_boundary_vertex::build_edge_map as boundary_build_edge_map;
pub use mesh_boundary_vertex::detect_boundary_vertices;
pub use mesh_boundary_vertex::find_boundary_edges as boundary_find_edges;
pub use mesh_boundary_vertex::is_boundary_vertex;
pub use mesh_boundary_vertex::BoundaryVertexResult;
pub use mesh_catmull_clark_weight::boundary_edge_weight;
pub use mesh_catmull_clark_weight::centroid as cc_centroid;
pub use mesh_catmull_clark_weight::face_point_weight;
pub use mesh_catmull_clark_weight::is_regular_valence;
pub use mesh_catmull_clark_weight::lerp3 as cc_lerp3;
pub use mesh_catmull_clark_weight::loop_beta;
pub use mesh_catmull_clark_weight::smoothing_factor;
pub use mesh_catmull_clark_weight::vertex_weight as cc_vertex_weight;
pub use mesh_catmull_clark_weight::warren_weight;
pub use mesh_catmull_clark_weight::weights_to_json as cc_weights_to_json;
pub use mesh_circumcenter::avg_circumradius;
pub use mesh_circumcenter::circumcenter_to_json;
pub use mesh_circumcenter::compute_circumcenters;
pub use mesh_circumcenter::is_acute_triangle;
pub use mesh_circumcenter::max_circumradius;
pub use mesh_circumcenter::triangle_circumcenter;
pub use mesh_circumcenter::Circumcenter;
pub use mesh_color_attr::apply_gamma;
pub use mesh_color_attr::average_color;
pub use mesh_color_attr::clamp_colors;
pub use mesh_color_attr::color_attr_to_json;
pub use mesh_color_attr::color_vertex_count;
pub use mesh_color_attr::get_color as attr_get_color;
pub use mesh_color_attr::lerp_color as attr_lerp_color;
pub use mesh_color_attr::new_color_attr;
pub use mesh_color_attr::set_color as attr_set_color;
pub use mesh_color_attr::ColorAttr;
pub use mesh_conformal_map::average_distortion;
pub use mesh_conformal_map::conformal_energy;
pub use mesh_conformal_map::conformal_map_to_json;
pub use mesh_conformal_map::cotangent_weight as conformal_cotangent_weight;
pub use mesh_conformal_map::is_in_unit_square;
pub use mesh_conformal_map::map_boundary_to_circle as conformal_map_boundary;
pub use mesh_conformal_map::normalize_uvs as conformal_normalize_uvs;
pub use mesh_conformal_map::ConformalMapResult;
pub use mesh_convex_face::analyze_triangle_convexity;
pub use mesh_convex_face::convex_count;
pub use mesh_convex_face::convex_face_to_json;
pub use mesh_convex_face::cross3 as convex_cross3;
pub use mesh_convex_face::dot3 as convex_dot3;
pub use mesh_convex_face::face_area as convex_face_area;
pub use mesh_convex_face::face_normal as convex_face_normal;
pub use mesh_convex_face::is_quad_convex;
pub use mesh_convex_face::is_triangle_convex;
pub use mesh_convex_face::ConvexFaceResult;
pub use mesh_curvature_discrete::avg_curvature as discrete_avg_curvature;
pub use mesh_curvature_discrete::compute_discrete_curvature;
pub use mesh_curvature_discrete::curvature_to_json as discrete_curvature_to_json;
pub use mesh_curvature_discrete::gaussian_curvature as discrete_gaussian_curvature;
pub use mesh_curvature_discrete::max_abs_curvature;
pub use mesh_curvature_discrete::mean_curvature_simple;
pub use mesh_curvature_discrete::vertex_angle as discrete_vertex_angle;
pub use mesh_curvature_discrete::DiscreteCurvature;
pub use mesh_dart_graph::boundary_dart_count;
pub use mesh_dart_graph::build_dart_graph;
pub use mesh_dart_graph::dart_count;
pub use mesh_dart_graph::dart_graph_to_json;
pub use mesh_dart_graph::face_count as dart_face_count;
pub use mesh_dart_graph::get_dart;
pub use mesh_dart_graph::has_twin;
pub use mesh_dart_graph::Dart;
pub use mesh_dart_graph::DartGraph;
pub use mesh_edge_bisect::bisect_all_edges;
pub use mesh_edge_bisect::bisect_to_json;
pub use mesh_edge_bisect::bisect_triangle_count;
pub use mesh_edge_bisect::bisect_vertex_count;
pub use mesh_edge_bisect::midpoint as bisect_midpoint;
pub use mesh_edge_bisect::new_vertex_count as bisect_new_vertex_count;
pub use mesh_edge_bisect::EdgeBisectResult;
pub use mesh_edge_contract::contract_edge;
pub use mesh_edge_contract::contract_n_edges;
pub use mesh_edge_contract::contract_to_json;
pub use mesh_edge_contract::edge_length as contract_edge_length;
pub use mesh_edge_contract::find_shortest_edge as contract_find_shortest;
pub use mesh_edge_contract::triangle_count as contract_triangle_count;
pub use mesh_edge_contract::EdgeContractResult;
pub use mesh_face_dual::avg_dual_edge_length as face_dual_avg_edge_length;
pub use mesh_face_dual::build_face_dual;
pub use mesh_face_dual::dual_degree;
pub use mesh_face_dual::dual_edge_count as face_dual_edge_count;
pub use mesh_face_dual::dual_vertex_count as face_dual_vertex_count;
pub use mesh_face_dual::face_dual_to_json;
pub use mesh_face_dual::triangle_centroid as dual_triangle_centroid;
pub use mesh_face_dual::FaceDual;
pub use mesh_area_gradient::area_gradient_to_json;
pub use mesh_area_gradient::avg_face_area;
pub use mesh_area_gradient::compute_area_gradients;
pub use mesh_area_gradient::cross3 as area_grad_cross3;
pub use mesh_area_gradient::get_gradient;
pub use mesh_area_gradient::gradient_face_count;
pub use mesh_area_gradient::max_face_area;
pub use mesh_area_gradient::min_face_area;
pub use mesh_area_gradient::safe_normalize as area_grad_safe_normalize;
pub use mesh_area_gradient::total_area as area_grad_total_area;
pub use mesh_area_gradient::triangle_area as area_grad_triangle_area;
pub use mesh_area_gradient::AreaGradientResult;
pub use mesh_bend_deform::apply_bend_deform;
pub use mesh_bend_deform::bend_deform_to_json;
pub use mesh_bend_deform::bend_param;
pub use mesh_bend_deform::bend_vertex as bend_deform_vertex;
pub use mesh_bend_deform::bend_vertex_count;
pub use mesh_bend_deform::bend_within_tolerance;
pub use mesh_bend_deform::default_bend_config;
pub use mesh_bend_deform::deg_to_rad as bend_deg_to_rad;
pub use mesh_bend_deform::rad_to_deg as bend_rad_to_deg;
pub use mesh_bend_deform::BendDeformConfig;
pub use mesh_bend_deform::BendDeformResult;
pub use mesh_cell_partition::avg_occupancy;
pub use mesh_cell_partition::build_cell_partition;
pub use mesh_cell_partition::cell_partition_to_json;
pub use mesh_cell_partition::max_cell_occupancy;
pub use mesh_cell_partition::occupied_cells;
pub use mesh_cell_partition::position_to_cell;
pub use mesh_cell_partition::total_cells;
pub use mesh_cell_partition::vertices_in_cell;
pub use mesh_cell_partition::CellPartition;
pub use mesh_circular_edge::circular_edge_to_json;
pub use mesh_circular_edge::circumference;
pub use mesh_circular_edge::detect_circular_edges;
pub use mesh_circular_edge::largest_loop as largest_circular_loop;
pub use mesh_circular_edge::loop_count as circular_loop_count;
pub use mesh_circular_edge::make_edge as make_circular_edge;
pub use mesh_circular_edge::open_chain_count;
pub use mesh_circular_edge::CircularEdgeResult;
pub use mesh_circular_edge::Edge as CircularEdge;
pub use mesh_coplanar_face::are_coplanar;
pub use mesh_coplanar_face::detect_coplanar_faces;
pub use mesh_coplanar_face::dot3 as coplanar_dot3;
pub use mesh_coplanar_face::face_normal_raw as coplanar_face_normal_raw;
pub use mesh_coplanar_face::group_count as coplanar_group_count;
pub use mesh_coplanar_face::largest_group as coplanar_largest_group;
pub use mesh_coplanar_face::normalize3 as coplanar_normalize3;
pub use mesh_coplanar_face::total_grouped_faces;
pub use mesh_coplanar_face::CoplanarGroup;
pub use mesh_coplanar_face::CoplanarResult;
pub use mesh_corner_angle::angle_face_count;
pub use mesh_corner_angle::avg_min_angle;
pub use mesh_corner_angle::compute_corner_angles;
pub use mesh_corner_angle::corner_angle;
pub use mesh_corner_angle::corner_angle_to_json;
pub use mesh_corner_angle::max_corner_angle;
pub use mesh_corner_angle::min_corner_angle;
pub use mesh_corner_angle::triangle_angles;
pub use mesh_corner_angle::validate_angle_sums;
pub use mesh_corner_angle::CornerAngleResult;
pub use mesh_decimate_error::add_quadrics;
pub use mesh_decimate_error::compute_edge_errors;
pub use mesh_decimate_error::error_edge_count;
pub use mesh_decimate_error::evaluate_quadric;
pub use mesh_decimate_error::max_error;
pub use mesh_decimate_error::min_error;
pub use mesh_decimate_error::quadric_from_plane;
pub use mesh_decimate_error::zero_quadric;
pub use mesh_decimate_error::DecimateErrorResult;
pub use mesh_decimate_error::QuadricError;
pub use mesh_directed_edge::boundary_edge_count as directed_boundary_edge_count;
pub use mesh_directed_edge::build_directed_edges;
pub use mesh_directed_edge::directed_edge_count;
pub use mesh_directed_edge::edges_for_face;
pub use mesh_directed_edge::find_twin;
pub use mesh_directed_edge::half_pi_ref;
pub use mesh_directed_edge::has_twin as directed_has_twin;
pub use mesh_directed_edge::interior_edge_count;
pub use mesh_directed_edge::DirectedEdge as DirectedEdgeDEM;
pub use mesh_directed_edge::DirectedEdgeMesh;
pub use mesh_edge_flow::compute_edge_flow;
pub use mesh_edge_flow::flow_curl;
pub use mesh_edge_flow::flow_direction;
pub use mesh_edge_flow::flow_divergence;
pub use mesh_edge_flow::flow_magnitude_ef;
pub use mesh_edge_flow::flow_to_json;
pub use mesh_edge_flow::flow_vertex_field;
pub use mesh_edge_flow::smooth_edge_flow;
pub use mesh_edge_flow::EdgeFlow;
pub use mesh_edge_loop_select::clear_loop_selection;
pub use mesh_edge_loop_select::grow_loop_selection;
pub use mesh_edge_loop_select::loop_edge_count;
pub use mesh_edge_loop_select::loop_is_closed_els;
pub use mesh_edge_loop_select::loop_to_json;
pub use mesh_edge_loop_select::loop_vertices_els;
pub use mesh_edge_loop_select::select_edge_loop;
pub use mesh_edge_loop_select::shrink_loop_selection;
pub use mesh_edge_loop_select::EdgeLoopSelect;
pub use mesh_face_flip::consistent_winding;
pub use mesh_face_flip::detect_flipped;
pub use mesh_face_flip::flip_all_faces_ff;
pub use mesh_face_flip::flip_count;
pub use mesh_face_flip::flip_face_ff;
pub use mesh_face_flip::flip_normals_with_faces;
pub use mesh_face_flip::flip_selected_faces;
pub use mesh_face_flip::FaceFlip;
pub use mesh_face_pair::detect_face_pairs;
pub use mesh_face_pair::edge_key as face_pair_edge_key;
pub use mesh_face_pair::face_pair_count;
pub use mesh_face_pair::face_pair_to_json;
pub use mesh_face_pair::faces_are_paired;
pub use mesh_face_pair::max_paired_face;
pub use mesh_face_pair::pairing_ratio;
pub use mesh_face_pair::FacePair;
pub use mesh_face_pair::FacePairResult;
pub use mesh_grid_deform::apply_grid_deform;
pub use mesh_grid_deform::control_point_count;
pub use mesh_grid_deform::deform_vertex as grid_deform_vertex;
pub use mesh_grid_deform::grid_deform_to_json;
pub use mesh_grid_deform::grid_index;
pub use mesh_grid_deform::new_grid_deform;
pub use mesh_grid_deform::set_grid_delta;
pub use mesh_grid_deform::trilinear;
pub use mesh_grid_deform::GridDeform;
pub use mesh_grid_deform::GridDeformResult;
pub use mesh_half_face::boundary_half_face_count;
pub use mesh_half_face::build_half_face_mesh;
pub use mesh_half_face::half_face_count;
pub use mesh_half_face::half_face_mesh_to_json;
pub use mesh_half_face::half_face_vertices;
pub use mesh_half_face::is_closed_half_face_mesh;
pub use mesh_half_face::paired_half_face_count;
pub use mesh_half_face::HalfFace;
pub use mesh_half_face::HalfFaceMesh;
pub use mesh_incircle::compute_incircles;
pub use mesh_incircle::count_large_incircles;
pub use mesh_incircle::edge_length_ic;
pub use mesh_incircle::get_incircle;
pub use mesh_incircle::incircle_result_to_json;
pub use mesh_incircle::triangle_incircle;
pub use mesh_incircle::Incircle;
pub use mesh_incircle::IncircleResult;
pub use mesh_k_ring::avg_ring_size_all;
pub use mesh_k_ring::build_vertex_adjacency;
pub use mesh_k_ring::k_ring;
pub use mesh_k_ring::k_ring_to_json;
pub use mesh_k_ring::one_ring;
pub use mesh_k_ring::ring_contains;
pub use mesh_k_ring::ring_size;
pub use mesh_k_ring::KRingResult;
pub use mesh_arc_length::circle_polyline;
pub use mesh_arc_length::compute_arc_length;
pub use mesh_arc_length::sample_at_arc_length;
pub use mesh_arc_length::sample_at_t;
pub use mesh_arc_length::sample_count as arc_sample_count;
pub use mesh_arc_length::segment_lengths;
pub use mesh_arc_length::total_length as arc_total_length;
pub use mesh_arc_length::uniform_resample;
pub use mesh_arc_length::ArcLengthResult;
pub use mesh_arc_length::ArcSample;
pub use mesh_bvh_leaf::avg_leaf_surface_area;
pub use mesh_bvh_leaf::build_leaf_aabbs;
pub use mesh_bvh_leaf::leaf_centroid;
pub use mesh_bvh_leaf::leaf_count;
pub use mesh_bvh_leaf::leaf_surface_area;
pub use mesh_bvh_leaf::leaf_volume;
pub use mesh_bvh_leaf::query_leaves_aabb;
pub use mesh_bvh_leaf::LeafAabb;
pub use mesh_bvh_leaf::LeafQueryResult;
pub use mesh_cage_wrap::cage_wrap;
pub use mesh_cage_wrap::cage_wrap_to_json;
pub use mesh_cage_wrap::default_cage_wrap_config;
pub use mesh_cage_wrap::wrapped_centroid;
pub use mesh_cage_wrap::wrapped_vertex_count;
pub use mesh_cage_wrap::CageWrapConfig;
pub use mesh_cage_wrap::CageWrapResult;
pub use mesh_catenary::catenary_arc_length;
pub use mesh_catenary::catenary_sag;
pub use mesh_catenary::catenary_tube_vertex_count;
pub use mesh_catenary::catenary_y;
pub use mesh_catenary::default_catenary_params;
pub use mesh_catenary::euler_number;
pub use mesh_catenary::lowest_point;
pub use mesh_catenary::point_count as catenary_point_count;
pub use mesh_catenary::sample_catenary;
pub use mesh_catenary::to_positions as catenary_to_positions;
pub use mesh_catenary::CatenaryParams;
pub use mesh_catenary::CatenaryPoint;
pub use mesh_collapse_group::apply_collapse_groups;
pub use mesh_collapse_group::build_collapse_groups;
pub use mesh_collapse_group::collapse_group_to_json;
pub use mesh_collapse_group::group_count as collapse_group_count;
pub use mesh_collapse_group::max_group_size;
pub use mesh_collapse_group::total_collapsed;
pub use mesh_collapse_group::CollapseGroup;
pub use mesh_collapse_group::CollapseGroupResult;
pub use mesh_cotan_laplace::build_cotan_laplacian;
pub use mesh_cotan_laplace::cotan_smooth_step;
pub use mesh_cotan_laplace::cotan_weight;
pub use mesh_cotan_laplace::entry_count as cotan_entry_count;
pub use mesh_cotan_laplace::total_weight as cotan_total_weight;
pub use mesh_cotan_laplace::CotanEntry;
pub use mesh_cotan_laplace::CotanLaplacian;
pub use mesh_curve_sample::chord_length;
pub use mesh_curve_sample::circle_curve;
pub use mesh_curve_sample::extract_positions as curve_extract_positions;
pub use mesh_curve_sample::extract_tangents;
pub use mesh_curve_sample::line_curve;
pub use mesh_curve_sample::resample_at;
pub use mesh_curve_sample::sample_count as curve_sample_count;
pub use mesh_curve_sample::sample_uniform;
pub use mesh_curve_sample::CurveEvalFn;
pub use mesh_curve_sample::CurveSample;
pub use mesh_cylinder_cap::cap_to_json;
pub use mesh_cylinder_cap::cap_triangle_count;
pub use mesh_cylinder_cap::cap_vertex_count;
pub use mesh_cylinder_cap::dome_cap;
pub use mesh_cylinder_cap::flat_cap;
pub use mesh_cylinder_cap::is_flat_cap;
pub use mesh_cylinder_cap::CapType;
pub use mesh_cylinder_cap::CylinderCap;
pub use mesh_deform_axis::default_axis_deform_config;
pub use mesh_deform_axis::deform_vertex_count;
pub use mesh_deform_axis::stretch_deform;
pub use mesh_deform_axis::taper_deform;
pub use mesh_deform_axis::twist_deform;
pub use mesh_deform_axis::AxisDeformConfig;
pub use mesh_deform_axis::DeformAxis;
pub use mesh_dual_contour::dc_vertex_count;
pub use mesh_dual_contour::dual_contour;
pub use mesh_dual_contour::qef_add_plane;
pub use mesh_dual_contour::qef_error;
pub use mesh_dual_contour::qef_plane_count;
pub use mesh_dual_contour::qef_solve;
pub use mesh_dual_contour::DualContourResult;
pub use mesh_dual_contour::QefAccumulator;
pub use mesh_edge_collapse_v2::collapse_edge_v2;
pub use mesh_edge_collapse_v2::collect_edges as ecv2_collect_edges;
pub use mesh_edge_collapse_v2::ec_v2_face_count;
pub use mesh_edge_collapse_v2::ec_v2_vertex_count;
pub use mesh_edge_collapse_v2::edge_length_v2 as ecv2_edge_length;
pub use mesh_edge_collapse_v2::edge_midpoint_v2 as ecv2_edge_midpoint;
pub use mesh_edge_collapse_v2::find_cheapest_edge_v2;
pub use mesh_edge_collapse_v2::CollapseOpV2;
pub use mesh_edge_collapse_v2::EdgeCollapseV2Result;
pub use mesh_edge_collapse_v2::EdgeV2;
pub use mesh_face_centroid_v2::area_weighted_centroid_v2;
pub use mesh_face_centroid_v2::compute_face_centroids_v2;
pub use mesh_face_centroid_v2::face_count_v2;
pub use mesh_face_centroid_v2::max_area_face_v2;
pub use mesh_face_centroid_v2::nearest_centroid_v2;
pub use mesh_face_centroid_v2::total_area_v2;
pub use mesh_face_centroid_v2::FaceCentroidSetV2;
pub use mesh_face_centroid_v2::FaceCentroidV2;
pub use mesh_face_label::distinct_label_count;
pub use mesh_face_label::face_labels_to_json;
pub use mesh_face_label::faces_with_label;
pub use mesh_face_label::flood_fill_face_label;
pub use mesh_face_label::get_face_label;
pub use mesh_face_label::largest_label_group;
pub use mesh_face_label::new_face_labels;
pub use mesh_face_label::set_face_label;
pub use mesh_face_label::FaceLabelSet;
pub use mesh_face_material::add_slot as face_mat_add_slot;
pub use mesh_face_material::assign_face_material;
pub use mesh_face_material::distinct_material_count;
pub use mesh_face_material::face_material_to_json;
pub use mesh_face_material::faces_for_material;
pub use mesh_face_material::find_slot_by_id;
pub use mesh_face_material::get_face_material;
pub use mesh_face_material::new_face_material_set;
pub use mesh_face_material::new_material_slot;
pub use mesh_face_material::slot_count as face_mat_slot_count;
pub use mesh_face_material::FaceMaterialSet;
pub use mesh_face_material::MaterialSlot;
pub use mesh_face_strip::build_triangle_strip;
pub use mesh_face_strip::longest_strip;
pub use mesh_face_strip::strip_efficiency;
pub use mesh_face_strip::strip_length;
pub use mesh_face_strip::strip_restart_count;
pub use mesh_face_strip::strip_to_indices;
pub use mesh_face_strip::strip_to_json;
pub use mesh_face_strip::strips_from_mesh;
pub use mesh_face_strip::FaceStrip;
pub use mesh_lofted_surface::circle_profile_at;
pub use mesh_lofted_surface::default_loft_config;
pub use mesh_lofted_surface::interpolate_profiles;
pub use mesh_lofted_surface::loft_bounds;
pub use mesh_lofted_surface::loft_centroid;
pub use mesh_lofted_surface::loft_face_count;
pub use mesh_lofted_surface::loft_surface;
pub use mesh_lofted_surface::loft_to_json;
pub use mesh_lofted_surface::loft_vertex_count;
pub use mesh_lofted_surface::LoftConfig;
pub use mesh_lofted_surface::LoftedSurface;
pub use mesh_manifold_check::boundary_edge_count_mc;
pub use mesh_manifold_check::check_manifold;
pub use mesh_manifold_check::count_boundary_loops;
pub use mesh_manifold_check::is_closed_manifold;
pub use mesh_manifold_check::manifold_report_to_json;
pub use mesh_manifold_check::non_manifold_edge_count as manifold_non_manifold_edge_count;
pub use mesh_manifold_check::ManifoldReport;
pub use mesh_mean_value::dominant_vertex as mean_value_dominant_vertex;
pub use mesh_mean_value::interpolate_scalar as mean_value_interpolate;
pub use mesh_mean_value::max_weight as mean_value_max_weight;
pub use mesh_mean_value::mean_value_coords_2d;
pub use mesh_mean_value::mean_value_to_json;
pub use mesh_mean_value::regular_polygon as mean_value_regular_polygon;
pub use mesh_mean_value::weights_count as mean_value_weights_count;
pub use mesh_mean_value::weights_sum as mean_value_weights_sum;
pub use mesh_mean_value::MeanValueWeights;
pub use mesh_mirror_stitch::mirror_stitch;
pub use mesh_mirror_stitch::stitch_bounds;
pub use mesh_mirror_stitch::stitch_result_face_count;
pub use mesh_mirror_stitch::stitch_result_to_json;
pub use mesh_mirror_stitch::stitch_result_vertex_count;
pub use mesh_mirror_stitch::validate_stitch_result;
pub use mesh_mirror_stitch::MirrorAxis as StitchMirrorAxis;
pub use mesh_mirror_stitch::MirrorStitchResult;
pub use mesh_mls_deform::default_mls_config;
pub use mesh_mls_deform::handles_valid;
pub use mesh_mls_deform::mls_avg_displacement;
pub use mesh_mls_deform::mls_deform;
pub use mesh_mls_deform::mls_displacement_magnitude;
pub use mesh_mls_deform::mls_result_to_json;
pub use mesh_mls_deform::MlsConfig;
pub use mesh_mls_deform::MlsHandle;
pub use mesh_morse_theory::compute_morse_critical_points;
pub use mesh_morse_theory::critical_point_count;
pub use mesh_morse_theory::field_range;
pub use mesh_morse_theory::find_global_maximum;
pub use mesh_morse_theory::find_global_minimum;
pub use mesh_morse_theory::morse_euler_characteristic;
pub use mesh_morse_theory::morse_result_to_json;
pub use mesh_morse_theory::CriticalPoint;
pub use mesh_morse_theory::CriticalPointType;
pub use mesh_morse_theory::MorseResult;
pub use mesh_multi_res::build_multi_res;
pub use mesh_multi_res::coarsest_level;
pub use mesh_multi_res::default_multi_res_config;
pub use mesh_multi_res::finest_level;
pub use mesh_multi_res::get_level;
pub use mesh_multi_res::level_count;
pub use mesh_multi_res::level_face_counts;
pub use mesh_multi_res::midpoint_upsample;
pub use mesh_multi_res::multi_res_to_json;
pub use mesh_multi_res::MeshLevel;
pub use mesh_multi_res::MultiResConfig;
pub use mesh_multi_res::MultiResMesh;
pub use mesh_needle_triangle::avg_aspect_ratio as needle_avg_aspect_ratio;
pub use mesh_needle_triangle::detect_needle_triangles;
pub use mesh_needle_triangle::is_needle_free;
pub use mesh_needle_triangle::max_aspect_ratio as needle_max_aspect_ratio;
pub use mesh_needle_triangle::needle_count;
pub use mesh_needle_triangle::needle_ratio;
pub use mesh_needle_triangle::needle_result_to_json;
pub use mesh_needle_triangle::triangle_aspect_ratio_needle;
pub use mesh_needle_triangle::NeedleDetectResult;
pub use mesh_normal_transfer_v2::default_normal_transfer_v2_config;
pub use mesh_normal_transfer_v2::normals_are_unit as normals_are_unit_v2;
pub use mesh_normal_transfer_v2::transfer_normals_v2;
pub use mesh_normal_transfer_v2::transfer_v2_result_to_json;
pub use mesh_normal_transfer_v2::transfer_v2_success_rate;
pub use mesh_normal_transfer_v2::NormalTransferV2Config;
pub use mesh_normal_transfer_v2::NormalTransferV2Result;
pub use mesh_oct_encode::oct_compression_ratio_f32;
pub use mesh_oct_encode::oct_decode;
pub use mesh_oct_encode::oct_decode_batch;
pub use mesh_oct_encode::oct_decode_u8;
pub use mesh_oct_encode::oct_encode;
pub use mesh_oct_encode::oct_encode_batch;
pub use mesh_oct_encode::oct_encode_decode_error;
pub use mesh_oct_encode::oct_encode_to_json;
pub use mesh_oct_encode::oct_encode_u8;
pub use mesh_orthographic_proj::normalize_projected;
pub use mesh_orthographic_proj::project_orthographic;
pub use mesh_orthographic_proj::project_to_image_space;
pub use mesh_orthographic_proj::projected_area;
pub use mesh_orthographic_proj::projected_centroid;
pub use mesh_orthographic_proj::projected_to_json;
pub use mesh_orthographic_proj::OrthoProjectionAxis;
pub use mesh_orthographic_proj::OrthoProjectionResult;
pub use mesh_param_chart::build_param_charts;
pub use mesh_param_chart::chart_count;
pub use mesh_param_chart::chart_set_to_json;
pub use mesh_param_chart::largest_chart as largest_param_chart;
pub use mesh_param_chart::total_chart_faces;
pub use mesh_param_chart::uv_utilization as param_chart_uv_utilization;
pub use mesh_param_chart::ParamChart;
pub use mesh_param_chart::ParamChartSet;
pub use mesh_patch_blend::all_weights_valid as patch_all_weights_valid;
pub use mesh_patch_blend::blend_patches;
pub use mesh_patch_blend::blend_patches_uniform;
pub use mesh_patch_blend::clamp_blend_weights;
pub use mesh_patch_blend::patch_blend_avg_weight;
pub use mesh_patch_blend::patch_blend_to_json;
pub use mesh_patch_blend::patch_blend_vertex_count;
pub use mesh_patch_blend::patch_distance;
pub use mesh_patch_blend::smooth_weight;
pub use mesh_patch_blend::PatchBlendResult;
pub use mesh_planar_proj::default_planar_proj_config;
pub use mesh_planar_proj::normalize_planar_uvs;
pub use mesh_planar_proj::planar_proj_tilted;
pub use mesh_planar_proj::planar_proj_to_json;
pub use mesh_planar_proj::planar_proj_vertex_count;
pub use mesh_planar_proj::planar_uv_bounds;
pub use mesh_planar_proj::project_planar;
pub use mesh_planar_proj::PlanarProjConfig;
pub use mesh_planar_proj::PlanarProjResult;
pub use mesh_point_sample::default_point_sample_config;
pub use mesh_point_sample::golden_angle_sphere_samples;
pub use mesh_point_sample::poisson_disk_thin;
pub use mesh_point_sample::sample_bary_sum_one;
pub use mesh_point_sample::sample_centroid as point_sample_centroid;
pub use mesh_point_sample::sample_count as point_sample_count;
pub use mesh_point_sample::sample_mesh_surface;
pub use mesh_point_sample::samples_all_normals_unit;
pub use mesh_point_sample::samples_to_json;
pub use mesh_point_sample::PointSampleConfig;
pub use mesh_point_sample::SamplePoint;
pub use mesh_polar_mesh::generate_polar_mesh;
pub use mesh_polar_mesh::polar_bounding_radius;
pub use mesh_polar_mesh::polar_face_count;
pub use mesh_polar_mesh::polar_index_count;
pub use mesh_polar_mesh::polar_is_valid;
pub use mesh_polar_mesh::polar_scale;
pub use mesh_polar_mesh::polar_to_json;
pub use mesh_polar_mesh::polar_vertex_count;
pub use mesh_polar_mesh::PolarMesh;
pub use mesh_profile_extrude::extrude_centroid;
pub use mesh_profile_extrude::extrude_indices_valid;
pub use mesh_profile_extrude::extrude_profile;
pub use mesh_profile_extrude::extrude_side_face_count;
pub use mesh_profile_extrude::extrude_to_json;
pub use mesh_profile_extrude::extrude_vertex_count as profile_extrude_vertex_count;
pub use mesh_profile_extrude::square_profile;
pub use mesh_profile_extrude::ExtrudeProfileResult;
pub use mesh_profile_extrude::Profile2D;
pub use mesh_quad_dominant::build_qd_grid;
pub use mesh_quad_dominant::qd_indices_valid;
pub use mesh_quad_dominant::qd_to_json;
pub use mesh_quad_dominant::quad_count as qd_quad_count;
pub use mesh_quad_dominant::quad_ratio;
pub use mesh_quad_dominant::tri_count;
pub use mesh_quad_dominant::triangulate_quads_qd;
pub use mesh_quad_dominant::QdFace;
pub use mesh_quad_dominant::QuadDominantMesh;
pub use mesh_quad_mesh::build_quad_grid;
pub use mesh_quad_mesh::quad_mesh_centroid;
pub use mesh_quad_mesh::quad_mesh_face_count;
pub use mesh_quad_mesh::quad_mesh_flip_winding;
pub use mesh_quad_mesh::quad_mesh_indices_valid;
pub use mesh_quad_mesh::quad_mesh_scale;
pub use mesh_quad_mesh::quad_mesh_to_json;
pub use mesh_quad_mesh::quad_mesh_to_tris;
pub use mesh_quad_mesh::quad_mesh_vertex_count;
pub use mesh_quad_mesh::QuadMesh;
pub use mesh_quad_strip::new_quad_strip;
pub use mesh_quad_strip::quad_count as qs_quad_count;
pub use mesh_quad_strip::quad_strip_area;
pub use mesh_quad_strip::quad_strip_from_path;
pub use mesh_quad_strip::quad_strip_normals;
pub use mesh_quad_strip::quad_strip_to_triangles;
pub use mesh_quad_strip::quad_strip_uvs;
pub use mesh_quad_strip::quad_strip_vertex_count;
pub use mesh_quad_strip::QuadStrip;
pub use mesh_ray_cast::ray_at;
pub use mesh_ray_cast::ray_cast_mesh;
pub use mesh_ray_cast::ray_cast_normalize;
pub use mesh_ray_cast::ray_hit_count;
pub use mesh_ray_cast::ray_triangle_intersect_rc;
pub use mesh_ray_cast::RayCast;
pub use mesh_ray_cast::RayCastHit;
pub use mesh_relaxation::build_adjacency_relax;
pub use mesh_relaxation::relax_avg_displacement;
pub use mesh_relaxation::relax_mesh;
pub use mesh_relaxation::relax_step;
pub use mesh_relaxation::relax_to_json;
pub use mesh_relaxation::RelaxConfig;
pub use mesh_relaxation::RelaxResult;
pub use mesh_remesh_adaptive::adaptive_remesh;
pub use mesh_remesh_adaptive::adaptive_remesh_to_json;
pub use mesh_remesh_adaptive::adaptive_target_length as adaptive_remesh_target_length;
pub use mesh_remesh_adaptive::avg_edge_length_ar;
pub use mesh_remesh_adaptive::collect_edges_ar;
pub use mesh_remesh_adaptive::count_long_edges_ar;
pub use mesh_remesh_adaptive::count_short_edges_ar;
pub use mesh_remesh_adaptive::edge_length_ar;
pub use mesh_remesh_adaptive::AdaptiveRemeshConfig;
pub use mesh_remesh_adaptive::AdaptiveRemeshResult;
pub use mesh_reverse_normal::compute_face_normals_rn;
pub use mesh_reverse_normal::count_upward_normals;
pub use mesh_reverse_normal::face_normal_rn;
pub use mesh_reverse_normal::flip_all_winding_rn;
pub use mesh_reverse_normal::normals_are_unit_rn;
pub use mesh_reverse_normal::reverse_normal_to_json;
pub use mesh_reverse_normal::reverse_normals;
pub use mesh_reverse_normal::reverse_normals_selected;
pub use mesh_root_find::bisect;
pub use mesh_root_find::bracket_check;
pub use mesh_root_find::newton_raphson;
pub use mesh_root_find::regula_falsi;
pub use mesh_root_find::residual_at;
pub use mesh_root_find::root_find_to_json;
pub use mesh_root_find::RootFindResult;
pub use mesh_scalar_field::build_scalar_field;
pub use mesh_scalar_field::count_above as scalar_count_above;
pub use mesh_scalar_field::count_below as scalar_count_below;
pub use mesh_scalar_field::field_avg;
pub use mesh_scalar_field::field_max as scalar_field_max;
pub use mesh_scalar_field::field_min as scalar_field_min;
pub use mesh_scalar_field::normalize_field;
pub use mesh_scalar_field::scalar_field_to_json;
pub use mesh_scalar_field::sdf_sphere_field;
pub use mesh_scalar_field::sine_field;
pub use mesh_scalar_field::ScalarFieldV;
pub use mesh_seam_mark::clear_seams;
pub use mesh_seam_mark::is_seam;
pub use mesh_seam_mark::mark_boundary_seams;
pub use mesh_seam_mark::mark_seam;
pub use mesh_seam_mark::seam_count;
pub use mesh_seam_mark::seam_edges_sorted;
pub use mesh_seam_mark::seam_mark_to_json;
pub use mesh_seam_mark::unmark_seam;
pub use mesh_seam_mark::SeamMarkSet;
pub use mesh_sharp_edge::detect_sharp_edges;
pub use mesh_sharp_edge::has_sharp_edges;
pub use mesh_sharp_edge::max_dihedral_angle as sharp_max_dihedral_angle;
pub use mesh_sharp_edge::sharp_edge_count;
pub use mesh_sharp_edge::sharp_edge_to_json;
pub use mesh_sharp_edge::sharp_edge_vertices;
pub use mesh_sharp_edge::SharpEdge;
pub use mesh_sharp_edge::SharpEdgeResult;
pub use mesh_shell_deform::avg_shell_displacement;
pub use mesh_shell_deform::shell_deform;
pub use mesh_shell_deform::shell_deform_to_json;
pub use mesh_shell_deform::shell_deform_valid;
pub use mesh_shell_deform::vertex_normals_shell;
pub use mesh_shell_deform::ShellDeformParams;
pub use mesh_shell_deform::ShellDeformResult;
pub use mesh_silhouette::extract_silhouette as extract_silhouette_mesh;
pub use mesh_silhouette::has_silhouette;
pub use mesh_silhouette::silhouette_edge_count;
pub use mesh_silhouette::silhouette_to_json;
pub use mesh_silhouette::silhouette_vertices;
pub use mesh_silhouette::view_dir_from_camera;
pub use mesh_silhouette::SilhouetteEdge;
pub use mesh_silhouette::SilhouetteResult;
pub use mesh_skeleton_deform::deform_avg_displacement;
pub use mesh_skeleton_deform::normalize_skeleton_weights;
pub use mesh_skeleton_deform::skeleton_deform;
pub use mesh_skeleton_deform::skeleton_deform_to_json;
pub use mesh_skeleton_deform::skinned_vertex_count_sd;
pub use mesh_skeleton_deform::BoneSd;
pub use mesh_skeleton_deform::BoneTransformSd;
pub use mesh_skeleton_deform::SkeletonWeight;
pub use mesh_smooth_weight::average_weight;
pub use mesh_smooth_weight::build_adjacency_sw;
pub use mesh_smooth_weight::clamp_weights as clamp_mesh_weights;
pub use mesh_smooth_weight::count_above_threshold as weight_count_above_threshold;
pub use mesh_smooth_weight::detect_boundary_sw;
pub use mesh_smooth_weight::normalize_smooth_weights;
pub use mesh_smooth_weight::smooth_weights as smooth_vertex_weights;
pub use mesh_smooth_weight::SmoothWeightConfig;
pub use mesh_smooth_weight::SmoothWeightResult;
pub use mesh_sort_vertex::centroid as sort_vertex_centroid;
pub use mesh_sort_vertex::is_valid_permutation;
pub use mesh_sort_vertex::nearest_to_origin;
pub use mesh_sort_vertex::remap_indices;
pub use mesh_sort_vertex::sort_vertices;
pub use mesh_sort_vertex::sorted_axis_range;
pub use mesh_sort_vertex::SortAxis;
pub use mesh_sort_vertex::SortVertexResult;
pub use mesh_span_tree::component_count as span_component_count;
pub use mesh_span_tree::edges_from_mesh as span_edges_from_mesh;
pub use mesh_span_tree::max_span_edge;
pub use mesh_span_tree::min_span_edge;
pub use mesh_span_tree::minimum_spanning_tree;
pub use mesh_span_tree::prune_long_edges;
pub use mesh_span_tree::SpanEdge;
pub use mesh_span_tree::SpanTreeResult;
pub use mesh_sphere_proj::all_on_sphere;
pub use mesh_sphere_proj::cart_to_spherical;
pub use mesh_sphere_proj::mean_radius;
pub use mesh_sphere_proj::project_mesh_to_sphere;
pub use mesh_sphere_proj::project_to_sphere;
pub use mesh_sphere_proj::sphere_uvs;
pub use mesh_sphere_proj::spherical_to_cart;
pub use mesh_sphere_proj::spherical_uv;
pub use mesh_spring_mesh::max_velocity as spring_max_velocity;
pub use mesh_spring_mesh::simulate_spring_mesh;
pub use mesh_spring_mesh::spring_energy;
pub use mesh_spring_mesh::spring_step;
pub use mesh_spring_mesh::springs_from_mesh;
pub use mesh_spring_mesh::Spring;
pub use mesh_spring_mesh::SpringMeshParams;
pub use mesh_stitch_seam::find_boundary_loop;
pub use mesh_stitch_seam::is_closed as stitch_is_closed;
pub use mesh_stitch_seam::loop_avg_edge_length;
pub use mesh_stitch_seam::loop_centroid as stitch_loop_centroid;
pub use mesh_stitch_seam::stitch_loops;
pub use mesh_stitch_seam::stitched_face_count;
pub use mesh_stitch_seam::SeamEdgePair;
pub use mesh_stitch_seam::StitchSeamResult;
pub use mesh_stroke_path::build_stroke_path;
pub use mesh_stroke_path::scale_stroke_widths;
pub use mesh_stroke_path::straight_stroke;
pub use mesh_stroke_path::stroke_arc_length;
pub use mesh_stroke_path::stroke_face_count;
pub use mesh_stroke_path::uvs_in_range as stroke_uvs_in_range;
pub use mesh_stroke_path::StrokePathResult;
pub use mesh_stroke_path::StrokeSample;
pub use mesh_subdiv_loop::avg_edge_length_ls;
pub use mesh_subdiv_loop::bounding_box_ls;
pub use mesh_subdiv_loop::expected_face_count;
pub use mesh_subdiv_loop::expected_vertex_count_approx;
pub use mesh_subdiv_loop::indices_valid as loop_indices_valid;
pub use mesh_subdiv_loop::loop_subdiv_step;
pub use mesh_subdiv_loop::loop_subdivide_mesh;
pub use mesh_subdiv_loop::LoopSubdivResult;
pub use mesh_surface_flow::advect_point_on_surface;
pub use mesh_surface_flow::flow_at_vertex;
pub use mesh_surface_flow::flow_magnitude_at;
pub use mesh_surface_flow::new_flow_field;
pub use mesh_surface_flow::set_flow_vector;
pub use mesh_surface_flow::smooth_flow_field;
pub use mesh_surface_flow::FlowField;
pub use mesh_surface_flow::FlowVector;
pub use mesh_surface_normal::average_normal as surface_average_normal;
pub use mesh_surface_normal::compute_flat_normals;
pub use mesh_surface_normal::compute_smooth_normals;
pub use mesh_surface_normal::count_back_facing;
pub use mesh_surface_normal::degenerate_normal_count;
pub use mesh_surface_normal::flip_normals;
pub use mesh_surface_normal::normal_angle;
pub use mesh_surface_normal::normals_are_unit;
pub use mesh_sweep_solid::regular_polygon_profile;
pub use mesh_sweep_solid::sweep_bounds;
pub use mesh_sweep_solid::sweep_indices_valid;
pub use mesh_sweep_solid::sweep_solid;
pub use mesh_sweep_solid::sweep_triangle_count;
pub use mesh_sweep_solid::PathPointSolid;
pub use mesh_sweep_solid::Profile2DSolid;
pub use mesh_sweep_solid::SweepSolidResult;
pub use mesh_tangent_frame::average_tangent;
pub use mesh_tangent_frame::compute_tangent_frames;
pub use mesh_tangent_frame::count_valid_frames;
pub use mesh_tangent_frame::frame_to_matrix;
pub use mesh_tangent_frame::is_orthonormal;
pub use mesh_tangent_frame::tangent_angle;
pub use mesh_tangent_frame::tangent_to_world as tangent_to_world_frame;
pub use mesh_tangent_frame::TangentFrame;
pub use mesh_texture_proj::box_project;
pub use mesh_texture_proj::cylindrical_project;
pub use mesh_texture_proj::planar_project;
pub use mesh_texture_proj::project_all;
pub use mesh_texture_proj::spherical_project as texture_spherical_project;
pub use mesh_texture_proj::tile_uvs_proj;
pub use mesh_texture_proj::uvs_in_unit_range as texture_uvs_in_unit_range;
pub use mesh_texture_proj::TextureProjMode;
pub use mesh_thin_shell::compute_vertex_normals as thin_shell_vertex_normals;
pub use mesh_thin_shell::half_turn_radians;
pub use mesh_thin_shell::offset_by_normal;
pub use mesh_thin_shell::shell_face_count;
pub use mesh_thin_shell::shell_volume;
pub use mesh_thin_shell::thin_shell;
pub use mesh_thin_shell::ThinShellConfig;
pub use mesh_thin_shell::ThinShellResult;
pub use mesh_topo_sort::assign_levels;
pub use mesh_topo_sort::build_dag;
pub use mesh_topo_sort::compute_in_degree;
pub use mesh_topo_sort::order_is_complete;
pub use mesh_topo_sort::reverse_topo;
pub use mesh_topo_sort::sort_faces_by_edge_order;
pub use mesh_topo_sort::topo_sort;
pub use mesh_topo_sort::TopoSortResult;
pub use mesh_transfer_attr::attrs_same_name;
pub use mesh_transfer_attr::barycentric;
pub use mesh_transfer_attr::nearest_vertex as transfer_nearest_vertex;
pub use mesh_transfer_attr::scale_scalar_attr;
pub use mesh_transfer_attr::transfer_scalar_nn;
pub use mesh_transfer_attr::transfer_vec3_nn;
pub use mesh_transfer_attr::ScalarAttr;
pub use mesh_transfer_attr::TransferMethod;
pub use mesh_transfer_attr::TransferResult;
pub use mesh_transfer_attr::Vec3Attr;
pub use mesh_tri_strip::decode_tri_strip;
pub use mesh_tri_strip::encode_tri_strip;
pub use mesh_tri_strip::new_tri_strip;
pub use mesh_tri_strip::strip_efficiency_ratio;
pub use mesh_tri_strip::strip_half_angle;
pub use mesh_tri_strip::strip_index_count;
pub use mesh_tri_strip::strip_restart_count as tri_strip_restart_count;
pub use mesh_tri_strip::strip_to_json as tri_strip_to_json;
pub use mesh_tri_strip::strip_triangle_count;
pub use mesh_tri_strip::TriStrip;
pub use mesh_tube_mesh::generate_tube;
pub use mesh_tube_mesh::tube_circumference;
pub use mesh_tube_mesh::tube_face_count;
pub use mesh_tube_mesh::tube_indices_valid;
pub use mesh_tube_mesh::tube_normals_unit;
pub use mesh_tube_mesh::tube_surface_area;
pub use mesh_tube_mesh::tube_to_json;
pub use mesh_tube_mesh::tube_vertex_count;
pub use mesh_tube_mesh::TubeMesh;
pub use mesh_uv_atlas::add_island as uv_atlas_add_island;
pub use mesh_uv_atlas::atlas_to_json;
pub use mesh_uv_atlas::atlas_utilization as uv_atlas_utilization;
pub use mesh_uv_atlas::find_island_by_id;
pub use mesh_uv_atlas::island_count;
pub use mesh_uv_atlas::islands_overlap;
pub use mesh_uv_atlas::largest_island_area;
pub use mesh_uv_atlas::new_uv_atlas;
pub use mesh_uv_atlas::total_island_faces;
pub use mesh_uv_atlas::uv_in_atlas_bounds;
pub use mesh_uv_atlas::UvAtlas;
pub use mesh_uv_atlas::UvAtlasIsland;
pub use mesh_uv_seam::add_seam_edge;
pub use mesh_uv_seam::clear_seams as uv_seam_clear;
pub use mesh_uv_seam::detect_boundary_seams;
pub use mesh_uv_seam::is_seam_edge;
pub use mesh_uv_seam::new_uv_seam_set;
pub use mesh_uv_seam::remove_seam_edge;
pub use mesh_uv_seam::seam_edge_count;
pub use mesh_uv_seam::seam_set_to_json;
pub use mesh_uv_seam::seam_vertices;
pub use mesh_uv_seam::UvSeamEdge;
pub use mesh_uv_seam::UvSeamSet;
pub use mesh_vertex_attr::add_attr_layer;
pub use mesh_vertex_attr::attr_average;
pub use mesh_vertex_attr::attr_set_to_json;
pub use mesh_vertex_attr::find_layer_by_name;
pub use mesh_vertex_attr::get_attr;
pub use mesh_vertex_attr::layer_count;
pub use mesh_vertex_attr::new_vertex_attr_set;
pub use mesh_vertex_attr::set_attr as set_vertex_attr_val;
pub use mesh_vertex_attr::VertexAttrLayer;
pub use mesh_vertex_attr::VertexAttrSet;
pub use mesh_vertex_color::blend_vertex_colors;
pub use mesh_vertex_color::clear_vertex_colors;
pub use mesh_vertex_color::color_to_rgba;
pub use mesh_vertex_color::get_vertex_color as get_vertex_color_map;
pub use mesh_vertex_color::new_vertex_color_map;
pub use mesh_vertex_color::set_vertex_color as set_vertex_color_map;
pub use mesh_vertex_color::vertex_color_count as vertex_color_map_count;
pub use mesh_vertex_color::vertex_colors_to_bytes;
pub use mesh_vertex_color::VertexColor;
pub use mesh_vertex_color::VertexColorMap;
pub use mesh_vertex_deform::apply_deform;
pub use mesh_vertex_deform::clear_deform;
pub use mesh_vertex_deform::deform_magnitude;
pub use mesh_vertex_deform::deform_to_json;
pub use mesh_vertex_deform::max_deform_magnitude;
pub use mesh_vertex_deform::new_vertex_deform;
pub use mesh_vertex_deform::nonzero_delta_count;
pub use mesh_vertex_deform::scale_deform;
pub use mesh_vertex_deform::set_delta as set_deform_delta;
pub use mesh_vertex_deform::sine_deform_y;
pub use mesh_vertex_deform::VertexDeform;
pub use mesh_vertex_group::add_group as vg_add_group;
pub use mesh_vertex_group::add_to_group;
pub use mesh_vertex_group::find_group_by_name as find_vertex_group;
pub use mesh_vertex_group::group_average_weight;
pub use mesh_vertex_group::group_count;
pub use mesh_vertex_group::group_set_to_json;
pub use mesh_vertex_group::group_vertex_count;
pub use mesh_vertex_group::new_vertex_group_set;
pub use mesh_vertex_group::remove_from_group;
pub use mesh_vertex_group::weight_in_group;
pub use mesh_vertex_group::VertexGroupEntry;
pub use mesh_vertex_group::VertexGroupSetV2;
pub use mesh_vertex_group::VertexGroupV2;
pub use mesh_vertex_merge::merge_at_indices;
pub use mesh_vertex_merge::merge_count;
pub use mesh_vertex_merge::merge_threshold;
pub use mesh_vertex_merge::merge_vertices_by_distance;
pub use mesh_vertex_merge::MergeResult as VertexMergeResult;
pub use mesh_vertex_order_v2::apply_vertex_order;
pub use mesh_vertex_order_v2::invert_permutation;
pub use mesh_vertex_order_v2::is_valid_permutation as is_valid_vertex_perm;
pub use mesh_vertex_order_v2::order_by_axis;
pub use mesh_vertex_order_v2::order_cache_linear;
pub use mesh_vertex_order_v2::order_result_to_json;
pub use mesh_vertex_order_v2::remap_indices as remap_vertex_indices;
pub use mesh_vertex_order_v2::OrderStrategy;
pub use mesh_vertex_order_v2::VertexOrderResult;
pub use mesh_vertex_project::project_to_cylinder;
pub use mesh_vertex_project::project_to_plane;
pub use mesh_vertex_project::project_to_sphere as project_vertices_to_sphere;
pub use mesh_vertex_project::project_to_surface;
pub use mesh_vertex_project::VertexProject;
pub use mesh_vertex_smooth_v2::build_adjacency_v2;
pub use mesh_vertex_smooth_v2::default_smooth_v2_config;
pub use mesh_vertex_smooth_v2::laplacian_step_v2;
pub use mesh_vertex_smooth_v2::smooth_displacement;
pub use mesh_vertex_smooth_v2::smooth_v2_to_json;
pub use mesh_vertex_smooth_v2::taubin_smooth_v2;
pub use mesh_vertex_smooth_v2::SmoothV2Config;
pub use mesh_vertex_snap::snap_count;
pub use mesh_vertex_snap::snap_threshold_vs;
pub use mesh_vertex_snap::snap_to_grid;
pub use mesh_vertex_snap::snap_vertex_to_nearest;
pub use mesh_vertex_snap::VertexSnap;
pub use mesh_vertex_weld::unweld_vertex;
pub use mesh_vertex_weld::weld_by_normal;
pub use mesh_vertex_weld::weld_by_position as weld_by_position_vw;
pub use mesh_vertex_weld::weld_count;
pub use mesh_vertex_weld::weld_map;
pub use mesh_vertex_weld::weld_statistics;
pub use mesh_vertex_weld::weld_threshold_value;
pub use mesh_vertex_weld::weld_vertices;
pub use mesh_vertex_weld::WeldResult2;
pub use mesh_visibility::classify_visibility;
pub use mesh_visibility::dot3_vis;
pub use mesh_visibility::face_normal_vis;
pub use mesh_visibility::front_facing_ratio;
pub use mesh_visibility::grazing_angle_deg;
pub use mesh_visibility::visibility_to_json;
pub use mesh_visibility::FaceVisibility;
pub use mesh_visibility::VisibilityResult;
pub use mesh_voxel_oct::build_vox_octree;
pub use mesh_voxel_oct::compute_aabb_vo;
pub use mesh_voxel_oct::node_count_vo;
pub use mesh_voxel_oct::occupied_leaf_count;
pub use mesh_voxel_oct::point_in_aabb;
pub use mesh_voxel_oct::split_aabb;
pub use mesh_voxel_oct::vox_octree_to_json;
pub use mesh_voxel_oct::VoxAabb;
pub use mesh_voxel_oct::VoxOctNode;
pub use mesh_voxel_oct::VoxOctree;
pub use mesh_warp_deform::active_handle_count;
pub use mesh_warp_deform::apply_warp_deform;
pub use mesh_warp_deform::avg_warp_displacement;
pub use mesh_warp_deform::dist3_wd;
pub use mesh_warp_deform::rbf_weight;
pub use mesh_warp_deform::warp_config_to_json;
pub use mesh_warp_deform::WarpDeformConfig;
pub use mesh_warp_deform::WarpHandle2;
pub use mesh_wave_mesh::generate_wave_mesh;
pub use mesh_wave_mesh::wave_height;
pub use mesh_wave_mesh::wave_params_to_json;
pub use mesh_wave_mesh::wave_triangle_count;
pub use mesh_wave_mesh::wave_vertex_count;
pub use mesh_wave_mesh::wave_y_range;
pub use mesh_wave_mesh::WaveMeshParams;
pub use mesh_wave_mesh::WaveMeshResult;
pub use mesh_wedge::generate_wedge;
pub use mesh_wedge::wedge_base_angle;
pub use mesh_wedge::wedge_indices_valid;
pub use mesh_wedge::wedge_to_json;
pub use mesh_wedge::wedge_triangle_count;
pub use mesh_wedge::wedge_vertex_count;
pub use mesh_wedge::wedge_volume;
pub use mesh_wedge::WedgeMesh;
pub use mesh_wire_mesh::extract_wire_edges;
pub use mesh_wire_mesh::wire_avg_length;
pub use mesh_wire_mesh::wire_edge_count;
pub use mesh_wire_mesh::wire_indices_valid;
pub use mesh_wire_mesh::wire_mesh_to_json;
pub use mesh_wire_mesh::wire_total_length;
pub use mesh_wire_mesh::WireEdge;
pub use mesh_wire_mesh::WireMesh;
pub use mesh_zup_convert::bounds_zup;
pub use mesh_zup_convert::convert_up_axis;
pub use mesh_zup_convert::convert_yup_to_zup;
pub use mesh_zup_convert::convert_zup_to_yup;
pub use mesh_zup_convert::normals_yup_to_zup;
pub use mesh_zup_convert::round_trip_error;
pub use mesh_zup_convert::yup_to_zup;
pub use mesh_zup_convert::zup_to_yup;
pub use mesh_zup_convert::UpAxis;
pub use mesh_adaptive_lod::adaptive_lod_to_json;
pub use mesh_adaptive_lod::default_adaptive_lod_config;
pub use mesh_adaptive_lod::lod_level_count as adaptive_lod_level_count;
pub use mesh_adaptive_lod::lod_reduction_ratio as adaptive_lod_reduction_ratio;
pub use mesh_adaptive_lod::select_lod_level;
pub use mesh_adaptive_lod::triangle_count_at as adaptive_triangle_count_at;
pub use mesh_adaptive_lod::AdaptiveLodConfig;
pub use mesh_adaptive_lod::LodDescriptor;
pub use mesh_batching::batch_indices_valid;
pub use mesh_batching::batch_meshes;
pub use mesh_batching::batch_to_json;
pub use mesh_batching::batch_triangle_count;
pub use mesh_batching::batch_vertex_count;
pub use mesh_batching::submesh_count;
pub use mesh_batching::BatchResult;
pub use mesh_batching::BatchSource;
pub use mesh_bvh_node::aabb_surface_area;
pub use mesh_bvh_node::build_bvh_nodes;
pub use mesh_bvh_node::bvh_leaf_count;
pub use mesh_bvh_node::bvh_node_count;
pub use mesh_bvh_node::merge_node_aabb;
pub use mesh_bvh_node::ray_aabb_hit;
pub use mesh_bvh_node::triangle_aabb as bvh_triangle_aabb;
pub use mesh_bvh_node::BvhNode2;
pub use mesh_bvh_node::BvhNodeAabb;
pub use mesh_cage_volume::cage_volume_to_json;
pub use mesh_cage_volume::compute_cage_volume;
pub use mesh_cage_volume::equivalent_sphere_radius;
pub use mesh_cage_volume::is_outward_cage;
pub use mesh_cage_volume::scaled_cage_volume;
pub use mesh_cage_volume::signed_tet_volume;
pub use mesh_cage_volume::CageVolumeResult;
pub use mesh_chart_pack::chart_area;
pub use mesh_chart_pack::chart_bounding_box;
pub use mesh_chart_pack::chart_pack_to_json;
pub use mesh_chart_pack::chart_utilization;
pub use mesh_chart_pack::new_uv_chart;
pub use mesh_chart_pack::pack_charts;
pub use mesh_chart_pack::pack_charts_stub;
pub use mesh_chart_pack::packing_utilization;
pub use mesh_chart_pack::rects_overlap_cp;
pub use mesh_chart_pack::total_chart_area;
pub use mesh_chart_pack::ChartPackResult;
pub use mesh_chart_pack::ChartRect;
pub use mesh_chart_pack::PackedChart;
pub use mesh_chart_pack::PackingResult;
pub use mesh_chart_pack::UvChart;
pub use mesh_clip_region::accepted_triangle_count as clip_region_accepted_count;
pub use mesh_clip_region::clip_indices_valid;
pub use mesh_clip_region::clip_region_to_json;
pub use mesh_clip_region::clip_to_region;
pub use mesh_clip_region::position_in_region;
pub use mesh_clip_region::ClipRegion;
pub use mesh_clip_region::ClipRegionResult;
pub use mesh_coarse_grid::build_coarse_grid;
pub use mesh_coarse_grid::coarse_grid_to_json;
pub use mesh_coarse_grid::find_nearby_vertices;
pub use mesh_coarse_grid::occupied_cell_count;
pub use mesh_coarse_grid::position_to_grid_cell;
pub use mesh_coarse_grid::total_indexed_vertices;
pub use mesh_coarse_grid::vertices_in_cell_cg;
pub use mesh_coarse_grid::CoarseGrid;
pub use mesh_coarse_grid::GridCell;
pub use mesh_compress_index::compress_index_to_json;
pub use mesh_compress_index::decode_delta_indices;
pub use mesh_compress_index::encode_delta_indices;
pub use mesh_compress_index::estimate_delta_size_bytes;
pub use mesh_compress_index::fits_u16;
pub use mesh_compress_index::max_index_ci;
pub use mesh_compress_index::pack_u16;
pub use mesh_compress_index::unpack_u16;
pub use mesh_compress_index::CompressedIndices;
pub use mesh_vertex_split::indices_valid as split_indices_valid;
pub use mesh_vertex_split::split_by_uvs;
pub use mesh_vertex_split::split_to_json as vertex_split_to_json;
pub use mesh_vertex_split::split_uvs_unique;
pub use mesh_vertex_split::split_vertex_count;
pub use mesh_vertex_split::SplitResult;
pub use mesh_vertex_weight::average_weight as avg_vertex_weight;
pub use mesh_vertex_weight::blend_weight_buffers;
pub use mesh_vertex_weight::clamp_weights as clamp_vertex_weights;
pub use mesh_vertex_weight::get_weight as get_vertex_weight;
pub use mesh_vertex_weight::new_weight_buffer;
pub use mesh_vertex_weight::normalize_weights as normalize_vertex_weights;
pub use mesh_vertex_weight::set_weight as set_vertex_weight;
pub use mesh_vertex_weight::weight_buffer_to_json;
pub use mesh_vertex_weight::weight_vertex_count;
pub use mesh_vertex_weight::weights_above_threshold;
pub use mesh_vertex_weight::weights_valid;
pub use mesh_vertex_weight::VertexWeightBuffer;
pub use mesh_mirror_cut::axis_extent;
pub use mesh_mirror_cut::count_positive_vertices;
pub use mesh_mirror_cut::cut_negative_side;
pub use mesh_mirror_cut::cut_positive_side;
pub use mesh_mirror_cut::mirror_cut;
pub use mesh_mirror_cut::mirror_cut_to_json;
pub use mesh_mirror_cut::MirrorAxis as MirrorCutAxis;
pub use mesh_mirror_cut::MirrorCutResult;
pub use mesh_face_peel::boundary_faces;
pub use mesh_face_peel::build_face_adjacency as peel_build_face_adjacency;
pub use mesh_face_peel::peel_layers;
pub use mesh_face_peel::peel_one_layer;
pub use mesh_face_peel::peel_result_to_json;
pub use mesh_face_peel::remaining_after_peels;
pub use mesh_face_peel::FacePeelResult;
pub use mesh_raycast::hit_point;
pub use mesh_raycast::hit_to_json as raycast_hit_to_json;
pub use mesh_raycast::ray_direction as make_ray_direction;
pub use mesh_raycast::ray_triangle;
pub use mesh_raycast::raycast;
pub use mesh_raycast::raycast_all;
pub use mesh_raycast::Ray as RaycastRay;
pub use mesh_raycast::RayHit as RaycastHit;
pub use mesh_bvh::build_bvh;
pub use mesh_bvh::bvh_to_json as bvh_tree_to_json;
pub use mesh_bvh::bvh_triangle_count;
pub use mesh_bvh::triangle_aabb_for;
pub use mesh_bvh::BvhAabb as BvhAabb2;
pub use mesh_bvh::BvhNode;
pub use mesh_tube::generate_tube as gen_tube_along_spine;
pub use mesh_tube::tube_index_count as gen_tube_index_count;
pub use mesh_tube::tube_surface_area as gen_tube_surface_area;
pub use mesh_tube::tube_to_json as gen_tube_to_json;
pub use mesh_tube::tube_vertex_count as gen_tube_vertex_count;
pub use mesh_tube::TubeMesh as TubeMeshSpine;
pub use mesh_sphere::default_uv_sphere_config;
pub use mesh_sphere::generate_uv_sphere;
pub use mesh_sphere::indices_valid as uv_sphere_indices_valid;
pub use mesh_sphere::normals_unit as uv_sphere_normals_unit;
pub use mesh_sphere::sphere_surface_area;
pub use mesh_sphere::sphere_volume;
pub use mesh_sphere::uv_sphere_to_json;
pub use mesh_sphere::uv_sphere_vertex_count;
pub use mesh_sphere::UvSphereConfig;
pub use mesh_sphere::UvSphereResult;
pub use mesh_plane::default_plane_config;
pub use mesh_plane::generate_plane;
pub use mesh_plane::plane_area;
pub use mesh_plane::plane_index_count;
pub use mesh_plane::plane_indices_valid;
pub use mesh_plane::plane_to_json;
pub use mesh_plane::plane_uvs_in_range;
pub use mesh_plane::plane_vertex_count;
pub use mesh_plane::PlaneConfig;
pub use mesh_plane::PlaneMesh;
pub use mesh_cylinder_gen::cylinder_gen_to_json;
pub use mesh_cylinder_gen::cylinder_indices_valid;
pub use mesh_cylinder_gen::cylinder_lateral_area;
pub use mesh_cylinder_gen::cylinder_side_index_count;
pub use mesh_cylinder_gen::cylinder_side_vertex_count;
pub use mesh_cylinder_gen::cylinder_total_area;
pub use mesh_cylinder_gen::cylinder_volume;
pub use mesh_cylinder_gen::default_cylinder_gen_config;
pub use mesh_cylinder_gen::generate_cylinder;
pub use mesh_cylinder_gen::CylinderGenConfig;
pub use mesh_cylinder_gen::CylinderGenResult;
pub use mesh_cone_gen::cone_gen_to_json;
pub use mesh_cone_gen::cone_index_count;
pub use mesh_cone_gen::cone_slant_height;
pub use mesh_cone_gen::cone_vertex_count;
pub use mesh_cone_gen::cone_volume;
pub use mesh_cone_gen::default_cone_gen_config;
pub use mesh_cone_gen::generate_cone;
pub use mesh_cone_gen::ConeGenConfig;
pub use mesh_cone_gen::ConeGenResult;
pub use mesh_torus_gen::default_torus_gen_config;
pub use mesh_torus_gen::generate_torus;
pub use mesh_torus_gen::torus_gen_to_json;
pub use mesh_torus_gen::torus_index_count;
pub use mesh_torus_gen::torus_surface_area;
pub use mesh_torus_gen::torus_vertex_count;
pub use mesh_torus_gen::torus_volume;
pub use mesh_torus_gen::TorusGenConfig;
pub use mesh_torus_gen::TorusGenResult;
pub use mesh_icosphere::icosahedron_faces;
pub use mesh_icosphere::icosahedron_verts;
pub use mesh_icosphere::icosphere_vert_count;
pub use mesh_icosphere::make_icosphere;
pub use mesh_edge_split::edge_split_count;
pub use mesh_edge_split::split_all_long_edges;
pub use mesh_edge_split::split_creates_triangles;
pub use mesh_edge_split::split_edge;
pub use mesh_edge_split::split_edge_at_t;
pub use mesh_edge_split::split_edge_midpoint;
pub use mesh_edge_split::split_threshold as edge_split_threshold;
pub use mesh_edge_split::validate_split as validate_edge_split;
pub use mesh_edge_split::EdgeSplitResult;
pub use mesh_capsule_gen::capsule_gen_to_json;
pub use mesh_capsule_gen::capsule_index_count;
pub use mesh_capsule_gen::capsule_total_height;
pub use mesh_capsule_gen::capsule_vertex_count;
pub use mesh_capsule_gen::capsule_volume;
pub use mesh_capsule_gen::default_capsule_gen_config;
pub use mesh_capsule_gen::generate_capsule;
pub use mesh_capsule_gen::CapsuleGenConfig;
pub use mesh_capsule_gen::CapsuleGenResult;
pub use mesh_voxelize::default_voxelize_v2_params;
pub use mesh_voxelize::total_voxel_count;
pub use mesh_voxelize::voxelize_surface_v2;
pub use mesh_voxelize::VoxelGridV2;
pub use mesh_voxelize::VoxelizeV2Params;
pub use mesh_convex_hull_v2::convex_hull_v2;
pub use mesh_convex_hull_v2::hull_v2_centroid;
pub use mesh_convex_hull_v2::hull_v2_face_count;
pub use mesh_convex_hull_v2::hull_volume_v2;
pub use mesh_convex_hull_v2::ConvexHullV2;
pub use mesh_dual_laplacian::cotangent_weight as dual_laplacian_cotangent_weight;
pub use mesh_dual_laplacian::dual_laplacian_smooth;
pub use mesh_dual_laplacian::laplacian_at_vertex;
pub use mesh_dual_laplacian::laplacian_energy_dual;
pub use mesh_dual_laplacian::DualLaplacianConfig;
pub use mesh_sharp_feature::detect_sharp_features;
pub use mesh_sharp_feature::is_sharp_vertex;
pub use mesh_sharp_feature::max_sharp_dihedral;
pub use mesh_sharp_feature::sharp_feature_edge_count;
pub use mesh_sharp_feature::SharpFeatureEdge;
pub use mesh_sharp_feature::SharpFeatureResult;
pub use mesh_slice_stack::contour_bounds;
pub use mesh_slice_stack::slice_at_z;
pub use mesh_slice_stack::slice_stack;
pub use mesh_slice_stack::total_contour_points;
pub use mesh_slice_stack::uniform_z_heights;
pub use mesh_slice_stack::SliceContour;
pub use mesh_slice_stack::SliceStackResult;
pub use mesh_unfold::place_triangle_2d;
pub use mesh_unfold::unfold_coverage;
pub use mesh_unfold::unfold_mesh;
pub use mesh_unfold::unfold_visited_count;
pub use mesh_unfold::UnfoldResult;
pub use mesh_align_axes::align_to_principal_axes;
pub use mesh_align_axes::compute_centroid as align_compute_centroid;
pub use mesh_align_axes::covariance_3x3;
pub use mesh_align_axes::variance_along_axis;
pub use mesh_align_axes::AlignAxesResult;
pub use mesh_moment_inertia::compute_inertia_tensor;
pub use mesh_moment_inertia::principal_moments;
pub use mesh_moment_inertia::tensor_frobenius_norm;
pub use mesh_moment_inertia::tensor_is_symmetric;
pub use mesh_moment_inertia::tensor_trace;
pub use mesh_moment_inertia::InertiaTensor;
pub use mesh_heat_diffuse_v2::build_heat_adjacency_v2;
pub use mesh_heat_diffuse_v2::diffuse_heat_v2;
pub use mesh_heat_diffuse_v2::heat_gradient_v2;
pub use mesh_heat_diffuse_v2::new_heat_field_v2;
pub use mesh_heat_diffuse_v2::normalize_heat_field_v2;
pub use mesh_heat_diffuse_v2::set_heat_source_v2;
pub use mesh_heat_diffuse_v2::HeatDiffuseV2Config;
pub use mesh_heat_diffuse_v2::HeatFieldV2;
pub use mesh_tangent_frames::average_tangent_v2;
pub use mesh_tangent_frames::compute_tangent_frames as compute_tangent_frames_v2;
pub use mesh_tangent_frames::degenerate_frame_count;
pub use mesh_tangent_frames::frames_orthonormal;
pub use mesh_tangent_frames::world_to_tangent_space;
pub use mesh_tangent_frames::TangentFrameV2;
pub use mesh_normal_map_bake::average_pixel_normal;
pub use mesh_normal_map_bake::bake_normal_map_v2;
pub use mesh_normal_map_bake::normal_map_v2_size_bytes;
pub use mesh_normal_map_bake::normal_to_rgb_v2;
pub use mesh_normal_map_bake::rgb_to_normal_v2;
pub use mesh_normal_map_bake::NormalMapBakeV2Config;
pub use mesh_normal_map_bake::NormalMapV2;
pub use mesh_decimate_v2::decimate_v2;
pub use mesh_decimate_v2::decimation_ratio_v2;
pub use mesh_decimate_v2::quadric_error;
pub use mesh_decimate_v2::DecimateV2Config;
pub use mesh_decimate_v2::DecimateV2Result;
pub use mesh_decimate_v2::Quadric4;
pub use mesh_ambient_occ::apply_ao_to_colors;
pub use mesh_ambient_occ::average_ao;
pub use mesh_ambient_occ::bent_normal_at;
pub use mesh_ambient_occ::compute_vertex_ao;
pub use mesh_ambient_occ::hemisphere_samples_v2;
pub use mesh_ambient_occ::AmbientOccV2Config;
pub use mesh_quad_to_tri::quad_buffer_to_triangles;
pub use mesh_quad_to_tri::quads_to_triangles;
pub use mesh_quad_to_tri::result_triangle_count;
pub use mesh_quad_to_tri::total_surface_area_q2t;
pub use mesh_quad_to_tri::QuadFaceV2;
pub use mesh_quad_to_tri::QuadToTriResult;
pub use mesh_tri_to_quad::quad_count_t2q;
pub use mesh_tri_to_quad::quadification_ratio;
pub use mesh_tri_to_quad::quads_to_flat_buffer;
pub use mesh_tri_to_quad::remaining_tri_count;
pub use mesh_tri_to_quad::triangles_to_quads;
pub use mesh_tri_to_quad::QuadPair;
pub use mesh_tri_to_quad::TriToQuadResult;
pub use mesh_wire_frame::generate_wireframe;
pub use mesh_wire_frame::total_wireframe_length;
pub use mesh_wire_frame::wireframe_edge_count;
pub use mesh_wire_frame::wireframe_indices_valid;
pub use mesh_wire_frame::wireframe_to_line_buffer;
pub use mesh_wire_frame::WireEdge2;
pub use mesh_wire_frame::WireframeMesh;
pub use mesh_parametric_surf::compute_smooth_normals_ps;
pub use mesh_parametric_surf::parametric_surf_triangle_count;
pub use mesh_parametric_surf::parametric_surf_vertex_count;
pub use mesh_parametric_surf::sphere_fn;
pub use mesh_parametric_surf::tessellate_parametric;
pub use mesh_parametric_surf::torus_fn;
pub use mesh_parametric_surf::ParametricSurface;
pub use mesh_revolve::cone_profile;
pub use mesh_revolve::cylinder_profile;
pub use mesh_revolve::revolve_profile;
pub use mesh_revolve::revolve_triangle_count;
pub use mesh_revolve::RevolveSurface;
pub use mesh_thicken::compute_vertex_normals as thicken_compute_vertex_normals;
pub use mesh_thicken::thicken_mesh;
pub use mesh_thicken::thicken_triangle_count;
pub use mesh_thicken::thicken_vertex_count;
pub use mesh_thicken::ThickenResult;
pub use mesh_trim::count_above_plane;
pub use mesh_trim::trim_mesh;
pub use mesh_trim::trim_triangle_count;
pub use mesh_trim::TrimPlane;
pub use mesh_trim::TrimResult;
pub use mesh_inflate::all_moved_outward;
pub use mesh_inflate::avg_displacement as inflate_avg_displacement;
pub use mesh_inflate::compute_avg_normals;
pub use mesh_inflate::inflate_mesh;
pub use mesh_inflate::max_displacement as inflate_max_displacement;
pub use mesh_erode::all_moved_inward;
pub use mesh_erode::erode_iterative;
pub use mesh_erode::erode_mesh;
pub use mesh_erode::erode_stats;
pub use mesh_erode::ErodeStats;
pub use mesh_fractal_displace::fbm as fractal_fbm;
pub use mesh_fractal_displace::fractal_displace;
pub use mesh_fractal_displace::max_fractal_displacement;
pub use mesh_fractal_displace::value_noise_3d as fractal_value_noise_3d;
pub use mesh_fractal_displace::FractalDispParams;
pub use mesh_scatter::scatter_points;
pub use mesh_scatter::total_area as scatter_total_area;
pub use mesh_scatter::triangle_area as scatter_triangle_area;
pub use mesh_scatter::LcgRng as ScatterLcgRng;
pub use mesh_scatter::ScatteredPoint;
pub use mesh_closest_point::closest_point_on_mesh;
pub use mesh_closest_point::closest_point_on_triangle as cp_on_triangle;
pub use mesh_closest_point::dist3 as closest_dist3;
pub use mesh_closest_point::ClosestPointResult;
pub use mesh_smooth_color::average_color as smooth_average_color;
pub use mesh_smooth_color::build_color_adjacency;
pub use mesh_smooth_color::clamp_colors as smooth_clamp_colors;
pub use mesh_smooth_color::colors_in_range;
pub use mesh_smooth_color::smooth_vertex_colors;
pub use mesh_attr_transfer::avg_transfer_error;
pub use mesh_attr_transfer::max_transfer_error;
pub use mesh_attr_transfer::nearest_vertex as attr_nearest_vertex;
pub use mesh_attr_transfer::transfer_rgba_attr;
pub use mesh_attr_transfer::transfer_scalar_attr;
pub use mesh_attr_transfer::transfer_vec3_attr;
pub use mesh_debug_vis::generate_bitangent_lines;
pub use mesh_debug_vis::generate_normal_lines;
pub use mesh_debug_vis::generate_tangent_lines;
pub use mesh_debug_vis::line_length as debug_line_length;
pub use mesh_debug_vis::lines_to_color_buffer;
pub use mesh_debug_vis::lines_to_position_buffer;
pub use mesh_debug_vis::DebugLine;
pub use mesh_boolean_csg::csg_combine;
pub use mesh_boolean_csg::csg_inside_count;
pub use mesh_boolean_csg::sample_csg_grid;
pub use mesh_boolean_csg::CsgOp;
pub use mesh_boolean_csg::SdfBox;
pub use mesh_boolean_csg::SdfSphere;
pub use mesh_swept_solid::sweep_profile;
pub use mesh_swept_solid::swept_triangle_count;
pub use mesh_swept_solid::swept_vertex_count;
pub use mesh_swept_solid::Profile2D as SweptProfile2D;
pub use mesh_swept_solid::SweptMesh;
pub use mesh_pipe_network::build_pipe_network;
pub use mesh_pipe_network::pipe_triangle_count;
pub use mesh_pipe_network::tube_segment;
pub use mesh_pipe_network::PipeEdge;
pub use mesh_pipe_network::PipeNetworkMesh;
pub use mesh_pipe_network::PipeNode;
pub use mesh_lattice_frame::build_lattice_mesh;
pub use mesh_lattice_frame::cubic_lattice_beams;
pub use mesh_lattice_frame::cubic_lattice_nodes;
pub use mesh_lattice_frame::lattice_triangle_count;
pub use mesh_lattice_frame::Beam;
pub use mesh_lattice_frame::LatticeMesh;
pub use mesh_voronoi_cell::build_voronoi_cells;
pub use mesh_voronoi_cell::nearest_seed;
pub use mesh_voronoi_cell::total_assigned_points;
pub use mesh_voronoi_cell::Aabb3;
pub use mesh_voronoi_cell::VoronoiCell as VoronoiGridCell;
pub use mesh_spring_net::average_rest_length;
pub use mesh_spring_net::build_spring_net;
pub use mesh_spring_net::spring_edge_count;
pub use mesh_spring_net::spring_stretch;
pub use mesh_spring_net::SpringEdge;
pub use mesh_spring_net::SpringNet;
pub use mesh_helix::build_helix_mesh;
pub use mesh_helix::helix_path as helix_tube_path;
pub use mesh_helix::helix_triangle_count;
pub use mesh_helix::helix_vertex_count;
pub use mesh_helix::HelixMesh;
pub use mesh_helix::HelixParams;
pub use mesh_mobius::build_mobius_mesh;
pub use mesh_mobius::mobius_point;
pub use mesh_mobius::mobius_triangle_count;
pub use mesh_mobius::mobius_vertex_count;
pub use mesh_mobius::MobiusMesh;
pub use mesh_mobius::MobiusParams;
pub use mesh_klein_bottle::build_klein_mesh;
pub use mesh_klein_bottle::klein_point;
pub use mesh_klein_bottle::klein_triangle_count;
pub use mesh_klein_bottle::klein_vertex_count;
pub use mesh_klein_bottle::KleinMesh;
pub use mesh_klein_bottle::KleinParams;
pub use mesh_trefoil::build_trefoil_mesh;
pub use mesh_trefoil::trefoil_path;
pub use mesh_trefoil::trefoil_point;
pub use mesh_trefoil::trefoil_triangle_count;
pub use mesh_trefoil::trefoil_vertex_count;
pub use mesh_trefoil::TrefoilMesh;
pub use mesh_trefoil::TrefoilParams;
pub use mesh_superellipsoid::build_superellipsoid_mesh;
pub use mesh_superellipsoid::spow;
pub use mesh_superellipsoid::superellipsoid_point;
pub use mesh_superellipsoid::superellipsoid_triangle_count;
pub use mesh_superellipsoid::superellipsoid_vertex_count;
pub use mesh_superellipsoid::SuperellipsoidMesh;
pub use mesh_superellipsoid::SuperellipsoidParams;
pub use mesh_dupin_cyclide::build_cyclide_mesh;
pub use mesh_dupin_cyclide::cyclide_point;
pub use mesh_dupin_cyclide::cyclide_triangle_count;
pub use mesh_dupin_cyclide::cyclide_vertex_count;
pub use mesh_dupin_cyclide::CyclideMesh;
pub use mesh_dupin_cyclide::CyclideParams;
pub use mesh_minimal_surface::build_minimal_surface_mesh;
pub use mesh_minimal_surface::enneper_point;
pub use mesh_minimal_surface::minimal_surface_triangle_count;
pub use mesh_minimal_surface::minimal_surface_vertex_count;
pub use mesh_minimal_surface::scherk_point;
pub use mesh_minimal_surface::MinimalSurfaceMesh;
pub use mesh_minimal_surface::MinimalSurfaceParams;
pub use mesh_minimal_surface::MinimalSurfaceType;
pub use mesh_fused_deposition::add_rect_path;
pub use mesh_fused_deposition::add_zigzag_infill;
pub use mesh_fused_deposition::layer_count as fdm_layer_count;
pub use mesh_fused_deposition::layer_path_length;
pub use mesh_fused_deposition::slice_bbox_into_layers;
pub use mesh_fused_deposition::total_path_points;
pub use mesh_fused_deposition::FdmJob;
pub use mesh_fused_deposition::FdmLayer;
pub use mesh_isosurface::extract_isosurface;
pub use mesh_isosurface::fill_sphere_sdf;
pub use mesh_isosurface::isosurface_triangle_count;
pub use mesh_isosurface::isosurface_vertex_count;
pub use mesh_isosurface::IsosurfaceMesh;
pub use mesh_isosurface::ScalarGrid;
pub use mesh_multiresolution::apply_displacement as mr_apply_displacement;
pub use mesh_multiresolution::pop_level;
pub use mesh_multiresolution::push_level;
pub use mesh_multiresolution::reset_displacements as mr_reset_displacements;
pub use mesh_multiresolution::total_displacement_magnitude as mr_total_displacement_magnitude;
pub use mesh_multiresolution::MrLevel;
pub use mesh_multiresolution::MultiresolutionMesh;
pub use mesh_ptex::PtexFaceData;
pub use mesh_ptex::PtexFaceRes;
pub use mesh_ptex::PtexTexture;
pub use mesh_paint_mask::average_weight as paint_average_weight;
pub use mesh_paint_mask::count_above as paint_count_above;
pub use mesh_paint_mask::from_bytes as paint_from_bytes;
pub use mesh_paint_mask::to_bytes as paint_to_bytes;
pub use mesh_paint_mask::PaintMask;
pub use mesh_face_map::face_in_any_group;
pub use mesh_face_map::merge_face_maps;
pub use mesh_face_map::rename_group;
pub use mesh_face_map::total_face_count as face_map_total_face_count;
pub use mesh_face_map::FaceMap;
pub use mesh_vertex_group_weight::dominant_group;
pub use mesh_vertex_group_weight::normalize_across_groups;
pub use mesh_vertex_group_weight::VertexWeight;
pub use mesh_vertex_group_weight::VertexWeightGroup;
pub use mesh_vertex_group_weight::VertexWeightGroupSet;
pub use mesh_shape_key_mix::dominant_key;
pub use mesh_shape_key_mix::mix_shape_keys;
pub use mesh_shape_key_mix::reset_all_weights;
pub use mesh_shape_key_mix::set_key_weight;
pub use mesh_shape_key_mix::total_influence;
pub use mesh_shape_key_mix::ShapeKey;
pub use mesh_cloth_pins::average_strength;
pub use mesh_cloth_pins::fully_pinned_count;
pub use mesh_cloth_pins::pinned_vertex_indices;
pub use mesh_cloth_pins::scale_strengths;
pub use mesh_cloth_pins::ClothPinEntry;
pub use mesh_cloth_pins::ClothPinGroup;
pub use mesh_particle_hair::average_strand_length;
pub use mesh_particle_hair::max_strand_length;
pub use mesh_particle_hair::HairStrand;
pub use mesh_particle_hair::ParticleHairMesh;
pub use mesh_fur_cards::average_card_length;
pub use mesh_fur_cards::generate_fur_cards;
pub use mesh_fur_cards::FurCard;
pub use mesh_fur_cards::FurCardMesh;
pub use mesh_feather::generate_feather;
pub use mesh_feather::total_segment_count;
pub use mesh_feather::Barb;
pub use mesh_feather::Feather;
pub use mesh_feather::FeatherParams;
pub use mesh_scale_elements::face_centroid as scale_face_centroid;
pub use mesh_scale_elements::scale_edges;
pub use mesh_scale_elements::scale_faces;
pub use mesh_scale_elements::selected_face_count as scale_selected_face_count;
pub use mesh_push_pull::clamp_positions as push_pull_clamp_positions;
pub use mesh_push_pull::push_all;
pub use mesh_push_pull::push_pull;
pub use mesh_push_pull::push_pull_magnitude;
pub use mesh_push_pull::selected_vertex_count as push_pull_selected_vertex_count;
pub use mesh_smooth_vertex::build_adjacency as smooth_build_adjacency;
pub use mesh_smooth_vertex::max_displacement as smooth_max_displacement;
pub use mesh_smooth_vertex::smooth_n;
pub use mesh_smooth_vertex::smooth_step;
pub use mesh_relax_uv::build_uv_adjacency;
pub use mesh_relax_uv::max_uv_displacement;
pub use mesh_relax_uv::relax_step as uv_relax_step;
pub use mesh_relax_uv::relax_uvs;
pub use mesh_relax_uv::uvs_in_range as relax_uvs_in_range;
pub use mesh_pack_islands::atlas_utilization as pack_atlas_utilization;
pub use mesh_pack_islands::largest_island;
pub use mesh_pack_islands::pack_uv_islands;
pub use mesh_pack_islands::total_island_area;
pub use mesh_pack_islands::PackedIsland;
pub use mesh_pack_islands::UvIslandBounds;
pub use mesh_seam_mark_v2::mark_boundary_seams2;
pub use mesh_seam_mark_v2::sorted_seams2;
pub use mesh_seam_mark_v2::SeamEdge2;
pub use mesh_seam_mark_v2::SeamSet2;
pub use mesh_normal_edit::apply_normal_edits;
pub use mesh_normal_edit::edit_count as normal_edit_count;
pub use mesh_normal_edit::get_custom_normal;
pub use mesh_normal_edit::new_normal_edit_layer;
pub use mesh_normal_edit::new_normal_edit_params;
pub use mesh_normal_edit::normal_blend;
pub use mesh_normal_edit::normal_edit_apply;
pub use mesh_normal_edit::normal_flip;
pub use mesh_normal_edit::normal_is_valid;
pub use mesh_normal_edit::normal_normalize;
pub use mesh_normal_edit::set_custom_normal;
pub use mesh_normal_edit::NormalEdit;
pub use mesh_normal_edit::NormalEditLayer;
pub use mesh_normal_edit::NormalEditParams;
pub use mesh_auto_smooth::auto_smooth;
pub use mesh_auto_smooth::config_from_degrees as auto_smooth_config_degrees;
pub use mesh_auto_smooth::count_sharp_vertices;
pub use mesh_auto_smooth::dihedral_angle as auto_smooth_dihedral_angle;
pub use mesh_auto_smooth::is_smooth_angle;
pub use mesh_auto_smooth::AutoSmoothConfig;
pub use mesh_auto_smooth::AutoSmoothResult;
pub use mesh_face_orient::face_orientation;
pub use mesh_face_orient::flip_orientation;
pub use mesh_face_orient::is_consistently_oriented;
pub use mesh_face_orient::orient_count;
pub use mesh_face_orient::orient_faces_consistently;
pub use mesh_face_orient::orient_from_normals;
pub use mesh_face_orient::orient_to_json;
pub use mesh_face_orient::orientation_errors;
pub use mesh_face_orient::FaceOrient;
pub use mesh_limited_dissolve::config_from_degrees as dissolve_config_degrees;
pub use mesh_limited_dissolve::limited_dissolve;
pub use mesh_limited_dissolve::multi_face_groups;
pub use mesh_limited_dissolve::total_dissolved;
pub use mesh_limited_dissolve::within_dissolve_angle;
pub use mesh_limited_dissolve::DissolveResult;
pub use mesh_limited_dissolve::LimitedDissolveConfig;
pub use mesh_planar_decimate::are_coplanar as planar_are_coplanar;
pub use mesh_planar_decimate::config_degrees as planar_config_degrees;
pub use mesh_planar_decimate::decimate_ratio as planar_decimate_ratio;
pub use mesh_planar_decimate::planar_decimate;
pub use mesh_planar_decimate::survivor_count;
pub use mesh_planar_decimate::PlanarDecimateConfig;
pub use mesh_planar_decimate::PlanarDecimateResult;
pub use mesh_unsubdivide::find_loop_midpoints;
pub use mesh_unsubdivide::had_effect as unsubdivide_had_effect;
pub use mesh_unsubdivide::surviving_tri_count;
pub use mesh_unsubdivide::unsubdivide;
pub use mesh_unsubdivide::vertex_reduction_ratio;
pub use mesh_unsubdivide::UnsubdivideConfig;
pub use mesh_unsubdivide::UnsubdivideResult;
pub use mesh_tris_to_quads::merge_ratio as tris_to_quads_merge_ratio;
pub use mesh_tris_to_quads::quad_count as tris_quad_count;
pub use mesh_tris_to_quads::quads_to_tri_indices;
pub use mesh_tris_to_quads::total_faces as tris_to_quads_total_faces;
pub use mesh_tris_to_quads::tri_count as tris_remaining_tri_count;
pub use mesh_tris_to_quads::tris_to_quads;
pub use mesh_tris_to_quads::try_merge_to_quad;
pub use mesh_tris_to_quads::validate_quads;
pub use mesh_tris_to_quads::TrisToQuadsResult;
pub use mesh_quads_to_tris::default_split_mode;
pub use mesh_quads_to_tris::mixed_to_tris;
pub use mesh_quads_to_tris::quads_to_tris;
pub use mesh_quads_to_tris::split_quad;
pub use mesh_quads_to_tris::tri_index_count;
pub use mesh_quads_to_tris::triangle_count_from_quads;
pub use mesh_quads_to_tris::validate_quad_input;
pub use mesh_quads_to_tris::QuadSplitMode;
pub use mesh_quads_to_tris::QuadsToTrisResult;
pub use mesh_ngon_fill::all_valid as ngon_all_valid;
pub use mesh_ngon_fill::ear_clip_fill_2d;
pub use mesh_ngon_fill::expected_tri_count as ngon_expected_tri_count;
pub use mesh_ngon_fill::fan_fill;
pub use mesh_ngon_fill::ngon_fill;
pub use mesh_ngon_fill::triangle_count as ngon_tri_count;
pub use mesh_ngon_fill::NgonFillMethod;
pub use mesh_ngon_fill::NgonFillResult;
pub use mesh_grid_fill::dimensions_match;
pub use mesh_grid_fill::grid_bounds;
pub use mesh_grid_fill::grid_fill;
pub use mesh_grid_fill::grid_fill_face_count;
pub use mesh_grid_fill::grid_fill_is_valid;
pub use mesh_grid_fill::grid_fill_vertex;
pub use mesh_grid_fill::grid_fill_vertex_count;
pub use mesh_grid_fill::grid_quads_to_tris;
pub use mesh_grid_fill::new_grid_fill;
pub use mesh_grid_fill::quad_count as grid_quad_count;
pub use mesh_grid_fill::vertex_count as grid_vertex_count;
pub use mesh_grid_fill::GridFillConfig;
pub use mesh_grid_fill::GridFillParams;
pub use mesh_grid_fill::GridFillResult;
pub use mesh_fill_holes::boundary_vert_count;
pub use mesh_fill_holes::detect_holes;
pub use mesh_fill_holes::fill_holes as fill_holes_from_boundary;
pub use mesh_fill_holes::fill_triangle_count;
pub use mesh_fill_holes::has_holes;
pub use mesh_fill_holes::merge_filled as merge_filled_holes;
pub use mesh_fill_holes::FillHolesConfig;
pub use mesh_fill_holes::FillHolesResult;
pub use mesh_fill_holes::MeshHoleDetected;
pub use mesh_convex_hull_2d::convex_hull_2d;
pub use mesh_convex_hull_2d::cross_2d;
pub use mesh_convex_hull_2d::hull_area;
pub use mesh_convex_hull_2d::hull_perimeter;
pub use mesh_convex_hull_2d::point_in_hull as point_in_hull_2d;
pub use mesh_ear_clip::all_valid as ear_clip_all_valid;
pub use mesh_ear_clip::ear_clip as ear_clip_polygon;
pub use mesh_ear_clip::ear_clip_count;
pub use mesh_ear_clip::ear_clip_triangulate;
pub use mesh_ear_clip::ear_is_ear;
pub use mesh_ear_clip::expected_count as ear_clip_expected_count;
pub use mesh_ear_clip::is_ccw;
pub use mesh_ear_clip::polygon_area_2d as ear_clip_polygon_area;
pub use mesh_ear_clip::polygon_is_convex_vertex;
pub use mesh_ear_clip::triangle_area_2d;
pub use mesh_ear_clip::triangle_count as ear_clip_tri_count;
pub use mesh_ear_clip::EarClipResult;
pub use mesh_fan_triangulate::fan_area as fan_polygon_area;
pub use mesh_fan_triangulate::fan_centroid;
pub use mesh_fan_triangulate::fan_triangle_count as fan_tri_count;
pub use mesh_fan_triangulate::fan_triangulate;
pub use mesh_fan_triangulate::fan_triangulate_3d;
pub use mesh_fan_triangulate::fan_triangulate_all;
pub use mesh_fan_triangulate::fan_triangulate_ngon;
pub use mesh_fan_triangulate::is_convex_polygon;
pub use mesh_fan_triangulate::polygon_area_2d as fan_polygon_area_2d;
pub use mesh_tube_curve::expected_triangle_count as tube_curve_expected_triangle_count;
pub use mesh_tube_curve::expected_vertex_count as tube_curve_expected_vertex_count;
pub use mesh_tube_curve::tube_along_curve;
pub use mesh_tube_curve::validate_tube_params;
pub use mesh_tube_curve::TubeCurveParams;
pub use mesh_tube_curve::TubeMesh as TubeCurveMesh;
pub use mesh_cable_gen::build_cable;
pub use mesh_cable_gen::cable_lateral_area as cable_gen_lateral_area;
pub use mesh_cable_gen::cable_mass;
pub use mesh_cable_gen::expected_triangle_count as cable_expected_triangle_count;
pub use mesh_cable_gen::expected_vertex_count as cable_expected_vertex_count;
pub use mesh_cable_gen::validate_cable_params;
pub use mesh_cable_gen::CableMesh;
pub use mesh_cable_gen::CableParams;
pub use mesh_chain_link::build_chain;
pub use mesh_chain_link::chain_triangle_count;
pub use mesh_chain_link::ChainLinkParams;
pub use mesh_chain_link::LinkMesh;
pub use mesh_spring_helix::build_spring_helix;
pub use mesh_spring_helix::spring_arc_length;
pub use mesh_spring_helix::validate_spring_params;
pub use mesh_spring_helix::SpringHelixMesh;
pub use mesh_spring_helix::SpringHelixParams;
pub use mesh_gear_tooth::addendum_radius;
pub use mesh_gear_tooth::base_radius;
pub use mesh_gear_tooth::build_gear;
pub use mesh_gear_tooth::dedendum_radius;
pub use mesh_gear_tooth::involute_point;
pub use mesh_gear_tooth::pitch_radius;
pub use mesh_gear_tooth::validate_gear_params;
pub use mesh_gear_tooth::GearMesh;
pub use mesh_gear_tooth::GearParams;
pub use mesh_screw_helix::build_screw;
pub use mesh_screw_helix::estimated_vertex_count as screw_estimated_vertex_count;
pub use mesh_screw_helix::screw_arc_length;
pub use mesh_screw_helix::thread_depth;
pub use mesh_screw_helix::validate_screw_params;
pub use mesh_screw_helix::ScrewMesh;
pub use mesh_screw_helix::ScrewParams;
pub use mesh_torus_knot::build_torus_knot;
pub use mesh_torus_knot::expected_vertex_count as torus_knot_expected_vertex_count;
pub use mesh_torus_knot::torus_knot_point;
pub use mesh_torus_knot::validate_torus_knot_params;
pub use mesh_torus_knot::TorusKnotMesh;
pub use mesh_torus_knot::TorusKnotParams;
pub use mesh_nonorientable::build_mobius_strip;
pub use mesh_nonorientable::expected_vertex_count as mobius_expected_vertex_count;
pub use mesh_nonorientable::mobius_point as nonorientable_mobius_point;
pub use mesh_nonorientable::validate_mobius_params;
pub use mesh_nonorientable::MobiusMesh as MobiusStripMesh;
pub use mesh_nonorientable::MobiusStripParams;
pub use mesh_projective_plane::build_klein_bottle;
pub use mesh_projective_plane::expected_triangle_count as klein_expected_triangle_count;
pub use mesh_projective_plane::expected_vertex_count as klein_expected_vertex_count;
pub use mesh_projective_plane::klein_point as projective_klein_point;
pub use mesh_projective_plane::validate_klein_params;
pub use mesh_projective_plane::KleinBottleMesh;
pub use mesh_projective_plane::KleinBottleParams;
pub use mesh_torus_ring::build_torus_ring;
pub use mesh_torus_ring::expected_vertex_count as torus_ring_expected_vertex_count;
pub use mesh_torus_ring::torus_point;
pub use mesh_torus_ring::torus_surface_area as torus_ring_surface_area;
pub use mesh_torus_ring::torus_volume as torus_ring_volume;
pub use mesh_torus_ring::validate_torus_params;
pub use mesh_torus_ring::TorusRingMesh;
pub use mesh_torus_ring::TorusRingParams;
pub use mesh_geosphere::build_geosphere;
pub use mesh_geosphere::expected_triangle_count as geosphere_expected_triangle_count;
pub use mesh_geosphere::sphere_surface_area as geosphere_sphere_surface_area;
pub use mesh_geosphere::validate_geosphere_params;
pub use mesh_geosphere::GeosphereMesh;
pub use mesh_geosphere::GeosphereParams;
pub use mesh_end_cap::build_capped_cylinder;
pub use mesh_end_cap::lateral_area as end_cap_lateral_area;
pub use mesh_end_cap::total_surface_area as end_cap_total_surface_area;
pub use mesh_end_cap::validate_params as validate_capped_cylinder_params;
pub use mesh_end_cap::CappedCylinderMesh;
pub use mesh_end_cap::CappedCylinderParams;
pub use mesh_loft::loft_profiles;
pub use mesh_loft::loft_triangle_count;
pub use mesh_loft::loft_vertex_count as mesh_loft_vertex_count;
pub use mesh_loft::profile_centroid;
pub use mesh_loft::LoftResult;
pub use mesh_ruled_surface::build_ruled_surface;
pub use mesh_ruled_surface::lerp3 as ruled_lerp3;
pub use mesh_ruled_surface::ruled_tri_count;
pub use mesh_ruled_surface::ruled_vertex_count;
pub use mesh_ruled_surface::validate_ruled_surface;
pub use mesh_ruled_surface::RuledSurface;
pub use mesh_coons_patch::build_coons_patch;
pub use mesh_coons_patch::coons_eval;
pub use mesh_coons_patch::coons_tri_count;
pub use mesh_coons_patch::coons_vertex_count;
pub use mesh_coons_patch::validate_coons_patch;
pub use mesh_coons_patch::CoonsPatch;
pub use mesh_nurbs_surface::new_nurbs_surface;
pub use mesh_nurbs_surface::nurbs_control_bbox;
pub use mesh_nurbs_surface::nurbs_control_point_count;
pub use mesh_nurbs_surface::tessellate_nurbs;
pub use mesh_nurbs_surface::uniform_knots;
pub use mesh_nurbs_surface::validate_nurbs;
pub use mesh_nurbs_surface::NurbsSurface;
pub use mesh_bezier_surface::bernstein3;
pub use mesh_bezier_surface::bezier_surface_tri_count;
pub use mesh_bezier_surface::bezier_surface_vertex_count;
pub use mesh_bezier_surface::eval_bezier_surface;
pub use mesh_bezier_surface::tessellate_bezier_surface;
pub use mesh_bezier_surface::validate_bezier_surface;
pub use mesh_bezier_surface::BezierControlGrid;
pub use mesh_bezier_surface::BezierSurface;
pub use mesh_gordon_surface::gordon_total_u_points;
pub use mesh_gordon_surface::gordon_u_curve_count;
pub use mesh_gordon_surface::gordon_v_curve_count;
pub use mesh_gordon_surface::new_gordon_surface;
pub use mesh_gordon_surface::tessellate_gordon;
pub use mesh_gordon_surface::validate_gordon;
pub use mesh_gordon_surface::GordonSurface;
pub use mesh_skinned_surface::build_skinned_surface;
pub use mesh_skinned_surface::chord_length_params;
pub use mesh_skinned_surface::skinned_tri_count;
pub use mesh_skinned_surface::skinned_vertex_count;
pub use mesh_skinned_surface::validate_skinned_surface;
pub use mesh_skinned_surface::SkinnedSurface;
pub use mesh_revolution_surface::build_revolution_surface;
pub use mesh_revolution_surface::revolution_surface_area;
pub use mesh_revolution_surface::revolution_tri_count;
pub use mesh_revolution_surface::revolution_vertex_count;
pub use mesh_revolution_surface::validate_revolution_surface;
pub use mesh_revolution_surface::RevolutionSurface;
pub use mesh_extruded_polygon::build_extruded_polygon;
pub use mesh_extruded_polygon::extruded_tri_count;
pub use mesh_extruded_polygon::extruded_vertex_count;
pub use mesh_extruded_polygon::lateral_area as extruded_lateral_area;
pub use mesh_extruded_polygon::validate_extruded_polygon;
pub use mesh_extruded_polygon::ExtrudedPolygon;
pub use mesh_prism_frustum::build_prism_frustum;
pub use mesh_prism_frustum::frustum_lateral_area;
pub use mesh_prism_frustum::frustum_tri_count;
pub use mesh_prism_frustum::frustum_vertex_count;
pub use mesh_prism_frustum::frustum_volume;
pub use mesh_prism_frustum::validate_prism_frustum;
pub use mesh_prism_frustum::PrismFrustum;
pub use mesh_platonic_solid::build_platonic_solid;
pub use mesh_platonic_solid::is_unit_sphere as platonic_is_unit_sphere;
pub use mesh_platonic_solid::platonic_tri_count;
pub use mesh_platonic_solid::platonic_vertex_count;
pub use mesh_platonic_solid::validate_platonic;
pub use mesh_platonic_solid::PlatonicKind;
pub use mesh_platonic_solid::PlatonicSolid;
pub use mesh_archimedean_solid::archimedean_tri_count;
pub use mesh_archimedean_solid::archimedean_vertex_count;
pub use mesh_archimedean_solid::build_archimedean_solid;
pub use mesh_archimedean_solid::is_unit_sphere as archimedean_is_unit_sphere;
pub use mesh_archimedean_solid::validate_archimedean;
pub use mesh_archimedean_solid::ArchimedeanKind;
pub use mesh_archimedean_solid::ArchimedeanSolid;
pub use mesh_antiprism::antiprism_expected_tris;
pub use mesh_antiprism::antiprism_tri_count;
pub use mesh_antiprism::antiprism_vertex_count;
pub use mesh_antiprism::build_antiprism;
pub use mesh_antiprism::has_alternating_strip;
pub use mesh_antiprism::validate_antiprism;
pub use mesh_antiprism::Antiprism;
pub use mesh_bipyramid::bipyramid_expected_tris;
pub use mesh_bipyramid::bipyramid_surface_area;
pub use mesh_bipyramid::bipyramid_tri_count;
pub use mesh_bipyramid::bipyramid_vertex_count;
pub use mesh_bipyramid::build_bipyramid;
pub use mesh_bipyramid::validate_bipyramid;
pub use mesh_bipyramid::Bipyramid;
pub use mesh_trapezohedron::build_trapezohedron;
pub use mesh_trapezohedron::trapezohedron_expected_tris;
pub use mesh_trapezohedron::trapezohedron_surface_area;
pub use mesh_trapezohedron::trapezohedron_tri_count;
pub use mesh_trapezohedron::trapezohedron_vertex_count;
pub use mesh_trapezohedron::validate_trapezohedron;
pub use mesh_trapezohedron::Trapezohedron;
pub use mesh_stellated_solid::build_stellated_solid;
pub use mesh_stellated_solid::stellated_tri_count;
pub use mesh_stellated_solid::stellated_vertex_count;
pub use mesh_stellated_solid::stellations_protrude;
pub use mesh_stellated_solid::validate_stellated;
pub use mesh_stellated_solid::StellatedSolid;
pub use mesh_stellated_solid::StellationBase;
pub use mesh_crease_set::add_crease_set;
pub use mesh_crease_set::add_edge_to_crease_set;
pub use mesh_crease_set::find_crease_set;
pub use mesh_crease_set::merge_crease_set_collections;
pub use mesh_crease_set::new_crease_set_collection;
pub use mesh_crease_set::total_crease_edges;
pub use mesh_crease_set::validate_crease_sets;
pub use mesh_crease_set::CreaseSet;
pub use mesh_crease_set::CreaseSetCollection;
pub use mesh_sharp_vertex::get_vertex_sharpness;
pub use mesh_sharp_vertex::is_sharp_vertex as is_sharp_corner_vertex;
pub use mesh_sharp_vertex::mark_sharp_vertex;
pub use mesh_sharp_vertex::max_sharpness;
pub use mesh_sharp_vertex::new_sharp_vertex_set;
pub use mesh_sharp_vertex::sharp_vertex_count;
pub use mesh_sharp_vertex::unmark_sharp_vertex;
pub use mesh_sharp_vertex::SharpVertexSet;
pub use mesh_custom_split_normals::clear_split_normals;
pub use mesh_custom_split_normals::get_split_normal;
pub use mesh_custom_split_normals::new_split_normal_layer;
pub use mesh_custom_split_normals::set_split_normal;
pub use mesh_custom_split_normals::split_normal_count;
pub use mesh_custom_split_normals::validate_split_normals;
pub use mesh_custom_split_normals::SplitNormal;
pub use mesh_custom_split_normals::SplitNormalLayer;
pub use mesh_normal_override::get_override_normal;
pub use mesh_normal_override::new_normal_override_layer;
pub use mesh_normal_override::override_count;
pub use mesh_normal_override::remove_override;
pub use mesh_normal_override::set_override_normal;
pub use mesh_normal_override::validate_overrides;
pub use mesh_normal_override::NormalOverrideLayer;
pub use mesh_uv_pin::clear_pins;
pub use mesh_uv_pin::get_pin_uv;
pub use mesh_uv_pin::is_pinned;
pub use mesh_uv_pin::new_uv_pin_set;
pub use mesh_uv_pin::pin_count;
pub use mesh_uv_pin::pin_vertex;
pub use mesh_uv_pin::unpin_vertex;
pub use mesh_uv_pin::UvPinSet;
pub use mesh_uv_minimize_stretch::average_stretch;
pub use mesh_uv_minimize_stretch::minimize_stretch;
pub use mesh_uv_minimize_stretch::triangle_uv_stretch;
pub use mesh_uv_minimize_stretch::StretchMinConfig;
pub use mesh_uv_minimize_stretch::StretchMinResult;
pub use mesh_uv_align_axis::align_to_axis;
pub use mesh_uv_align_axis::dominant_angle_deg;
pub use mesh_uv_align_axis::rotate_uv;
pub use mesh_uv_align_axis::uv_bounding_box;
pub use mesh_uv_align_axis::uv_centroid;
pub use mesh_uv_align_axis::AlignAxis;
pub use mesh_uv_align_axis::UvAlignResult;
pub use mesh_uv_rotate_align::edge_is_horizontal;
pub use mesh_uv_rotate_align::edge_uv_angle_deg;
pub use mesh_uv_rotate_align::rotate_align_edge;
pub use mesh_uv_rotate_align::rotate_island;
pub use mesh_uv_rotate_align::UvRotateAlignResult;
pub use mesh_uv_scale_to_bounds::scale_uvs_to_bounds;
pub use mesh_uv_scale_to_bounds::scale_uvs_uniform;
pub use mesh_uv_scale_to_bounds::uv_extents;
pub use mesh_uv_scale_to_bounds::UvTargetBounds;
pub use mesh_uv_copy_paste::clear_clipboard;
pub use mesh_uv_copy_paste::clipboard_fits;
pub use mesh_uv_copy_paste::clipboard_size;
pub use mesh_uv_copy_paste::copy_uvs;
pub use mesh_uv_copy_paste::new_uv_clipboard;
pub use mesh_uv_copy_paste::paste_exact;
pub use mesh_uv_copy_paste::paste_uvs;
pub use mesh_uv_copy_paste::UvClipboard;
pub use mesh_vertex_color_layer::add_vertex_color_layer;
pub use mesh_vertex_color_layer::get_layer_mut;
pub use mesh_vertex_color_layer::layer_average_color;
pub use mesh_vertex_color_layer::layer_count as vertex_color_layer_count;
pub use mesh_vertex_color_layer::new_vertex_color_layer_set;
pub use mesh_vertex_color_layer::remove_vertex_color_layer;
pub use mesh_vertex_color_layer::set_active_layer;
pub use mesh_vertex_color_layer::VertexColorLayer;
pub use mesh_vertex_color_layer::VertexColorLayerSet;
pub use mesh_attribute_layer::add_attribute_layer;
pub use mesh_attribute_layer::attribute_average;
pub use mesh_attribute_layer::attribute_layer_count;
pub use mesh_attribute_layer::get_attribute_layer;
pub use mesh_attribute_layer::get_attribute_layer_mut;
pub use mesh_attribute_layer::new_attribute_layer_set;
pub use mesh_attribute_layer::remove_attribute_layer;
pub use mesh_attribute_layer::validate_attribute_layers;
pub use mesh_attribute_layer::AttrDomain;
pub use mesh_attribute_layer::AttributeLayer;
pub use mesh_attribute_layer::AttributeLayerSet;
pub use mesh_custom_data::clear_custom_data;
pub use mesh_custom_data::custom_entry_count;
pub use mesh_custom_data::get_custom_entry;
pub use mesh_custom_data::list_custom_keys;
pub use mesh_custom_data::new_custom_data_block;
pub use mesh_custom_data::remove_custom_entry;
pub use mesh_custom_data::set_custom_entry;
pub use mesh_custom_data::CustomDataBlock;
pub use mesh_custom_data::CustomDataEntry;
pub use mesh_custom_data::CustomDataValue;
pub use mesh_property_layer::add_property_layer;
pub use mesh_property_layer::get_property;
pub use mesh_property_layer::new_property_layer_set;
pub use mesh_property_layer::property_layer_count;
pub use mesh_property_layer::property_min_max;
pub use mesh_property_layer::remove_property_layer;
pub use mesh_property_layer::reset_property_layer;
pub use mesh_property_layer::set_property;
pub use mesh_property_layer::PropertyLayer;
pub use mesh_property_layer::PropertyLayerSet;
pub use mesh_flag_layer::add_flag_layer;
pub use mesh_flag_layer::clear_flags;
pub use mesh_flag_layer::flag_layer_count;
pub use mesh_flag_layer::flag_set_count;
pub use mesh_flag_layer::get_flag;
pub use mesh_flag_layer::invert_flags;
pub use mesh_flag_layer::new_flag_layer_set;
pub use mesh_flag_layer::set_flag;
pub use mesh_flag_layer::FlagLayer;
pub use mesh_flag_layer::FlagLayerSet;
pub use mesh_slice_plane::classify_vertices as slice_classify_vertices;
pub use mesh_slice_plane::count_triangles_per_side;
pub use mesh_slice_plane::edge_plane_intersect as slice_edge_plane_intersect;
pub use mesh_slice_plane::slice_mesh_with_plane;
pub use mesh_slice_plane::SlicePlane as BoolSlicePlane;
pub use mesh_slice_plane::SliceResult as BoolSliceResult;
pub use mesh_intersect_ray::count_ray_intersections;
pub use mesh_intersect_ray::intersect_ray_mesh;
pub use mesh_intersect_ray::intersect_ray_mesh_all;
pub use mesh_intersect_ray::ray_triangle_intersect as mti_ray_triangle_intersect;
pub use mesh_intersect_ray::Ray as IntersectRay;
pub use mesh_intersect_ray::RayHitResult;
pub use mesh_closest_point_query::closest_point_on_triangle as query_closest_point_on_triangle;
pub use mesh_closest_point_query::is_near_surface;
pub use mesh_closest_point_query::query_closest_point;
pub use mesh_closest_point_query::query_closest_within_radius;
pub use mesh_closest_point_query::ClosestPointResult as MeshClosestPointResult;
pub use mesh_centroid_query::center_mesh_at_centroid;
pub use mesh_centroid_query::centroid_deviation;
pub use mesh_centroid_query::surface_centroid;
pub use mesh_centroid_query::vertex_centroid as mesh_vertex_centroid;
pub use mesh_centroid_query::volume_centroid;
pub use mesh_moment_of_inertia::add_inertia_tensors;
pub use mesh_moment_of_inertia::mesh_inertia_tensor;
pub use mesh_moment_of_inertia::parallel_axis_shift;
pub use mesh_moment_of_inertia::scale_inertia_tensor;
pub use mesh_moment_of_inertia::InertiaTensor as MeshInertiaTensor;
pub use mesh_lattice_deform::ffd_apply_to_point;
pub use mesh_lattice_deform::ffd_lattice_point_count;
pub use mesh_lattice_deform::ffd_lattice_size;
pub use mesh_lattice_deform::ffd_reset;
pub use mesh_lattice_deform::ffd_set_control_point;
pub use mesh_lattice_deform::new_ffd_lattice;
pub use mesh_lattice_deform::FfdLattice as FfdLatticeNew;
pub use mesh_solidify::new_solidify_params;
pub use mesh_solidify::solidify_face_count;
pub use mesh_solidify::solidify_flip_normal;
pub use mesh_solidify::solidify_vert_count;
pub use mesh_solidify::solidify_vertex as solidify_vertex_fn;
pub use mesh_solidify::SolidifyParams;
pub use mesh_bridge_edge_loops::bridge_face_count_bl;
pub use mesh_bridge_edge_loops::bridge_loops_quads;
pub use mesh_bridge_edge_loops::bridge_vertex_count_bl;
pub use mesh_bridge_edge_loops::loop_centroid_bl;
pub use mesh_bridge_edge_loops::loop_perimeter_bl;
pub use mesh_bridge_edge_loops::new_bridge_edge_loop;
pub use mesh_bridge_edge_loops::BridgeEdgeLoop;
pub use mesh_screw_modifier::new_screw_params;
pub use mesh_screw_modifier::screw_output_vertex_count;
pub use mesh_screw_modifier::screw_total_angle_deg;
pub use mesh_screw_modifier::screw_total_height;
pub use mesh_screw_modifier::screw_transform_vertex;
pub use mesh_screw_modifier::ScrewParams as ScrewModParams;
pub use mesh_array_modifier::array_face_count;
pub use mesh_array_modifier::array_instance_transform;
pub use mesh_array_modifier::array_total_size;
pub use mesh_array_modifier::array_vertex_count;
pub use mesh_array_modifier::new_array_params;
pub use mesh_array_modifier::ArrayParams;
pub use mesh_bevel_modifier::bevel_edge_offset;
pub use mesh_bevel_modifier::bevel_new_face_count;
pub use mesh_bevel_modifier::bevel_new_vertex_count;
pub use mesh_bevel_modifier::bevel_segment_point;
pub use mesh_bevel_modifier::new_bevel_params;
pub use mesh_bevel_modifier::BevelParams;
pub use mesh_wireframe_modifier::new_wireframe_params;
pub use mesh_wireframe_modifier::wireframe_edge_count as wireframe_mod_edge_count;
pub use mesh_wireframe_modifier::wireframe_edge_tube_verts;
pub use mesh_wireframe_modifier::wireframe_tube_length;
pub use mesh_wireframe_modifier::wireframe_vertex_count as wireframe_mod_vertex_count;
pub use mesh_wireframe_modifier::WireframeParams;
pub use mesh_skin_modifier::new_skin_vertex;
pub use mesh_skin_modifier::skin_cap_center;
pub use mesh_skin_modifier::skin_segment_length;
pub use mesh_skin_modifier::skin_segment_verts;
pub use mesh_skin_modifier::skin_total_volume;
pub use mesh_skin_modifier::SkinVertexNew;
pub use mesh_mask_modifier::mask_apply;
pub use mesh_mask_modifier::mask_count_visible;
pub use mesh_mask_modifier::mask_invert;
pub use mesh_mask_modifier::mask_keep_vertex;
pub use mesh_mask_modifier::new_mask_params;
pub use mesh_mask_modifier::MaskParams;
pub use mesh_tube_deform::new_tube_path;
pub use mesh_tube_deform::tube_deform_vertex;
pub use mesh_tube_deform::tube_path_at;
pub use mesh_tube_deform::tube_path_length;
pub use mesh_tube_deform::tube_point_count;
pub use mesh_tube_deform::tube_radius_at;
pub use mesh_tube_deform::TubePath;
pub use mesh_curve_to_mesh::curve_length;
pub use mesh_curve_to_mesh::curve_segment_ring;
pub use mesh_curve_to_mesh::curve_to_mesh_face_count;
pub use mesh_curve_to_mesh::curve_to_mesh_vertex_count;
pub use mesh_curve_to_mesh::new_curve_mesh_params;
pub use mesh_curve_to_mesh::CurveMeshParams;
pub use mesh_spin::new_spin_params;
pub use mesh_spin::spin_face_count;
pub use mesh_spin::spin_is_closed;
pub use mesh_spin::spin_vertex;
pub use mesh_spin::spin_vertex_count;
pub use mesh_spin::SpinParams;
pub use mesh_decimate_modifier::decimate_collapse_count;
pub use mesh_decimate_modifier::decimate_priority;
pub use mesh_decimate_modifier::decimate_ratio_clamp;
pub use mesh_decimate_modifier::decimate_target_face_count;
pub use mesh_decimate_modifier::new_decimate_params;
pub use mesh_decimate_modifier::DecimateParams;
pub use mesh_mirror_modifier::mirror_copy_count;
pub use mesh_mirror_modifier::mirror_flip_normal as mirror_mod_flip_normal;
pub use mesh_mirror_modifier::mirror_should_merge;
pub use mesh_mirror_modifier::mirror_vertex as mirror_mod_vertex;
pub use mesh_mirror_modifier::new_mirror_params;
pub use mesh_mirror_modifier::MirrorParams as MirrorModParams;
pub use mesh_stroke_extrude::new_stroke_point;
pub use mesh_stroke_extrude::stroke_area;
pub use mesh_stroke_extrude::stroke_extrude_quad;
pub use mesh_stroke_extrude::stroke_face_count as stroke_extrude_face_count;
pub use mesh_stroke_extrude::stroke_total_length;
pub use mesh_stroke_extrude::stroke_vertex_count as stroke_extrude_vertex_count;
pub use mesh_stroke_extrude::StrokePoint;
pub use mesh_thicken_normals::thicken_average_normal;
pub use mesh_thicken_normals::thicken_boundary_vertex;
pub use mesh_thicken_normals::thicken_is_normalized;
pub use mesh_thicken_normals::thicken_mesh_vertices;
pub use mesh_thicken_normals::thicken_vertex;
pub use mesh_bend_modifier::bend_angle_at;
pub use mesh_bend_modifier::bend_curvature;
pub use mesh_bend_modifier::bend_is_unlimited;
pub use mesh_bend_modifier::bend_vertex;
pub use mesh_bend_modifier::new_bend_params;
pub use mesh_bend_modifier::BendParams;
pub use mesh_taper_modifier::new_taper_params;
pub use mesh_taper_modifier::taper_is_uniform;
pub use mesh_taper_modifier::taper_scale_at;
pub use mesh_taper_modifier::taper_vertex;
pub use mesh_taper_modifier::taper_volume_ratio;
pub use mesh_taper_modifier::TaperParams;
pub use mesh_twist_modifier::new_twist_params;
pub use mesh_twist_modifier::twist_angle_at;
pub use mesh_twist_modifier::twist_is_zero;
pub use mesh_twist_modifier::twist_vertex;
pub use mesh_twist_modifier::TwistParams;
pub use mesh_shear_modifier::new_shear_params;
pub use mesh_shear_modifier::shear_area_ratio;
pub use mesh_shear_modifier::shear_is_identity;
pub use mesh_shear_modifier::shear_matrix_2x2;
pub use mesh_shear_modifier::shear_vertex;
pub use mesh_shear_modifier::ShearParams;
pub use mesh_cast_modifier::cast_blend;
pub use mesh_cast_modifier::cast_target_cylinder;
pub use mesh_cast_modifier::cast_target_sphere;
pub use mesh_cast_modifier::cast_vertex;
pub use mesh_cast_modifier::new_cast_sphere;
pub use mesh_cast_modifier::CastParams;
pub use mesh_smooth_modifier::smooth_cotangent_weight;
pub use mesh_smooth_modifier::smooth_mesh_pass;
pub use mesh_smooth_modifier::smooth_passes;
pub use mesh_smooth_modifier::smooth_vertex_laplacian;
pub use mesh_displace_modifier::displace_along_axis;
pub use mesh_displace_modifier::displace_along_normal;
pub use mesh_displace_modifier::displace_midlevel_offset;
pub use mesh_displace_modifier::displace_vertex_new as displace_vertex_params;
pub use mesh_displace_modifier::new_displace_params;
pub use mesh_displace_modifier::DisplaceParams;
pub use mesh_warp_modifier::new_warp_params;
pub use mesh_warp_modifier::warp_falloff_linear;
pub use mesh_warp_modifier::warp_falloff_smooth;
pub use mesh_warp_modifier::warp_influence;
pub use mesh_warp_modifier::warp_vertex_new as warp_vertex_params;
pub use mesh_warp_modifier::WarpParams;
pub use mesh_transfer_weights::new_weight_map as new_mesh_weight_map;
pub use mesh_transfer_weights::weight_blend;
pub use mesh_transfer_weights::weight_get;
pub use mesh_transfer_weights::weight_normalize;
pub use mesh_transfer_weights::weight_set;
pub use mesh_transfer_weights::weight_transfer_nearest;
pub use mesh_transfer_weights::WeightMap as MeshWeightMap;
pub use mesh_proximity_deform::new_proximity_deformer;
pub use mesh_proximity_deform::proximity_count_influenced;
pub use mesh_proximity_deform::proximity_deform_vertex;
pub use mesh_proximity_deform::proximity_influence;
pub use mesh_proximity_deform::proximity_nearest_distance;
pub use mesh_proximity_deform::ProximityDeformer;
pub use mesh_seam_flatten::new_uv_seam as new_mesh_uv_seam;
pub use mesh_seam_flatten::seam_add_pair;
pub use mesh_seam_flatten::seam_boundary_length as seam_flatten_boundary_length;
pub use mesh_seam_flatten::seam_contains_vertex;
pub use mesh_seam_flatten::seam_flatten_uv;
pub use mesh_seam_flatten::seam_pair_count;
pub use mesh_seam_flatten::UvSeam as MeshUvSeam;
pub use mesh_hole_detect::boundary_add_loop;
pub use mesh_hole_detect::boundary_hole_count;
pub use mesh_hole_detect::boundary_total_vertices;
pub use mesh_hole_detect::detect_boundary_edges;
pub use mesh_hole_detect::is_closed_mesh as mesh_hole_is_closed;
pub use mesh_hole_detect::new_mesh_boundary;
pub use mesh_hole_detect::MeshBoundary;
pub use mesh_data_transfer::new_vertex_data;
pub use mesh_data_transfer::transfer_nearest_normal;
pub use mesh_data_transfer::transfer_nearest_uv;
pub use mesh_data_transfer::vertex_data_count;
pub use mesh_data_transfer::vertex_nearest_index;
pub use mesh_data_transfer::VertexData;
pub use mesh_fiber_orientation::fiber_anisotropy_index;
pub use mesh_fiber_orientation::fiber_count;
pub use mesh_fiber_orientation::fiber_get;
pub use mesh_fiber_orientation::fiber_mean_coherence;
pub use mesh_fiber_orientation::fiber_set;
pub use mesh_fiber_orientation::new_fiber_field;
pub use mesh_fiber_orientation::FiberField;
pub use mesh_ambient_occlusion::bake_ambient_occlusion as bake_ao_full;
pub use mesh_ambient_occlusion::ao_estimate;
pub use mesh_ambient_occlusion::ao_params_is_valid;
pub use mesh_ambient_occlusion::ao_sample_hemisphere;
pub use mesh_ambient_occlusion::ao_to_color;
pub use mesh_ambient_occlusion::new_ao_params;
pub use mesh_ambient_occlusion::AoBvh;
pub use mesh_ambient_occlusion::AoConfig;
pub use mesh_ambient_occlusion::AoParams;
pub use mesh_ambient_occlusion::Lcg as AoLcg;
pub use mesh_ambient_occlusion::MeshBuffers as AoMeshBuffers;
pub use mesh_thickness_map::new_thickness_map;
pub use mesh_thickness_map::thickness_get;
pub use mesh_thickness_map::thickness_max;
pub use mesh_thickness_map::thickness_mean;
pub use mesh_thickness_map::thickness_set;
pub use mesh_thickness_map::thickness_to_color;
pub use mesh_thickness_map::ThicknessMap as MeshThicknessMap;
pub use mesh_cavity_map::cavity_get;
pub use mesh_cavity_map::cavity_is_cavity;
pub use mesh_cavity_map::cavity_is_convex;
pub use mesh_cavity_map::cavity_mean;
pub use mesh_cavity_map::cavity_set;
pub use mesh_cavity_map::cavity_to_color;
pub use mesh_cavity_map::new_cavity_map;
pub use mesh_cavity_map::CavityMap;
pub use mesh_curvature_map::curv_gaussian_to_color;
pub use mesh_curvature_map::curv_get_gaussian;
pub use mesh_curvature_map::curv_get_mean;
pub use mesh_curvature_map::curv_mean_to_color;
pub use mesh_curvature_map::curv_set_gaussian;
pub use mesh_curvature_map::curv_set_mean;
pub use mesh_curvature_map::new_curvature_map;
pub use mesh_curvature_map::CurvatureMap as MeshCurvatureMap;
pub use mesh_bent_normal::bent_normal_ao;
pub use mesh_bent_normal::bent_normal_count;
pub use mesh_bent_normal::bent_normal_get;
pub use mesh_bent_normal::bent_normal_set;
pub use mesh_bent_normal::bent_normal_to_color;
pub use mesh_bent_normal::new_bent_normal_map;
pub use mesh_bent_normal::BentNormalMap;
pub use mesh_edge_flow_field::edge_flow_field_curl_magnitude;
pub use mesh_edge_flow_field::edge_flow_field_divergence;
pub use mesh_edge_flow_field::edge_flow_field_get;
pub use mesh_edge_flow_field::edge_flow_field_mean_speed;
pub use mesh_edge_flow_field::edge_flow_field_set;
pub use mesh_edge_flow_field::new_edge_flow_field;
pub use mesh_edge_flow_field::EdgeFlowField;
pub use mesh_retopo_guide::new_retopo_stroke;
pub use mesh_retopo_guide::stroke_direction;
pub use mesh_retopo_guide::stroke_length;
pub use mesh_retopo_guide::stroke_point_count;
pub use mesh_retopo_guide::stroke_resample;
pub use mesh_retopo_guide::stroke_snap_to_surface;
pub use mesh_retopo_guide::RetopoStroke;
pub use mesh_symmetry_map::new_symmetry_map;
pub use mesh_symmetry_map::sym_add_pair;
pub use mesh_symmetry_map::sym_find_mirror;
pub use mesh_symmetry_map::sym_is_symmetric_position;
pub use mesh_symmetry_map::sym_mirror_position;
pub use mesh_symmetry_map::sym_pair_count;
pub use mesh_symmetry_map::SymmetryMap;
pub use mesh_pose_space::new_pose_key;
pub use mesh_pose_space::pose_apply;
pub use mesh_pose_space::pose_best_key;
pub use mesh_pose_space::pose_key_count;
pub use mesh_pose_space::pose_weight;
pub use mesh_pose_space::PoseKey;
pub use mesh_corrective_shape::corrective_apply;
pub use mesh_corrective_shape::corrective_is_active;
pub use mesh_corrective_shape::corrective_peak_weight;
pub use mesh_corrective_shape::corrective_weight;
pub use mesh_corrective_shape::new_corrective_shape;
pub use mesh_corrective_shape::CorrectiveShape;
pub use mesh_wrinkle_map::new_wrinkle_driver;
pub use mesh_wrinkle_map::wrinkle_factor;
pub use mesh_wrinkle_map::wrinkle_mean_weight;
pub use mesh_wrinkle_map::wrinkle_peak_count;
pub use mesh_wrinkle_map::wrinkle_weights_at;
pub use mesh_wrinkle_map::WrinkleDriver;
pub use mesh_jiggle::jiggle_impulse;
pub use mesh_jiggle::jiggle_is_settled;
pub use mesh_jiggle::jiggle_offset;
pub use mesh_jiggle::jiggle_set_target;
pub use mesh_jiggle::jiggle_step;
pub use mesh_jiggle::new_jiggle_vertex;
pub use mesh_jiggle::JiggleVertex;
pub use mesh_flow_map::flow_map_get;
pub use mesh_flow_map::flow_map_mean_speed;
pub use mesh_flow_map::flow_map_normalize_dir;
pub use mesh_flow_map::flow_map_set;
pub use mesh_flow_map::flow_map_to_color;
pub use mesh_flow_map::new_flow_map;
pub use mesh_flow_map::FlowMap;
pub use mesh_stress_lines::new_stress_line;
pub use mesh_stress_lines::stress_line_color;
pub use mesh_stress_lines::stress_line_is_critical;
pub use mesh_stress_lines::stress_line_length;
pub use mesh_stress_lines::stress_line_point_count;
pub use mesh_stress_lines::stress_line_push;
pub use mesh_stress_lines::StressLine;
pub use mesh_curvature_lines::curvline_anisotropy;
pub use mesh_curvature_lines::curvline_color;
pub use mesh_curvature_lines::curvline_length;
pub use mesh_curvature_lines::curvline_point_count;
pub use mesh_curvature_lines::curvline_push;
pub use mesh_curvature_lines::new_curvature_line;
pub use mesh_curvature_lines::CurvatureLine;
pub use mesh_poke_faces::poke_center;
pub use mesh_poke_faces::poke_face;
pub use mesh_poke_faces::poke_face_area;
pub use mesh_poke_faces::poke_triangle_count as poke_face_triangle_count;
pub use mesh_poke_faces::poke_vertex_count as poke_face_vertex_count;
pub use mesh_poke_faces::PokeResult;
pub use mesh_inset_faces::default_inset_config;
pub use mesh_inset_faces::inset_centroid;
pub use mesh_inset_faces::inset_creates_valid_face;
pub use mesh_inset_faces::inset_face;
pub use mesh_inset_faces::inset_face_center;
pub use mesh_inset_faces::inset_face_thickness;
pub use mesh_inset_faces::inset_faces as inset_faces_config;
pub use mesh_inset_faces::inset_individual_faces;
pub use mesh_inset_faces::inset_result_face_count;
pub use mesh_inset_faces::inset_validate_config;
pub use mesh_inset_faces::InsetConfig;
pub use mesh_inset_faces::InsetResult;
pub use mesh_bisect::bisect_classify_vertex;
pub use mesh_bisect::bisect_count_above;
pub use mesh_bisect::bisect_count_below;
pub use mesh_bisect::bisect_edge_intersection;
pub use mesh_bisect::bisect_lerp as bisect_lerp3;
pub use mesh_bisect::new_bisect_plane;
pub use mesh_bisect::BisectPlane;
pub use mesh_intersect_line::line_segment_triangle_intersect;
pub use mesh_intersect_line::ray_mesh_intersect_count;
pub use mesh_intersect_line::ray_point_at;
pub use mesh_intersect_line::ray_triangle_intersect as ray_tri_intersect;
pub use mesh_select_by_angle::angle_between_normals_deg;
pub use mesh_select_by_angle::face_normal_3;
pub use mesh_select_by_angle::select_faces_by_angle;
pub use mesh_select_by_angle::select_flat_faces;
pub use mesh_select_linked::build_face_adjacency as linked_build_adjacency;
pub use mesh_select_linked::count_islands;
pub use mesh_select_linked::face_shares_edge;
pub use mesh_select_linked::select_linked_faces;
pub use mesh_select_linked::select_linked_vertices;
pub use mesh_path_cut::new_path_cut;
pub use mesh_path_cut::path_cut_edges;
pub use mesh_path_cut::path_cut_is_closed;
pub use mesh_path_cut::path_cut_length;
pub use mesh_path_cut::path_cut_vertex_count;
pub use mesh_path_cut::path_shortest;
pub use mesh_path_cut::PathCut;
pub use mesh_edge_slide::edge_direction;
pub use mesh_edge_slide::edge_length as edge_slide_length;
pub use mesh_edge_slide::edge_slide_edge;
pub use mesh_edge_slide::edge_slide_midpoint;
pub use mesh_edge_slide::edge_slide_vert;
pub use mesh_rip_vertices::rip_face_count_new;
pub use mesh_rip_vertices::rip_is_valid_gap;
pub use mesh_rip_vertices::rip_seam_length;
pub use mesh_rip_vertices::rip_vertex;
pub use mesh_rip_vertices::rip_vertex_count_new;
pub use mesh_rip_vertices::RipResult;
pub use mesh_merge_by_distance::merge_apply_to_faces;
pub use mesh_merge_by_distance::merge_by_distance;
pub use mesh_merge_by_distance::merge_count_unique;
pub use mesh_merge_by_distance::merge_remove_degenerate;
pub use mesh_merge_by_distance::merge_weld_threshold;
pub use mesh_polygon_fill::polygon_area_3d;
pub use mesh_polygon_fill::polygon_is_planar;
pub use mesh_polygon_fill::polygon_perimeter;
pub use mesh_polygon_fill::polygon_vertex_count as polygon_fill_vertex_count;
pub use mesh_polygon_fill::triangulate_polygon_3d;
pub use mesh_knife_cut::cut_edge_count;
pub use mesh_knife_cut::cut_vertex_count;
pub use mesh_knife_cut::knife_add_point;
pub use mesh_knife_cut::knife_cut;
pub use mesh_knife_cut::knife_cut_length as knife_cut_polyline_length;
pub use mesh_knife_cut::knife_cut_modified;
pub use mesh_knife_cut::knife_is_closed;
pub use mesh_knife_cut::knife_point_count;
pub use mesh_knife_cut::knife_project_to_face;
pub use mesh_knife_cut::new_knife_cut;
pub use mesh_knife_cut::KnifeCut;
pub use mesh_knife_cut::KnifeCutResult;
pub use mesh_knife_cut::KnifeLine;
pub use mesh_vertex_slide::nearest_neighbor as vertex_nearest_neighbor;
pub use mesh_vertex_slide::slide_to_json;
pub use mesh_vertex_slide::slide_vertex;
pub use mesh_vertex_slide::slide_vertices;
pub use mesh_vertex_slide::vertex_distance;
pub use mesh_vertex_slide::vertex_edge_direction;
pub use mesh_vertex_slide::vertex_slide_clamp;
pub use mesh_vertex_slide::vertex_slide_offset;
pub use mesh_vertex_slide::vertex_slide_position;
pub use mesh_vertex_slide::vertex_slide_toward_nearest;
pub use mesh_vertex_slide::VertexSlideResult;
pub use mesh_catenary::catenary_to_polyline;
pub use mesh_catenary::new_catenary;
pub use mesh_helix::helix_length;
pub use mesh_helix::helix_point;
pub use mesh_helix::helix_point_count;
pub use mesh_helix::helix_to_polyline;
pub use mesh_helix::new_helix;
pub use mesh_cylinder_gen::cylinder_face_count as cylinder_tri_face_count;
pub use mesh_cylinder_gen::cylinder_is_cone;
pub use mesh_cylinder_gen::cylinder_vertex;
pub use mesh_cylinder_gen::new_cylinder;
pub use mesh_cylinder_gen::CylinderParams;
pub use mesh_capsule_gen::capsule_face_count as capsule_tri_face_count;
pub use mesh_capsule_gen::capsule_surface_area;
pub use mesh_capsule_gen::new_capsule;
pub use mesh_capsule_gen::CapsuleParams;
pub use mesh_torus::new_torus;
pub use mesh_torus::torus_face_count as torus_new_face_count;
pub use mesh_torus::torus_surface_area as torus_gen_surface_area;
pub use mesh_torus::torus_vertex;
pub use mesh_torus::torus_vertex_count as torus_new_vertex_count;
pub use mesh_torus::torus_volume as torus_gen_volume;
pub use mesh_torus::TorusParams;
pub use mesh_sphere_gen::icosphere_vertex_count as icosphere_vert_count_gen;
pub use mesh_sphere_gen::new_sphere_params;
pub use mesh_sphere_gen::sphere_surface_area as sphere_gen_surface_area;
pub use mesh_sphere_gen::uv_sphere_face_count;
pub use mesh_sphere_gen::uv_sphere_vertex;
pub use mesh_sphere_gen::uv_sphere_vertex_count as uv_sphere_gen_vertex_count;
pub use mesh_sphere_gen::SphereParams;
pub use mesh_plane_gen::new_plane;
pub use mesh_plane_gen::plane_area as plane_gen_area;
pub use mesh_plane_gen::plane_face_count as plane_tri_face_count;
pub use mesh_plane_gen::plane_uv;
pub use mesh_plane_gen::plane_vertex;
pub use mesh_plane_gen::plane_vertex_count as plane_gen_vertex_count;
pub use mesh_plane_gen::PlaneParams;
pub use mesh_icosphere_gen::icosahedron_faces as icosahedron_faces_gen;
pub use mesh_icosphere_gen::icosahedron_vertices as icosahedron_verts_gen;
pub use mesh_icosphere_gen::icosphere_build;
pub use mesh_icosphere_gen::icosphere_subdivide;
pub use mesh_icosphere_gen::icosphere_vertex_count as icosphere_vertex_count_gen;
pub use mesh_arrow_gen::arrow_face_count as arrow_gen_face_count;
pub use mesh_arrow_gen::arrow_tip_position;
pub use mesh_arrow_gen::arrow_total_length;
pub use mesh_arrow_gen::arrow_vertex_count as arrow_gen_vertex_count;
pub use mesh_arrow_gen::new_arrow;
pub use mesh_arrow_gen::ArrowParams;
pub use mesh_grid_gen::grid_bounds as grid_3d_bounds;
pub use mesh_grid_gen::grid_cell_count;
pub use mesh_grid_gen::grid_edge_count;
pub use mesh_grid_gen::grid_vertex;
pub use mesh_grid_gen::grid_vertex_count as grid_3d_vertex_count;
pub use mesh_grid_gen::new_grid_params_3d;
pub use mesh_grid_gen::GridParams3d;
pub use mesh_annulus_gen::annulus_area;
pub use mesh_annulus_gen::annulus_face_count as annulus_gen_face_count;
pub use mesh_annulus_gen::annulus_vertex;
pub use mesh_annulus_gen::annulus_vertex_count as annulus_gen_vertex_count;
pub use mesh_annulus_gen::new_annulus;
pub use mesh_annulus_gen::AnnulusParams;
pub use mesh_tetrahedron_gen::tetrahedron_circumradius;
pub use mesh_tetrahedron_gen::tetrahedron_edge_length;
pub use mesh_tetrahedron_gen::tetrahedron_faces;
pub use mesh_tetrahedron_gen::tetrahedron_surface_area;
pub use mesh_tetrahedron_gen::tetrahedron_vertices;
pub use mesh_tetrahedron_gen::tetrahedron_volume;
pub use mesh_box_gen::box_diagonal;
pub use mesh_box_gen::box_face_count as box_gen_face_count;
pub use mesh_box_gen::box_surface_area;
pub use mesh_box_gen::box_vertex_count as box_gen_vertex_count;
pub use mesh_box_gen::box_volume;
pub use mesh_box_gen::new_box_mesh;
pub use mesh_box_gen::BoxParams;
pub use mesh_fibonacci_sphere::fibonacci_coverage_estimate;
pub use mesh_fibonacci_sphere::fibonacci_min_angle;
pub use mesh_fibonacci_sphere::fibonacci_sphere;
pub use mesh_fibonacci_sphere::fibonacci_sphere_point;
pub use mesh_terrain_gen::new_terrain;
pub use mesh_terrain_gen::terrain_face_count as terrain_gen_face_count;
pub use mesh_terrain_gen::terrain_height_fbm;
pub use mesh_terrain_gen::terrain_vertex;
pub use mesh_terrain_gen::terrain_vertex_count as terrain_gen_vertex_count;
pub use mesh_terrain_gen::TerrainParams as TerrainGenParams;
pub use mesh_fractal_gen::fractal_dimension_estimate;
pub use mesh_fractal_gen::koch_point_count;
pub use mesh_fractal_gen::koch_snowflake_points;
pub use mesh_fractal_gen::mandelbrot_escape_time;
pub use mesh_fractal_gen::sierpinski_triangle_centroids;
pub use mesh_dual_contouring::dc_triangle_count_dc;
pub use mesh_dual_contouring::dc_vertex_count_dc;
pub use mesh_dual_contouring::dual_contour_dc;
pub use mesh_dual_contouring::qef_dc_add_plane;
pub use mesh_dual_contouring::qef_dc_error;
pub use mesh_dual_contouring::qef_dc_solve;
pub use mesh_dual_contouring::DualContourDcResult;
pub use mesh_dual_contouring::QefDc;
pub use mesh_mean_curvature_flow::mcf_step;
pub use mesh_mean_curvature_flow::mcf_vertex_count;
pub use mesh_mean_curvature_flow::mean_curvature_flow;
pub use mesh_mean_curvature_flow::McfConfig;
pub use mesh_mean_curvature_flow::McfResult;
pub use mesh_adaptive_subdivision::adapt_subdiv_face_count;
pub use mesh_adaptive_subdivision::adapt_subdiv_vertex_count;
pub use mesh_adaptive_subdivision::adapt_subdivide_step;
pub use mesh_adaptive_subdivision::adaptive_subdivision;
pub use mesh_adaptive_subdivision::AdaptSubdivConfig;
pub use mesh_adaptive_subdivision::AdaptSubdivResult;
pub use mesh_sharp_feature_preserve::detect_sharp_features as detect_sharp_features_pres;
pub use mesh_sharp_feature_preserve::is_sharp_corner;
pub use mesh_sharp_feature_preserve::sharp_feature_corner_count;
pub use mesh_sharp_feature_preserve::sharp_feature_edge_count as sharp_feature_edge_count_pres;
pub use mesh_sharp_feature_preserve::sharp_feature_max_angle;
pub use mesh_sharp_feature_preserve::SharpFeatureCorner;
pub use mesh_sharp_feature_preserve::SharpFeatureEdge as SharpFeatureEdgePres;
pub use mesh_sharp_feature_preserve::SharpFeatureResult as SharpFeatureResultPres;
pub use mesh_qem_simplify::build_vertex_quadrics;
pub use mesh_qem_simplify::edge_collapse_cost_qem;
pub use mesh_qem_simplify::qem_face_count;
pub use mesh_qem_simplify::qem_simplify;
pub use mesh_qem_simplify::qem_vertex_count;
pub use mesh_qem_simplify::QemConfig;
pub use mesh_qem_simplify::QemResult;
pub use mesh_qem_simplify::Quadric as QemQuadric;
pub use mesh_loop_detection::classify_loop;
pub use mesh_loop_detection::closed_loop_count;
pub use mesh_loop_detection::detect_boundary_loops_ld;
pub use mesh_loop_detection::loop_count_ld;
pub use mesh_loop_detection::total_loop_perimeter;
pub use mesh_loop_detection::BoundaryLoop;
pub use mesh_loop_detection::LoopClass;
pub use mesh_loop_detection::LoopDetectResult;
pub use mesh_patch_sew::patch_sew_indices_valid;
pub use mesh_patch_sew::patch_sew_seam_pairs;
pub use mesh_patch_sew::patch_sew_triangle_count;
pub use mesh_patch_sew::patch_sew_vertex_count;
pub use mesh_patch_sew::sew_patches;
pub use mesh_patch_sew::PatchSewConfig;
pub use mesh_patch_sew::PatchSewResult;
pub use mesh_genus_compute::compute_genus;
pub use mesh_genus_compute::count_boundary_loops_genus;
pub use mesh_genus_compute::count_unique_edges;
pub use mesh_genus_compute::euler_char;
pub use mesh_genus_compute::genus_value;
pub use mesh_genus_compute::GenusResult;
pub use mesh_sphere_map::project_to_sphere_uv;
pub use mesh_sphere_map::sphere_map;
pub use mesh_sphere_map::sphere_map_avg_u;
pub use mesh_sphere_map::sphere_map_uv_count;
pub use mesh_sphere_map::sphere_map_uvs_in_range;
pub use mesh_sphere_map::SphereMapResult;
pub use mesh_cotangent_weights::build_cotangent_weights;
pub use mesh_cotangent_weights::cot_angle_at;
pub use mesh_cotangent_weights::cot_avg_vertex_area;
pub use mesh_cotangent_weights::cot_total_weight;
pub use mesh_cotangent_weights::cot_weight_count;
pub use mesh_cotangent_weights::cot_weights_nonneg;
pub use mesh_cotangent_weights::CotWeight;
pub use mesh_cotangent_weights::CotWeightResult;
pub use mesh_principal_curvature::avg_gaussian_curvature;
pub use mesh_principal_curvature::avg_mean_curvature;
pub use mesh_principal_curvature::compute_principal_curvatures;
pub use mesh_principal_curvature::max_k1;
pub use mesh_principal_curvature::PrincipalCurvature;
pub use mesh_anisotropic_smooth::aniso_avg_displacement;
pub use mesh_anisotropic_smooth::aniso_smooth_step;
pub use mesh_anisotropic_smooth::aniso_vertex_count;
pub use mesh_anisotropic_smooth::anisotropic_smooth;
pub use mesh_anisotropic_smooth::AnisoSmoothConfig;
pub use mesh_anisotropic_smooth::AnisoSmoothResult;
pub use mesh_self_intersect::detect_self_intersections;
pub use mesh_self_intersect::intersecting_faces;
pub use mesh_self_intersect::intersection_face_fraction;
pub use mesh_self_intersect::intersection_pair_count;
pub use mesh_self_intersect::is_self_intersection_free;
pub use mesh_self_intersect::IntersectingPair;
pub use mesh_self_intersect::SelfIntersectResult;
pub use mesh_harmonic_map::build_adjacency as harmonic_build_adjacency;
pub use mesh_harmonic_map::harmonic_map;
pub use mesh_harmonic_map::harmonic_map_vertex_count;
pub use mesh_harmonic_map::map_boundary_to_circle as harmonic_map_boundary_to_circle;
pub use mesh_harmonic_map::uv_area_ratio;
pub use mesh_harmonic_map::HarmonicMapResult;
pub use mesh_displacement_map::dm_apply_to_vertex;
pub use mesh_displacement_map::dm_avg_displacement;
pub use mesh_displacement_map::dm_get;
pub use mesh_displacement_map::dm_max_displacement;
pub use mesh_displacement_map::dm_set;
pub use mesh_displacement_map::new_displacement_map;
pub use mesh_displacement_map::DisplacementMap;
pub use mesh_cage_lattice::apply_lattice_deform;
pub use mesh_cage_lattice::bend_lattice;
pub use mesh_cage_lattice::bernstein as lattice_bernstein;
pub use mesh_cage_lattice::control_point_count as cage_control_point_count;
pub use mesh_cage_lattice::evaluate_ffd;
pub use mesh_cage_lattice::lattice_deformed_bounds;
pub use mesh_cage_lattice::lattice_volume;
pub use mesh_cage_lattice::move_control_point;
pub use mesh_cage_lattice::new_lattice_cage;
pub use mesh_cage_lattice::reset_lattice;
pub use mesh_cage_lattice::twist_lattice;
pub use mesh_cage_lattice::validate_lattice;
pub use mesh_cage_lattice::world_to_lattice_params;
pub use mesh_cage_lattice::LatticeCage;
pub use mesh_cage_lattice::LatticeCageResult;
pub use mesh_tweak_tool::apply_tweak;
pub use mesh_tweak_tool::average_displacement as tweak_average_displacement;
pub use mesh_tweak_tool::clamp_tweak_result;
pub use mesh_tweak_tool::compute_soft_weights;
pub use mesh_tweak_tool::count_selected as tweak_count_selected;
pub use mesh_tweak_tool::default_tweak_params;
pub use mesh_tweak_tool::scale_tweak_delta;
pub use mesh_tweak_tool::soft_weight;
pub use mesh_tweak_tool::undo_tweak;
pub use mesh_tweak_tool::SoftFalloff;
pub use mesh_tweak_tool::TweakParams;
pub use mesh_tweak_tool::TweakResult;
pub use mesh_relax_tool::build_adjacency as relax_build_adjacency;
pub use mesh_relax_tool::displacement_magnitudes;
pub use mesh_relax_tool::laplacian_step as relax_tool_laplacian_step;
pub use mesh_relax_tool::mean_displacement as relax_mean_displacement;
pub use mesh_relax_tool::no_pins;
pub use mesh_relax_tool::pin_isolated;
pub use mesh_relax_tool::relax_in_sphere;
pub use mesh_relax_tool::relax_mesh as relax_tool_mesh;
pub use mesh_relax_tool::taubin_relax;
pub use mesh_relax_tool::RelaxResult as RelaxToolResult;
pub use mesh_inflate_tool::average_normal as inflate_average_normal;
pub use mesh_inflate_tool::clamp_inflate_amount;
pub use mesh_inflate_tool::compute_vertex_normals as inflate_compute_vertex_normals;
pub use mesh_inflate_tool::deflate_mesh;
pub use mesh_inflate_tool::inflate_mesh as inflate_tool_mesh;
pub use mesh_inflate_tool::inflate_to_target_offset;
pub use mesh_inflate_tool::inflate_uniform;
pub use mesh_inflate_tool::inflate_with_weight_map;
pub use mesh_inflate_tool::InflateResult;
pub use mesh_pinch_tool::affected_centroid;
pub use mesh_pinch_tool::apply_expand;
pub use mesh_pinch_tool::apply_pinch;
pub use mesh_pinch_tool::count_in_radius;
pub use mesh_pinch_tool::default_pinch_strength;
pub use mesh_pinch_tool::max_pinch_displacement;
pub use mesh_pinch_tool::pinch_steps;
pub use mesh_pinch_tool::pinch_to_line;
pub use mesh_pinch_tool::PinchResult;
pub use mesh_crease_tool::auto_crease_by_dihedral;
pub use mesh_crease_tool::avg_sharpness;
pub use mesh_crease_tool::clear_creases;
pub use mesh_crease_tool::crease_count as crease_tool_count;
pub use mesh_crease_tool::get_crease;
pub use mesh_crease_tool::list_creases;
pub use mesh_crease_tool::max_sharpness as crease_max_sharpness;
pub use mesh_crease_tool::new_crease_tool;
pub use mesh_crease_tool::remove_crease;
pub use mesh_crease_tool::scale_creases;
pub use mesh_crease_tool::set_crease;
pub use mesh_crease_tool::CreaseTool;
pub use mesh_crease_tool::EdgeKey as CreaseToolEdgeKey;
pub use mesh_bridge_tool::align_loops_twist;
pub use mesh_bridge_tool::bridge_loops as bridge_two_loops;
pub use mesh_bridge_tool::bridge_new_vertex_count;
pub use mesh_bridge_tool::bridge_quad_estimate;
pub use mesh_bridge_tool::bridge_total_length;
pub use mesh_bridge_tool::loop_centroid as bridge_loop_centroid;
pub use mesh_bridge_tool::loops_compatible;
pub use mesh_bridge_tool::make_bridge_loop;
pub use mesh_bridge_tool::BridgeLoop;
pub use mesh_bridge_tool::BridgeToolConfig;
pub use mesh_bridge_tool::BridgeToolResult;
pub use mesh_fillet_edge::apply_edge_fillet;
pub use mesh_fillet_edge::arc_points as fillet_arc_points;
pub use mesh_fillet_edge::default_fillet_tool_config;
pub use mesh_fillet_edge::fillet_arc_length;
pub use mesh_fillet_edge::fillet_edge_simple;
pub use mesh_fillet_edge::fillet_radius_from_chamfer;
pub use mesh_fillet_edge::fillet_vertex_estimate;
pub use mesh_fillet_edge::validate_fillet_config;
pub use mesh_fillet_edge::FilletToolConfig;
pub use mesh_fillet_edge::FilletToolResult;
pub use mesh_chamfer_edge::chamfer_edges as chamfer_mesh_edges;
pub use mesh_chamfer_edge::chamfer_from_bevel_width;
pub use mesh_chamfer_edge::chamfer_offset_points;
pub use mesh_chamfer_edge::chamfer_strip;
pub use mesh_chamfer_edge::chamfer_vertex_estimate;
pub use mesh_chamfer_edge::default_chamfer_config;
pub use mesh_chamfer_edge::scale_chamfer_result;
pub use mesh_chamfer_edge::validate_chamfer_config;
pub use mesh_chamfer_edge::ChamferToolConfig;
pub use mesh_chamfer_edge::ChamferToolResult;
pub use mesh_bevel_vertex::bevel_at_factor;
pub use mesh_bevel_vertex::bevel_centroid as bevel_vert_centroid;
pub use mesh_bevel_vertex::bevel_polygon_area_2d;
pub use mesh_bevel_vertex::bevel_vertex_estimate;
pub use mesh_bevel_vertex::bevel_vertex_positions;
pub use mesh_bevel_vertex::bevel_vertices as apply_bevel_vertices;
pub use mesh_bevel_vertex::default_bevel_amount;
pub use mesh_bevel_vertex::validate_bevel_amount;
pub use mesh_bevel_vertex::VertexBevelResult;
pub use mesh_inset_face::inset_amount_from_depth;
pub use mesh_inset_face::inset_area_ratio;
pub use mesh_inset_face::inset_faces as apply_face_inset;
pub use mesh_inset_face::inset_polygon;
pub use mesh_inset_face::inset_triangle;
pub use mesh_inset_face::inset_vertex_estimate;
pub use mesh_inset_face::validate_inset_amount;
pub use mesh_inset_face::InsetResult as InsetFaceResult;
pub use mesh_poke_face::count_poke_result_triangles;
pub use mesh_poke_face::poke_all_faces;
pub use mesh_poke_face::poke_faces as apply_poke_faces;
pub use mesh_poke_face::poke_polygon;
pub use mesh_poke_face::poke_triangle as poke_single_triangle;
pub use mesh_poke_face::poke_triangle_estimate;
pub use mesh_poke_face::poke_with_offset;
pub use mesh_poke_face::validate_poke_input;
pub use mesh_poke_face::PokeResult as PokeFaceResult;
pub use mesh_flip_normals::count_inconsistent_faces;
pub use mesh_flip_normals::flip_all_windings;
pub use mesh_flip_normals::flip_normals as flip_mesh_normals;
pub use mesh_flip_normals::flip_normals_selected;
pub use mesh_flip_normals::flip_selected_windings;
pub use mesh_flip_normals::negate_normals;
pub use mesh_flip_normals::negate_selected_normals;
pub use mesh_flip_normals::tri_normal as flip_tri_normal;
pub use mesh_flip_normals::windings_consistent;
pub use mesh_flip_normals::FlipNormalsResult;
pub use mesh_recalc_normals::average_face_normal;
pub use mesh_recalc_normals::compute_angle_weighted_normals;
pub use mesh_recalc_normals::compute_face_normals as recalc_face_normals;
pub use mesh_recalc_normals::compute_vertex_normals_recalc;
pub use mesh_recalc_normals::normal_deviation;
pub use mesh_recalc_normals::recalc_normals;
pub use mesh_recalc_normals::smooth_normals_recalc;
pub use mesh_recalc_normals::RecalcNormalsResult;
pub use mesh_power_crust::classify_pole;
pub use mesh_power_crust::generate_power_poles;
pub use mesh_power_crust::medial_ball_radius;
pub use mesh_power_crust::nearest_power_site;
pub use mesh_power_crust::power_crust_has_geometry;
pub use mesh_power_crust::power_crust_stub;
pub use mesh_power_crust::power_crust_triangle_count;
pub use mesh_power_crust::power_distance;
pub use mesh_power_crust::PowerCrustBuilder;
pub use mesh_power_crust::PowerCrustConfig;
pub use mesh_power_crust::PowerCrustResult;
pub use mesh_power_crust::PowerSite;
pub use mesh_poisson_recon::density_estimate;
pub use mesh_poisson_recon::estimate_output_faces;
pub use mesh_poisson_recon::point_cloud_bbox;
pub use mesh_poisson_recon::point_cloud_centroid;
pub use mesh_poisson_recon::point_to_voxel;
pub use mesh_poisson_recon::poisson_reconstruct_stub;
pub use mesh_poisson_recon::required_octree_depth;
pub use mesh_poisson_recon::PoissonConfig;
pub use mesh_poisson_recon::PoissonReconConfig;
pub use mesh_poisson_recon::PoissonReconResult;
pub use mesh_poisson_recon::PoissonReconstructor;
pub use mesh_cloth_collider::*;
pub use mesh_fluid_surface::*;
pub use mesh_hair_guide_gen::*;
pub use mesh_strand_mesh::*;
pub use mesh_topo_repair_ext::*;
pub use mesh_duplicate_face::*;
pub use mesh_non_manifold_fix::*;
pub use mesh_isolated_vertex_remove::*;
pub use mesh_face_split_edge::*;
pub use mesh_loop_slide::*;
pub use mesh_rip_vertex::*;
pub use mesh_rip_fill::*;
pub use mesh_dissolve_face::*;
pub use mesh_dissolve_edge::*;
pub use mesh_dissolve_vertex::*;
pub use mesh_flatten_face::*;
pub use mesh_align_vertices::*;
pub use mesh_distribute_even::*;
pub use mesh_loop_to_region::*;
pub use mesh_checker_deselect::*;
pub use mesh_anchor_point::*;
pub use mesh_magnet_point::*;
pub use mesh_follow_path::*;
pub use mesh_track_to::*;
pub use mesh_copy_location::*;
pub use mesh_copy_rotation::*;
pub use mesh_copy_scale::*;
pub use mesh_transform_constraint::*;
pub use mesh_floor_constraint::*;
pub use mesh_collision_bounds::*;
pub use mesh_rigid_body_shape::*;
pub use mesh_soft_body_goal::*;
pub use mesh_cloth_collision::*;
pub use mesh_force_field_mesh::*;
pub use mesh_meta_ball::*;
pub use mesh_implicit_blob::*;
pub use mesh_boolean_union::*;
pub use mesh_boolean_intersection::*;
pub use mesh_boolean_difference::*;
pub use mesh_project_curve::*;
pub use mesh_signed_distance::*;
pub use mesh_winding_query::*;
pub use mesh_volume_query::*;
pub use mesh_surface_area_query::*;
pub use mesh_bounding_box_query::*;
pub use mesh_principal_axes::*;
pub use mesh_topology_query::*;
pub use mesh_lod_chain::*;
pub use mesh_progressive_mesh::*;
pub use mesh_view_dependent_lod::*;
pub use mesh_geomorph::*;
pub use mesh_impostor::*;
pub use mesh_sprite_atlas::*;
pub use mesh_decal_mesh::*;
pub use mesh_outline_mesh::*;
pub use mesh_shadow_mesh::*;
pub use mesh_light_map_mesh::*;
pub use mesh_ambient_occlusion_mesh::*;
pub use mesh_vertex_animation::*;
pub use mesh_morph_animation::*;
pub use mesh_skinned_animation::*;
pub use mesh_blend_animation::*;
pub use mesh_pose_snapshot::*;

Modules§

adaptive_subdivide
Curvature-adaptive Loop subdivision that refines only high-curvature regions.
ao_bake
atlas
UV atlas packing using the shelf algorithm.
bounds
Mesh bounding volumes: AABB, bounding sphere, and OBB approximation.
bvh
BVH (Bounding Volume Hierarchy) acceleration structure for triangle meshes.
catmull_clark
cloth_panel
cloth_sim
clothing
Clothing overlay pipeline.
color_utils
Uniform vertex-color helpers.
connectivity
convex_hull
curvature
decimate
displacement_map
UV-based 2D displacement map application to mesh vertices.
dqs
Dual Quaternion Skinning (DQS) — avoids the “candy wrapper” artifact of LBS.
edge_loops
feature_decimation
Feature-preserving QEM (Quadric Error Metric) decimation that locks feature edges.
ffd
Free-Form Deformation (FFD) lattice deformation.
geodesic
Geodesic distance computation on mesh surfaces using Dijkstra’s algorithm.
groups
hair_cards
Hair card strip mesh generation.
heat_map
ik
Inverse Kinematics solvers: 2-bone analytical IK and multi-bone FABRIK.
integrity
Mesh integrity and manifold checks.
lod
LOD (Level of Detail) generation via grid-based vertex clustering.
marching_cubes
measurements
Body measurement extraction from a MeshBuffers.
mesh
mesh_adaptive_lod
Adaptive LOD selection based on screen-space projected size.
mesh_adaptive_subdivision
Adaptive subdivision based on curvature threshold.
mesh_align
Mesh alignment by principal axes (PCA-based) or iterative closest point (ICP).
mesh_align_axes
Align mesh to principal axes via PCA (3×3 covariance matrix).
mesh_align_vertices
Align selected vertices to a world axis, average, or custom plane.
mesh_ambient_occ
Per-vertex ambient occlusion estimate using bent-normal method.
mesh_ambient_occlusion
Per-vertex ambient occlusion baking with BVH-accelerated ray casting.
mesh_ambient_occlusion_mesh
AO baking vertex data — stores per-vertex ambient occlusion values.
mesh_anchor_point
Mesh anchor/pin point for simulation — marks vertices as fixed constraints.
mesh_angle_bisector
Angle bisector computation for mesh triangles and edges.
mesh_anisotropic_smooth
Anisotropic mesh smoothing (bilateral-style).
mesh_annulus_gen
mesh_antiprism
Antiprism mesh generator.
mesh_apex_vertex
Apex vertex detection for mesh triangles.
mesh_arap
As-Rigid-As-Possible (ARAP) surface deformation.
mesh_arc_length
Arc-length parameterisation utilities for polyline curves.
mesh_archimedean_solid
Archimedean solid stub generator.
mesh_area_gradient
Per-face area gradient computation for mesh analysis.
mesh_array_modifier
Array modifier: repeat a mesh N times along an offset.
mesh_arrow_gen
mesh_aspect_ratio
Triangle aspect ratio analysis for mesh quality assessment.
mesh_attr_transfer
Transfer vertex attributes between meshes using nearest-neighbour lookup.
mesh_attribute_layer
Generic mesh attribute layer for per-element data.
mesh_auto_smooth
Auto smooth angle computation for mesh shading.
mesh_bary_coord
Barycentric coordinate computation and utilities.
mesh_batching
Batch multiple meshes into a single draw call (static batching).
mesh_bbox_tree
Bounding box tree (AABB tree) for spatial queries on mesh faces.
mesh_bend_deform
Bend deformation for mesh vertices along an axis.
mesh_bend_modifier
mesh_bent_normal
mesh_bevel_modifier
mesh_bevel_vertex
Vertex bevel tool.
mesh_bezier_patch
Bezier/B-spline patch representation for smooth surface modelling.
mesh_bezier_surface
Bicubic Bézier surface tessellation.
mesh_bilaplacian
Bi-Laplacian (bi-harmonic) mesh smoothing and fairing.
mesh_bilinear_patch
Bilinear patch evaluation and tessellation.
mesh_bipyramid
Bipyramid mesh generator.
mesh_bisect
Bisect mesh by plane.
mesh_blend_animation
Animation blend buffer — blends multiple animations by weighted mixing.
mesh_boolean
mesh_boolean_csg
CSG boolean operations stub via SDF sampling (union/intersect/subtract).
mesh_boolean_difference
Mesh boolean difference (CSG subtraction) stub.
mesh_boolean_intersection
Mesh boolean intersection (CSG) stub.
mesh_boolean_union
Mesh boolean union (CSG) stub.
mesh_border_edge
Border edge detection and analysis for triangle meshes.
mesh_boundary_vertex
Boundary vertex detection for triangle meshes.
mesh_bounding_box_query
Tight axis-aligned bounding box query for meshes stub.
mesh_box_gen
mesh_bridge
Bridge / loft operations: connect two open edge loops with a band of triangles.
mesh_bridge_edge_loops
mesh_bridge_tool
Bridge two edge loops.
mesh_bvh
Bounding Volume Hierarchy (BVH) for ray/point queries over triangle meshes.
mesh_bvh_leaf
BVH leaf-level utilities: per-triangle AABB building and leaf queries.
mesh_bvh_node
BVH node construction and traversal for triangle meshes.
mesh_cable_gen
Cable / rope mesh generator.
mesh_cage
Cage-based deformation using mean-value coordinates (MVC).
mesh_cage_lattice
Lattice cage deformation (free-form deformation / FFD).
mesh_cage_volume
Compute and use the volume of a cage mesh.
mesh_cage_wrap
Cage-wrap deformation: offset a high-res mesh using cage displacement.
mesh_capsule_gen
mesh_cast_modifier
mesh_catenary
mesh_catmull_clark
Catmull-Clark subdivision surface algorithm for quad-dominant meshes.
mesh_catmull_clark_weight
Catmull-Clark subdivision weight computation utilities.
mesh_cavity_map
mesh_cell_partition
Grid-based cell partition for spatial queries on mesh vertices.
mesh_centroid_decompose
Centroid-based mesh decomposition: split a mesh into regions around face centroids.
mesh_centroid_query
Mesh centroid computation stub.
mesh_chain_link
Chain link mesh generator.
mesh_chamfer_edge
Chamfer edges with configurable segments.
mesh_chart_pack
UV chart packing into a texture atlas.
mesh_checker_deselect
Checker deselect: alternates the selection of faces/vertices in a checkerboard pattern.
mesh_circular_edge
Circular edge detection in meshes (edges that form loops).
mesh_circumcenter
Circumcenter computation for mesh triangles.
mesh_clip
Clip a mesh against a half-space plane, keeping the positive side and generating a flat cap on the cut face.
mesh_clip_region
Clip a mesh to an axis-aligned region (AABB).
mesh_closest_point
Brute-force closest point on mesh surface query.
mesh_closest_point_query
Closest-point-on-mesh query stub.
mesh_cloth_collider
Cloth-mesh collision geometry helpers.
mesh_cloth_collision
Cloth self-collision proxy — simplified geometry used to detect cloth self-intersections.
mesh_cloth_pins
Cloth pinning vertex groups.
mesh_coarse_grid
Build a coarse voxel grid from mesh vertices for spatial queries.
mesh_collapse_edge
Edge collapse utilities for mesh simplification.
mesh_collapse_group
Group-based edge collapse: collapse all edges within a vertex group.
mesh_collision_bounds
Collision bounds (box/sphere/hull) — describes simple collision geometry for a mesh.
mesh_color_attr
Vertex color attribute manipulation for meshes.
mesh_compress_index
Index buffer compression: delta encoding and 16-bit packing.
mesh_cone_gen
Cone mesh generation.
mesh_conformal_map
Conformal mapping utilities for mesh UV parameterization.
mesh_convex_face
Convexity testing for mesh faces (polygons).
mesh_convex_hull
Convex hull computation for 3D point sets using an incremental algorithm.
mesh_convex_hull_2d
2D convex hull on XZ plane (for footprint computation).
mesh_convex_hull_v2
Quickhull-style 3D convex hull (incremental gift-wrap approximation).
mesh_coons_patch
Coons bi-linear patch mesh generation.
mesh_coplanar_face
Detect coplanar faces in a triangle mesh.
mesh_copy_location
Copy location constraint — replicates the world-space position of a target object.
mesh_copy_rotation
Copy rotation constraint — replicates euler-angle rotation from a target object.
mesh_copy_scale
Copy scale constraint — copies object scale from a target on selected axes.
mesh_corner_angle
Corner angle computation for mesh triangles.
mesh_corrective_shape
mesh_cotan_laplace
Cotangent-weight Laplace-Beltrami operator for triangle meshes.
mesh_cotangent_weights
Cotangent weight computation for Laplacian operators.
mesh_crease
Crease / hard-edge marking for subdivision surfaces.
mesh_crease_set
Crease set management for subdivision surfaces.
mesh_crease_tool
Crease edge weighting tool.
mesh_curvature_discrete
Discrete curvature computation for triangle meshes.
mesh_curvature_lines
mesh_curvature_map
mesh_curvature_tensor
Full curvature tensor estimation for triangle meshes.
mesh_curve_deform
Mesh deformation along a Bezier or cubic spline path.
mesh_curve_sample
Curve sampling utilities: uniform, adaptive, and curvature-based sampling.
mesh_curve_to_mesh
mesh_cusp_detect
Cusp detection: find vertices where surface normals change abruptly.
mesh_custom_data
Custom data block management for mesh elements.
mesh_custom_split_normals
Custom split normals per face-corner.
mesh_cylinder_cap
Cylinder cap generation: flat and dome caps for open cylinders.
mesh_cylinder_gen
mesh_dart_graph
Dart (half-edge-like) graph representation for combinatorial mesh topology.
mesh_data_transfer
Vertex data transfer modifier.
mesh_debug_vis
Generate debug visualization meshes: normals and tangents as line segments.
mesh_decal
mesh_decal_mesh
Decal projection mesh — projects a decal texture onto surface geometry.
mesh_decimate
Mesh decimation via edge collapse with quadric error metric (QEM).
mesh_decimate_error
Error metric computation for mesh decimation (Quadric Error Metrics).
mesh_decimate_modifier
mesh_decimate_v2
Quadric Error Metric vertex pair decimation (v2).
mesh_deform_axis
Axis-aligned deformation utilities: twist, taper, stretch, shear.
mesh_diff
mesh_dihedral_angle
Dihedral angle computation between adjacent faces.
mesh_directed_edge
Directed edge data structure for mesh connectivity.
mesh_disk_map
Disk mapping: project a mesh patch to a disk (unit circle) parameterization.
mesh_displace_modifier
Displacement modifier: offset vertices along their normals by a texture/map value.
mesh_displacement_map
Displacement map application to mesh vertices.
mesh_dissolve_edge
Dissolve selected edges: merge the two faces sharing each selected edge into one quad or n-gon.
mesh_dissolve_face
Dissolve selected faces: remove the selected triangles and close the hole with a new polygon fill (fan triangulation).
mesh_dissolve_vertex
mesh_distribute_even
Distribute vertices evenly along a path (arc-length parameterisation).
mesh_dual
Dual mesh computation — place a vertex at each face centroid, connect adjacent faces.
mesh_dual_contour
Dual contouring stub: QEF minimisation per cell for isosurface extraction.
mesh_dual_contouring
Dual contouring isosurface extraction.
mesh_dual_laplacian
Dual Laplacian (cotangent-weighted) smoothing for triangle meshes.
mesh_dupin_cyclide
Dupin cyclide surface mesh (Villarceau circles).
mesh_duplicate_face
Duplicate face detection and removal. Two triangles are considered duplicates if they share the same three vertex indices (in any winding order).
mesh_ear_clip
Ear-clipping polygon triangulator.
mesh_edge_bisect
Edge bisection (midpoint subdivision) for triangle meshes.
mesh_edge_collapse_v2
Edge collapse v2: QEF-guided half-edge collapse with feature detection.
mesh_edge_contract
Edge contraction operations for mesh simplification.
mesh_edge_flow
Edge flow computation and analysis.
mesh_edge_flow_field
mesh_edge_hash
Edge hashing utilities for fast edge lookups.
mesh_edge_loop_select
Edge loop selection utilities.
mesh_edge_slide
Edge slide: slide an edge along adjacent faces.
mesh_edge_split
mesh_edge_valence
Edge valence analysis: count how many faces share each edge.
mesh_end_cap
Cylinder mesh with end caps.
mesh_erode
Erode mesh surface by offsetting vertices inward (negative inflate).
mesh_extrude
Face/edge/vertex extrusion operations.
mesh_extruded_polygon
Extruded polygon (prism) mesh generator.
mesh_face_centroid
Face centroid computation and analysis.
mesh_face_centroid_v2
Face centroid v2: area-weighted centroid queries with spatial bucketing.
mesh_face_dual
Face dual mesh construction (dual graph where each face becomes a vertex).
mesh_face_flip
Face flipping utilities.
mesh_face_label
Per-face label assignment and querying utilities.
mesh_face_map
Face map — named groups of face indices.
mesh_face_material
Per-face material assignment and multi-material mesh utilities.
mesh_face_orient
Face orientation consistency checking and repair.
mesh_face_pair
Face pair detection: adjacent triangles sharing an edge.
mesh_face_peel
Sequential face peeling — remove outermost boundary layer of faces iteratively.
mesh_face_ring
Face ring: find all faces adjacent to a given vertex (the face one-ring).
mesh_face_split_edge
Split a face by inserting a new edge between two of its vertices.
mesh_face_strip
Triangle strip construction from indexed triangle meshes.
mesh_fan_mesh
Fan mesh generation: create triangle fans from a center point.
mesh_fan_triangulate
Fan triangulation of convex polygons.
mesh_feather
Feather geometry generation.
mesh_feature
Mesh feature line extraction: ridges, valleys, silhouettes, and sharp edges.
mesh_featureline
Feature line (ridge/valley) extraction via principal curvature analysis.
mesh_fiber_orientation
mesh_fibonacci_sphere
mesh_fill_holes
Hole filling from boundary edges: detect and fill mesh holes.
mesh_fillet
Edge fillet (round) and chamfer (bevel) operations.
mesh_fillet_edge
Edge fillet (bevel with arc).
mesh_flag_layer
Boolean flag layer per mesh element (vertex, edge, or face).
mesh_flatten_face
Flatten selected faces to their best-fit plane using PCA-style projection.
mesh_flip_normals
Flip face normals.
mesh_floor_constraint
Floor/ceiling constraint — prevents object from passing through a planar boundary.
mesh_flow
Mean curvature flow and Laplacian surface smoothing variants.
mesh_flow_map
mesh_fluid_surface
Fluid surface mesh (marching-cubes wrapper stub).
mesh_follow_path
Follow-path curve constraint for mesh — projects mesh origin along a 3-D curve.
mesh_force_field_mesh
Force field (wind/turbulence) mesh — force field emitter attached to mesh geometry.
mesh_fractal_displace
Fractal displacement: push vertices along normals using fBm (fractional Brownian motion). Uses deterministic LCG-based value noise — no external RNG dependency.
mesh_fractal_gen
mesh_fur_cards
Fur card generation from surface normals.
mesh_fused_deposition
FDM (Fused Deposition Modeling) layer-by-layer mesh slice visualization.
mesh_gear_tooth
Involute gear tooth mesh generator.
mesh_genus_compute
Genus and Euler characteristic computation for triangle meshes.
mesh_geodesic
Geodesic distance computation on triangle meshes using Dijkstra on edge graph.
mesh_geodesic_path
Geodesic path tracing on triangle meshes using Dijkstra’s algorithm.
mesh_geodesic_voronoi
Geodesic Voronoi partitioning on a triangle mesh.
mesh_geomorph
Geomorphing — smooth interpolation between two LOD levels.
mesh_geosphere
Geodesic sphere via icosahedral subdivision.
mesh_gordon_surface
Gordon surface (net of curves) stub.
mesh_grid_deform
Grid-based deformation (FFD-lite) for mesh vertices.
mesh_grid_fill
Grid fill: create a grid mesh between two edge loops.
mesh_grid_gen
mesh_hair_guide_gen
Hair guide curve mesh generation.
mesh_half_face
Half-face data structure for tetrahedral and polygonal mesh topology.
mesh_harmonic_map
Harmonic mapping for mesh parameterization using Laplacian smoothing to UVs.
mesh_heat_diffuse
Heat diffusion / harmonic field computation on mesh surface.
mesh_heat_diffuse_v2
Heat diffusion kernel on mesh using explicit Euler time-stepping (v2).
mesh_helix
mesh_hex_mesh
Hexagonal mesh generation on a plane.
mesh_hole_detect
mesh_hollow
Hollow / shell mesh generation.
mesh_icosphere
Icosphere (subdivided icosahedron) mesh generation.
mesh_icosphere_gen
mesh_implicit_blob
Blobby/implicit-surface node — a single weighted implicit primitive in a CSG tree.
mesh_impostor
Billboard impostor generation — creates camera-facing quad impostors for distant meshes.
mesh_incircle
Incircle (inscribed circle) computation for triangle mesh faces.
mesh_index_remap
Index remapping utilities for mesh index buffers.
mesh_inflate
Inflate / erode mesh by pushing vertices along averaged normals.
mesh_inflate_tool
Mesh inflation along normals.
mesh_inset_face
Face inset tool.
mesh_inset_faces
Face inset: shrink faces inward with a border ring.
mesh_intersect_line
Mesh-line intersection utilities.
mesh_intersect_ray
Ray-mesh intersection query stub.
mesh_isolated_vertex_remove
Remove isolated (unreferenced) vertices from mesh buffers.
mesh_isosurface
Isosurface extraction from a scalar grid (simplified marching cubes variant).
mesh_jiggle
mesh_k_ring
K-ring neighbourhood queries on triangle meshes.
mesh_klein_bottle
Klein bottle surface mesh (immersed in 3D).
mesh_knife_cut
Knife (projection) cut — split faces along a user-defined polyline.
mesh_label
mesh_lattice_deform
Lattice cage deform modifier.
mesh_lattice_frame
Space-frame lattice mesh: beam elements rendered as cylinders.
mesh_light_map_mesh
Lightmap UV second channel — stores and validates a second UV set for lightmapping.
mesh_limited_dissolve
Limited dissolve: merge coplanar/near-coplanar faces by angle threshold.
mesh_lod_chain
LOD chain manager — stores and manages multiple LOD levels for a mesh.
mesh_loft
Loft surface generation between profile curves.
mesh_lofted_surface
mesh_loop_detection
Detect and classify boundary loops in a mesh.
mesh_loop_slide
Edge loop slide: slide an edge loop along adjacent faces.
mesh_loop_to_region
Convert an edge loop into a face region selection. All faces on one side of the loop boundary are selected.
mesh_lscm
Least Squares Conformal Maps (LSCM) UV parameterization.
mesh_magnet_point
Magnetic attraction point modifier — draws nearby vertices toward a 3-D point.
mesh_manifold_check
mesh_mask_modifier
mesh_mean_curvature
Mean curvature computation using cotangent weights on triangle meshes.
mesh_mean_curvature_flow
Mean curvature flow smoothing.
mesh_mean_value
mesh_medial_axis
mesh_merge
mesh_merge_by_distance
Merge vertices that are within a threshold distance.
mesh_meta_ball
Metaball implicit surface mesh — evaluates a metaball isosurface field.
mesh_minimal_surface
Minimal surface mesh generation (Enneper, Scherk).
mesh_mirror
Mesh mirroring and symmetrization operations.
mesh_mirror_cut
Mirror and cut a mesh along an axis-aligned plane.
mesh_mirror_modifier
Mirror modifier: mirror mesh across an axis.
mesh_mirror_stitch
mesh_mls_deform
mesh_mobius
Möbius strip mesh generation.
mesh_moment_inertia
Compute the inertia tensor from a closed triangle mesh.
mesh_moment_of_inertia
Mesh moment of inertia tensor computation stub.
mesh_morph_animation
Morph target animation sequence — keyframed blend weights over time.
mesh_morse_theory
mesh_multi_res
mesh_multiresolution
Multiresolution mesh editing levels. Stores a stack of subdivision levels and displacement deltas for each.
mesh_needle_triangle
mesh_ngon_fill
Ngon fan/ear fill: triangulate an N-gon polygon by fan or ear-clip.
mesh_noise_gen
Procedural noise-based mesh generation and displacement.
mesh_non_manifold_fix
Non-manifold edge/vertex repair. An edge is non-manifold when it is shared by more than two faces. This module detects and optionally removes the extra faces.
mesh_nonorientable
Non-orientable surface meshes (Möbius strip variant).
mesh_normal_delta
Compute delta normals for blend shape / morph targets.
mesh_normal_edit
Normal editing: custom normal overrides per vertex.
mesh_normal_map_bake
Bake high-to-low resolution normal map (ray casting placeholder).
mesh_normal_override
Per-vertex normal override layer.
mesh_normal_transfer_v2
mesh_nurbs_surface
NURBS surface stub.
mesh_oct_encode
mesh_octree
Octree spatial index for mesh queries (nearest point, sphere, AABB, ray).
mesh_offset
Mesh offset: push vertices along their normals by a given distance.
mesh_orient
Consistent triangle normal orientation via flood fill.
mesh_orthographic_proj
mesh_outline_mesh
Outline/silhouette mesh generation — produces extruded edge meshes for stylized outlines.
mesh_pack_islands
UV island packing.
mesh_paint
Sculpt-brush deformation tools.
mesh_paint_mask
Per-vertex paint mask storage and operations.
mesh_param_chart
mesh_parametric
Parametric shape generation with proper UVs.
mesh_parametric_surf
Parametric surface sampler with grid tessellation. Maps (u, v) in [0,1]^2 to 3-D positions via a user-supplied function, then builds an indexed triangle mesh.
mesh_particle_hair
Particle hair strand mesh generation.
mesh_patch
Mesh hole detection and hole-filling (triangulated polygon patches).
mesh_patch_blend
mesh_patch_sew
Sew / merge mesh patches along shared boundary edges.
mesh_path_cut
Path cut: cut a mesh along a vertex path.
mesh_pca
Principal Component Analysis of mesh shape space.
mesh_pinch_tool
Vertex pinch/squeeze tool.
mesh_pipe_network
Pipe network mesh: multiple tube segments joined at junction nodes.
mesh_planar_decimate
Planar face decimation: collapse faces that lie on the same plane.
mesh_planar_proj
mesh_plane
Flat grid plane mesh generation.
mesh_plane_gen
mesh_platonic_solid
Platonic solid generator (tetrahedron, cube, octahedron, dodecahedron, icosahedron).
mesh_point_sample
mesh_poisson_recon
Screened Poisson surface reconstruction from oriented point clouds.
mesh_poke_face
Poke (fan triangulate) faces — inserts a centre vertex in each face.
mesh_poke_faces
Poke (subdivide) faces by inserting a center vertex.
mesh_polar_decomp
Polar decomposition for mesh deformation analysis (R, S = rotation, scale).
mesh_polar_mesh
mesh_polygon_fill
Polygon triangulation utilities for 3D polygons.
mesh_pose_snapshot
Single-frame mesh pose snapshot — captures and restores a mesh pose at one moment in time.
mesh_pose_space
mesh_power_crust
Power Crust surface reconstruction from oriented point clouds.
mesh_principal_axes
Compute principal axes from an inertia tensor stub.
mesh_principal_curvature
Principal curvature directions and magnitudes.
mesh_prism_frustum
Frustum (tapered prism) mesh generator.
mesh_profile_extrude
mesh_progressive
Progressive mesh: greedy edge-collapse LOD sequence.
mesh_progressive_mesh
Progressive mesh — vertex split/collapse operations for continuous LOD.
mesh_project_curve
Project a polyline curve onto a mesh surface stub.
mesh_projection
Surface projection — project points and meshes onto triangle meshes.
mesh_projective_plane
Klein bottle mesh stub (embedded in 4-D, rendered as 3-D immersion).
mesh_property_layer
Named float property layer per vertex.
mesh_proximity_deform
mesh_ptex
Ptex per-face texture coordinate storage stub.
mesh_push_pull
Push/pull vertex displacement along normals.
mesh_qem_simplify
Quadric error metrics (QEM) mesh simplification.
mesh_quad_dominant
mesh_quad_mesh
mesh_quad_strip
mesh_quad_to_tri
Convert quad mesh to triangle mesh.
mesh_quads_to_tris
Convert quads to triangles.
mesh_ray_cast
mesh_raycast
Ray–triangle intersection using the Möller–Trumbore algorithm.
mesh_recalc_normals
Recalculate face/vertex normals.
mesh_relax_tool
Vertex relaxation (Laplacian relax).
mesh_relax_uv
UV island relaxation.
mesh_relaxation
mesh_remesh
Isotropic remeshing for uniform triangle quality.
mesh_remesh_adaptive
mesh_remesh_isotropic
Isotropic remeshing via the Botsch-Kobbelt algorithm.
mesh_repair_advanced
Advanced mesh repair: manifold healing, tangent-continuous hole filling, and T-junction removal.
mesh_retopo_guide
mesh_reverse_normal
mesh_revolution_surface
Surface of revolution mesh generator.
mesh_revolve
Surface of revolution: revolve a 2-D profile curve around the Y axis.
mesh_rigid_body_shape
Rigid body collision shape — specifies physics collision geometry for mesh rigid bodies.
mesh_rip_fill
Rip-and-fill region: rip a set of vertices and fill the resulting hole.
mesh_rip_vertex
Rip-vertex operation: duplicate a vertex and separate connected faces.
mesh_rip_vertices
Rip/disconnect vertices: duplicate a vertex to create a gap.
mesh_root_find
mesh_ruled_surface
Ruled surface between two curves.
mesh_scalar_field
mesh_scale_elements
Scale individual faces/edges by a local scale factor.
mesh_scatter
Scatter points on mesh surface using area-weighted per-face sampling. Uses deterministic LCG pseudo-random number generation (no rand crate).
mesh_screw_helix
Screw thread helix mesh generator.
mesh_screw_modifier
Screw modifier: rotate profile and offset per step.
mesh_sdf
mesh_seam_flatten
mesh_seam_mark
mesh_seam_mark_v2
Seam marking v2 — seams as edge pairs for UV unwrapping.
mesh_seam_welder
UV seam welding — finds boundary edges that share the same 3-D position but differ in UV, then merges them for correct normal/lighting continuity.
mesh_segment
Surface mesh segmentation into connected/coherent regions.
mesh_select_by_angle
Select faces by normal angle.
mesh_select_linked
Flood-fill face selection (select linked).
mesh_self_intersect
Self-intersection detection for triangle meshes.
mesh_shadow_mesh
Shadow volume mesh — generates shadow volume geometry for stencil shadow rendering.
mesh_shape_key_mix
Shape key mixing and combining.
mesh_sharp_edge
mesh_sharp_feature
Detect and tag sharp edges and vertices by dihedral angle threshold.
mesh_sharp_feature_preserve
Sharp feature (edge/corner) detection and preservation.
mesh_sharp_vertex
Sharp vertex (corner) marking for subdivision surfaces.
mesh_shear_modifier
mesh_shell_deform
mesh_signed_distance
Signed distance field query for meshes stub.
mesh_silhouette
mesh_simplicial
Simplicial complex operations (chain complex, boundary operators).
mesh_skeleton_deform
mesh_skin_modifier
Skin modifier — generates a mesh from edges/vertices.
mesh_skin_weights
Automatic skinning weight computation via heat diffusion from bone endpoints.
mesh_skinned_animation
Skinned mesh animation sequence — joint transform keyframes for skeletal animation.
mesh_skinned_surface
Skin surface through profile curves.
mesh_slice
Mesh slicing with a plane — cross-section extraction, mesh splitting, body-measurement circumference, and width-profile utilities.
mesh_slice_plane
Slice mesh with an arbitrary plane stub.
mesh_slice_stack
Slice mesh at multiple Z heights and return 2D contours.
mesh_smooth_color
Smooth vertex colors using Laplacian diffusion.
mesh_smooth_modifier
mesh_smooth_vertex
Smooth vertex position operations.
mesh_smooth_weight
Smooth weight maps across the mesh surface using adjacency-based diffusion.
mesh_soft_body_goal
Soft body goal/pin vertex — specifies goal shape attraction for soft-body simulation.
mesh_solidify
Solidify modifier — create a thin-shell copy of a mesh by offsetting along normals.
mesh_sort_vertex
Sort vertices along a chosen axis and produce a remapped index buffer.
mesh_span_tree
Compute a minimum spanning tree over mesh vertices using edge lengths.
mesh_spectral
Spectral mesh analysis using the graph Laplacian (power iteration approximation).
mesh_sphere
UV sphere (lat/lon grid) mesh generation.
mesh_sphere_gen
mesh_sphere_map
Spherical parameterisation mapping for triangle meshes.
mesh_sphere_proj
Project mesh vertices onto a sphere surface.
mesh_spin
Spin-around-axis modifier.
mesh_spring_helix
Helical spring mesh generator (coil spring).
mesh_spring_mesh
Spring-based mesh relaxation system.
mesh_spring_net
Spring network mesh from point cloud with k-nearest edges.
mesh_sprite_atlas
Sprite atlas UV layout — packs sprite frames into a texture atlas grid.
mesh_stellated_solid
Stellated polyhedron stub generator.
mesh_stitch_seam
Stitch seam edges between two mesh boundaries.
mesh_strand_mesh
Strand-to-mesh conversion: turns hair strands into renderable triangle meshes.
mesh_stress_lines
mesh_stroke_extrude
mesh_stroke_path
Generate a stroke path mesh (ribbon) from a sequence of 3-D points.
mesh_subdiv_loop
Loop subdivision scheme for triangle meshes.
mesh_superellipsoid
Superellipsoid parametric mesh generation.
mesh_surface_area_query
Mesh surface area query stub.
mesh_surface_flow
Surface flow / direction field on a mesh.
mesh_surface_normal
Per-vertex and per-face normal computation utilities.
mesh_sweep
Swept volume — extrude a cross-section profile along a 3-D path.
mesh_sweep_solid
Sweep a 2-D profile along a 3-D path to produce a solid mesh.
mesh_swept_solid
Swept solid mesh: a profile polygon extruded along a polyline path.
mesh_symmetry_map
mesh_tangent_frame
Per-vertex tangent frame (tangent, bitangent, normal) computation.
mesh_tangent_frames
Per-face tangent frames (T/B/N) computed from UV coordinates.
mesh_taper_modifier
mesh_terrain_gen
mesh_tet
Tetrahedral mesh generation from a surface triangle mesh.
mesh_tetrahedron_gen
mesh_texture_bake
GPU-less CPU texture baking pipeline.
mesh_texture_proj
Texture projection utilities: planar, cylindrical, spherical, and box.
mesh_thicken
Thicken a shell mesh by offsetting along per-vertex normals.
mesh_thicken_normals
mesh_thickness_map
mesh_thin_shell
Thin-shell mesh generation: offset a surface inward/outward by a small thickness.
mesh_topo_repair_ext
Extended topology repair: fix winding order, remove degenerate faces, and re-stitch torn boundaries.
mesh_topo_sort
Topological sorting of mesh faces and vertices based on dependency graphs.
mesh_topology_flow
Topology flow analysis: edge loops, edge rings, poles detection.
mesh_topology_query
Topology query: genus, Euler number, connected components stub.
mesh_topology_repair
Non-manifold edge removal and T-junction resolution for triangle meshes.
mesh_torus
mesh_torus_gen
Torus mesh generation.
mesh_torus_knot
Torus knot mesh generator.
mesh_torus_ring
Parametric torus mesh (ring torus).
mesh_track_to
Track-to constraint for mesh orientation — aligns a local axis toward a target.
mesh_transfer_attr
Transfer scalar/vector attributes from a source mesh to a target mesh using nearest-neighbour or barycentric interpolation.
mesh_transfer_weights
mesh_transform_constraint
General transform constraint — maps source transform channels to target channels.
mesh_trapezohedron
Trapezohedron (dual of antiprism) mesh generator.
mesh_trefoil
Trefoil knot mesh generation.
mesh_tri_strip
Triangle-strip encoding and decoding for indexed triangle meshes.
mesh_tri_to_quad
Pair adjacent triangles into quads (greedy pairing).
mesh_trim
Trim mesh with a cutting plane: keep vertices (and their faces) above the plane.
mesh_tris_to_quads
Convert triangle pairs to quads.
mesh_tube
Generate a tube/pipe mesh along a polyline (list of centre-line points).
mesh_tube_curve
Tube geometry along an arbitrary 3-D curve (generalized pipe).
mesh_tube_deform
mesh_tube_mesh
Procedural tube/pipe mesh generation along a polyline path.
mesh_tweak_tool
Soft-selection vertex tweaking tool.
mesh_twist_modifier
mesh_unfold
Unfold a triangle mesh to a flat 2D net using a spanning tree approach.
mesh_unsubdivide
Un-subdivide: collapse edge loops to reduce mesh resolution.
mesh_uv_align_axis
UV axis alignment tool — aligns UV islands to U or V axis.
mesh_uv_atlas
UV atlas management: island tracking, packing stats, and utility helpers.
mesh_uv_copy_paste
UV copy/paste between meshes or UV layers.
mesh_uv_minimize_stretch
UV stretch minimization step for parametric UV unwrapping.
mesh_uv_pack
Advanced UV island packing using a shelf-fit bin packing algorithm.
mesh_uv_pin
UV vertex pinning for relaxation algorithms.
mesh_uv_rotate_align
UV rotate-to-align selected edges tool.
mesh_uv_scale_to_bounds
UV scale-to-bounds operation — fits UV islands into a target rectangle.
mesh_uv_seam
UV seam detection, marking and analysis for mesh parameterisation.
mesh_uv_stitch
UV seam stitching — merging UV islands across seams.
mesh_vertex_animation
Vertex animation frame storage — stores per-frame vertex position arrays.
mesh_vertex_attr
Generic per-vertex attribute storage (float arrays of arbitrary width).
mesh_vertex_cluster
mesh_vertex_color
mesh_vertex_color_layer
Vertex color layer management.
mesh_vertex_deform
Per-vertex deformation utilities: displacement, lattice, and blend-based.
mesh_vertex_degree
Vertex degree (valence) analysis for mesh vertices.
mesh_vertex_group
Named vertex group management with per-vertex weights.
mesh_vertex_group_weight
Named vertex weight groups for mesh deformation.
mesh_vertex_merge
mesh_vertex_order_v2
Vertex reordering strategies: cache-friendly, axis-sorted, and Morton order.
mesh_vertex_project
Vertex projection utilities.
mesh_vertex_slide
Vertex slide: slide a vertex along an edge.
mesh_vertex_smooth_v2
Vertex position smoothing: Laplacian, Taubin, and constrained variants.
mesh_vertex_snap
Vertex snapping utilities.
mesh_vertex_split
Vertex splitting: duplicate shared vertices across UV seams or hard edges.
mesh_vertex_weight
Per-vertex scalar weight buffers with normalisation and blending support.
mesh_vertex_weld
Vertex welding by threshold.
mesh_view_dependent_lod
View-dependent LOD selection — chooses detail level based on camera parameters.
mesh_visibility
Per-face and per-vertex visibility classification for a mesh.
mesh_volume_query
Mesh volume computation stub (divergence theorem approach).
mesh_voronoi
Voronoi partitioning on mesh surface via BFS from seed vertices.
mesh_voronoi_cell
Voronoi cell mesh from seed points, clipped to AABB.
mesh_voxel_oct
Octree-based voxel structure for a mesh.
mesh_voxelize
Voxelize a triangle mesh into a 3D boolean occupancy grid.
mesh_warp
Mesh warping via Radial Basis Functions (RBF).
mesh_warp_deform
Warp-based mesh deformation using radial basis functions.
mesh_warp_modifier
Simple warp (lattice-based vertex displacement).
mesh_wave_deform
Wave and ripple deformation of mesh vertices.
mesh_wave_mesh
Generate a planar wave mesh (animated sine-wave surface).
mesh_wedge
Wedge (triangular prism) mesh primitive and per-wedge attribute storage.
mesh_winding_query
Winding number inside/outside test for meshes stub.
mesh_wire_frame
Generate a wireframe line-segment mesh from a triangle mesh.
mesh_wire_mesh
Convert a triangle mesh into a wire-frame (edge-only) representation.
mesh_wireframe_modifier
mesh_wrinkle_map
mesh_zup_convert
Convert mesh coordinates between Y-up and Z-up conventions.
microdisp
Procedural micro-displacement for mesh surface detail.
normal_map_bake
normals
octree
Octree spatial index for fast 3-D point queries.
pose_library
Skeletal pose library: named pose presets stored as per-joint rotation quaternions.
proxy_gen
ray_pick
remesh
Isotropic remeshing via iterative edge operations: split long edges, collapse short edges, flip edges for valence, tangential smoothing.
repair
retarget
sampling
seam_cut
UV seam cutting utilities.
shapes
skeleton
Skeleton/joint hierarchy for animation-ready mesh export.
skinning
Linear Blend Skinning (LBS) for deforming mesh vertices using a skeleton.
smooth
spring_deform
stats
subdivide
suit
terrain
thickness
uv_quality
uvgen
visibility
View frustum culling, backface culling, and visibility classification.
voxelize
vpaint
weld
Mesh vertex welding and seam repair utilities.
winding