pymomentum-cpu 0.1.77.post26__cp313-cp313-macosx_15_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pymomentum-cpu might be problematic. Click here for more details.
- include/axel/BoundingBox.h +58 -0
- include/axel/Bvh.h +708 -0
- include/axel/BvhBase.h +75 -0
- include/axel/BvhCommon.h +43 -0
- include/axel/BvhEmbree.h +86 -0
- include/axel/BvhFactory.h +34 -0
- include/axel/Checks.h +21 -0
- include/axel/DualContouring.h +79 -0
- include/axel/KdTree.h +199 -0
- include/axel/Log.h +22 -0
- include/axel/MeshToSdf.h +123 -0
- include/axel/Profile.h +64 -0
- include/axel/Ray.h +45 -0
- include/axel/SignedDistanceField.h +248 -0
- include/axel/SimdKdTree.h +515 -0
- include/axel/TriBvh.h +157 -0
- include/axel/TriBvhEmbree.h +57 -0
- include/axel/common/Constants.h +27 -0
- include/axel/common/Types.h +21 -0
- include/axel/common/VectorizationTypes.h +58 -0
- include/axel/math/BoundingBoxUtils.h +54 -0
- include/axel/math/ContinuousCollisionDetection.h +48 -0
- include/axel/math/CoplanarityCheck.h +30 -0
- include/axel/math/EdgeEdgeDistance.h +31 -0
- include/axel/math/MeshHoleFilling.h +117 -0
- include/axel/math/PointTriangleProjection.h +34 -0
- include/axel/math/PointTriangleProjectionDefinitions.h +209 -0
- include/axel/math/RayTriangleIntersection.h +36 -0
- include/momentum/character/blend_shape.h +91 -0
- include/momentum/character/blend_shape_base.h +70 -0
- include/momentum/character/blend_shape_skinning.h +96 -0
- include/momentum/character/character.h +272 -0
- include/momentum/character/character_state.h +108 -0
- include/momentum/character/character_utility.h +128 -0
- include/momentum/character/collision_geometry.h +80 -0
- include/momentum/character/collision_geometry_state.h +130 -0
- include/momentum/character/fwd.h +262 -0
- include/momentum/character/inverse_parameter_transform.h +58 -0
- include/momentum/character/joint.h +82 -0
- include/momentum/character/joint_state.h +241 -0
- include/momentum/character/linear_skinning.h +139 -0
- include/momentum/character/locator.h +82 -0
- include/momentum/character/locator_state.h +43 -0
- include/momentum/character/marker.h +48 -0
- include/momentum/character/mesh_state.h +71 -0
- include/momentum/character/parameter_limits.h +144 -0
- include/momentum/character/parameter_transform.h +250 -0
- include/momentum/character/pose_shape.h +65 -0
- include/momentum/character/skeleton.h +85 -0
- include/momentum/character/skeleton_state.h +181 -0
- include/momentum/character/skeleton_utility.h +38 -0
- include/momentum/character/skin_weights.h +67 -0
- include/momentum/character/skinned_locator.h +80 -0
- include/momentum/character/types.h +202 -0
- include/momentum/character_sequence_solver/fwd.h +200 -0
- include/momentum/character_sequence_solver/model_parameters_sequence_error_function.h +65 -0
- include/momentum/character_sequence_solver/multipose_solver.h +65 -0
- include/momentum/character_sequence_solver/multipose_solver_function.h +82 -0
- include/momentum/character_sequence_solver/sequence_error_function.h +104 -0
- include/momentum/character_sequence_solver/sequence_solver.h +144 -0
- include/momentum/character_sequence_solver/sequence_solver_function.h +134 -0
- include/momentum/character_sequence_solver/state_sequence_error_function.h +109 -0
- include/momentum/character_sequence_solver/vertex_sequence_error_function.h +128 -0
- include/momentum/character_solver/aim_error_function.h +112 -0
- include/momentum/character_solver/collision_error_function.h +92 -0
- include/momentum/character_solver/collision_error_function_stateless.h +75 -0
- include/momentum/character_solver/constraint_error_function-inl.h +324 -0
- include/momentum/character_solver/constraint_error_function.h +248 -0
- include/momentum/character_solver/distance_error_function.h +77 -0
- include/momentum/character_solver/error_function_utils.h +60 -0
- include/momentum/character_solver/fixed_axis_error_function.h +139 -0
- include/momentum/character_solver/fwd.h +924 -0
- include/momentum/character_solver/gauss_newton_solver_qr.h +64 -0
- include/momentum/character_solver/limit_error_function.h +57 -0
- include/momentum/character_solver/model_parameters_error_function.h +64 -0
- include/momentum/character_solver/normal_error_function.h +73 -0
- include/momentum/character_solver/orientation_error_function.h +74 -0
- include/momentum/character_solver/plane_error_function.h +102 -0
- include/momentum/character_solver/point_triangle_vertex_error_function.h +141 -0
- include/momentum/character_solver/pose_prior_error_function.h +80 -0
- include/momentum/character_solver/position_error_function.h +75 -0
- include/momentum/character_solver/projection_error_function.h +93 -0
- include/momentum/character_solver/simd_collision_error_function.h +99 -0
- include/momentum/character_solver/simd_normal_error_function.h +157 -0
- include/momentum/character_solver/simd_plane_error_function.h +164 -0
- include/momentum/character_solver/simd_position_error_function.h +165 -0
- include/momentum/character_solver/skeleton_error_function.h +151 -0
- include/momentum/character_solver/skeleton_solver_function.h +94 -0
- include/momentum/character_solver/skinned_locator_error_function.h +166 -0
- include/momentum/character_solver/skinned_locator_triangle_error_function.h +146 -0
- include/momentum/character_solver/skinning_weight_iterator.h +80 -0
- include/momentum/character_solver/state_error_function.h +94 -0
- include/momentum/character_solver/transform_pose.h +80 -0
- include/momentum/character_solver/trust_region_qr.h +80 -0
- include/momentum/character_solver/vertex_error_function.h +155 -0
- include/momentum/character_solver/vertex_projection_error_function.h +126 -0
- include/momentum/character_solver/vertex_vertex_distance_error_function.h +151 -0
- include/momentum/common/aligned.h +155 -0
- include/momentum/common/checks.h +27 -0
- include/momentum/common/exception.h +70 -0
- include/momentum/common/filesystem.h +20 -0
- include/momentum/common/fwd.h +27 -0
- include/momentum/common/log.h +173 -0
- include/momentum/common/log_channel.h +17 -0
- include/momentum/common/memory.h +71 -0
- include/momentum/common/profile.h +79 -0
- include/momentum/common/progress_bar.h +37 -0
- include/momentum/common/string.h +52 -0
- include/momentum/diff_ik/ceres_utility.h +73 -0
- include/momentum/diff_ik/fully_differentiable_body_ik.h +58 -0
- include/momentum/diff_ik/fully_differentiable_distance_error_function.h +69 -0
- include/momentum/diff_ik/fully_differentiable_motion_error_function.h +46 -0
- include/momentum/diff_ik/fully_differentiable_orientation_error_function.h +114 -0
- include/momentum/diff_ik/fully_differentiable_pose_prior_error_function.h +76 -0
- include/momentum/diff_ik/fully_differentiable_position_error_function.h +138 -0
- include/momentum/diff_ik/fully_differentiable_projection_error_function.h +65 -0
- include/momentum/diff_ik/fully_differentiable_skeleton_error_function.h +160 -0
- include/momentum/diff_ik/fully_differentiable_state_error_function.h +54 -0
- include/momentum/diff_ik/fwd.h +385 -0
- include/momentum/diff_ik/union_error_function.h +67 -0
- include/momentum/gui/rerun/eigen_adapters.h +70 -0
- include/momentum/gui/rerun/logger.h +102 -0
- include/momentum/gui/rerun/logging_redirect.h +27 -0
- include/momentum/io/character_io.h +56 -0
- include/momentum/io/common/gsl_utils.h +50 -0
- include/momentum/io/common/stream_utils.h +65 -0
- include/momentum/io/fbx/fbx_io.h +109 -0
- include/momentum/io/fbx/fbx_memory_stream.h +66 -0
- include/momentum/io/fbx/openfbx_loader.h +49 -0
- include/momentum/io/fbx/polygon_data.h +60 -0
- include/momentum/io/gltf/gltf_builder.h +132 -0
- include/momentum/io/gltf/gltf_file_format.h +19 -0
- include/momentum/io/gltf/gltf_io.h +148 -0
- include/momentum/io/gltf/utils/accessor_utils.h +299 -0
- include/momentum/io/gltf/utils/coordinate_utils.h +60 -0
- include/momentum/io/gltf/utils/json_utils.h +102 -0
- include/momentum/io/legacy_json/legacy_json_io.h +70 -0
- include/momentum/io/marker/c3d_io.h +29 -0
- include/momentum/io/marker/conversions.h +57 -0
- include/momentum/io/marker/coordinate_system.h +30 -0
- include/momentum/io/marker/marker_io.h +54 -0
- include/momentum/io/marker/trc_io.h +27 -0
- include/momentum/io/motion/mmo_io.h +97 -0
- include/momentum/io/shape/blend_shape_io.h +70 -0
- include/momentum/io/shape/pose_shape_io.h +21 -0
- include/momentum/io/skeleton/locator_io.h +41 -0
- include/momentum/io/skeleton/mppca_io.h +26 -0
- include/momentum/io/skeleton/parameter_limits_io.h +25 -0
- include/momentum/io/skeleton/parameter_transform_io.h +41 -0
- include/momentum/io/skeleton/parameters_io.h +20 -0
- include/momentum/io/urdf/urdf_io.h +26 -0
- include/momentum/io/usd/usd_io.h +36 -0
- include/momentum/marker_tracking/app_utils.h +62 -0
- include/momentum/marker_tracking/marker_tracker.h +213 -0
- include/momentum/marker_tracking/process_markers.h +58 -0
- include/momentum/marker_tracking/tracker_utils.h +90 -0
- include/momentum/math/constants.h +82 -0
- include/momentum/math/covariance_matrix.h +84 -0
- include/momentum/math/fmt_eigen.h +23 -0
- include/momentum/math/fwd.h +132 -0
- include/momentum/math/generalized_loss.h +61 -0
- include/momentum/math/intersection.h +32 -0
- include/momentum/math/mesh.h +84 -0
- include/momentum/math/mppca.h +67 -0
- include/momentum/math/online_householder_qr.h +516 -0
- include/momentum/math/random-inl.h +404 -0
- include/momentum/math/random.h +310 -0
- include/momentum/math/simd_generalized_loss.h +40 -0
- include/momentum/math/transform.h +229 -0
- include/momentum/math/types.h +461 -0
- include/momentum/math/utility.h +251 -0
- include/momentum/rasterizer/camera.h +453 -0
- include/momentum/rasterizer/fwd.h +102 -0
- include/momentum/rasterizer/geometry.h +83 -0
- include/momentum/rasterizer/image.h +18 -0
- include/momentum/rasterizer/rasterizer.h +583 -0
- include/momentum/rasterizer/tensor.h +140 -0
- include/momentum/rasterizer/utility.h +268 -0
- include/momentum/simd/simd.h +221 -0
- include/momentum/solver/fwd.h +131 -0
- include/momentum/solver/gauss_newton_solver.h +136 -0
- include/momentum/solver/gradient_descent_solver.h +65 -0
- include/momentum/solver/solver.h +155 -0
- include/momentum/solver/solver_function.h +126 -0
- include/momentum/solver/subset_gauss_newton_solver.h +109 -0
- include/rerun/archetypes/annotation_context.hpp +157 -0
- include/rerun/archetypes/arrows2d.hpp +271 -0
- include/rerun/archetypes/arrows3d.hpp +257 -0
- include/rerun/archetypes/asset3d.hpp +262 -0
- include/rerun/archetypes/asset_video.hpp +275 -0
- include/rerun/archetypes/bar_chart.hpp +261 -0
- include/rerun/archetypes/boxes2d.hpp +293 -0
- include/rerun/archetypes/boxes3d.hpp +369 -0
- include/rerun/archetypes/capsules3d.hpp +333 -0
- include/rerun/archetypes/clear.hpp +180 -0
- include/rerun/archetypes/depth_image.hpp +425 -0
- include/rerun/archetypes/ellipsoids3d.hpp +384 -0
- include/rerun/archetypes/encoded_image.hpp +250 -0
- include/rerun/archetypes/geo_line_strings.hpp +166 -0
- include/rerun/archetypes/geo_points.hpp +177 -0
- include/rerun/archetypes/graph_edges.hpp +152 -0
- include/rerun/archetypes/graph_nodes.hpp +206 -0
- include/rerun/archetypes/image.hpp +434 -0
- include/rerun/archetypes/instance_poses3d.hpp +221 -0
- include/rerun/archetypes/line_strips2d.hpp +289 -0
- include/rerun/archetypes/line_strips3d.hpp +270 -0
- include/rerun/archetypes/mesh3d.hpp +387 -0
- include/rerun/archetypes/pinhole.hpp +385 -0
- include/rerun/archetypes/points2d.hpp +333 -0
- include/rerun/archetypes/points3d.hpp +369 -0
- include/rerun/archetypes/recording_properties.hpp +132 -0
- include/rerun/archetypes/scalar.hpp +170 -0
- include/rerun/archetypes/scalars.hpp +153 -0
- include/rerun/archetypes/segmentation_image.hpp +305 -0
- include/rerun/archetypes/series_line.hpp +274 -0
- include/rerun/archetypes/series_lines.hpp +271 -0
- include/rerun/archetypes/series_point.hpp +265 -0
- include/rerun/archetypes/series_points.hpp +251 -0
- include/rerun/archetypes/tensor.hpp +213 -0
- include/rerun/archetypes/text_document.hpp +200 -0
- include/rerun/archetypes/text_log.hpp +211 -0
- include/rerun/archetypes/transform3d.hpp +925 -0
- include/rerun/archetypes/video_frame_reference.hpp +295 -0
- include/rerun/archetypes/view_coordinates.hpp +393 -0
- include/rerun/archetypes.hpp +43 -0
- include/rerun/arrow_utils.hpp +32 -0
- include/rerun/as_components.hpp +90 -0
- include/rerun/blueprint/archetypes/background.hpp +113 -0
- include/rerun/blueprint/archetypes/container_blueprint.hpp +259 -0
- include/rerun/blueprint/archetypes/dataframe_query.hpp +178 -0
- include/rerun/blueprint/archetypes/entity_behavior.hpp +130 -0
- include/rerun/blueprint/archetypes/force_center.hpp +115 -0
- include/rerun/blueprint/archetypes/force_collision_radius.hpp +141 -0
- include/rerun/blueprint/archetypes/force_link.hpp +136 -0
- include/rerun/blueprint/archetypes/force_many_body.hpp +124 -0
- include/rerun/blueprint/archetypes/force_position.hpp +132 -0
- include/rerun/blueprint/archetypes/line_grid3d.hpp +178 -0
- include/rerun/blueprint/archetypes/map_background.hpp +104 -0
- include/rerun/blueprint/archetypes/map_zoom.hpp +103 -0
- include/rerun/blueprint/archetypes/near_clip_plane.hpp +109 -0
- include/rerun/blueprint/archetypes/panel_blueprint.hpp +95 -0
- include/rerun/blueprint/archetypes/plot_legend.hpp +118 -0
- include/rerun/blueprint/archetypes/scalar_axis.hpp +116 -0
- include/rerun/blueprint/archetypes/tensor_scalar_mapping.hpp +146 -0
- include/rerun/blueprint/archetypes/tensor_slice_selection.hpp +167 -0
- include/rerun/blueprint/archetypes/tensor_view_fit.hpp +95 -0
- include/rerun/blueprint/archetypes/view_blueprint.hpp +170 -0
- include/rerun/blueprint/archetypes/view_contents.hpp +142 -0
- include/rerun/blueprint/archetypes/viewport_blueprint.hpp +200 -0
- include/rerun/blueprint/archetypes/visible_time_ranges.hpp +116 -0
- include/rerun/blueprint/archetypes/visual_bounds2d.hpp +109 -0
- include/rerun/blueprint/archetypes/visualizer_overrides.hpp +113 -0
- include/rerun/blueprint/archetypes.hpp +29 -0
- include/rerun/blueprint/components/active_tab.hpp +82 -0
- include/rerun/blueprint/components/apply_latest_at.hpp +79 -0
- include/rerun/blueprint/components/auto_layout.hpp +77 -0
- include/rerun/blueprint/components/auto_views.hpp +77 -0
- include/rerun/blueprint/components/background_kind.hpp +66 -0
- include/rerun/blueprint/components/column_share.hpp +78 -0
- include/rerun/blueprint/components/component_column_selector.hpp +81 -0
- include/rerun/blueprint/components/container_kind.hpp +65 -0
- include/rerun/blueprint/components/corner2d.hpp +64 -0
- include/rerun/blueprint/components/enabled.hpp +77 -0
- include/rerun/blueprint/components/filter_by_range.hpp +74 -0
- include/rerun/blueprint/components/filter_is_not_null.hpp +77 -0
- include/rerun/blueprint/components/force_distance.hpp +82 -0
- include/rerun/blueprint/components/force_iterations.hpp +82 -0
- include/rerun/blueprint/components/force_strength.hpp +82 -0
- include/rerun/blueprint/components/grid_columns.hpp +78 -0
- include/rerun/blueprint/components/grid_spacing.hpp +78 -0
- include/rerun/blueprint/components/included_content.hpp +86 -0
- include/rerun/blueprint/components/lock_range_during_zoom.hpp +82 -0
- include/rerun/blueprint/components/map_provider.hpp +64 -0
- include/rerun/blueprint/components/near_clip_plane.hpp +82 -0
- include/rerun/blueprint/components/panel_state.hpp +61 -0
- include/rerun/blueprint/components/query_expression.hpp +89 -0
- include/rerun/blueprint/components/root_container.hpp +77 -0
- include/rerun/blueprint/components/row_share.hpp +78 -0
- include/rerun/blueprint/components/selected_columns.hpp +76 -0
- include/rerun/blueprint/components/tensor_dimension_index_slider.hpp +90 -0
- include/rerun/blueprint/components/timeline_name.hpp +76 -0
- include/rerun/blueprint/components/view_class.hpp +76 -0
- include/rerun/blueprint/components/view_fit.hpp +61 -0
- include/rerun/blueprint/components/view_maximized.hpp +79 -0
- include/rerun/blueprint/components/view_origin.hpp +81 -0
- include/rerun/blueprint/components/viewer_recommendation_hash.hpp +82 -0
- include/rerun/blueprint/components/visible_time_range.hpp +77 -0
- include/rerun/blueprint/components/visual_bounds2d.hpp +74 -0
- include/rerun/blueprint/components/visualizer_override.hpp +86 -0
- include/rerun/blueprint/components/zoom_level.hpp +78 -0
- include/rerun/blueprint/components.hpp +41 -0
- include/rerun/blueprint/datatypes/component_column_selector.hpp +61 -0
- include/rerun/blueprint/datatypes/filter_by_range.hpp +59 -0
- include/rerun/blueprint/datatypes/filter_is_not_null.hpp +61 -0
- include/rerun/blueprint/datatypes/selected_columns.hpp +62 -0
- include/rerun/blueprint/datatypes/tensor_dimension_index_slider.hpp +63 -0
- include/rerun/blueprint/datatypes.hpp +9 -0
- include/rerun/c/arrow_c_data_interface.h +111 -0
- include/rerun/c/compiler_utils.h +10 -0
- include/rerun/c/rerun.h +627 -0
- include/rerun/c/sdk_info.h +28 -0
- include/rerun/collection.hpp +496 -0
- include/rerun/collection_adapter.hpp +43 -0
- include/rerun/collection_adapter_builtins.hpp +138 -0
- include/rerun/compiler_utils.hpp +61 -0
- include/rerun/component_batch.hpp +163 -0
- include/rerun/component_column.hpp +111 -0
- include/rerun/component_descriptor.hpp +142 -0
- include/rerun/component_type.hpp +35 -0
- include/rerun/components/aggregation_policy.hpp +76 -0
- include/rerun/components/albedo_factor.hpp +74 -0
- include/rerun/components/annotation_context.hpp +102 -0
- include/rerun/components/axis_length.hpp +74 -0
- include/rerun/components/blob.hpp +73 -0
- include/rerun/components/class_id.hpp +71 -0
- include/rerun/components/clear_is_recursive.hpp +75 -0
- include/rerun/components/color.hpp +99 -0
- include/rerun/components/colormap.hpp +99 -0
- include/rerun/components/depth_meter.hpp +84 -0
- include/rerun/components/draw_order.hpp +79 -0
- include/rerun/components/entity_path.hpp +83 -0
- include/rerun/components/fill_mode.hpp +72 -0
- include/rerun/components/fill_ratio.hpp +79 -0
- include/rerun/components/gamma_correction.hpp +80 -0
- include/rerun/components/geo_line_string.hpp +63 -0
- include/rerun/components/graph_edge.hpp +75 -0
- include/rerun/components/graph_node.hpp +79 -0
- include/rerun/components/graph_type.hpp +57 -0
- include/rerun/components/half_size2d.hpp +91 -0
- include/rerun/components/half_size3d.hpp +95 -0
- include/rerun/components/image_buffer.hpp +86 -0
- include/rerun/components/image_format.hpp +84 -0
- include/rerun/components/image_plane_distance.hpp +77 -0
- include/rerun/components/interactive.hpp +76 -0
- include/rerun/components/keypoint_id.hpp +74 -0
- include/rerun/components/lat_lon.hpp +89 -0
- include/rerun/components/length.hpp +77 -0
- include/rerun/components/line_strip2d.hpp +73 -0
- include/rerun/components/line_strip3d.hpp +73 -0
- include/rerun/components/magnification_filter.hpp +63 -0
- include/rerun/components/marker_shape.hpp +82 -0
- include/rerun/components/marker_size.hpp +74 -0
- include/rerun/components/media_type.hpp +157 -0
- include/rerun/components/name.hpp +83 -0
- include/rerun/components/opacity.hpp +77 -0
- include/rerun/components/pinhole_projection.hpp +94 -0
- include/rerun/components/plane3d.hpp +75 -0
- include/rerun/components/pose_rotation_axis_angle.hpp +73 -0
- include/rerun/components/pose_rotation_quat.hpp +71 -0
- include/rerun/components/pose_scale3d.hpp +102 -0
- include/rerun/components/pose_transform_mat3x3.hpp +87 -0
- include/rerun/components/pose_translation3d.hpp +96 -0
- include/rerun/components/position2d.hpp +86 -0
- include/rerun/components/position3d.hpp +90 -0
- include/rerun/components/radius.hpp +98 -0
- include/rerun/components/range1d.hpp +75 -0
- include/rerun/components/resolution.hpp +88 -0
- include/rerun/components/rotation_axis_angle.hpp +72 -0
- include/rerun/components/rotation_quat.hpp +71 -0
- include/rerun/components/scalar.hpp +76 -0
- include/rerun/components/scale3d.hpp +102 -0
- include/rerun/components/series_visible.hpp +76 -0
- include/rerun/components/show_labels.hpp +79 -0
- include/rerun/components/stroke_width.hpp +74 -0
- include/rerun/components/tensor_data.hpp +94 -0
- include/rerun/components/tensor_dimension_index_selection.hpp +77 -0
- include/rerun/components/tensor_height_dimension.hpp +71 -0
- include/rerun/components/tensor_width_dimension.hpp +71 -0
- include/rerun/components/texcoord2d.hpp +101 -0
- include/rerun/components/text.hpp +83 -0
- include/rerun/components/text_log_level.hpp +110 -0
- include/rerun/components/timestamp.hpp +76 -0
- include/rerun/components/transform_mat3x3.hpp +92 -0
- include/rerun/components/transform_relation.hpp +66 -0
- include/rerun/components/translation3d.hpp +96 -0
- include/rerun/components/triangle_indices.hpp +85 -0
- include/rerun/components/value_range.hpp +78 -0
- include/rerun/components/vector2d.hpp +92 -0
- include/rerun/components/vector3d.hpp +96 -0
- include/rerun/components/video_timestamp.hpp +120 -0
- include/rerun/components/view_coordinates.hpp +346 -0
- include/rerun/components/visible.hpp +74 -0
- include/rerun/components.hpp +77 -0
- include/rerun/config.hpp +52 -0
- include/rerun/datatypes/angle.hpp +76 -0
- include/rerun/datatypes/annotation_info.hpp +76 -0
- include/rerun/datatypes/blob.hpp +67 -0
- include/rerun/datatypes/bool.hpp +57 -0
- include/rerun/datatypes/channel_datatype.hpp +87 -0
- include/rerun/datatypes/class_description.hpp +92 -0
- include/rerun/datatypes/class_description_map_elem.hpp +69 -0
- include/rerun/datatypes/class_id.hpp +62 -0
- include/rerun/datatypes/color_model.hpp +68 -0
- include/rerun/datatypes/dvec2d.hpp +76 -0
- include/rerun/datatypes/entity_path.hpp +60 -0
- include/rerun/datatypes/float32.hpp +62 -0
- include/rerun/datatypes/float64.hpp +62 -0
- include/rerun/datatypes/image_format.hpp +107 -0
- include/rerun/datatypes/keypoint_id.hpp +63 -0
- include/rerun/datatypes/keypoint_pair.hpp +65 -0
- include/rerun/datatypes/mat3x3.hpp +105 -0
- include/rerun/datatypes/mat4x4.hpp +119 -0
- include/rerun/datatypes/pixel_format.hpp +142 -0
- include/rerun/datatypes/plane3d.hpp +60 -0
- include/rerun/datatypes/quaternion.hpp +110 -0
- include/rerun/datatypes/range1d.hpp +59 -0
- include/rerun/datatypes/range2d.hpp +55 -0
- include/rerun/datatypes/rgba32.hpp +94 -0
- include/rerun/datatypes/rotation_axis_angle.hpp +67 -0
- include/rerun/datatypes/tensor_buffer.hpp +529 -0
- include/rerun/datatypes/tensor_data.hpp +100 -0
- include/rerun/datatypes/tensor_dimension_index_selection.hpp +58 -0
- include/rerun/datatypes/tensor_dimension_selection.hpp +56 -0
- include/rerun/datatypes/time_int.hpp +62 -0
- include/rerun/datatypes/time_range.hpp +55 -0
- include/rerun/datatypes/time_range_boundary.hpp +175 -0
- include/rerun/datatypes/uint16.hpp +62 -0
- include/rerun/datatypes/uint32.hpp +62 -0
- include/rerun/datatypes/uint64.hpp +62 -0
- include/rerun/datatypes/utf8.hpp +76 -0
- include/rerun/datatypes/utf8pair.hpp +62 -0
- include/rerun/datatypes/uuid.hpp +60 -0
- include/rerun/datatypes/uvec2d.hpp +76 -0
- include/rerun/datatypes/uvec3d.hpp +80 -0
- include/rerun/datatypes/uvec4d.hpp +59 -0
- include/rerun/datatypes/vec2d.hpp +76 -0
- include/rerun/datatypes/vec3d.hpp +80 -0
- include/rerun/datatypes/vec4d.hpp +84 -0
- include/rerun/datatypes/video_timestamp.hpp +67 -0
- include/rerun/datatypes/view_coordinates.hpp +87 -0
- include/rerun/datatypes/visible_time_range.hpp +57 -0
- include/rerun/datatypes.hpp +51 -0
- include/rerun/demo_utils.hpp +75 -0
- include/rerun/entity_path.hpp +20 -0
- include/rerun/error.hpp +180 -0
- include/rerun/half.hpp +10 -0
- include/rerun/image_utils.hpp +187 -0
- include/rerun/indicator_component.hpp +59 -0
- include/rerun/loggable.hpp +54 -0
- include/rerun/recording_stream.hpp +960 -0
- include/rerun/rerun_sdk_export.hpp +25 -0
- include/rerun/result.hpp +86 -0
- include/rerun/rotation3d.hpp +33 -0
- include/rerun/sdk_info.hpp +20 -0
- include/rerun/spawn.hpp +21 -0
- include/rerun/spawn_options.hpp +57 -0
- include/rerun/string_utils.hpp +16 -0
- include/rerun/third_party/cxxopts.hpp +2198 -0
- include/rerun/time_column.hpp +288 -0
- include/rerun/timeline.hpp +38 -0
- include/rerun/type_traits.hpp +40 -0
- include/rerun.hpp +86 -0
- lib/cmake/axel/axel-config.cmake +45 -0
- lib/cmake/axel/axelTargets-release.cmake +19 -0
- lib/cmake/axel/axelTargets.cmake +108 -0
- lib/cmake/momentum/Findre2.cmake +52 -0
- lib/cmake/momentum/momentum-config.cmake +67 -0
- lib/cmake/momentum/momentumTargets-release.cmake +259 -0
- lib/cmake/momentum/momentumTargets.cmake +377 -0
- lib/cmake/rerun_sdk/rerun_sdkConfig.cmake +70 -0
- lib/cmake/rerun_sdk/rerun_sdkConfigVersion.cmake +83 -0
- lib/cmake/rerun_sdk/rerun_sdkTargets-release.cmake +19 -0
- lib/cmake/rerun_sdk/rerun_sdkTargets.cmake +108 -0
- lib/libarrow.a +0 -0
- lib/libarrow_bundled_dependencies.a +0 -0
- lib/libaxel.a +0 -0
- lib/libmomentum_app_utils.a +0 -0
- lib/libmomentum_character.a +0 -0
- lib/libmomentum_character_sequence_solver.a +0 -0
- lib/libmomentum_character_solver.a +0 -0
- lib/libmomentum_common.a +0 -0
- lib/libmomentum_diff_ik.a +0 -0
- lib/libmomentum_io.a +0 -0
- lib/libmomentum_io_common.a +0 -0
- lib/libmomentum_io_fbx.a +0 -0
- lib/libmomentum_io_gltf.a +0 -0
- lib/libmomentum_io_legacy_json.a +0 -0
- lib/libmomentum_io_marker.a +0 -0
- lib/libmomentum_io_motion.a +0 -0
- lib/libmomentum_io_shape.a +0 -0
- lib/libmomentum_io_skeleton.a +0 -0
- lib/libmomentum_io_urdf.a +0 -0
- lib/libmomentum_marker_tracker.a +0 -0
- lib/libmomentum_math.a +0 -0
- lib/libmomentum_online_qr.a +0 -0
- lib/libmomentum_process_markers.a +0 -0
- lib/libmomentum_rerun.a +0 -0
- lib/libmomentum_simd_constraints.a +0 -0
- lib/libmomentum_simd_generalized_loss.a +0 -0
- lib/libmomentum_skeleton.a +0 -0
- lib/libmomentum_solver.a +0 -0
- lib/librerun_c__macos_arm64.a +0 -0
- lib/librerun_sdk.a +0 -0
- pymomentum/axel.cpython-313-darwin.so +0 -0
- pymomentum/backend/__init__.py +16 -0
- pymomentum/backend/skel_state_backend.py +614 -0
- pymomentum/backend/trs_backend.py +871 -0
- pymomentum/backend/utils.py +224 -0
- pymomentum/geometry.cpython-313-darwin.so +0 -0
- pymomentum/marker_tracking.cpython-313-darwin.so +0 -0
- pymomentum/quaternion.py +740 -0
- pymomentum/skel_state.py +514 -0
- pymomentum/solver.cpython-313-darwin.so +0 -0
- pymomentum/solver2.cpython-313-darwin.so +0 -0
- pymomentum/torch/character.py +809 -0
- pymomentum/torch/parameter_limits.py +494 -0
- pymomentum/torch/utility.py +20 -0
- pymomentum/trs.py +535 -0
- pymomentum_cpu-0.1.77.post26.dist-info/METADATA +208 -0
- pymomentum_cpu-0.1.77.post26.dist-info/RECORD +512 -0
- pymomentum_cpu-0.1.77.post26.dist-info/WHEEL +5 -0
- pymomentum_cpu-0.1.77.post26.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <embree4/rtcore.h>
|
|
11
|
+
#include <optional>
|
|
12
|
+
|
|
13
|
+
#include "axel/BvhCommon.h"
|
|
14
|
+
#include "axel/Ray.h"
|
|
15
|
+
|
|
16
|
+
namespace axel {
|
|
17
|
+
|
|
18
|
+
template <typename S>
|
|
19
|
+
class TriBvhEmbree {
|
|
20
|
+
public:
|
|
21
|
+
TriBvhEmbree(const Eigen::MatrixX3<S>& positions, const Eigen::MatrixX3i& triangles);
|
|
22
|
+
~TriBvhEmbree();
|
|
23
|
+
|
|
24
|
+
TriBvhEmbree(const TriBvhEmbree&) = delete;
|
|
25
|
+
TriBvhEmbree& operator=(const TriBvhEmbree&) = delete;
|
|
26
|
+
|
|
27
|
+
TriBvhEmbree(TriBvhEmbree&& other) noexcept;
|
|
28
|
+
TriBvhEmbree& operator=(TriBvhEmbree&& other) noexcept;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @brief Returns the closest hit with the given query ray.
|
|
32
|
+
* If the ray hits nothing, returns a std::nullopt.
|
|
33
|
+
*/
|
|
34
|
+
std::optional<IntersectionResult<S>> closestHit(const Ray3<S>& ray) const;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* @brief Checks whether the given ray intersects any of the primitives in the Bvh.
|
|
38
|
+
*/
|
|
39
|
+
bool anyHit(const Ray3<S>& ray) const;
|
|
40
|
+
|
|
41
|
+
ClosestSurfacePointResult<S> closestSurfacePoint(const Eigen::Vector3<S>& query) const;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @brief Returns the total number of primitives in the tree. It should be equal to the number of
|
|
45
|
+
* triangles that Bvh was constructed with.
|
|
46
|
+
*/
|
|
47
|
+
size_t getPrimitiveCount() const;
|
|
48
|
+
|
|
49
|
+
private:
|
|
50
|
+
// TODO(nemanjab): Wrap this in a singleton to allow usage across multiple BVHs.
|
|
51
|
+
RTCDevice device_;
|
|
52
|
+
RTCScene scene_;
|
|
53
|
+
Eigen::MatrixX3<S> positions_;
|
|
54
|
+
Eigen::MatrixX3i triangles_;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
} // namespace axel
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <type_traits>
|
|
11
|
+
|
|
12
|
+
namespace axel::detail {
|
|
13
|
+
|
|
14
|
+
template <typename T>
|
|
15
|
+
[[nodiscard]] constexpr T eps(T floatEps = 1e-6, T doubleEps = 1e-15) {
|
|
16
|
+
if constexpr (std::is_same_v<T, float>) {
|
|
17
|
+
return floatEps;
|
|
18
|
+
} else if constexpr (std::is_same_v<T, double>) {
|
|
19
|
+
return doubleEps;
|
|
20
|
+
} else {
|
|
21
|
+
// Using !sizeof(T) makes the static_assert condition type-dependent, ensuring
|
|
22
|
+
// it's evaluated only when the template is instantiated with a specific type.
|
|
23
|
+
static_assert(!sizeof(T), "Unsupported type");
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
} // namespace axel::detail
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <cstddef>
|
|
11
|
+
#include <cstdint>
|
|
12
|
+
|
|
13
|
+
namespace axel {
|
|
14
|
+
|
|
15
|
+
using Index = int32_t;
|
|
16
|
+
static_assert(sizeof(Index) == 4);
|
|
17
|
+
inline constexpr Index kInvalidIndex = Index{-1};
|
|
18
|
+
|
|
19
|
+
using Size = std::ptrdiff_t;
|
|
20
|
+
|
|
21
|
+
} // namespace axel
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <drjit/packet.h>
|
|
11
|
+
|
|
12
|
+
namespace axel {
|
|
13
|
+
|
|
14
|
+
// DrJit's DefaultSize constant is based on single precision float (4 for SSE, 8 for AVX, 16 for
|
|
15
|
+
// AVX512).
|
|
16
|
+
// If we are dealing with a platform that doesn't support SIMD/isn't detected, we'll use the
|
|
17
|
+
// fallback sizes that will compile down to scalar loops.
|
|
18
|
+
|
|
19
|
+
template <typename ScalarType>
|
|
20
|
+
struct NativeLaneWidth {
|
|
21
|
+
static constexpr size_t value = 0;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
template <>
|
|
25
|
+
struct NativeLaneWidth<float> {
|
|
26
|
+
static constexpr size_t value = drjit::DefaultSize <= 1 ? 4 : drjit::DefaultSize;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
template <>
|
|
30
|
+
struct NativeLaneWidth<int32_t> {
|
|
31
|
+
static constexpr size_t value = drjit::DefaultSize <= 1 ? 4 : drjit::DefaultSize;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
template <>
|
|
35
|
+
struct NativeLaneWidth<double> {
|
|
36
|
+
static constexpr size_t value = drjit::DefaultSize <= 1 ? 2 : drjit::DefaultSize / 2;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
template <typename ScalarType>
|
|
40
|
+
inline static constexpr size_t kNativeLaneWidth = NativeLaneWidth<ScalarType>::value;
|
|
41
|
+
|
|
42
|
+
template <typename Scalar, size_t LaneWidth = kNativeLaneWidth<Scalar>>
|
|
43
|
+
using WideScalar = drjit::Packet<Scalar, LaneWidth>;
|
|
44
|
+
|
|
45
|
+
template <typename Scalar, size_t LaneWidth = kNativeLaneWidth<Scalar>>
|
|
46
|
+
using WideVec3 = drjit::Array<WideScalar<Scalar, LaneWidth>, 3>; // Each element is a lane.
|
|
47
|
+
|
|
48
|
+
// Memory layout of a boolean SIMD mask is ISA dependent.
|
|
49
|
+
// We need to retrieve the correct type based on underlying native support.
|
|
50
|
+
template <typename VectorType>
|
|
51
|
+
using WideMask = drjit::mask_t<VectorType>;
|
|
52
|
+
|
|
53
|
+
using WideScalarf = WideScalar<float>;
|
|
54
|
+
using WideScalard = WideScalar<double>;
|
|
55
|
+
using WideVec3f = WideVec3<float>;
|
|
56
|
+
using WideVec3d = WideVec3<double>;
|
|
57
|
+
|
|
58
|
+
} // namespace axel
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <Eigen/Geometry>
|
|
11
|
+
|
|
12
|
+
#include "axel/math/RayTriangleIntersection.h"
|
|
13
|
+
|
|
14
|
+
namespace axel {
|
|
15
|
+
|
|
16
|
+
template <class T>
|
|
17
|
+
void getMinMaxBoundSegment(
|
|
18
|
+
const Eigen::Vector3<T>& p0,
|
|
19
|
+
const Eigen::Vector3<T>& p1,
|
|
20
|
+
Eigen::Vector3<T>& minBound,
|
|
21
|
+
Eigen::Vector3<T>& maxBound,
|
|
22
|
+
T epsilon) {
|
|
23
|
+
minBound.array() = p0.array().min(p1.array()) - epsilon;
|
|
24
|
+
maxBound.array() = p0.array().max(p1.array()) + epsilon;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
template <class T>
|
|
28
|
+
void getMinMaxBoundTriangle(
|
|
29
|
+
const Eigen::Vector3<T>& p0,
|
|
30
|
+
const Eigen::Vector3<T>& p1,
|
|
31
|
+
const Eigen::Vector3<T>& p2,
|
|
32
|
+
Eigen::Vector3<T>& minBound,
|
|
33
|
+
Eigen::Vector3<T>& maxBound,
|
|
34
|
+
T epsilon) {
|
|
35
|
+
minBound.array() = p0.array().min(p1.array().min(p2.array())) - epsilon;
|
|
36
|
+
maxBound.array() = p0.array().max(p1.array().max(p2.array())) + epsilon;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
template <class T>
|
|
40
|
+
void getAdaptiveMinMaxBoundTriangle(
|
|
41
|
+
const Eigen::Vector3<T>& p0,
|
|
42
|
+
const Eigen::Vector3<T>& p1,
|
|
43
|
+
const Eigen::Vector3<T>& p2,
|
|
44
|
+
Eigen::Vector3<T>& minBound,
|
|
45
|
+
Eigen::Vector3<T>& maxBound,
|
|
46
|
+
T multiplicativeFactor = 0.01) {
|
|
47
|
+
const Eigen::Array3<T> minArray = p0.array().min(p1.array().min(p2.array()));
|
|
48
|
+
const Eigen::Array3<T> maxArray = p0.array().max(p1.array().max(p2.array()));
|
|
49
|
+
const Eigen::Array3<T> epsilonArray = (maxArray - minArray) * multiplicativeFactor;
|
|
50
|
+
minBound.array() = minArray - epsilonArray;
|
|
51
|
+
maxBound.array() = maxArray + epsilonArray;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
} // namespace axel
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <Eigen/Core>
|
|
11
|
+
|
|
12
|
+
namespace axel {
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Performs continuous collision detection between two moving edges.
|
|
16
|
+
* First edge is defined by points (x1, x2) with velocities (v1, v2).
|
|
17
|
+
* Second edge is defined by points (x3, x4) with velocities (v3, v4).
|
|
18
|
+
* Returns true if the two edges have an interection within the given time delta `dt`.
|
|
19
|
+
* Additional check is performed when detectionFrequency > 1, which compares averaged
|
|
20
|
+
* trajectory distances multiple frames in the future (with time delta = dt * detectionFrequency).
|
|
21
|
+
*/
|
|
22
|
+
bool ccdEdgeEdge(
|
|
23
|
+
const Eigen::Vector3d& x1,
|
|
24
|
+
const Eigen::Vector3d& x2,
|
|
25
|
+
const Eigen::Vector3d& x3,
|
|
26
|
+
const Eigen::Vector3d& x4,
|
|
27
|
+
const Eigen::Vector3d& v1,
|
|
28
|
+
const Eigen::Vector3d& v2,
|
|
29
|
+
const Eigen::Vector3d& v3,
|
|
30
|
+
const Eigen::Vector3d& v4,
|
|
31
|
+
double distanceThreshold,
|
|
32
|
+
double dt);
|
|
33
|
+
|
|
34
|
+
// Note: Vertex is represented by p4 with velocity v4, while the triangle is defined by
|
|
35
|
+
// (x1, x2, x3) with velocities (v1, v2, v3).
|
|
36
|
+
bool ccdVertexTriangle(
|
|
37
|
+
const Eigen::Vector3d& x1,
|
|
38
|
+
const Eigen::Vector3d& x2,
|
|
39
|
+
const Eigen::Vector3d& x3,
|
|
40
|
+
const Eigen::Vector3d& x4,
|
|
41
|
+
const Eigen::Vector3d& v1,
|
|
42
|
+
const Eigen::Vector3d& v2,
|
|
43
|
+
const Eigen::Vector3d& v3,
|
|
44
|
+
const Eigen::Vector3d& v4,
|
|
45
|
+
double distanceThreshold,
|
|
46
|
+
double dt);
|
|
47
|
+
|
|
48
|
+
} // namespace axel
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <Eigen/Core>
|
|
11
|
+
#include <gsl/span>
|
|
12
|
+
|
|
13
|
+
namespace axel {
|
|
14
|
+
|
|
15
|
+
int solveP3(gsl::span<double, 3> x, double a, double b, double c);
|
|
16
|
+
int solveP2(gsl::span<double, 2> x, double a, double b, double c);
|
|
17
|
+
|
|
18
|
+
/* Find times when the four points with given velocities are coplanar in 3D space */
|
|
19
|
+
int timesCoplanar(
|
|
20
|
+
gsl::span<double, 3> t,
|
|
21
|
+
const Eigen::Vector3d& x1,
|
|
22
|
+
const Eigen::Vector3d& x2,
|
|
23
|
+
const Eigen::Vector3d& x3,
|
|
24
|
+
const Eigen::Vector3d& x4,
|
|
25
|
+
const Eigen::Vector3d& v1,
|
|
26
|
+
const Eigen::Vector3d& v2,
|
|
27
|
+
const Eigen::Vector3d& v3,
|
|
28
|
+
const Eigen::Vector3d& v4);
|
|
29
|
+
|
|
30
|
+
} // namespace axel
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <Eigen/Core>
|
|
11
|
+
|
|
12
|
+
namespace axel {
|
|
13
|
+
|
|
14
|
+
/*
|
|
15
|
+
Compute the distance between the closest points on two edges
|
|
16
|
+
Edge 1 : p1 - q1
|
|
17
|
+
Edge 2 : p2 - q2
|
|
18
|
+
Result: closest points will be
|
|
19
|
+
p1 + s(q1-p1) on edge 1
|
|
20
|
+
p2 + t(q2-p2) on edge 2
|
|
21
|
+
*/
|
|
22
|
+
bool distanceEdgeEdge(
|
|
23
|
+
const Eigen::Vector3d& p1,
|
|
24
|
+
const Eigen::Vector3d& q1,
|
|
25
|
+
const Eigen::Vector3d& p2,
|
|
26
|
+
const Eigen::Vector3d& q2,
|
|
27
|
+
double& s,
|
|
28
|
+
double& t,
|
|
29
|
+
double& distance);
|
|
30
|
+
|
|
31
|
+
} // namespace axel
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <unordered_map>
|
|
11
|
+
#include <unordered_set>
|
|
12
|
+
#include <vector>
|
|
13
|
+
|
|
14
|
+
#include <Eigen/Core>
|
|
15
|
+
#include <Eigen/Geometry>
|
|
16
|
+
#include <gsl/span>
|
|
17
|
+
|
|
18
|
+
#include "axel/common/Types.h"
|
|
19
|
+
|
|
20
|
+
namespace axel {
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Represents a hole boundary in the mesh.
|
|
24
|
+
*/
|
|
25
|
+
struct HoleBoundary {
|
|
26
|
+
/// Ordered list of vertex indices forming the hole boundary
|
|
27
|
+
std::vector<Index> vertices;
|
|
28
|
+
|
|
29
|
+
/// Edge pairs (vertex_i, vertex_i+1) forming the boundary
|
|
30
|
+
std::vector<std::pair<Index, Index>> edges;
|
|
31
|
+
|
|
32
|
+
/// Center point of the hole (computed from boundary vertices)
|
|
33
|
+
Eigen::Vector3f center;
|
|
34
|
+
|
|
35
|
+
/// Approximate radius of the hole
|
|
36
|
+
float radius{};
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Result of hole filling operation.
|
|
41
|
+
*/
|
|
42
|
+
struct HoleFillingResult {
|
|
43
|
+
/// New vertices added during hole filling
|
|
44
|
+
std::vector<Eigen::Vector3f> newVertices;
|
|
45
|
+
|
|
46
|
+
/// New triangles added (indices refer to original + new vertices)
|
|
47
|
+
std::vector<Eigen::Vector3i> newTriangles;
|
|
48
|
+
|
|
49
|
+
/// Information about filled holes
|
|
50
|
+
std::vector<HoleBoundary> filledHoles;
|
|
51
|
+
|
|
52
|
+
/// Success flag
|
|
53
|
+
bool success = false;
|
|
54
|
+
|
|
55
|
+
/// Number of holes that were successfully filled
|
|
56
|
+
size_t holesFilledCount = 0;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Detect holes/boundaries in a triangle mesh.
|
|
61
|
+
*
|
|
62
|
+
* @param vertices Mesh vertices
|
|
63
|
+
* @param triangles Mesh triangles
|
|
64
|
+
* @return List of detected hole boundaries
|
|
65
|
+
*/
|
|
66
|
+
std::vector<HoleBoundary> detectMeshHoles(
|
|
67
|
+
gsl::span<const Eigen::Vector3f> vertices,
|
|
68
|
+
gsl::span<const Eigen::Vector3i> triangles);
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Fill holes in a triangle mesh using advancing front method.
|
|
72
|
+
*
|
|
73
|
+
* This function identifies holes in the mesh and fills them with new triangles
|
|
74
|
+
* to create a watertight surface suitable for SDF generation.
|
|
75
|
+
*
|
|
76
|
+
* @param vertices Original mesh vertices
|
|
77
|
+
* @param triangles Original mesh triangles
|
|
78
|
+
* @return Result containing new vertices and triangles, or failure info
|
|
79
|
+
*/
|
|
80
|
+
template <typename ScalarType>
|
|
81
|
+
HoleFillingResult fillMeshHoles(
|
|
82
|
+
gsl::span<const Eigen::Vector3<ScalarType>> vertices,
|
|
83
|
+
gsl::span<const Eigen::Vector3i> triangles);
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Convenience function that fills holes and returns complete mesh.
|
|
87
|
+
*
|
|
88
|
+
* @param vertices Original mesh vertices
|
|
89
|
+
* @param triangles Original mesh triangles
|
|
90
|
+
* @return Pair of (all_vertices, all_triangles) with holes filled
|
|
91
|
+
*/
|
|
92
|
+
template <typename ScalarType>
|
|
93
|
+
std::pair<std::vector<Eigen::Vector3<ScalarType>>, std::vector<Eigen::Vector3i>>
|
|
94
|
+
fillMeshHolesComplete(
|
|
95
|
+
gsl::span<const Eigen::Vector3<ScalarType>> vertices,
|
|
96
|
+
gsl::span<const Eigen::Vector3i> triangles);
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Apply Laplacian smoothing to mesh vertices with optional masking.
|
|
100
|
+
*
|
|
101
|
+
* @param vertices Input mesh vertices
|
|
102
|
+
* @param faces Mesh faces (triangles or quads)
|
|
103
|
+
* @param vertex_mask Optional mask to specify which vertices to smooth (if empty, all vertices are
|
|
104
|
+
* smoothed)
|
|
105
|
+
* @param iterations Number of smoothing iterations
|
|
106
|
+
* @param step Smoothing step size (0-1)
|
|
107
|
+
* @return Smoothed vertices
|
|
108
|
+
*/
|
|
109
|
+
template <typename ScalarType, typename FaceType>
|
|
110
|
+
std::vector<Eigen::Vector3<ScalarType>> smoothMeshLaplacian(
|
|
111
|
+
gsl::span<const Eigen::Vector3<ScalarType>> vertices,
|
|
112
|
+
gsl::span<const FaceType> faces,
|
|
113
|
+
const std::vector<bool>& vertex_mask = {},
|
|
114
|
+
Index iterations = 1,
|
|
115
|
+
ScalarType step = ScalarType{0.5});
|
|
116
|
+
|
|
117
|
+
} // namespace axel
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <Eigen/Core>
|
|
11
|
+
|
|
12
|
+
#include "axel/common/VectorizationTypes.h"
|
|
13
|
+
|
|
14
|
+
namespace axel {
|
|
15
|
+
|
|
16
|
+
template <typename S>
|
|
17
|
+
bool projectOnTriangle(
|
|
18
|
+
const Eigen::Vector3<S>& p,
|
|
19
|
+
const Eigen::Vector3<S>& a,
|
|
20
|
+
const Eigen::Vector3<S>& b,
|
|
21
|
+
const Eigen::Vector3<S>& c,
|
|
22
|
+
Eigen::Vector3<S>& q,
|
|
23
|
+
Eigen::Vector3<S>* barycentric = nullptr);
|
|
24
|
+
|
|
25
|
+
template <typename S>
|
|
26
|
+
WideMask<WideScalar<S>> projectOnTriangle(
|
|
27
|
+
const WideVec3<S>& p,
|
|
28
|
+
const WideVec3<S>& a,
|
|
29
|
+
const WideVec3<S>& b,
|
|
30
|
+
const WideVec3<S>& c,
|
|
31
|
+
WideVec3<S>& q,
|
|
32
|
+
WideVec3<S>* barycentric = nullptr);
|
|
33
|
+
|
|
34
|
+
} // namespace axel
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <Eigen/Geometry>
|
|
11
|
+
|
|
12
|
+
#include "axel/common/VectorizationTypes.h"
|
|
13
|
+
|
|
14
|
+
// The definitions here are split in this way to still explicitly instantiate
|
|
15
|
+
// common template types to reduce compilation and binary size in axel, while still
|
|
16
|
+
// allowing an external user to include this file and provide an explicit specialization
|
|
17
|
+
// for a new type.
|
|
18
|
+
namespace axel {
|
|
19
|
+
|
|
20
|
+
template <class S>
|
|
21
|
+
bool projectOnTriangle(
|
|
22
|
+
const Eigen::Vector3<S>& p,
|
|
23
|
+
const Eigen::Vector3<S>& a,
|
|
24
|
+
const Eigen::Vector3<S>& b,
|
|
25
|
+
const Eigen::Vector3<S>& c,
|
|
26
|
+
Eigen::Vector3<S>& q,
|
|
27
|
+
Eigen::Vector3<S>* barycentric) {
|
|
28
|
+
// See book 'Real-Time Collision Detection' Ericson Section 5.1.5
|
|
29
|
+
// Check if P in vertex region outside A
|
|
30
|
+
const Eigen::Vector3<S> ab = b - a;
|
|
31
|
+
const Eigen::Vector3<S> ac = c - a;
|
|
32
|
+
const Eigen::Vector3<S> ap = p - a;
|
|
33
|
+
const S d1 = ab.dot(ap);
|
|
34
|
+
const S d2 = ac.dot(ap);
|
|
35
|
+
constexpr S kZero(0.0);
|
|
36
|
+
if (d1 <= kZero && d2 <= kZero) {
|
|
37
|
+
// barycentric coordinates (1.0, 0.0, 0.0)
|
|
38
|
+
q = a;
|
|
39
|
+
if (barycentric) {
|
|
40
|
+
*barycentric = Eigen::Vector3<S>::UnitX();
|
|
41
|
+
}
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Check if P in vertex region outside B
|
|
46
|
+
const Eigen::Vector3<S> bp = p - b;
|
|
47
|
+
const S d3 = ab.dot(bp);
|
|
48
|
+
const S d4 = ac.dot(bp);
|
|
49
|
+
if (d3 >= kZero && d4 <= d3) {
|
|
50
|
+
// barycentric coordinate (0.0, 1.0, 0.0)
|
|
51
|
+
q = b;
|
|
52
|
+
if (barycentric) {
|
|
53
|
+
*barycentric = Eigen::Vector3<S>::UnitY();
|
|
54
|
+
}
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Check if P in edge region of AB, if so return projection of P onto AB
|
|
59
|
+
const S vc = d1 * d4 - d3 * d2;
|
|
60
|
+
if (vc <= kZero && d1 >= kZero && d3 <= kZero) {
|
|
61
|
+
// barycentric coordinate (1.0-v, v, 0.0)
|
|
62
|
+
const S v = d1 / (d1 - d3);
|
|
63
|
+
q = a + v * ab;
|
|
64
|
+
if (barycentric) {
|
|
65
|
+
*barycentric = Eigen::Vector3<S>(S(1) - v, v, S(0));
|
|
66
|
+
}
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Check if P in vertex region outside C
|
|
71
|
+
const Eigen::Vector3<S> cp = p - c;
|
|
72
|
+
const S d5 = ab.dot(cp);
|
|
73
|
+
const S d6 = ac.dot(cp);
|
|
74
|
+
if (d6 >= kZero && d5 <= d6) {
|
|
75
|
+
// barycentric coordinate (0.0, 0.0, 1.0)
|
|
76
|
+
q = c;
|
|
77
|
+
if (barycentric) {
|
|
78
|
+
*barycentric = Eigen::Vector3<S>::UnitZ();
|
|
79
|
+
}
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Check if P in edge region of AC, if so return projection of P onto AC
|
|
84
|
+
const S vb = d5 * d2 - d1 * d6;
|
|
85
|
+
if (vb <= kZero && d2 >= kZero && d6 <= kZero) {
|
|
86
|
+
// barycentric coordinate (1.0-w, 0.0, w)
|
|
87
|
+
const S w = d2 / (d2 - d6);
|
|
88
|
+
q = a + w * ac;
|
|
89
|
+
if (barycentric) {
|
|
90
|
+
*barycentric = Eigen::Vector3<S>(S(1) - w, S(0), w);
|
|
91
|
+
}
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Check if P in edge region of BC, if so return projection of P onto BC
|
|
96
|
+
const S va = d3 * d6 - d5 * d4;
|
|
97
|
+
if (va <= kZero && (d4 - d3) >= kZero && (d5 - d6) >= kZero) {
|
|
98
|
+
// barycentric coordinate (0.0, 1.0-w, w)
|
|
99
|
+
const S w = (d4 - d3) / ((d4 - d3) + (d5 - d6));
|
|
100
|
+
q = b + w * (c - b);
|
|
101
|
+
if (barycentric) {
|
|
102
|
+
*barycentric = Eigen::Vector3<S>(S(0), S(1) - w, w);
|
|
103
|
+
}
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// P inside face region.
|
|
108
|
+
// Compute Q through its barycentric coordinates (u, v, w)
|
|
109
|
+
const S denom = S(1.0) / (va + vb + vc);
|
|
110
|
+
const S v = vb * denom;
|
|
111
|
+
const S w = vc * denom;
|
|
112
|
+
q = a + ab * v + ac * w;
|
|
113
|
+
if (barycentric) {
|
|
114
|
+
*barycentric = Eigen::Vector3<S>(S(1) - v - w, v, w);
|
|
115
|
+
}
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
template <typename S>
|
|
120
|
+
WideMask<WideScalar<S>> projectOnTriangle(
|
|
121
|
+
const WideVec3<S>& p,
|
|
122
|
+
const WideVec3<S>& a,
|
|
123
|
+
const WideVec3<S>& b,
|
|
124
|
+
const WideVec3<S>& c,
|
|
125
|
+
WideVec3<S>& q,
|
|
126
|
+
WideVec3<S>* barycentric) {
|
|
127
|
+
// Check if P in vertex region outside A
|
|
128
|
+
const auto ab = b - a;
|
|
129
|
+
const auto ac = c - a;
|
|
130
|
+
const auto ap = p - a;
|
|
131
|
+
const auto d1 = drjit::dot(ab, ap);
|
|
132
|
+
const auto d2 = drjit::dot(ac, ap);
|
|
133
|
+
auto isOutside = d1 <= 0.0 && d2 <= 0.0;
|
|
134
|
+
q = drjit::select(isOutside, a, q);
|
|
135
|
+
if (barycentric) {
|
|
136
|
+
// barycentric coordinates (1.0, 0.0, 0.0)
|
|
137
|
+
*barycentric = drjit::select(isOutside, WideVec3<S>(S(1), S(0), S(0)), *barycentric);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Check if P in vertex region outside B
|
|
141
|
+
const auto bp = p - b;
|
|
142
|
+
const auto d3 = drjit::dot(ab, bp);
|
|
143
|
+
const auto d4 = drjit::dot(ac, bp);
|
|
144
|
+
const auto isOutside2 = d3 >= 0.0 && d4 <= d3;
|
|
145
|
+
isOutside = isOutside || isOutside2;
|
|
146
|
+
q = drjit::select(isOutside2, b, q);
|
|
147
|
+
if (barycentric) {
|
|
148
|
+
// barycentric coordinates (0.0, 1.0, 0.0)
|
|
149
|
+
*barycentric = drjit::select(isOutside2, WideVec3<S>(S(0), S(1), S(0)), *barycentric);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Check if P in edge region of AB, if so return projection of P onto AB
|
|
153
|
+
const auto vc = d1 * d4 - d3 * d2;
|
|
154
|
+
const auto isOutside3 = vc <= 0.0 && d1 >= 0.0 && d3 <= 0.0;
|
|
155
|
+
isOutside = isOutside || isOutside3;
|
|
156
|
+
const auto tAB = d1 / (d1 - d3);
|
|
157
|
+
q = drjit::select(isOutside3, a + tAB * ab, q);
|
|
158
|
+
if (barycentric) {
|
|
159
|
+
// barycentric coordinate (1.0-v, v, 0.0)
|
|
160
|
+
*barycentric = drjit::select(isOutside3, WideVec3<S>(S(1) - tAB, tAB, S(0)), *barycentric);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Check if P in vertex region outside C
|
|
164
|
+
const auto cp = p - c;
|
|
165
|
+
const auto d5 = drjit::dot(ab, cp);
|
|
166
|
+
const auto d6 = drjit::dot(ac, cp);
|
|
167
|
+
const auto isOutside4 = d6 >= 0.0 && d5 <= d6;
|
|
168
|
+
isOutside = isOutside || isOutside4;
|
|
169
|
+
q = drjit::select(isOutside4, c, q);
|
|
170
|
+
if (barycentric) {
|
|
171
|
+
// barycentric coordinate (0.0, 0.0, 1.0)
|
|
172
|
+
*barycentric = drjit::select(isOutside4, WideVec3<S>(S(0), S(0), S(1)), *barycentric);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Check if P in edge region of AC, if so return projection of P onto AC
|
|
176
|
+
const auto vb = d5 * d2 - d1 * d6;
|
|
177
|
+
const auto isOutside5 = vb <= 0.0 && d2 >= 0.0 && d6 <= 0.0;
|
|
178
|
+
isOutside = isOutside || isOutside5;
|
|
179
|
+
const auto tAC = d2 / (d2 - d6);
|
|
180
|
+
q = drjit::select(isOutside5, a + tAC * ac, q);
|
|
181
|
+
if (barycentric) {
|
|
182
|
+
// barycentric coordinate (1.0-w, 0.0, w)
|
|
183
|
+
*barycentric = drjit::select(isOutside5, WideVec3<S>(S(1) - tAC, S(0), tAC), *barycentric);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Check if P in edge region of BC, if so return projection of P onto BC
|
|
187
|
+
const auto va = d3 * d6 - d5 * d4;
|
|
188
|
+
const auto isOutside6 = va <= 0.0 && (d4 - d3) >= 0.0 && (d5 - d6) >= 0.0;
|
|
189
|
+
isOutside = isOutside || isOutside6;
|
|
190
|
+
const auto tBC = (d4 - d3) / ((d4 - d3) + (d5 - d6));
|
|
191
|
+
q = drjit::select(isOutside6, b + tBC * (c - b), q);
|
|
192
|
+
if (barycentric) {
|
|
193
|
+
// barycentric coordinate (0.0, 1.0-w, w)
|
|
194
|
+
*barycentric = drjit::select(isOutside6, WideVec3<S>(S(0), S(1) - tBC, tBC), *barycentric);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// P inside face region.
|
|
198
|
+
// Compute Q through its barycentric coordinates (u, v, w)
|
|
199
|
+
const auto denom = 1.0 / (va + vb + vc);
|
|
200
|
+
const auto v = vb * denom;
|
|
201
|
+
const auto w = vc * denom;
|
|
202
|
+
q = drjit::select(isOutside, q, a + ab * v + ac * w);
|
|
203
|
+
if (barycentric) {
|
|
204
|
+
*barycentric = drjit::select(isOutside, *barycentric, WideVec3<S>(S(1) - v - w, v, w));
|
|
205
|
+
}
|
|
206
|
+
return !isOutside;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
} // namespace axel
|