pymomentum-cpu 0.1.78.post11__cp312-cp312-win_amd64.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.

Files changed (512) hide show
  1. include/axel/BoundingBox.h +58 -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 +86 -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 +199 -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 +91 -0
  30. include/momentum/character/blend_shape_base.h +70 -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 +82 -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 +250 -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 +181 -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 +144 -0
  61. include/momentum/character_sequence_solver/sequence_solver_function.h +134 -0
  62. include/momentum/character_sequence_solver/state_sequence_error_function.h +109 -0
  63. include/momentum/character_sequence_solver/vertex_sequence_error_function.h +128 -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 +924 -0
  73. include/momentum/character_solver/gauss_newton_solver_qr.h +64 -0
  74. include/momentum/character_solver/limit_error_function.h +57 -0
  75. include/momentum/character_solver/model_parameters_error_function.h +64 -0
  76. include/momentum/character_solver/normal_error_function.h +73 -0
  77. include/momentum/character_solver/orientation_error_function.h +74 -0
  78. include/momentum/character_solver/plane_error_function.h +102 -0
  79. include/momentum/character_solver/point_triangle_vertex_error_function.h +141 -0
  80. include/momentum/character_solver/pose_prior_error_function.h +80 -0
  81. include/momentum/character_solver/position_error_function.h +75 -0
  82. include/momentum/character_solver/projection_error_function.h +93 -0
  83. include/momentum/character_solver/simd_collision_error_function.h +99 -0
  84. include/momentum/character_solver/simd_normal_error_function.h +157 -0
  85. include/momentum/character_solver/simd_plane_error_function.h +164 -0
  86. include/momentum/character_solver/simd_position_error_function.h +165 -0
  87. include/momentum/character_solver/skeleton_error_function.h +151 -0
  88. include/momentum/character_solver/skeleton_solver_function.h +94 -0
  89. include/momentum/character_solver/skinned_locator_error_function.h +166 -0
  90. include/momentum/character_solver/skinned_locator_triangle_error_function.h +146 -0
  91. include/momentum/character_solver/skinning_weight_iterator.h +80 -0
  92. include/momentum/character_solver/state_error_function.h +94 -0
  93. include/momentum/character_solver/transform_pose.h +80 -0
  94. include/momentum/character_solver/trust_region_qr.h +80 -0
  95. include/momentum/character_solver/vertex_error_function.h +155 -0
  96. include/momentum/character_solver/vertex_projection_error_function.h +126 -0
  97. include/momentum/character_solver/vertex_vertex_distance_error_function.h +151 -0
  98. include/momentum/common/aligned.h +155 -0
  99. include/momentum/common/checks.h +27 -0
  100. include/momentum/common/exception.h +70 -0
  101. include/momentum/common/filesystem.h +20 -0
  102. include/momentum/common/fwd.h +27 -0
  103. include/momentum/common/log.h +173 -0
  104. include/momentum/common/log_channel.h +17 -0
  105. include/momentum/common/memory.h +71 -0
  106. include/momentum/common/profile.h +79 -0
  107. include/momentum/common/progress_bar.h +37 -0
  108. include/momentum/common/string.h +52 -0
  109. include/momentum/diff_ik/ceres_utility.h +73 -0
  110. include/momentum/diff_ik/fully_differentiable_body_ik.h +58 -0
  111. include/momentum/diff_ik/fully_differentiable_distance_error_function.h +69 -0
  112. include/momentum/diff_ik/fully_differentiable_motion_error_function.h +46 -0
  113. include/momentum/diff_ik/fully_differentiable_orientation_error_function.h +114 -0
  114. include/momentum/diff_ik/fully_differentiable_pose_prior_error_function.h +76 -0
  115. include/momentum/diff_ik/fully_differentiable_position_error_function.h +138 -0
  116. include/momentum/diff_ik/fully_differentiable_projection_error_function.h +65 -0
  117. include/momentum/diff_ik/fully_differentiable_skeleton_error_function.h +160 -0
  118. include/momentum/diff_ik/fully_differentiable_state_error_function.h +54 -0
  119. include/momentum/diff_ik/fwd.h +385 -0
  120. include/momentum/diff_ik/union_error_function.h +67 -0
  121. include/momentum/gui/rerun/eigen_adapters.h +70 -0
  122. include/momentum/gui/rerun/logger.h +102 -0
  123. include/momentum/gui/rerun/logging_redirect.h +27 -0
  124. include/momentum/io/character_io.h +56 -0
  125. include/momentum/io/common/gsl_utils.h +50 -0
  126. include/momentum/io/common/stream_utils.h +65 -0
  127. include/momentum/io/fbx/fbx_io.h +109 -0
  128. include/momentum/io/fbx/fbx_memory_stream.h +66 -0
  129. include/momentum/io/fbx/openfbx_loader.h +49 -0
  130. include/momentum/io/fbx/polygon_data.h +60 -0
  131. include/momentum/io/gltf/gltf_builder.h +132 -0
  132. include/momentum/io/gltf/gltf_file_format.h +19 -0
  133. include/momentum/io/gltf/gltf_io.h +148 -0
  134. include/momentum/io/gltf/utils/accessor_utils.h +299 -0
  135. include/momentum/io/gltf/utils/coordinate_utils.h +60 -0
  136. include/momentum/io/gltf/utils/json_utils.h +102 -0
  137. include/momentum/io/legacy_json/legacy_json_io.h +70 -0
  138. include/momentum/io/marker/c3d_io.h +29 -0
  139. include/momentum/io/marker/conversions.h +57 -0
  140. include/momentum/io/marker/coordinate_system.h +30 -0
  141. include/momentum/io/marker/marker_io.h +54 -0
  142. include/momentum/io/marker/trc_io.h +27 -0
  143. include/momentum/io/motion/mmo_io.h +97 -0
  144. include/momentum/io/shape/blend_shape_io.h +70 -0
  145. include/momentum/io/shape/pose_shape_io.h +21 -0
  146. include/momentum/io/skeleton/locator_io.h +41 -0
  147. include/momentum/io/skeleton/mppca_io.h +26 -0
  148. include/momentum/io/skeleton/parameter_limits_io.h +25 -0
  149. include/momentum/io/skeleton/parameter_transform_io.h +41 -0
  150. include/momentum/io/skeleton/parameters_io.h +20 -0
  151. include/momentum/io/urdf/urdf_io.h +26 -0
  152. include/momentum/io/usd/usd_io.h +36 -0
  153. include/momentum/marker_tracking/app_utils.h +62 -0
  154. include/momentum/marker_tracking/marker_tracker.h +213 -0
  155. include/momentum/marker_tracking/process_markers.h +58 -0
  156. include/momentum/marker_tracking/tracker_utils.h +90 -0
  157. include/momentum/math/constants.h +82 -0
  158. include/momentum/math/covariance_matrix.h +84 -0
  159. include/momentum/math/fmt_eigen.h +23 -0
  160. include/momentum/math/fwd.h +132 -0
  161. include/momentum/math/generalized_loss.h +61 -0
  162. include/momentum/math/intersection.h +32 -0
  163. include/momentum/math/mesh.h +84 -0
  164. include/momentum/math/mppca.h +67 -0
  165. include/momentum/math/online_householder_qr.h +516 -0
  166. include/momentum/math/random-inl.h +404 -0
  167. include/momentum/math/random.h +310 -0
  168. include/momentum/math/simd_generalized_loss.h +40 -0
  169. include/momentum/math/transform.h +229 -0
  170. include/momentum/math/types.h +461 -0
  171. include/momentum/math/utility.h +251 -0
  172. include/momentum/rasterizer/camera.h +453 -0
  173. include/momentum/rasterizer/fwd.h +102 -0
  174. include/momentum/rasterizer/geometry.h +83 -0
  175. include/momentum/rasterizer/image.h +18 -0
  176. include/momentum/rasterizer/rasterizer.h +583 -0
  177. include/momentum/rasterizer/tensor.h +140 -0
  178. include/momentum/rasterizer/utility.h +268 -0
  179. include/momentum/simd/simd.h +221 -0
  180. include/momentum/solver/fwd.h +131 -0
  181. include/momentum/solver/gauss_newton_solver.h +136 -0
  182. include/momentum/solver/gradient_descent_solver.h +65 -0
  183. include/momentum/solver/solver.h +155 -0
  184. include/momentum/solver/solver_function.h +126 -0
  185. include/momentum/solver/subset_gauss_newton_solver.h +109 -0
  186. include/rerun/archetypes/annotation_context.hpp +157 -0
  187. include/rerun/archetypes/arrows2d.hpp +271 -0
  188. include/rerun/archetypes/arrows3d.hpp +257 -0
  189. include/rerun/archetypes/asset3d.hpp +262 -0
  190. include/rerun/archetypes/asset_video.hpp +275 -0
  191. include/rerun/archetypes/bar_chart.hpp +261 -0
  192. include/rerun/archetypes/boxes2d.hpp +293 -0
  193. include/rerun/archetypes/boxes3d.hpp +369 -0
  194. include/rerun/archetypes/capsules3d.hpp +333 -0
  195. include/rerun/archetypes/clear.hpp +180 -0
  196. include/rerun/archetypes/depth_image.hpp +425 -0
  197. include/rerun/archetypes/ellipsoids3d.hpp +384 -0
  198. include/rerun/archetypes/encoded_image.hpp +250 -0
  199. include/rerun/archetypes/geo_line_strings.hpp +166 -0
  200. include/rerun/archetypes/geo_points.hpp +177 -0
  201. include/rerun/archetypes/graph_edges.hpp +152 -0
  202. include/rerun/archetypes/graph_nodes.hpp +206 -0
  203. include/rerun/archetypes/image.hpp +434 -0
  204. include/rerun/archetypes/instance_poses3d.hpp +221 -0
  205. include/rerun/archetypes/line_strips2d.hpp +289 -0
  206. include/rerun/archetypes/line_strips3d.hpp +270 -0
  207. include/rerun/archetypes/mesh3d.hpp +387 -0
  208. include/rerun/archetypes/pinhole.hpp +385 -0
  209. include/rerun/archetypes/points2d.hpp +333 -0
  210. include/rerun/archetypes/points3d.hpp +369 -0
  211. include/rerun/archetypes/recording_properties.hpp +132 -0
  212. include/rerun/archetypes/scalar.hpp +170 -0
  213. include/rerun/archetypes/scalars.hpp +153 -0
  214. include/rerun/archetypes/segmentation_image.hpp +305 -0
  215. include/rerun/archetypes/series_line.hpp +274 -0
  216. include/rerun/archetypes/series_lines.hpp +271 -0
  217. include/rerun/archetypes/series_point.hpp +265 -0
  218. include/rerun/archetypes/series_points.hpp +251 -0
  219. include/rerun/archetypes/tensor.hpp +213 -0
  220. include/rerun/archetypes/text_document.hpp +200 -0
  221. include/rerun/archetypes/text_log.hpp +211 -0
  222. include/rerun/archetypes/transform3d.hpp +925 -0
  223. include/rerun/archetypes/video_frame_reference.hpp +295 -0
  224. include/rerun/archetypes/view_coordinates.hpp +393 -0
  225. include/rerun/archetypes.hpp +43 -0
  226. include/rerun/arrow_utils.hpp +32 -0
  227. include/rerun/as_components.hpp +90 -0
  228. include/rerun/blueprint/archetypes/background.hpp +113 -0
  229. include/rerun/blueprint/archetypes/container_blueprint.hpp +259 -0
  230. include/rerun/blueprint/archetypes/dataframe_query.hpp +178 -0
  231. include/rerun/blueprint/archetypes/entity_behavior.hpp +130 -0
  232. include/rerun/blueprint/archetypes/force_center.hpp +115 -0
  233. include/rerun/blueprint/archetypes/force_collision_radius.hpp +141 -0
  234. include/rerun/blueprint/archetypes/force_link.hpp +136 -0
  235. include/rerun/blueprint/archetypes/force_many_body.hpp +124 -0
  236. include/rerun/blueprint/archetypes/force_position.hpp +132 -0
  237. include/rerun/blueprint/archetypes/line_grid3d.hpp +178 -0
  238. include/rerun/blueprint/archetypes/map_background.hpp +104 -0
  239. include/rerun/blueprint/archetypes/map_zoom.hpp +103 -0
  240. include/rerun/blueprint/archetypes/near_clip_plane.hpp +109 -0
  241. include/rerun/blueprint/archetypes/panel_blueprint.hpp +95 -0
  242. include/rerun/blueprint/archetypes/plot_legend.hpp +118 -0
  243. include/rerun/blueprint/archetypes/scalar_axis.hpp +116 -0
  244. include/rerun/blueprint/archetypes/tensor_scalar_mapping.hpp +146 -0
  245. include/rerun/blueprint/archetypes/tensor_slice_selection.hpp +167 -0
  246. include/rerun/blueprint/archetypes/tensor_view_fit.hpp +95 -0
  247. include/rerun/blueprint/archetypes/view_blueprint.hpp +170 -0
  248. include/rerun/blueprint/archetypes/view_contents.hpp +142 -0
  249. include/rerun/blueprint/archetypes/viewport_blueprint.hpp +200 -0
  250. include/rerun/blueprint/archetypes/visible_time_ranges.hpp +116 -0
  251. include/rerun/blueprint/archetypes/visual_bounds2d.hpp +109 -0
  252. include/rerun/blueprint/archetypes/visualizer_overrides.hpp +113 -0
  253. include/rerun/blueprint/archetypes.hpp +29 -0
  254. include/rerun/blueprint/components/active_tab.hpp +82 -0
  255. include/rerun/blueprint/components/apply_latest_at.hpp +79 -0
  256. include/rerun/blueprint/components/auto_layout.hpp +77 -0
  257. include/rerun/blueprint/components/auto_views.hpp +77 -0
  258. include/rerun/blueprint/components/background_kind.hpp +66 -0
  259. include/rerun/blueprint/components/column_share.hpp +78 -0
  260. include/rerun/blueprint/components/component_column_selector.hpp +81 -0
  261. include/rerun/blueprint/components/container_kind.hpp +65 -0
  262. include/rerun/blueprint/components/corner2d.hpp +64 -0
  263. include/rerun/blueprint/components/enabled.hpp +77 -0
  264. include/rerun/blueprint/components/filter_by_range.hpp +74 -0
  265. include/rerun/blueprint/components/filter_is_not_null.hpp +77 -0
  266. include/rerun/blueprint/components/force_distance.hpp +82 -0
  267. include/rerun/blueprint/components/force_iterations.hpp +82 -0
  268. include/rerun/blueprint/components/force_strength.hpp +82 -0
  269. include/rerun/blueprint/components/grid_columns.hpp +78 -0
  270. include/rerun/blueprint/components/grid_spacing.hpp +78 -0
  271. include/rerun/blueprint/components/included_content.hpp +86 -0
  272. include/rerun/blueprint/components/lock_range_during_zoom.hpp +82 -0
  273. include/rerun/blueprint/components/map_provider.hpp +64 -0
  274. include/rerun/blueprint/components/near_clip_plane.hpp +82 -0
  275. include/rerun/blueprint/components/panel_state.hpp +61 -0
  276. include/rerun/blueprint/components/query_expression.hpp +89 -0
  277. include/rerun/blueprint/components/root_container.hpp +77 -0
  278. include/rerun/blueprint/components/row_share.hpp +78 -0
  279. include/rerun/blueprint/components/selected_columns.hpp +76 -0
  280. include/rerun/blueprint/components/tensor_dimension_index_slider.hpp +90 -0
  281. include/rerun/blueprint/components/timeline_name.hpp +76 -0
  282. include/rerun/blueprint/components/view_class.hpp +76 -0
  283. include/rerun/blueprint/components/view_fit.hpp +61 -0
  284. include/rerun/blueprint/components/view_maximized.hpp +79 -0
  285. include/rerun/blueprint/components/view_origin.hpp +81 -0
  286. include/rerun/blueprint/components/viewer_recommendation_hash.hpp +82 -0
  287. include/rerun/blueprint/components/visible_time_range.hpp +77 -0
  288. include/rerun/blueprint/components/visual_bounds2d.hpp +74 -0
  289. include/rerun/blueprint/components/visualizer_override.hpp +86 -0
  290. include/rerun/blueprint/components/zoom_level.hpp +78 -0
  291. include/rerun/blueprint/components.hpp +41 -0
  292. include/rerun/blueprint/datatypes/component_column_selector.hpp +61 -0
  293. include/rerun/blueprint/datatypes/filter_by_range.hpp +59 -0
  294. include/rerun/blueprint/datatypes/filter_is_not_null.hpp +61 -0
  295. include/rerun/blueprint/datatypes/selected_columns.hpp +62 -0
  296. include/rerun/blueprint/datatypes/tensor_dimension_index_slider.hpp +63 -0
  297. include/rerun/blueprint/datatypes.hpp +9 -0
  298. include/rerun/c/arrow_c_data_interface.h +111 -0
  299. include/rerun/c/compiler_utils.h +10 -0
  300. include/rerun/c/rerun.h +627 -0
  301. include/rerun/c/sdk_info.h +28 -0
  302. include/rerun/collection.hpp +496 -0
  303. include/rerun/collection_adapter.hpp +43 -0
  304. include/rerun/collection_adapter_builtins.hpp +138 -0
  305. include/rerun/compiler_utils.hpp +61 -0
  306. include/rerun/component_batch.hpp +163 -0
  307. include/rerun/component_column.hpp +111 -0
  308. include/rerun/component_descriptor.hpp +142 -0
  309. include/rerun/component_type.hpp +35 -0
  310. include/rerun/components/aggregation_policy.hpp +76 -0
  311. include/rerun/components/albedo_factor.hpp +74 -0
  312. include/rerun/components/annotation_context.hpp +102 -0
  313. include/rerun/components/axis_length.hpp +74 -0
  314. include/rerun/components/blob.hpp +73 -0
  315. include/rerun/components/class_id.hpp +71 -0
  316. include/rerun/components/clear_is_recursive.hpp +75 -0
  317. include/rerun/components/color.hpp +99 -0
  318. include/rerun/components/colormap.hpp +99 -0
  319. include/rerun/components/depth_meter.hpp +84 -0
  320. include/rerun/components/draw_order.hpp +79 -0
  321. include/rerun/components/entity_path.hpp +83 -0
  322. include/rerun/components/fill_mode.hpp +72 -0
  323. include/rerun/components/fill_ratio.hpp +79 -0
  324. include/rerun/components/gamma_correction.hpp +80 -0
  325. include/rerun/components/geo_line_string.hpp +63 -0
  326. include/rerun/components/graph_edge.hpp +75 -0
  327. include/rerun/components/graph_node.hpp +79 -0
  328. include/rerun/components/graph_type.hpp +57 -0
  329. include/rerun/components/half_size2d.hpp +91 -0
  330. include/rerun/components/half_size3d.hpp +95 -0
  331. include/rerun/components/image_buffer.hpp +86 -0
  332. include/rerun/components/image_format.hpp +84 -0
  333. include/rerun/components/image_plane_distance.hpp +77 -0
  334. include/rerun/components/interactive.hpp +76 -0
  335. include/rerun/components/keypoint_id.hpp +74 -0
  336. include/rerun/components/lat_lon.hpp +89 -0
  337. include/rerun/components/length.hpp +77 -0
  338. include/rerun/components/line_strip2d.hpp +73 -0
  339. include/rerun/components/line_strip3d.hpp +73 -0
  340. include/rerun/components/magnification_filter.hpp +63 -0
  341. include/rerun/components/marker_shape.hpp +82 -0
  342. include/rerun/components/marker_size.hpp +74 -0
  343. include/rerun/components/media_type.hpp +157 -0
  344. include/rerun/components/name.hpp +83 -0
  345. include/rerun/components/opacity.hpp +77 -0
  346. include/rerun/components/pinhole_projection.hpp +94 -0
  347. include/rerun/components/plane3d.hpp +75 -0
  348. include/rerun/components/pose_rotation_axis_angle.hpp +73 -0
  349. include/rerun/components/pose_rotation_quat.hpp +71 -0
  350. include/rerun/components/pose_scale3d.hpp +102 -0
  351. include/rerun/components/pose_transform_mat3x3.hpp +87 -0
  352. include/rerun/components/pose_translation3d.hpp +96 -0
  353. include/rerun/components/position2d.hpp +86 -0
  354. include/rerun/components/position3d.hpp +90 -0
  355. include/rerun/components/radius.hpp +98 -0
  356. include/rerun/components/range1d.hpp +75 -0
  357. include/rerun/components/resolution.hpp +88 -0
  358. include/rerun/components/rotation_axis_angle.hpp +72 -0
  359. include/rerun/components/rotation_quat.hpp +71 -0
  360. include/rerun/components/scalar.hpp +76 -0
  361. include/rerun/components/scale3d.hpp +102 -0
  362. include/rerun/components/series_visible.hpp +76 -0
  363. include/rerun/components/show_labels.hpp +79 -0
  364. include/rerun/components/stroke_width.hpp +74 -0
  365. include/rerun/components/tensor_data.hpp +94 -0
  366. include/rerun/components/tensor_dimension_index_selection.hpp +77 -0
  367. include/rerun/components/tensor_height_dimension.hpp +71 -0
  368. include/rerun/components/tensor_width_dimension.hpp +71 -0
  369. include/rerun/components/texcoord2d.hpp +101 -0
  370. include/rerun/components/text.hpp +83 -0
  371. include/rerun/components/text_log_level.hpp +110 -0
  372. include/rerun/components/timestamp.hpp +76 -0
  373. include/rerun/components/transform_mat3x3.hpp +92 -0
  374. include/rerun/components/transform_relation.hpp +66 -0
  375. include/rerun/components/translation3d.hpp +96 -0
  376. include/rerun/components/triangle_indices.hpp +85 -0
  377. include/rerun/components/value_range.hpp +78 -0
  378. include/rerun/components/vector2d.hpp +92 -0
  379. include/rerun/components/vector3d.hpp +96 -0
  380. include/rerun/components/video_timestamp.hpp +120 -0
  381. include/rerun/components/view_coordinates.hpp +346 -0
  382. include/rerun/components/visible.hpp +74 -0
  383. include/rerun/components.hpp +77 -0
  384. include/rerun/config.hpp +52 -0
  385. include/rerun/datatypes/angle.hpp +76 -0
  386. include/rerun/datatypes/annotation_info.hpp +76 -0
  387. include/rerun/datatypes/blob.hpp +67 -0
  388. include/rerun/datatypes/bool.hpp +57 -0
  389. include/rerun/datatypes/channel_datatype.hpp +87 -0
  390. include/rerun/datatypes/class_description.hpp +92 -0
  391. include/rerun/datatypes/class_description_map_elem.hpp +69 -0
  392. include/rerun/datatypes/class_id.hpp +62 -0
  393. include/rerun/datatypes/color_model.hpp +68 -0
  394. include/rerun/datatypes/dvec2d.hpp +76 -0
  395. include/rerun/datatypes/entity_path.hpp +60 -0
  396. include/rerun/datatypes/float32.hpp +62 -0
  397. include/rerun/datatypes/float64.hpp +62 -0
  398. include/rerun/datatypes/image_format.hpp +107 -0
  399. include/rerun/datatypes/keypoint_id.hpp +63 -0
  400. include/rerun/datatypes/keypoint_pair.hpp +65 -0
  401. include/rerun/datatypes/mat3x3.hpp +105 -0
  402. include/rerun/datatypes/mat4x4.hpp +119 -0
  403. include/rerun/datatypes/pixel_format.hpp +142 -0
  404. include/rerun/datatypes/plane3d.hpp +60 -0
  405. include/rerun/datatypes/quaternion.hpp +110 -0
  406. include/rerun/datatypes/range1d.hpp +59 -0
  407. include/rerun/datatypes/range2d.hpp +55 -0
  408. include/rerun/datatypes/rgba32.hpp +94 -0
  409. include/rerun/datatypes/rotation_axis_angle.hpp +67 -0
  410. include/rerun/datatypes/tensor_buffer.hpp +529 -0
  411. include/rerun/datatypes/tensor_data.hpp +100 -0
  412. include/rerun/datatypes/tensor_dimension_index_selection.hpp +58 -0
  413. include/rerun/datatypes/tensor_dimension_selection.hpp +56 -0
  414. include/rerun/datatypes/time_int.hpp +62 -0
  415. include/rerun/datatypes/time_range.hpp +55 -0
  416. include/rerun/datatypes/time_range_boundary.hpp +175 -0
  417. include/rerun/datatypes/uint16.hpp +62 -0
  418. include/rerun/datatypes/uint32.hpp +62 -0
  419. include/rerun/datatypes/uint64.hpp +62 -0
  420. include/rerun/datatypes/utf8.hpp +76 -0
  421. include/rerun/datatypes/utf8pair.hpp +62 -0
  422. include/rerun/datatypes/uuid.hpp +60 -0
  423. include/rerun/datatypes/uvec2d.hpp +76 -0
  424. include/rerun/datatypes/uvec3d.hpp +80 -0
  425. include/rerun/datatypes/uvec4d.hpp +59 -0
  426. include/rerun/datatypes/vec2d.hpp +76 -0
  427. include/rerun/datatypes/vec3d.hpp +80 -0
  428. include/rerun/datatypes/vec4d.hpp +84 -0
  429. include/rerun/datatypes/video_timestamp.hpp +67 -0
  430. include/rerun/datatypes/view_coordinates.hpp +87 -0
  431. include/rerun/datatypes/visible_time_range.hpp +57 -0
  432. include/rerun/datatypes.hpp +51 -0
  433. include/rerun/demo_utils.hpp +75 -0
  434. include/rerun/entity_path.hpp +20 -0
  435. include/rerun/error.hpp +180 -0
  436. include/rerun/half.hpp +10 -0
  437. include/rerun/image_utils.hpp +187 -0
  438. include/rerun/indicator_component.hpp +59 -0
  439. include/rerun/loggable.hpp +54 -0
  440. include/rerun/recording_stream.hpp +960 -0
  441. include/rerun/rerun_sdk_export.hpp +25 -0
  442. include/rerun/result.hpp +86 -0
  443. include/rerun/rotation3d.hpp +33 -0
  444. include/rerun/sdk_info.hpp +20 -0
  445. include/rerun/spawn.hpp +21 -0
  446. include/rerun/spawn_options.hpp +57 -0
  447. include/rerun/string_utils.hpp +16 -0
  448. include/rerun/third_party/cxxopts.hpp +2198 -0
  449. include/rerun/time_column.hpp +288 -0
  450. include/rerun/timeline.hpp +38 -0
  451. include/rerun/type_traits.hpp +40 -0
  452. include/rerun.hpp +86 -0
  453. lib/arrow_bundled_dependencies.lib +0 -0
  454. lib/arrow_static.lib +0 -0
  455. lib/axel.lib +0 -0
  456. lib/cmake/axel/axel-config.cmake +45 -0
  457. lib/cmake/axel/axelTargets-release.cmake +19 -0
  458. lib/cmake/axel/axelTargets.cmake +108 -0
  459. lib/cmake/momentum/Findre2.cmake +52 -0
  460. lib/cmake/momentum/momentum-config.cmake +67 -0
  461. lib/cmake/momentum/momentumTargets-release.cmake +259 -0
  462. lib/cmake/momentum/momentumTargets.cmake +377 -0
  463. lib/cmake/rerun_sdk/rerun_sdkConfig.cmake +70 -0
  464. lib/cmake/rerun_sdk/rerun_sdkConfigVersion.cmake +83 -0
  465. lib/cmake/rerun_sdk/rerun_sdkTargets-release.cmake +19 -0
  466. lib/cmake/rerun_sdk/rerun_sdkTargets.cmake +108 -0
  467. lib/momentum_app_utils.lib +0 -0
  468. lib/momentum_character.lib +0 -0
  469. lib/momentum_character_sequence_solver.lib +0 -0
  470. lib/momentum_character_solver.lib +0 -0
  471. lib/momentum_common.lib +0 -0
  472. lib/momentum_diff_ik.lib +0 -0
  473. lib/momentum_io.lib +0 -0
  474. lib/momentum_io_common.lib +0 -0
  475. lib/momentum_io_fbx.lib +0 -0
  476. lib/momentum_io_gltf.lib +0 -0
  477. lib/momentum_io_legacy_json.lib +0 -0
  478. lib/momentum_io_marker.lib +0 -0
  479. lib/momentum_io_motion.lib +0 -0
  480. lib/momentum_io_shape.lib +0 -0
  481. lib/momentum_io_skeleton.lib +0 -0
  482. lib/momentum_io_urdf.lib +0 -0
  483. lib/momentum_marker_tracker.lib +0 -0
  484. lib/momentum_math.lib +0 -0
  485. lib/momentum_online_qr.lib +0 -0
  486. lib/momentum_process_markers.lib +0 -0
  487. lib/momentum_rerun.lib +0 -0
  488. lib/momentum_simd_constraints.lib +0 -0
  489. lib/momentum_simd_generalized_loss.lib +0 -0
  490. lib/momentum_skeleton.lib +0 -0
  491. lib/momentum_solver.lib +0 -0
  492. lib/rerun_c__win_x64.lib +0 -0
  493. lib/rerun_sdk.lib +0 -0
  494. pymomentum/axel.cp312-win_amd64.pyd +0 -0
  495. pymomentum/backend/__init__.py +16 -0
  496. pymomentum/backend/skel_state_backend.py +614 -0
  497. pymomentum/backend/trs_backend.py +871 -0
  498. pymomentum/backend/utils.py +224 -0
  499. pymomentum/geometry.cp312-win_amd64.pyd +0 -0
  500. pymomentum/marker_tracking.cp312-win_amd64.pyd +0 -0
  501. pymomentum/quaternion.py +740 -0
  502. pymomentum/skel_state.py +514 -0
  503. pymomentum/solver.cp312-win_amd64.pyd +0 -0
  504. pymomentum/solver2.cp312-win_amd64.pyd +0 -0
  505. pymomentum/torch/character.py +809 -0
  506. pymomentum/torch/parameter_limits.py +494 -0
  507. pymomentum/torch/utility.py +20 -0
  508. pymomentum/trs.py +535 -0
  509. pymomentum_cpu-0.1.78.post11.dist-info/METADATA +121 -0
  510. pymomentum_cpu-0.1.78.post11.dist-info/RECORD +512 -0
  511. pymomentum_cpu-0.1.78.post11.dist-info/WHEEL +5 -0
  512. pymomentum_cpu-0.1.78.post11.dist-info/licenses/LICENSE +21 -0
include/axel/BvhBase.h ADDED
@@ -0,0 +1,75 @@
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 <array>
11
+ #include <vector>
12
+
13
+ #include "axel/BoundingBox.h"
14
+ #include "axel/common/Types.h"
15
+
16
+ namespace axel {
17
+
18
+ template <typename S>
19
+ class BvhBase {
20
+ public:
21
+ using Scalar = S;
22
+ using QueryBuffer = std::array<uint32_t, 512>;
23
+ BvhBase() = default;
24
+ virtual ~BvhBase() = default;
25
+
26
+ BvhBase(const BvhBase&) = default;
27
+ BvhBase& operator=(const BvhBase&) = default;
28
+
29
+ BvhBase(BvhBase&&) noexcept = default;
30
+ BvhBase& operator=(BvhBase&&) noexcept = default;
31
+
32
+ /**
33
+ * @brief Rebuilds the bvh with a new vector of bounding boxes.
34
+ * @param bboxes The new bounding boxes.
35
+ */
36
+ virtual void setBoundingBoxes(const std::vector<BoundingBox<S>>& bboxes) = 0;
37
+
38
+ /**
39
+ * @brief Checks for an intersection between a given bounding box and the bvh.
40
+ * All IDs of the primitives that overlap with the given bounding box will be returned
41
+ * in a dynamically-allocated vector.
42
+ * @param box The input bounding box to intersect with the bvh.
43
+ * @return A vector of primitive IDs that intersect with the box.
44
+ */
45
+ [[nodiscard]] virtual std::vector<uint32_t> query(const BoundingBox<S>& box) const = 0;
46
+
47
+ /**
48
+ * @brief Checks for an intersection between a given bounding box and the bvh.
49
+ * The query permits only up to first 512 intersections, which is the limit
50
+ * of the query buffer. In practice this shouldn't make a difference,
51
+ * but performance-wise we don't allocate tens of thousands of vectors on the heap.
52
+ * @param box The input bounding box to perform the query with.
53
+ * @param hits The buffer where the hit primitive IDs will be stored.
54
+ * @return The number of hit primitive IDs. When using the hits buffer afterwards,
55
+ * hit primitives are within [0, hitCount - 1] interval of the hits buffer.
56
+ */
57
+ virtual uint32_t query(const BoundingBox<S>& box, QueryBuffer& hits) const = 0;
58
+
59
+ /**
60
+ * @brief Checks for an intersection between a ray and the bvh.
61
+ * @param origin The origin of the ray in the same space as the bvh data.
62
+ * @param direction The direction of the ray in the same space as the bvh data.
63
+ * @return A vector of primitive IDs that intersect with the ray.
64
+ */
65
+ [[nodiscard]] virtual std::vector<uint32_t> query(
66
+ const Eigen::Vector3<S>& origin,
67
+ const Eigen::Vector3<S>& direction) const = 0;
68
+
69
+ [[nodiscard]] virtual Size getPrimitiveCount() const = 0;
70
+ };
71
+
72
+ using BvhBasef = BvhBase<float>;
73
+ using BvhBased = BvhBase<double>;
74
+
75
+ } // namespace axel
@@ -0,0 +1,43 @@
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 <optional>
11
+
12
+ #include <Eigen/Core>
13
+
14
+ namespace axel {
15
+
16
+ template <typename S>
17
+ struct IntersectionResult {
18
+ using Scalar = S;
19
+ int32_t triangleId{0};
20
+ S hitDistance{std::numeric_limits<S>::max()};
21
+ Eigen::Vector3<S> hitPoint;
22
+ Eigen::Vector3<S> baryCoords;
23
+ };
24
+
25
+ using IntersectionResultf = IntersectionResult<float>;
26
+ using IntersectionResultd = IntersectionResult<double>;
27
+
28
+ // TODO(nemanjab): Fix-it: unify index types.
29
+ inline constexpr uint32_t kInvalidTriangleIdx = std::numeric_limits<uint32_t>::max();
30
+
31
+ template <typename S>
32
+ struct ClosestSurfacePointResult {
33
+ Eigen::Vector3<S> point;
34
+ uint32_t triangleIdx = kInvalidTriangleIdx;
35
+
36
+ // TODO: Remove optional once all the queries support barycentric coordinates.
37
+ std::optional<Eigen::Vector3<S>> baryCoords;
38
+ };
39
+
40
+ using ClosestSurfacePointResultf = ClosestSurfacePointResult<float>;
41
+ using ClosestSurfacePointResultd = ClosestSurfacePointResult<double>;
42
+
43
+ } // namespace axel
@@ -0,0 +1,86 @@
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 <array>
11
+ #include <optional>
12
+ #include <vector>
13
+
14
+ #include <embree4/rtcore.h>
15
+
16
+ #include "axel/BoundingBox.h"
17
+ #include "axel/BvhBase.h"
18
+
19
+ namespace axel {
20
+
21
+ /**
22
+ * @brief Encapsulates an Embree BVH for a single geometry.
23
+ *
24
+ * The data structure can be initialized/updated with setBoundingBoxes(...)
25
+ * or preferably with a vector of RTCBoundPrimitive structs through setPrimitives(...).
26
+ *
27
+ * The BVH supports bounding boxes and ray queries to conform to the interface
28
+ * of the other BVH implementations in this library.
29
+ */
30
+ class BVHEmbree final : public BvhBased {
31
+ public:
32
+ struct alignas(16) Node {
33
+ // A bounding box with SIMD-friendly storage.
34
+ std::array<RTCBounds, 2> bounds{};
35
+ std::array<BVHEmbree::Node*, 2> children{nullptr, nullptr};
36
+ uint32_t primID{0};
37
+ bool isLeaf{false};
38
+
39
+ Node() = default;
40
+ explicit Node(const RTCBuildPrimitive& bounds);
41
+ };
42
+
43
+ /**
44
+ * @brief Construct a new, empty BVH based on Embree.
45
+ */
46
+ explicit BVHEmbree(std::optional<uint32_t> embreeThreadCount = std::nullopt);
47
+ ~BVHEmbree() override;
48
+
49
+ BVHEmbree(const BVHEmbree& other) = delete;
50
+ BVHEmbree(BVHEmbree&& other) noexcept;
51
+ BVHEmbree& operator=(const BVHEmbree& other) = delete;
52
+ BVHEmbree& operator=(BVHEmbree&& other) noexcept;
53
+
54
+ void setBoundingBoxes(const std::vector<BoundingBoxd>& bboxes) override;
55
+
56
+ /**
57
+ * @brief Updates the BVH with a new vector of bounding boxes.
58
+ * The input parameter can't be made const because Embree takes a non-const ptr
59
+ * to its data.
60
+ * @param prims The new bounding boxes, in Embree's expected, aligned structs.
61
+ */
62
+ void setPrimitives(std::vector<RTCBuildPrimitive>& prims);
63
+
64
+ uint32_t query(const BoundingBoxd& box, QueryBuffer& hits) const override;
65
+ std::vector<unsigned int> query(const BoundingBoxd& box) const override;
66
+ std::vector<unsigned int> query(const Eigen::Vector3d& origin, const Eigen::Vector3d& direction)
67
+ const override;
68
+
69
+ Size getPrimitiveCount() const override;
70
+
71
+ private:
72
+ // Manually ref-counted handle to the device used as Embree's context.
73
+ RTCDevice device_{nullptr};
74
+
75
+ // Struct for BVH build parameters.
76
+ RTCBuildArguments buildArguments_;
77
+
78
+ // Owning handle to the BVH handle.
79
+ RTCBVH bvh_{nullptr};
80
+
81
+ // This is a non-owning pointer to Embree's internal thread-local memory allocation.
82
+ // All the memory will be freed once we call rtcReleaseBVH(bvh_) in the destructor of this class.
83
+ Node* root_{nullptr};
84
+ };
85
+
86
+ } // 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 <memory>
11
+ #include <optional>
12
+ #include <string_view>
13
+
14
+ #include "axel/BvhBase.h"
15
+
16
+ namespace axel {
17
+
18
+ /**
19
+ * @brief Creates a bvh that speeds up spatial look-up for collision
20
+ * detection.
21
+ * @param type Type of the acceleration structure. Supported values are:
22
+ * - "default": instantiates an implementation-specific default BVH
23
+ * - "embree": instantiates an Embree-based BVH on supported (desktop) platforms. Otherwise,
24
+ * creates a "default" BVH.
25
+ * - "fast-bvh": instantiates a BVH based on the https://github.com/brandonpelfrey/Fast-BVH.
26
+ * @param threadCount Specify how many threads to use for a given acceleration structure if
27
+ * supported.
28
+ * @return A unique pointer to the created acceleration structure.
29
+ */
30
+ std::unique_ptr<BvhBased> createBvh(
31
+ std::string_view type = "default",
32
+ std::optional<uint32_t> threadCount = std::nullopt);
33
+
34
+ } // namespace axel
include/axel/Checks.h ADDED
@@ -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
+ #if defined(AXEL_WITH_XR_LOGGER)
11
+
12
+ #include <logging/Checks.h>
13
+
14
+ #else
15
+
16
+ #include <cassert>
17
+
18
+ // TODO: Support asserts with messages as XR_CHECK does
19
+ #define XR_CHECK(condition, ...) assert(condition)
20
+
21
+ #endif
@@ -0,0 +1,79 @@
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 <array>
11
+ #include <unordered_map>
12
+ #include <vector>
13
+
14
+ #include <Eigen/Core>
15
+ #include <Eigen/Dense>
16
+ #include <gsl/span>
17
+
18
+ #include "axel/BoundingBox.h"
19
+ #include "axel/SignedDistanceField.h"
20
+ #include "axel/common/Types.h"
21
+
22
+ namespace axel {
23
+
24
+ /**
25
+ * Result of dual contouring operation.
26
+ * Dual contouring naturally produces quads, so this always contains quads.
27
+ * Use triangulateQuads() to convert to triangles if needed.
28
+ */
29
+ template <typename S>
30
+ struct DualContouringResult {
31
+ using Scalar = S;
32
+
33
+ /// Generated vertices
34
+ std::vector<Eigen::Vector3<S>> vertices;
35
+
36
+ /// Generated quads (dual contouring naturally produces quads)
37
+ std::vector<Eigen::Vector4i> quads;
38
+
39
+ /// Success flag
40
+ bool success = false;
41
+
42
+ /// Number of cells processed
43
+ size_t processedCells = 0;
44
+
45
+ /// Number of vertices generated
46
+ size_t generatedVertices = 0;
47
+ };
48
+
49
+ /**
50
+ * Extract an isosurface from a signed distance field using dual contouring.
51
+ *
52
+ * Dual contouring places vertices inside grid cells (rather than on edges like marching cubes)
53
+ * and uses both function values and gradients to determine optimal vertex placement.
54
+ * This results in better preservation of sharp features and corners compared to marching cubes.
55
+ *
56
+ * The algorithm works by:
57
+ * 1. Finding all cells that intersect the isosurface (sign changes across cell corners)
58
+ * 2. Placing one vertex at each intersecting cell, positioned on the surface using gradient descent
59
+ * 3. Generating quads for each edge crossing that connects 4 adjacent cells
60
+ *
61
+ * @param sdf The signed distance field to extract from
62
+ * @param isovalue The isovalue to extract (typically 0.0 for zero level set)
63
+ * @return Result containing extracted mesh
64
+ */
65
+ template <typename ScalarType>
66
+ DualContouringResult<ScalarType> dualContouring(
67
+ const SignedDistanceField<ScalarType>& sdf,
68
+ ScalarType isovalue = ScalarType{0.0});
69
+
70
+ /**
71
+ * Triangulate a quad mesh into triangles.
72
+ * Each quad is split into two triangles using the diagonal (0,2).
73
+ *
74
+ * @param quads Vector of quads to triangulate
75
+ * @return Vector of triangles
76
+ */
77
+ std::vector<Eigen::Vector3i> triangulateQuads(const std::vector<Eigen::Vector4i>& quads);
78
+
79
+ } // namespace axel
include/axel/KdTree.h ADDED
@@ -0,0 +1,199 @@
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 <optional>
11
+
12
+ #include <nanoflann/nanoflann.hpp>
13
+ #include <Eigen/Core>
14
+ #include <Eigen/Eigen>
15
+
16
+ namespace axel {
17
+
18
+ namespace detail {
19
+
20
+ template <typename EigenType>
21
+ inline constexpr bool IsEigenTypeWithStorage =
22
+ std::is_base_of_v<Eigen::PlainObjectBase<std::decay_t<EigenType>>, std::decay_t<EigenType>>;
23
+
24
+ template <typename EigenType, Eigen::Index Length>
25
+ inline constexpr bool IsContiguousEigenVectorBaseWithLength =
26
+ (std::decay_t<EigenType>::RowsAtCompileTime == Length ||
27
+ std::decay_t<EigenType>::ColsAtCompileTime == Length) &&
28
+ (std::decay_t<EigenType>::RowsAtCompileTime == 1 ||
29
+ std::decay_t<EigenType>::ColsAtCompileTime == 1) &&
30
+ std::decay_t<EigenType>::InnerStrideAtCompileTime == 1; // Make sure the memory is contiguous.
31
+ } // namespace detail
32
+
33
+ enum class SortByDistance { True, False };
34
+
35
+ template <typename EigenMatrixType>
36
+ class KdTree {
37
+ public:
38
+ // The scalar type of the point coordinates.
39
+ using Scalar = typename EigenMatrixType::Scalar;
40
+
41
+ // The storage of data needs to be done with an Eigen::Matrix.
42
+ static_assert(
43
+ detail::IsEigenTypeWithStorage<EigenMatrixType>,
44
+ "KdTree's current implementation only works with Eigen matrices.");
45
+
46
+ // Dimensionality of the tree is determined by compile-time columns in the point matrix.
47
+ // It can also be dynamic, i.e. Eigen::Dynamic.
48
+ static constexpr Eigen::Index kDimensionality = EigenMatrixType::ColsAtCompileTime;
49
+
50
+ using TreeAdaptorType = nanoflann::KDTreeEigenMatrixAdaptor<EigenMatrixType, kDimensionality>;
51
+
52
+ // The underlying index for elements, i.e. Eigen::Index.
53
+ using IndexType = typename TreeAdaptorType::IndexType;
54
+
55
+ using RadiusSearchResults = std::vector<std::pair<IndexType, Scalar>>;
56
+
57
+ struct KnnSearchResults {
58
+ std::vector<IndexType> indices;
59
+ std::vector<Scalar> squaredDistances;
60
+ };
61
+
62
+ struct ClosestSearchResult {
63
+ IndexType index{};
64
+ Scalar squaredDistance{};
65
+ };
66
+
67
+ // Only allow lvalue and rvalue references of points that are exactly the Eigen::Matrix type
68
+ // we used to construct the tree.
69
+ template <
70
+ typename T,
71
+ typename = std::enable_if_t<
72
+ detail::IsEigenTypeWithStorage<T> && // This check might be obsolete due to transitivity.
73
+ std::is_same_v<std::decay_t<T>, std::decay_t<EigenMatrixType>>>>
74
+ explicit KdTree(T&& points) : points_(std::forward<T>(points)), tree_(points_.cols(), points_) {
75
+ tree_.index->buildIndex();
76
+ }
77
+
78
+ // Returns the number of points in the tree.
79
+ size_t getSize() const {
80
+ return static_cast<size_t>(tree_.index->size());
81
+ }
82
+
83
+ bool isEmpty() const {
84
+ return tree_.index->size() == 0;
85
+ }
86
+
87
+ /**
88
+ * @brief Returns all nearby points in the tree to a given query point with the given radius.
89
+ *
90
+ * @param query The point to query the tree with.
91
+ * @param radius The radius to search with.
92
+ * @param sort If SortByDistance::True, the results are sorted by distance.
93
+ * @param results The results contain the indices and squared distances of the points within the
94
+ * given radius.
95
+ */
96
+ template <typename EigenVectorType>
97
+ void radiusSearch(
98
+ EigenVectorType&& query,
99
+ const Scalar radius,
100
+ const SortByDistance sort,
101
+ RadiusSearchResults& results) const {
102
+ static_assert(detail::IsContiguousEigenVectorBaseWithLength<EigenVectorType, kDimensionality>);
103
+ nanoflann::SearchParams params{};
104
+ params.sorted = sort == SortByDistance::True;
105
+ tree_.index->radiusSearch(query.data(), radius * radius, results, params);
106
+ }
107
+
108
+ /**
109
+ * @brief Returns all nearby points in the tree to a given query point with the given radius.
110
+ *
111
+ * @param query The point to query the tree with.
112
+ * @param radius The radius to search with.
113
+ * @param sort If SortByDistance::True, the results are sorted by distance.
114
+ * @return The results contain the indices and squared distances of the points within the given
115
+ * radius.
116
+ */
117
+ template <typename EigenVectorType>
118
+ RadiusSearchResults
119
+ radiusSearch(EigenVectorType&& query, const Scalar radius, const SortByDistance sort) const {
120
+ static_assert(detail::IsContiguousEigenVectorBaseWithLength<EigenVectorType, kDimensionality>);
121
+ RadiusSearchResults results{};
122
+ radiusSearch(query, radius, sort, results);
123
+ return results;
124
+ }
125
+
126
+ /**
127
+ * @brief Returns the K closest points in the tree to a given query point.
128
+ *
129
+ * @param query The point to query the tree with.
130
+ * @param numClosest The number of closest points to return.
131
+ * @param results The K closest points, denoted by their index and squared distance. If the tree
132
+ * contains fewer than @param numClosest points, returns all the points in the tree instead.
133
+ */
134
+ template <typename EigenVectorType>
135
+ void knnSearch(EigenVectorType&& query, size_t numClosest, KnnSearchResults& results) const {
136
+ static_assert(detail::IsContiguousEigenVectorBaseWithLength<EigenVectorType, kDimensionality>);
137
+
138
+ numClosest = std::min(numClosest, getSize());
139
+ results.indices.resize(numClosest);
140
+ results.squaredDistances.resize(numClosest);
141
+ if (numClosest == 0) {
142
+ return; // Have to early-exit here because nanoflann doesn't support empty queries.
143
+ }
144
+
145
+ tree_.index->knnSearch(
146
+ query.data(), numClosest, results.indices.data(), results.squaredDistances.data());
147
+ }
148
+
149
+ /**
150
+ * @brief Returns the K closest points in the tree to a given query point.
151
+ *
152
+ * @param query The point to query the tree with.
153
+ * @param numClosest The number of closest points to return.
154
+ * @return The K closest points, denoted by their index and squared distance. If the tree contains
155
+ * fewer than @param numClosest points, returns all the points in the tree instead.
156
+ */
157
+ template <typename EigenVectorType>
158
+ KnnSearchResults knnSearch(EigenVectorType&& query, const size_t numClosest) const {
159
+ static_assert(detail::IsContiguousEigenVectorBaseWithLength<EigenVectorType, kDimensionality>);
160
+ KnnSearchResults results{};
161
+ knnSearch(query, numClosest, results);
162
+ return results;
163
+ }
164
+
165
+ /**
166
+ * @brief Returns the closest point in the tree to a given query point.
167
+
168
+ * @param query The point to query the tree with.
169
+ * @return The closest point. If the tree is empty, returns std::nullopt.
170
+ */
171
+ template <typename EigenVectorType>
172
+ std::optional<ClosestSearchResult> closestSearch(EigenVectorType&& query) const {
173
+ static_assert(detail::IsContiguousEigenVectorBaseWithLength<EigenVectorType, kDimensionality>);
174
+
175
+ if (isEmpty()) {
176
+ return std::nullopt;
177
+ }
178
+
179
+ ClosestSearchResult result{};
180
+ tree_.index->knnSearch(query.data(), /*num_closest=*/1, &result.index, &result.squaredDistance);
181
+ return result;
182
+ }
183
+
184
+ private:
185
+ EigenMatrixType points_;
186
+ TreeAdaptorType tree_;
187
+ };
188
+
189
+ template <typename ScalarType>
190
+ using KdTree2 = KdTree<Eigen::Matrix<ScalarType, Eigen::Dynamic, 2>>;
191
+ using KdTree2f = KdTree2<float>;
192
+ using KdTree2d = KdTree2<double>;
193
+
194
+ template <typename ScalarType>
195
+ using KdTree3 = KdTree<Eigen::Matrix<ScalarType, Eigen::Dynamic, 3>>;
196
+ using KdTree3f = KdTree3<float>;
197
+ using KdTree3d = KdTree3<double>;
198
+
199
+ } // namespace axel
include/axel/Log.h ADDED
@@ -0,0 +1,22 @@
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
+ #if defined(AXEL_WITH_XR_LOGGER)
11
+
12
+ #include <logging/Log.h>
13
+
14
+ #else
15
+
16
+ #define XR_LOGT(...)
17
+ #define XR_LOGD(...)
18
+ #define XR_LOGI(...)
19
+ #define XR_LOGW(...)
20
+ #define XR_LOGE(...)
21
+
22
+ #endif
@@ -0,0 +1,123 @@
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 <limits>
11
+ #include <queue>
12
+ #include <vector>
13
+
14
+ #include <Eigen/Core>
15
+ #include <gsl/span>
16
+
17
+ #include "axel/BoundingBox.h"
18
+ #include "axel/SignedDistanceField.h"
19
+ #include "axel/TriBvh.h"
20
+
21
+ namespace axel {
22
+
23
+ /**
24
+ * Configuration parameters for mesh-to-SDF conversion.
25
+ */
26
+ template <typename ScalarType>
27
+ struct MeshToSdfConfig {
28
+ using Scalar = ScalarType;
29
+
30
+ /// Narrow band width around triangles (in voxel units)
31
+ Scalar narrowBandWidth = Scalar{1.5};
32
+
33
+ /// Maximum distance to compute (distances beyond this are clamped)
34
+ /// Set to 0 to disable clamping
35
+ Scalar maxDistance = Scalar{0};
36
+
37
+ /// Numerical tolerance for computations
38
+ Scalar tolerance = std::numeric_limits<Scalar>::epsilon() * Scalar{1000};
39
+ };
40
+
41
+ /**
42
+ * Convert a triangle mesh to a signed distance field using modern 3-step approach:
43
+ * 1. Narrow band initialization with exact triangle distances
44
+ * 2. Fast marching propagation using Eikonal equation
45
+ * 3. Sign determination using ray casting
46
+ *
47
+ * @param vertices Vertex positions as span (works with std::vector, arrays, subranges)
48
+ * @param triangles Triangle indices as span (indices must be valid within vertices)
49
+ * @param bounds Spatial bounds for the SDF
50
+ * @param resolution Grid resolution (nx, ny, nz)
51
+ * @param config Configuration parameters
52
+ * @return Generated signed distance field
53
+ */
54
+ template <typename ScalarType>
55
+ SignedDistanceField<ScalarType> meshToSdf(
56
+ gsl::span<const Eigen::Vector3<ScalarType>> vertices,
57
+ gsl::span<const Eigen::Vector3i> triangles,
58
+ const BoundingBox<ScalarType>& bounds,
59
+ const Eigen::Vector3<Index>& resolution,
60
+ const MeshToSdfConfig<ScalarType>& config = {});
61
+
62
+ /**
63
+ * Convenience overload that computes bounds automatically from the mesh.
64
+ *
65
+ * @param vertices Vertex positions as span
66
+ * @param triangles Triangle indices as span
67
+ * @param resolution Grid resolution (nx, ny, nz)
68
+ * @param padding Extra space around mesh bounds (as fraction of bounding box size)
69
+ * @param config Configuration parameters
70
+ * @return Generated signed distance field
71
+ */
72
+ template <typename ScalarType>
73
+ SignedDistanceField<ScalarType> meshToSdf(
74
+ gsl::span<const Eigen::Vector3<ScalarType>> vertices,
75
+ gsl::span<const Eigen::Vector3i> triangles,
76
+ const Eigen::Vector3<Index>& resolution,
77
+ ScalarType padding = ScalarType{0.1},
78
+ const MeshToSdfConfig<ScalarType>& config = {});
79
+
80
+ namespace detail {
81
+
82
+ // ================================================================================================
83
+ // FORWARD DECLARATIONS
84
+ // ================================================================================================
85
+
86
+ /**
87
+ * Initialize narrow band with exact triangle distances.
88
+ */
89
+ template <typename ScalarType>
90
+ void initializeNarrowBand(
91
+ gsl::span<const Eigen::Vector3<ScalarType>> vertices,
92
+ gsl::span<const Eigen::Vector3i> triangles,
93
+ SignedDistanceField<ScalarType>& sdf,
94
+ ScalarType bandWidth);
95
+
96
+ /**
97
+ * Propagate distances from narrow band to entire grid using fast marching.
98
+ */
99
+ template <typename ScalarType>
100
+ void fastMarchingPropagate(SignedDistanceField<ScalarType>& sdf);
101
+
102
+ /**
103
+ * Apply correct signs to distance field based on inside/outside classification.
104
+ */
105
+ template <typename ScalarType>
106
+ void applySignsToDistanceField(
107
+ SignedDistanceField<ScalarType>& sdf,
108
+ gsl::span<const Eigen::Vector3<ScalarType>> vertices,
109
+ gsl::span<const Eigen::Vector3i> triangles);
110
+
111
+ /**
112
+ * Compute mesh bounding box from vertex spans.
113
+ */
114
+ template <typename ScalarType>
115
+ BoundingBox<ScalarType> computeMeshBounds(gsl::span<const Eigen::Vector3<ScalarType>> vertices);
116
+
117
+ } // namespace detail
118
+
119
+ // Type aliases for convenience
120
+ using MeshToSdfConfigf = MeshToSdfConfig<float>;
121
+ using MeshToSdfConfigd = MeshToSdfConfig<double>;
122
+
123
+ } // namespace axel