pymomentum-cpu 0.1.93.post0__cp312-cp312-macosx_14_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.
Files changed (517) hide show
  1. include/axel/BoundingBox.h +59 -0
  2. include/axel/Bvh.h +708 -0
  3. include/axel/BvhBase.h +75 -0
  4. include/axel/BvhCommon.h +43 -0
  5. include/axel/BvhEmbree.h +87 -0
  6. include/axel/BvhFactory.h +34 -0
  7. include/axel/Checks.h +21 -0
  8. include/axel/DualContouring.h +79 -0
  9. include/axel/KdTree.h +208 -0
  10. include/axel/Log.h +22 -0
  11. include/axel/MeshToSdf.h +123 -0
  12. include/axel/Profile.h +64 -0
  13. include/axel/Ray.h +45 -0
  14. include/axel/SignedDistanceField.h +248 -0
  15. include/axel/SimdKdTree.h +515 -0
  16. include/axel/TriBvh.h +157 -0
  17. include/axel/TriBvhEmbree.h +57 -0
  18. include/axel/common/Constants.h +27 -0
  19. include/axel/common/Types.h +21 -0
  20. include/axel/common/VectorizationTypes.h +58 -0
  21. include/axel/math/BoundingBoxUtils.h +54 -0
  22. include/axel/math/ContinuousCollisionDetection.h +48 -0
  23. include/axel/math/CoplanarityCheck.h +30 -0
  24. include/axel/math/EdgeEdgeDistance.h +31 -0
  25. include/axel/math/MeshHoleFilling.h +117 -0
  26. include/axel/math/PointTriangleProjection.h +34 -0
  27. include/axel/math/PointTriangleProjectionDefinitions.h +209 -0
  28. include/axel/math/RayTriangleIntersection.h +36 -0
  29. include/momentum/character/blend_shape.h +97 -0
  30. include/momentum/character/blend_shape_base.h +86 -0
  31. include/momentum/character/blend_shape_skinning.h +96 -0
  32. include/momentum/character/character.h +272 -0
  33. include/momentum/character/character_state.h +108 -0
  34. include/momentum/character/character_utility.h +128 -0
  35. include/momentum/character/collision_geometry.h +80 -0
  36. include/momentum/character/collision_geometry_state.h +130 -0
  37. include/momentum/character/fwd.h +262 -0
  38. include/momentum/character/inverse_parameter_transform.h +58 -0
  39. include/momentum/character/joint.h +82 -0
  40. include/momentum/character/joint_state.h +241 -0
  41. include/momentum/character/linear_skinning.h +139 -0
  42. include/momentum/character/locator.h +94 -0
  43. include/momentum/character/locator_state.h +43 -0
  44. include/momentum/character/marker.h +48 -0
  45. include/momentum/character/mesh_state.h +71 -0
  46. include/momentum/character/parameter_limits.h +144 -0
  47. include/momentum/character/parameter_transform.h +207 -0
  48. include/momentum/character/pose_shape.h +65 -0
  49. include/momentum/character/skeleton.h +85 -0
  50. include/momentum/character/skeleton_state.h +227 -0
  51. include/momentum/character/skeleton_utility.h +38 -0
  52. include/momentum/character/skin_weights.h +67 -0
  53. include/momentum/character/skinned_locator.h +80 -0
  54. include/momentum/character/types.h +202 -0
  55. include/momentum/character_sequence_solver/fwd.h +200 -0
  56. include/momentum/character_sequence_solver/model_parameters_sequence_error_function.h +65 -0
  57. include/momentum/character_sequence_solver/multipose_solver.h +65 -0
  58. include/momentum/character_sequence_solver/multipose_solver_function.h +82 -0
  59. include/momentum/character_sequence_solver/sequence_error_function.h +104 -0
  60. include/momentum/character_sequence_solver/sequence_solver.h +155 -0
  61. include/momentum/character_sequence_solver/sequence_solver_function.h +158 -0
  62. include/momentum/character_sequence_solver/state_sequence_error_function.h +117 -0
  63. include/momentum/character_sequence_solver/vertex_sequence_error_function.h +123 -0
  64. include/momentum/character_solver/aim_error_function.h +112 -0
  65. include/momentum/character_solver/collision_error_function.h +92 -0
  66. include/momentum/character_solver/collision_error_function_stateless.h +75 -0
  67. include/momentum/character_solver/constraint_error_function-inl.h +324 -0
  68. include/momentum/character_solver/constraint_error_function.h +248 -0
  69. include/momentum/character_solver/distance_error_function.h +77 -0
  70. include/momentum/character_solver/error_function_utils.h +60 -0
  71. include/momentum/character_solver/fixed_axis_error_function.h +139 -0
  72. include/momentum/character_solver/fwd.h +943 -0
  73. include/momentum/character_solver/gauss_newton_solver_qr.h +64 -0
  74. include/momentum/character_solver/height_error_function.h +176 -0
  75. include/momentum/character_solver/joint_to_joint_distance_error_function.h +111 -0
  76. include/momentum/character_solver/limit_error_function.h +57 -0
  77. include/momentum/character_solver/model_parameters_error_function.h +64 -0
  78. include/momentum/character_solver/normal_error_function.h +73 -0
  79. include/momentum/character_solver/orientation_error_function.h +74 -0
  80. include/momentum/character_solver/plane_error_function.h +102 -0
  81. include/momentum/character_solver/point_triangle_vertex_error_function.h +141 -0
  82. include/momentum/character_solver/pose_prior_error_function.h +80 -0
  83. include/momentum/character_solver/position_error_function.h +75 -0
  84. include/momentum/character_solver/projection_error_function.h +93 -0
  85. include/momentum/character_solver/simd_collision_error_function.h +99 -0
  86. include/momentum/character_solver/simd_normal_error_function.h +157 -0
  87. include/momentum/character_solver/simd_plane_error_function.h +164 -0
  88. include/momentum/character_solver/simd_position_error_function.h +165 -0
  89. include/momentum/character_solver/skeleton_error_function.h +151 -0
  90. include/momentum/character_solver/skeleton_solver_function.h +94 -0
  91. include/momentum/character_solver/skinned_locator_error_function.h +166 -0
  92. include/momentum/character_solver/skinned_locator_triangle_error_function.h +146 -0
  93. include/momentum/character_solver/skinning_weight_iterator.h +80 -0
  94. include/momentum/character_solver/state_error_function.h +119 -0
  95. include/momentum/character_solver/transform_pose.h +80 -0
  96. include/momentum/character_solver/trust_region_qr.h +80 -0
  97. include/momentum/character_solver/vertex_error_function.h +155 -0
  98. include/momentum/character_solver/vertex_projection_error_function.h +117 -0
  99. include/momentum/character_solver/vertex_vertex_distance_error_function.h +147 -0
  100. include/momentum/common/aligned.h +155 -0
  101. include/momentum/common/checks.h +27 -0
  102. include/momentum/common/exception.h +70 -0
  103. include/momentum/common/filesystem.h +20 -0
  104. include/momentum/common/fwd.h +27 -0
  105. include/momentum/common/log.h +173 -0
  106. include/momentum/common/log_channel.h +17 -0
  107. include/momentum/common/memory.h +71 -0
  108. include/momentum/common/profile.h +79 -0
  109. include/momentum/common/progress_bar.h +37 -0
  110. include/momentum/common/string.h +52 -0
  111. include/momentum/diff_ik/ceres_utility.h +73 -0
  112. include/momentum/diff_ik/fully_differentiable_body_ik.h +58 -0
  113. include/momentum/diff_ik/fully_differentiable_distance_error_function.h +69 -0
  114. include/momentum/diff_ik/fully_differentiable_motion_error_function.h +46 -0
  115. include/momentum/diff_ik/fully_differentiable_orientation_error_function.h +114 -0
  116. include/momentum/diff_ik/fully_differentiable_pose_prior_error_function.h +76 -0
  117. include/momentum/diff_ik/fully_differentiable_position_error_function.h +138 -0
  118. include/momentum/diff_ik/fully_differentiable_projection_error_function.h +65 -0
  119. include/momentum/diff_ik/fully_differentiable_skeleton_error_function.h +160 -0
  120. include/momentum/diff_ik/fully_differentiable_state_error_function.h +54 -0
  121. include/momentum/diff_ik/fwd.h +385 -0
  122. include/momentum/diff_ik/union_error_function.h +67 -0
  123. include/momentum/gui/rerun/eigen_adapters.h +70 -0
  124. include/momentum/gui/rerun/logger.h +102 -0
  125. include/momentum/gui/rerun/logging_redirect.h +27 -0
  126. include/momentum/io/character_io.h +98 -0
  127. include/momentum/io/common/gsl_utils.h +50 -0
  128. include/momentum/io/common/stream_utils.h +65 -0
  129. include/momentum/io/fbx/fbx_io.h +135 -0
  130. include/momentum/io/fbx/fbx_memory_stream.h +70 -0
  131. include/momentum/io/fbx/openfbx_loader.h +62 -0
  132. include/momentum/io/fbx/polygon_data.h +60 -0
  133. include/momentum/io/file_save_options.h +107 -0
  134. include/momentum/io/gltf/gltf_builder.h +141 -0
  135. include/momentum/io/gltf/gltf_io.h +149 -0
  136. include/momentum/io/gltf/utils/accessor_utils.h +299 -0
  137. include/momentum/io/gltf/utils/coordinate_utils.h +60 -0
  138. include/momentum/io/gltf/utils/json_utils.h +102 -0
  139. include/momentum/io/legacy_json/legacy_json_io.h +70 -0
  140. include/momentum/io/marker/c3d_io.h +30 -0
  141. include/momentum/io/marker/conversions.h +57 -0
  142. include/momentum/io/marker/coordinate_system.h +30 -0
  143. include/momentum/io/marker/marker_io.h +56 -0
  144. include/momentum/io/marker/trc_io.h +27 -0
  145. include/momentum/io/motion/mmo_io.h +97 -0
  146. include/momentum/io/shape/blend_shape_io.h +82 -0
  147. include/momentum/io/shape/pose_shape_io.h +21 -0
  148. include/momentum/io/skeleton/locator_io.h +41 -0
  149. include/momentum/io/skeleton/mppca_io.h +26 -0
  150. include/momentum/io/skeleton/parameter_limits_io.h +38 -0
  151. include/momentum/io/skeleton/parameter_transform_io.h +80 -0
  152. include/momentum/io/skeleton/parameters_io.h +20 -0
  153. include/momentum/io/skeleton/utility.h +67 -0
  154. include/momentum/io/urdf/urdf_io.h +26 -0
  155. include/momentum/io/usd/usd_io.h +36 -0
  156. include/momentum/marker_tracking/app_utils.h +64 -0
  157. include/momentum/marker_tracking/marker_tracker.h +221 -0
  158. include/momentum/marker_tracking/process_markers.h +58 -0
  159. include/momentum/marker_tracking/tracker_utils.h +99 -0
  160. include/momentum/math/constants.h +82 -0
  161. include/momentum/math/covariance_matrix.h +84 -0
  162. include/momentum/math/fmt_eigen.h +23 -0
  163. include/momentum/math/fwd.h +132 -0
  164. include/momentum/math/generalized_loss.h +61 -0
  165. include/momentum/math/intersection.h +32 -0
  166. include/momentum/math/mesh.h +84 -0
  167. include/momentum/math/mppca.h +67 -0
  168. include/momentum/math/online_householder_qr.h +516 -0
  169. include/momentum/math/random-inl.h +404 -0
  170. include/momentum/math/random.h +310 -0
  171. include/momentum/math/simd_generalized_loss.h +40 -0
  172. include/momentum/math/transform.h +229 -0
  173. include/momentum/math/types.h +461 -0
  174. include/momentum/math/utility.h +324 -0
  175. include/momentum/rasterizer/camera.h +453 -0
  176. include/momentum/rasterizer/fwd.h +102 -0
  177. include/momentum/rasterizer/geometry.h +83 -0
  178. include/momentum/rasterizer/image.h +18 -0
  179. include/momentum/rasterizer/rasterizer.h +583 -0
  180. include/momentum/rasterizer/tensor.h +140 -0
  181. include/momentum/rasterizer/text_rasterizer.h +89 -0
  182. include/momentum/rasterizer/utility.h +268 -0
  183. include/momentum/simd/simd.h +221 -0
  184. include/momentum/solver/fwd.h +131 -0
  185. include/momentum/solver/gauss_newton_solver.h +136 -0
  186. include/momentum/solver/gradient_descent_solver.h +65 -0
  187. include/momentum/solver/solver.h +155 -0
  188. include/momentum/solver/solver_function.h +126 -0
  189. include/momentum/solver/subset_gauss_newton_solver.h +109 -0
  190. include/rerun/archetypes/annotation_context.hpp +157 -0
  191. include/rerun/archetypes/arrows2d.hpp +271 -0
  192. include/rerun/archetypes/arrows3d.hpp +257 -0
  193. include/rerun/archetypes/asset3d.hpp +262 -0
  194. include/rerun/archetypes/asset_video.hpp +275 -0
  195. include/rerun/archetypes/bar_chart.hpp +261 -0
  196. include/rerun/archetypes/boxes2d.hpp +293 -0
  197. include/rerun/archetypes/boxes3d.hpp +369 -0
  198. include/rerun/archetypes/capsules3d.hpp +333 -0
  199. include/rerun/archetypes/clear.hpp +180 -0
  200. include/rerun/archetypes/depth_image.hpp +425 -0
  201. include/rerun/archetypes/ellipsoids3d.hpp +384 -0
  202. include/rerun/archetypes/encoded_image.hpp +250 -0
  203. include/rerun/archetypes/geo_line_strings.hpp +166 -0
  204. include/rerun/archetypes/geo_points.hpp +177 -0
  205. include/rerun/archetypes/graph_edges.hpp +152 -0
  206. include/rerun/archetypes/graph_nodes.hpp +206 -0
  207. include/rerun/archetypes/image.hpp +434 -0
  208. include/rerun/archetypes/instance_poses3d.hpp +221 -0
  209. include/rerun/archetypes/line_strips2d.hpp +289 -0
  210. include/rerun/archetypes/line_strips3d.hpp +270 -0
  211. include/rerun/archetypes/mesh3d.hpp +387 -0
  212. include/rerun/archetypes/pinhole.hpp +385 -0
  213. include/rerun/archetypes/points2d.hpp +333 -0
  214. include/rerun/archetypes/points3d.hpp +369 -0
  215. include/rerun/archetypes/recording_properties.hpp +132 -0
  216. include/rerun/archetypes/scalar.hpp +170 -0
  217. include/rerun/archetypes/scalars.hpp +153 -0
  218. include/rerun/archetypes/segmentation_image.hpp +305 -0
  219. include/rerun/archetypes/series_line.hpp +274 -0
  220. include/rerun/archetypes/series_lines.hpp +271 -0
  221. include/rerun/archetypes/series_point.hpp +265 -0
  222. include/rerun/archetypes/series_points.hpp +251 -0
  223. include/rerun/archetypes/tensor.hpp +213 -0
  224. include/rerun/archetypes/text_document.hpp +200 -0
  225. include/rerun/archetypes/text_log.hpp +211 -0
  226. include/rerun/archetypes/transform3d.hpp +925 -0
  227. include/rerun/archetypes/video_frame_reference.hpp +295 -0
  228. include/rerun/archetypes/view_coordinates.hpp +393 -0
  229. include/rerun/archetypes.hpp +43 -0
  230. include/rerun/arrow_utils.hpp +32 -0
  231. include/rerun/as_components.hpp +90 -0
  232. include/rerun/blueprint/archetypes/background.hpp +113 -0
  233. include/rerun/blueprint/archetypes/container_blueprint.hpp +259 -0
  234. include/rerun/blueprint/archetypes/dataframe_query.hpp +178 -0
  235. include/rerun/blueprint/archetypes/entity_behavior.hpp +130 -0
  236. include/rerun/blueprint/archetypes/force_center.hpp +115 -0
  237. include/rerun/blueprint/archetypes/force_collision_radius.hpp +141 -0
  238. include/rerun/blueprint/archetypes/force_link.hpp +136 -0
  239. include/rerun/blueprint/archetypes/force_many_body.hpp +124 -0
  240. include/rerun/blueprint/archetypes/force_position.hpp +132 -0
  241. include/rerun/blueprint/archetypes/line_grid3d.hpp +178 -0
  242. include/rerun/blueprint/archetypes/map_background.hpp +104 -0
  243. include/rerun/blueprint/archetypes/map_zoom.hpp +103 -0
  244. include/rerun/blueprint/archetypes/near_clip_plane.hpp +109 -0
  245. include/rerun/blueprint/archetypes/panel_blueprint.hpp +95 -0
  246. include/rerun/blueprint/archetypes/plot_legend.hpp +118 -0
  247. include/rerun/blueprint/archetypes/scalar_axis.hpp +116 -0
  248. include/rerun/blueprint/archetypes/tensor_scalar_mapping.hpp +146 -0
  249. include/rerun/blueprint/archetypes/tensor_slice_selection.hpp +167 -0
  250. include/rerun/blueprint/archetypes/tensor_view_fit.hpp +95 -0
  251. include/rerun/blueprint/archetypes/view_blueprint.hpp +170 -0
  252. include/rerun/blueprint/archetypes/view_contents.hpp +142 -0
  253. include/rerun/blueprint/archetypes/viewport_blueprint.hpp +200 -0
  254. include/rerun/blueprint/archetypes/visible_time_ranges.hpp +116 -0
  255. include/rerun/blueprint/archetypes/visual_bounds2d.hpp +109 -0
  256. include/rerun/blueprint/archetypes/visualizer_overrides.hpp +113 -0
  257. include/rerun/blueprint/archetypes.hpp +29 -0
  258. include/rerun/blueprint/components/active_tab.hpp +82 -0
  259. include/rerun/blueprint/components/apply_latest_at.hpp +79 -0
  260. include/rerun/blueprint/components/auto_layout.hpp +77 -0
  261. include/rerun/blueprint/components/auto_views.hpp +77 -0
  262. include/rerun/blueprint/components/background_kind.hpp +66 -0
  263. include/rerun/blueprint/components/column_share.hpp +78 -0
  264. include/rerun/blueprint/components/component_column_selector.hpp +81 -0
  265. include/rerun/blueprint/components/container_kind.hpp +65 -0
  266. include/rerun/blueprint/components/corner2d.hpp +64 -0
  267. include/rerun/blueprint/components/enabled.hpp +77 -0
  268. include/rerun/blueprint/components/filter_by_range.hpp +74 -0
  269. include/rerun/blueprint/components/filter_is_not_null.hpp +77 -0
  270. include/rerun/blueprint/components/force_distance.hpp +82 -0
  271. include/rerun/blueprint/components/force_iterations.hpp +82 -0
  272. include/rerun/blueprint/components/force_strength.hpp +82 -0
  273. include/rerun/blueprint/components/grid_columns.hpp +78 -0
  274. include/rerun/blueprint/components/grid_spacing.hpp +78 -0
  275. include/rerun/blueprint/components/included_content.hpp +86 -0
  276. include/rerun/blueprint/components/lock_range_during_zoom.hpp +82 -0
  277. include/rerun/blueprint/components/map_provider.hpp +64 -0
  278. include/rerun/blueprint/components/near_clip_plane.hpp +82 -0
  279. include/rerun/blueprint/components/panel_state.hpp +61 -0
  280. include/rerun/blueprint/components/query_expression.hpp +89 -0
  281. include/rerun/blueprint/components/root_container.hpp +77 -0
  282. include/rerun/blueprint/components/row_share.hpp +78 -0
  283. include/rerun/blueprint/components/selected_columns.hpp +76 -0
  284. include/rerun/blueprint/components/tensor_dimension_index_slider.hpp +90 -0
  285. include/rerun/blueprint/components/timeline_name.hpp +76 -0
  286. include/rerun/blueprint/components/view_class.hpp +76 -0
  287. include/rerun/blueprint/components/view_fit.hpp +61 -0
  288. include/rerun/blueprint/components/view_maximized.hpp +79 -0
  289. include/rerun/blueprint/components/view_origin.hpp +81 -0
  290. include/rerun/blueprint/components/viewer_recommendation_hash.hpp +82 -0
  291. include/rerun/blueprint/components/visible_time_range.hpp +77 -0
  292. include/rerun/blueprint/components/visual_bounds2d.hpp +74 -0
  293. include/rerun/blueprint/components/visualizer_override.hpp +86 -0
  294. include/rerun/blueprint/components/zoom_level.hpp +78 -0
  295. include/rerun/blueprint/components.hpp +41 -0
  296. include/rerun/blueprint/datatypes/component_column_selector.hpp +61 -0
  297. include/rerun/blueprint/datatypes/filter_by_range.hpp +59 -0
  298. include/rerun/blueprint/datatypes/filter_is_not_null.hpp +61 -0
  299. include/rerun/blueprint/datatypes/selected_columns.hpp +62 -0
  300. include/rerun/blueprint/datatypes/tensor_dimension_index_slider.hpp +63 -0
  301. include/rerun/blueprint/datatypes.hpp +9 -0
  302. include/rerun/c/arrow_c_data_interface.h +111 -0
  303. include/rerun/c/compiler_utils.h +10 -0
  304. include/rerun/c/rerun.h +627 -0
  305. include/rerun/c/sdk_info.h +28 -0
  306. include/rerun/collection.hpp +496 -0
  307. include/rerun/collection_adapter.hpp +43 -0
  308. include/rerun/collection_adapter_builtins.hpp +138 -0
  309. include/rerun/compiler_utils.hpp +61 -0
  310. include/rerun/component_batch.hpp +163 -0
  311. include/rerun/component_column.hpp +111 -0
  312. include/rerun/component_descriptor.hpp +142 -0
  313. include/rerun/component_type.hpp +35 -0
  314. include/rerun/components/aggregation_policy.hpp +76 -0
  315. include/rerun/components/albedo_factor.hpp +74 -0
  316. include/rerun/components/annotation_context.hpp +102 -0
  317. include/rerun/components/axis_length.hpp +74 -0
  318. include/rerun/components/blob.hpp +73 -0
  319. include/rerun/components/class_id.hpp +71 -0
  320. include/rerun/components/clear_is_recursive.hpp +75 -0
  321. include/rerun/components/color.hpp +99 -0
  322. include/rerun/components/colormap.hpp +99 -0
  323. include/rerun/components/depth_meter.hpp +84 -0
  324. include/rerun/components/draw_order.hpp +79 -0
  325. include/rerun/components/entity_path.hpp +83 -0
  326. include/rerun/components/fill_mode.hpp +72 -0
  327. include/rerun/components/fill_ratio.hpp +79 -0
  328. include/rerun/components/gamma_correction.hpp +80 -0
  329. include/rerun/components/geo_line_string.hpp +63 -0
  330. include/rerun/components/graph_edge.hpp +75 -0
  331. include/rerun/components/graph_node.hpp +79 -0
  332. include/rerun/components/graph_type.hpp +57 -0
  333. include/rerun/components/half_size2d.hpp +91 -0
  334. include/rerun/components/half_size3d.hpp +95 -0
  335. include/rerun/components/image_buffer.hpp +86 -0
  336. include/rerun/components/image_format.hpp +84 -0
  337. include/rerun/components/image_plane_distance.hpp +77 -0
  338. include/rerun/components/interactive.hpp +76 -0
  339. include/rerun/components/keypoint_id.hpp +74 -0
  340. include/rerun/components/lat_lon.hpp +89 -0
  341. include/rerun/components/length.hpp +77 -0
  342. include/rerun/components/line_strip2d.hpp +73 -0
  343. include/rerun/components/line_strip3d.hpp +73 -0
  344. include/rerun/components/magnification_filter.hpp +63 -0
  345. include/rerun/components/marker_shape.hpp +82 -0
  346. include/rerun/components/marker_size.hpp +74 -0
  347. include/rerun/components/media_type.hpp +157 -0
  348. include/rerun/components/name.hpp +83 -0
  349. include/rerun/components/opacity.hpp +77 -0
  350. include/rerun/components/pinhole_projection.hpp +94 -0
  351. include/rerun/components/plane3d.hpp +75 -0
  352. include/rerun/components/pose_rotation_axis_angle.hpp +73 -0
  353. include/rerun/components/pose_rotation_quat.hpp +71 -0
  354. include/rerun/components/pose_scale3d.hpp +102 -0
  355. include/rerun/components/pose_transform_mat3x3.hpp +87 -0
  356. include/rerun/components/pose_translation3d.hpp +96 -0
  357. include/rerun/components/position2d.hpp +86 -0
  358. include/rerun/components/position3d.hpp +90 -0
  359. include/rerun/components/radius.hpp +98 -0
  360. include/rerun/components/range1d.hpp +75 -0
  361. include/rerun/components/resolution.hpp +88 -0
  362. include/rerun/components/rotation_axis_angle.hpp +72 -0
  363. include/rerun/components/rotation_quat.hpp +71 -0
  364. include/rerun/components/scalar.hpp +76 -0
  365. include/rerun/components/scale3d.hpp +102 -0
  366. include/rerun/components/series_visible.hpp +76 -0
  367. include/rerun/components/show_labels.hpp +79 -0
  368. include/rerun/components/stroke_width.hpp +74 -0
  369. include/rerun/components/tensor_data.hpp +94 -0
  370. include/rerun/components/tensor_dimension_index_selection.hpp +77 -0
  371. include/rerun/components/tensor_height_dimension.hpp +71 -0
  372. include/rerun/components/tensor_width_dimension.hpp +71 -0
  373. include/rerun/components/texcoord2d.hpp +101 -0
  374. include/rerun/components/text.hpp +83 -0
  375. include/rerun/components/text_log_level.hpp +110 -0
  376. include/rerun/components/timestamp.hpp +76 -0
  377. include/rerun/components/transform_mat3x3.hpp +92 -0
  378. include/rerun/components/transform_relation.hpp +66 -0
  379. include/rerun/components/translation3d.hpp +96 -0
  380. include/rerun/components/triangle_indices.hpp +85 -0
  381. include/rerun/components/value_range.hpp +78 -0
  382. include/rerun/components/vector2d.hpp +92 -0
  383. include/rerun/components/vector3d.hpp +96 -0
  384. include/rerun/components/video_timestamp.hpp +120 -0
  385. include/rerun/components/view_coordinates.hpp +346 -0
  386. include/rerun/components/visible.hpp +74 -0
  387. include/rerun/components.hpp +77 -0
  388. include/rerun/config.hpp +52 -0
  389. include/rerun/datatypes/angle.hpp +76 -0
  390. include/rerun/datatypes/annotation_info.hpp +76 -0
  391. include/rerun/datatypes/blob.hpp +67 -0
  392. include/rerun/datatypes/bool.hpp +57 -0
  393. include/rerun/datatypes/channel_datatype.hpp +87 -0
  394. include/rerun/datatypes/class_description.hpp +92 -0
  395. include/rerun/datatypes/class_description_map_elem.hpp +69 -0
  396. include/rerun/datatypes/class_id.hpp +62 -0
  397. include/rerun/datatypes/color_model.hpp +68 -0
  398. include/rerun/datatypes/dvec2d.hpp +76 -0
  399. include/rerun/datatypes/entity_path.hpp +60 -0
  400. include/rerun/datatypes/float32.hpp +62 -0
  401. include/rerun/datatypes/float64.hpp +62 -0
  402. include/rerun/datatypes/image_format.hpp +107 -0
  403. include/rerun/datatypes/keypoint_id.hpp +63 -0
  404. include/rerun/datatypes/keypoint_pair.hpp +65 -0
  405. include/rerun/datatypes/mat3x3.hpp +105 -0
  406. include/rerun/datatypes/mat4x4.hpp +119 -0
  407. include/rerun/datatypes/pixel_format.hpp +142 -0
  408. include/rerun/datatypes/plane3d.hpp +60 -0
  409. include/rerun/datatypes/quaternion.hpp +110 -0
  410. include/rerun/datatypes/range1d.hpp +59 -0
  411. include/rerun/datatypes/range2d.hpp +55 -0
  412. include/rerun/datatypes/rgba32.hpp +94 -0
  413. include/rerun/datatypes/rotation_axis_angle.hpp +67 -0
  414. include/rerun/datatypes/tensor_buffer.hpp +529 -0
  415. include/rerun/datatypes/tensor_data.hpp +100 -0
  416. include/rerun/datatypes/tensor_dimension_index_selection.hpp +58 -0
  417. include/rerun/datatypes/tensor_dimension_selection.hpp +56 -0
  418. include/rerun/datatypes/time_int.hpp +62 -0
  419. include/rerun/datatypes/time_range.hpp +55 -0
  420. include/rerun/datatypes/time_range_boundary.hpp +175 -0
  421. include/rerun/datatypes/uint16.hpp +62 -0
  422. include/rerun/datatypes/uint32.hpp +62 -0
  423. include/rerun/datatypes/uint64.hpp +62 -0
  424. include/rerun/datatypes/utf8.hpp +76 -0
  425. include/rerun/datatypes/utf8pair.hpp +62 -0
  426. include/rerun/datatypes/uuid.hpp +60 -0
  427. include/rerun/datatypes/uvec2d.hpp +76 -0
  428. include/rerun/datatypes/uvec3d.hpp +80 -0
  429. include/rerun/datatypes/uvec4d.hpp +59 -0
  430. include/rerun/datatypes/vec2d.hpp +76 -0
  431. include/rerun/datatypes/vec3d.hpp +80 -0
  432. include/rerun/datatypes/vec4d.hpp +84 -0
  433. include/rerun/datatypes/video_timestamp.hpp +67 -0
  434. include/rerun/datatypes/view_coordinates.hpp +87 -0
  435. include/rerun/datatypes/visible_time_range.hpp +57 -0
  436. include/rerun/datatypes.hpp +51 -0
  437. include/rerun/demo_utils.hpp +75 -0
  438. include/rerun/entity_path.hpp +20 -0
  439. include/rerun/error.hpp +180 -0
  440. include/rerun/half.hpp +10 -0
  441. include/rerun/image_utils.hpp +187 -0
  442. include/rerun/indicator_component.hpp +59 -0
  443. include/rerun/loggable.hpp +54 -0
  444. include/rerun/recording_stream.hpp +960 -0
  445. include/rerun/rerun_sdk_export.hpp +25 -0
  446. include/rerun/result.hpp +86 -0
  447. include/rerun/rotation3d.hpp +33 -0
  448. include/rerun/sdk_info.hpp +20 -0
  449. include/rerun/spawn.hpp +21 -0
  450. include/rerun/spawn_options.hpp +57 -0
  451. include/rerun/string_utils.hpp +16 -0
  452. include/rerun/third_party/cxxopts.hpp +2198 -0
  453. include/rerun/time_column.hpp +288 -0
  454. include/rerun/timeline.hpp +38 -0
  455. include/rerun/type_traits.hpp +40 -0
  456. include/rerun.hpp +86 -0
  457. lib/cmake/axel/axel-config.cmake +45 -0
  458. lib/cmake/axel/axelTargets-release.cmake +19 -0
  459. lib/cmake/axel/axelTargets.cmake +108 -0
  460. lib/cmake/momentum/FindFbxSdk.cmake +115 -0
  461. lib/cmake/momentum/Findre2.cmake +52 -0
  462. lib/cmake/momentum/momentum-config.cmake +67 -0
  463. lib/cmake/momentum/momentumTargets-release.cmake +259 -0
  464. lib/cmake/momentum/momentumTargets.cmake +385 -0
  465. lib/cmake/rerun_sdk/rerun_sdkConfig.cmake +70 -0
  466. lib/cmake/rerun_sdk/rerun_sdkConfigVersion.cmake +83 -0
  467. lib/cmake/rerun_sdk/rerun_sdkTargets-release.cmake +19 -0
  468. lib/cmake/rerun_sdk/rerun_sdkTargets.cmake +108 -0
  469. lib/libarrow.a +0 -0
  470. lib/libarrow_bundled_dependencies.a +0 -0
  471. lib/libaxel.a +0 -0
  472. lib/libmomentum_app_utils.a +0 -0
  473. lib/libmomentum_character.a +0 -0
  474. lib/libmomentum_character_sequence_solver.a +0 -0
  475. lib/libmomentum_character_solver.a +0 -0
  476. lib/libmomentum_common.a +0 -0
  477. lib/libmomentum_diff_ik.a +0 -0
  478. lib/libmomentum_io.a +0 -0
  479. lib/libmomentum_io_common.a +0 -0
  480. lib/libmomentum_io_fbx.a +0 -0
  481. lib/libmomentum_io_gltf.a +0 -0
  482. lib/libmomentum_io_legacy_json.a +0 -0
  483. lib/libmomentum_io_marker.a +0 -0
  484. lib/libmomentum_io_motion.a +0 -0
  485. lib/libmomentum_io_shape.a +0 -0
  486. lib/libmomentum_io_skeleton.a +0 -0
  487. lib/libmomentum_io_urdf.a +0 -0
  488. lib/libmomentum_marker_tracker.a +0 -0
  489. lib/libmomentum_math.a +0 -0
  490. lib/libmomentum_online_qr.a +0 -0
  491. lib/libmomentum_process_markers.a +0 -0
  492. lib/libmomentum_rerun.a +0 -0
  493. lib/libmomentum_simd_constraints.a +0 -0
  494. lib/libmomentum_simd_generalized_loss.a +0 -0
  495. lib/libmomentum_skeleton.a +0 -0
  496. lib/libmomentum_solver.a +0 -0
  497. lib/librerun_c__macos_arm64.a +0 -0
  498. lib/librerun_sdk.a +0 -0
  499. pymomentum/axel.cpython-312-darwin.so +0 -0
  500. pymomentum/backend/__init__.py +16 -0
  501. pymomentum/backend/skel_state_backend.py +631 -0
  502. pymomentum/backend/trs_backend.py +889 -0
  503. pymomentum/backend/utils.py +224 -0
  504. pymomentum/geometry.cpython-312-darwin.so +0 -0
  505. pymomentum/marker_tracking.cpython-312-darwin.so +0 -0
  506. pymomentum/quaternion.py +740 -0
  507. pymomentum/skel_state.py +514 -0
  508. pymomentum/solver.cpython-312-darwin.so +0 -0
  509. pymomentum/solver2.cpython-312-darwin.so +0 -0
  510. pymomentum/torch/character.py +868 -0
  511. pymomentum/torch/parameter_limits.py +494 -0
  512. pymomentum/torch/utility.py +20 -0
  513. pymomentum/trs.py +535 -0
  514. pymomentum_cpu-0.1.93.post0.dist-info/METADATA +126 -0
  515. pymomentum_cpu-0.1.93.post0.dist-info/RECORD +517 -0
  516. pymomentum_cpu-0.1.93.post0.dist-info/WHEEL +5 -0
  517. pymomentum_cpu-0.1.93.post0.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
+ [[nodiscard]] 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 <span>
12
+
13
+ namespace axel {
14
+
15
+ int solveP3(std::span<double, 3> x, double a, double b, double c);
16
+ int solveP2(std::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
+ std::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 <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
+ std::span<const Eigen::Vector3f> vertices,
68
+ std::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
+ std::span<const Eigen::Vector3<ScalarType>> vertices,
83
+ std::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
+ std::span<const Eigen::Vector3<ScalarType>> vertices,
96
+ std::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
+ std::span<const Eigen::Vector3<ScalarType>> vertices,
112
+ std::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