riggen 0.1.0__tar.gz → 0.2.1.dev0__tar.gz

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 (135) hide show
  1. {riggen-0.1.0 → riggen-0.2.1.dev0}/Cargo.lock +287 -6
  2. {riggen-0.1.0 → riggen-0.2.1.dev0}/Cargo.toml +54 -3
  3. riggen-0.2.1.dev0/PKG-INFO +289 -0
  4. riggen-0.2.1.dev0/README.md +266 -0
  5. riggen-0.2.1.dev0/crates/riggen-core/src/command.rs +2139 -0
  6. riggen-0.2.1.dev0/crates/riggen-core/src/file.rs +1442 -0
  7. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-core/src/fk.rs +250 -5
  8. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-core/src/history.rs +167 -6
  9. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-core/src/ids.rs +13 -1
  10. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-core/src/inertial.rs +1 -1
  11. riggen-0.2.1.dev0/crates/riggen-core/src/lib.rs +38 -0
  12. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-core/src/pose.rs +1 -1
  13. riggen-0.2.1.dev0/crates/riggen-core/src/robot.rs +960 -0
  14. riggen-0.2.1.dev0/crates/riggen-core/src/validate.rs +2155 -0
  15. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-export/Cargo.toml +2 -0
  16. riggen-0.2.1.dev0/crates/riggen-export/src/export.rs +271 -0
  17. riggen-0.2.1.dev0/crates/riggen-export/src/fk_samples.rs +842 -0
  18. riggen-0.2.1.dev0/crates/riggen-export/src/import.rs +510 -0
  19. riggen-0.2.1.dev0/crates/riggen-export/src/lib.rs +33 -0
  20. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-export/src/mesh_store.rs +15 -8
  21. riggen-0.2.1.dev0/crates/riggen-export/src/mjcf.rs +922 -0
  22. riggen-0.2.1.dev0/crates/riggen-export/src/mjcf_compose.rs +1081 -0
  23. riggen-0.2.1.dev0/crates/riggen-export/src/mjcf_in.rs +4140 -0
  24. riggen-0.2.1.dev0/crates/riggen-export/src/resolve.rs +1485 -0
  25. riggen-0.2.1.dev0/crates/riggen-export/src/sdf.rs +881 -0
  26. riggen-0.2.1.dev0/crates/riggen-export/src/test_util.rs +286 -0
  27. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-export/src/urdf.rs +227 -12
  28. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-export/src/urdf_in.rs +323 -203
  29. riggen-0.2.1.dev0/crates/riggen-export/src/xml.rs +833 -0
  30. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/Cargo.toml +1 -0
  31. riggen-0.2.1.dev0/crates/riggen-mesh/src/decomp.rs +510 -0
  32. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/error.rs +1 -1
  33. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/feature.rs +11 -6
  34. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/lib.rs +59 -20
  35. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/mass.rs +2 -2
  36. riggen-0.2.1.dev0/crates/riggen-mesh/src/msh.rs +284 -0
  37. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/obj.rs +10 -6
  38. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/ray.rs +1 -1
  39. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/stl.rs +1 -1
  40. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/tri_mesh.rs +1 -1
  41. riggen-0.2.1.dev0/crates/riggen-py/Cargo.toml +36 -0
  42. riggen-0.2.1.dev0/crates/riggen-py/src/doc.rs +193 -0
  43. riggen-0.2.1.dev0/crates/riggen-py/src/errors.rs +39 -0
  44. riggen-0.2.1.dev0/crates/riggen-py/src/lib.rs +72 -0
  45. riggen-0.2.1.dev0/crates/riggen-py/src/robot.rs +1061 -0
  46. riggen-0.2.1.dev0/pyproject.toml +82 -0
  47. riggen-0.2.1.dev0/python/riggen/__init__.py +152 -0
  48. riggen-0.2.1.dev0/python/riggen/__main__.py +36 -0
  49. riggen-0.2.1.dev0/python/riggen/_riggen.pyi +300 -0
  50. riggen-0.2.1.dev0/python/riggen/errors.py +120 -0
  51. riggen-0.2.1.dev0/python/riggen/py.typed +0 -0
  52. riggen-0.2.1.dev0/python/riggen/robot.py +1695 -0
  53. riggen-0.2.1.dev0/python/riggen/show.py +133 -0
  54. riggen-0.1.0/PKG-INFO +0 -139
  55. riggen-0.1.0/README.md +0 -118
  56. riggen-0.1.0/assets/fixtures/arm/arm.riggen +0 -361
  57. riggen-0.1.0/assets/fixtures/arm/arm.urdf +0 -129
  58. riggen-0.1.0/assets/fixtures/arm/base.stl +0 -0
  59. riggen-0.1.0/assets/fixtures/arm/fore.stl +0 -0
  60. riggen-0.1.0/assets/fixtures/arm/fore_hull.stl +0 -0
  61. riggen-0.1.0/assets/fixtures/arm/shoulder.stl +0 -0
  62. riggen-0.1.0/assets/fixtures/arm/upper.stl +0 -0
  63. riggen-0.1.0/crates/riggen-app/Cargo.toml +0 -58
  64. riggen-0.1.0/crates/riggen-app/build.rs +0 -92
  65. riggen-0.1.0/crates/riggen-app/src/app/align.rs +0 -241
  66. riggen-0.1.0/crates/riggen-app/src/app/debug_menu.rs +0 -78
  67. riggen-0.1.0/crates/riggen-app/src/app/document.rs +0 -757
  68. riggen-0.1.0/crates/riggen-app/src/app/export_dialog.rs +0 -287
  69. riggen-0.1.0/crates/riggen-app/src/app/file_io.rs +0 -306
  70. riggen-0.1.0/crates/riggen-app/src/app/file_menu.rs +0 -282
  71. riggen-0.1.0/crates/riggen-app/src/app/gizmo.rs +0 -230
  72. riggen-0.1.0/crates/riggen-app/src/app/glyphs.rs +0 -318
  73. riggen-0.1.0/crates/riggen-app/src/app/mod.rs +0 -441
  74. riggen-0.1.0/crates/riggen-app/src/app/panels/joints.rs +0 -166
  75. riggen-0.1.0/crates/riggen-app/src/app/panels/materials.rs +0 -161
  76. riggen-0.1.0/crates/riggen-app/src/app/panels/mod.rs +0 -14
  77. riggen-0.1.0/crates/riggen-app/src/app/panels/properties.rs +0 -1064
  78. riggen-0.1.0/crates/riggen-app/src/app/panels/tree.rs +0 -242
  79. riggen-0.1.0/crates/riggen-app/src/app/shortcuts.rs +0 -69
  80. riggen-0.1.0/crates/riggen-app/src/app/snap.rs +0 -602
  81. riggen-0.1.0/crates/riggen-app/src/app/status_bar.rs +0 -88
  82. riggen-0.1.0/crates/riggen-app/src/app/tool.rs +0 -116
  83. riggen-0.1.0/crates/riggen-app/src/cli.rs +0 -623
  84. riggen-0.1.0/crates/riggen-app/src/debug/camera.rs +0 -77
  85. riggen-0.1.0/crates/riggen-app/src/debug/mod.rs +0 -483
  86. riggen-0.1.0/crates/riggen-app/src/lib.rs +0 -52
  87. riggen-0.1.0/crates/riggen-app/src/main.rs +0 -94
  88. riggen-0.1.0/crates/riggen-app/tests/cli.rs +0 -52
  89. riggen-0.1.0/crates/riggen-app/tests/visual/harness.rs +0 -352
  90. riggen-0.1.0/crates/riggen-app/tests/visual/main.rs +0 -3234
  91. riggen-0.1.0/crates/riggen-app/tests/visual_scratch.rs +0 -59
  92. riggen-0.1.0/crates/riggen-core/src/command.rs +0 -1062
  93. riggen-0.1.0/crates/riggen-core/src/file.rs +0 -639
  94. riggen-0.1.0/crates/riggen-core/src/lib.rs +0 -34
  95. riggen-0.1.0/crates/riggen-core/src/robot.rs +0 -439
  96. riggen-0.1.0/crates/riggen-core/src/validate.rs +0 -701
  97. riggen-0.1.0/crates/riggen-export/src/export.rs +0 -164
  98. riggen-0.1.0/crates/riggen-export/src/fk_samples.rs +0 -164
  99. riggen-0.1.0/crates/riggen-export/src/lib.rs +0 -26
  100. riggen-0.1.0/crates/riggen-export/src/mjcf.rs +0 -343
  101. riggen-0.1.0/crates/riggen-export/src/resolve.rs +0 -771
  102. riggen-0.1.0/crates/riggen-export/src/test_util.rs +0 -136
  103. riggen-0.1.0/crates/riggen-export/src/xml.rs +0 -159
  104. riggen-0.1.0/crates/riggen-viewport/Cargo.toml +0 -14
  105. riggen-0.1.0/crates/riggen-viewport/src/camera/animation.rs +0 -180
  106. riggen-0.1.0/crates/riggen-viewport/src/camera/mod.rs +0 -13
  107. riggen-0.1.0/crates/riggen-viewport/src/camera/orbit.rs +0 -341
  108. riggen-0.1.0/crates/riggen-viewport/src/camera/orientation.rs +0 -358
  109. riggen-0.1.0/crates/riggen-viewport/src/camera/tests.rs +0 -520
  110. riggen-0.1.0/crates/riggen-viewport/src/gpu_mesh.rs +0 -288
  111. riggen-0.1.0/crates/riggen-viewport/src/lib.rs +0 -29
  112. riggen-0.1.0/crates/riggen-viewport/src/overlay.rs +0 -164
  113. riggen-0.1.0/crates/riggen-viewport/src/pick_id.rs +0 -86
  114. riggen-0.1.0/crates/riggen-viewport/src/scene.rs +0 -514
  115. riggen-0.1.0/crates/riggen-viewport/src/shaders/axes.wgsl +0 -30
  116. riggen-0.1.0/crates/riggen-viewport/src/shaders/background.wgsl +0 -99
  117. riggen-0.1.0/crates/riggen-viewport/src/shaders/blit.wgsl +0 -26
  118. riggen-0.1.0/crates/riggen-viewport/src/shaders/hover.wgsl +0 -23
  119. riggen-0.1.0/crates/riggen-viewport/src/shaders/pick.wgsl +0 -32
  120. riggen-0.1.0/crates/riggen-viewport/src/shaders/scene.wgsl +0 -41
  121. riggen-0.1.0/crates/riggen-viewport/src/shaders/select.wgsl +0 -23
  122. riggen-0.1.0/crates/riggen-viewport/src/viewport/gpu_state.rs +0 -179
  123. riggen-0.1.0/crates/riggen-viewport/src/viewport/mod.rs +0 -1023
  124. riggen-0.1.0/crates/riggen-viewport/src/viewport/picking.rs +0 -261
  125. riggen-0.1.0/crates/riggen-viewport/src/viewport/pipelines.rs +0 -283
  126. riggen-0.1.0/crates/riggen-viewport/src/viewport/render_pass.rs +0 -311
  127. riggen-0.1.0/pyproject.toml +0 -59
  128. riggen-0.1.0/python/riggen/__init__.py +0 -19
  129. riggen-0.1.0/python/riggen/__main__.py +0 -47
  130. {riggen-0.1.0 → riggen-0.2.1.dev0}/LICENSE-APACHE +0 -0
  131. {riggen-0.1.0 → riggen-0.2.1.dev0}/LICENSE-MIT +0 -0
  132. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-core/Cargo.toml +0 -0
  133. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/aabb.rs +0 -0
  134. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/fit.rs +0 -0
  135. {riggen-0.1.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/hull.rs +0 -0
@@ -214,6 +214,15 @@ version = "1.0.104"
214
214
  source = "registry+https://github.com/rust-lang/crates.io-index"
215
215
  checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470"
216
216
 
217
+ [[package]]
218
+ name = "approx"
219
+ version = "0.5.1"
220
+ source = "registry+https://github.com/rust-lang/crates.io-index"
221
+ checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
222
+ dependencies = [
223
+ "num-traits",
224
+ ]
225
+
217
226
  [[package]]
218
227
  name = "arboard"
219
228
  version = "3.6.1"
@@ -572,6 +581,12 @@ dependencies = [
572
581
  "syn 3.0.4",
573
582
  ]
574
583
 
584
+ [[package]]
585
+ name = "byteorder"
586
+ version = "1.5.0"
587
+ source = "registry+https://github.com/rust-lang/crates.io-index"
588
+ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
589
+
575
590
  [[package]]
576
591
  name = "byteorder-lite"
577
592
  version = "0.1.0"
@@ -922,6 +937,12 @@ version = "1.2.1"
922
937
  source = "registry+https://github.com/rust-lang/crates.io-index"
923
938
  checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"
924
939
 
940
+ [[package]]
941
+ name = "downcast-rs"
942
+ version = "2.0.2"
943
+ source = "registry+https://github.com/rust-lang/crates.io-index"
944
+ checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc"
945
+
925
946
  [[package]]
926
947
  name = "dpi"
927
948
  version = "0.1.2"
@@ -1092,6 +1113,15 @@ dependencies = [
1092
1113
  "serde",
1093
1114
  ]
1094
1115
 
1116
+ [[package]]
1117
+ name = "ena"
1118
+ version = "0.14.4"
1119
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1120
+ checksum = "eabffdaee24bd1bf95c5ef7cec31260444317e72ea56c4c91750e8b7ee58d5f1"
1121
+ dependencies = [
1122
+ "log",
1123
+ ]
1124
+
1095
1125
  [[package]]
1096
1126
  name = "endi"
1097
1127
  version = "1.1.1"
@@ -1488,6 +1518,28 @@ dependencies = [
1488
1518
  "mint",
1489
1519
  ]
1490
1520
 
1521
+ [[package]]
1522
+ name = "glam"
1523
+ version = "0.33.6"
1524
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1525
+ checksum = "21fef0953c54fd3de2f44b743fbf77e044c81a25faee03636dfccc0d35135e23"
1526
+ dependencies = [
1527
+ "approx",
1528
+ "libm",
1529
+ ]
1530
+
1531
+ [[package]]
1532
+ name = "glamx"
1533
+ version = "0.3.0"
1534
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1535
+ checksum = "9847f980afb0628849bcd6a406cdffd29eb9d53fca83e1646005901a9acd4c5c"
1536
+ dependencies = [
1537
+ "approx",
1538
+ "glam 0.33.6",
1539
+ "num-traits",
1540
+ "simba",
1541
+ ]
1542
+
1491
1543
  [[package]]
1492
1544
  name = "glifo"
1493
1545
  version = "0.2.0"
@@ -1629,6 +1681,15 @@ dependencies = [
1629
1681
  "smallvec",
1630
1682
  ]
1631
1683
 
1684
+ [[package]]
1685
+ name = "hash32"
1686
+ version = "0.3.1"
1687
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1688
+ checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606"
1689
+ dependencies = [
1690
+ "byteorder",
1691
+ ]
1692
+
1632
1693
  [[package]]
1633
1694
  name = "hashbrown"
1634
1695
  version = "0.16.1"
@@ -1649,6 +1710,22 @@ dependencies = [
1649
1710
  "foldhash",
1650
1711
  ]
1651
1712
 
1713
+ [[package]]
1714
+ name = "heapless"
1715
+ version = "0.8.0"
1716
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1717
+ checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad"
1718
+ dependencies = [
1719
+ "hash32",
1720
+ "stable_deref_trait",
1721
+ ]
1722
+
1723
+ [[package]]
1724
+ name = "heck"
1725
+ version = "0.5.0"
1726
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1727
+ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
1728
+
1652
1729
  [[package]]
1653
1730
  name = "hermit-abi"
1654
1731
  version = "0.5.2"
@@ -2166,6 +2243,26 @@ version = "0.2.0"
2166
2243
  source = "registry+https://github.com/rust-lang/crates.io-index"
2167
2244
  checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
2168
2245
 
2246
+ [[package]]
2247
+ name = "num-complex"
2248
+ version = "0.4.6"
2249
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2250
+ checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
2251
+ dependencies = [
2252
+ "num-traits",
2253
+ ]
2254
+
2255
+ [[package]]
2256
+ name = "num-derive"
2257
+ version = "0.4.2"
2258
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2259
+ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
2260
+ dependencies = [
2261
+ "proc-macro2",
2262
+ "quote",
2263
+ "syn 2.0.119",
2264
+ ]
2265
+
2169
2266
  [[package]]
2170
2267
  name = "num-traits"
2171
2268
  version = "0.2.19"
@@ -2592,6 +2689,33 @@ dependencies = [
2592
2689
  "windows-link",
2593
2690
  ]
2594
2691
 
2692
+ [[package]]
2693
+ name = "parry3d-f64"
2694
+ version = "0.30.2"
2695
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2696
+ checksum = "8c5f71cd1d7f0c475116a52c61baa8d0de69fc258bc4debf86cb4c4ca8f35f3f"
2697
+ dependencies = [
2698
+ "approx",
2699
+ "arrayvec",
2700
+ "bitflags 2.13.1",
2701
+ "downcast-rs 2.0.2",
2702
+ "either",
2703
+ "ena",
2704
+ "foldhash",
2705
+ "glamx",
2706
+ "hashbrown 0.17.1",
2707
+ "log",
2708
+ "num-derive",
2709
+ "num-traits",
2710
+ "ordered-float",
2711
+ "rstar",
2712
+ "simba",
2713
+ "slab",
2714
+ "smallvec",
2715
+ "spade",
2716
+ "thiserror 2.0.20",
2717
+ ]
2718
+
2595
2719
  [[package]]
2596
2720
  name = "peniko"
2597
2721
  version = "0.6.1"
@@ -2820,6 +2944,63 @@ version = "0.1.30"
2820
2944
  source = "registry+https://github.com/rust-lang/crates.io-index"
2821
2945
  checksum = "d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea"
2822
2946
 
2947
+ [[package]]
2948
+ name = "pyo3"
2949
+ version = "0.29.2"
2950
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2951
+ checksum = "4688ddedf473e32662b9b067670129a8afb8c18e351482c70d62ba4a88171e8b"
2952
+ dependencies = [
2953
+ "libc",
2954
+ "once_cell",
2955
+ "portable-atomic",
2956
+ "pyo3-build-config",
2957
+ "pyo3-ffi",
2958
+ "pyo3-macros",
2959
+ ]
2960
+
2961
+ [[package]]
2962
+ name = "pyo3-build-config"
2963
+ version = "0.29.2"
2964
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2965
+ checksum = "f41027e41b4bd03f6e60f9f417fe24a6341a6bb744edd62b6f709f2a52ea30e9"
2966
+ dependencies = [
2967
+ "target-lexicon",
2968
+ ]
2969
+
2970
+ [[package]]
2971
+ name = "pyo3-ffi"
2972
+ version = "0.29.2"
2973
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2974
+ checksum = "e591a95526fead067432c3b3a33fc74770b87b1e04e73671090d9c2055a2b327"
2975
+ dependencies = [
2976
+ "libc",
2977
+ "pyo3-build-config",
2978
+ ]
2979
+
2980
+ [[package]]
2981
+ name = "pyo3-macros"
2982
+ version = "0.29.2"
2983
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2984
+ checksum = "73225868fc1cd84eef2c3c230ddb91273bf1de46aeb8a4248da76d32a0924a1c"
2985
+ dependencies = [
2986
+ "proc-macro2",
2987
+ "pyo3-macros-backend",
2988
+ "quote",
2989
+ "syn 2.0.119",
2990
+ ]
2991
+
2992
+ [[package]]
2993
+ name = "pyo3-macros-backend"
2994
+ version = "0.29.2"
2995
+ source = "registry+https://github.com/rust-lang/crates.io-index"
2996
+ checksum = "571575aa3749fa6216757dd47d2a3e7ef360f329a40f0666a9fbd14889024952"
2997
+ dependencies = [
2998
+ "heck",
2999
+ "proc-macro2",
3000
+ "quote",
3001
+ "syn 2.0.119",
3002
+ ]
3003
+
2823
3004
  [[package]]
2824
3005
  name = "quick-error"
2825
3006
  version = "2.0.1"
@@ -3042,7 +3223,7 @@ version = "0.0.1"
3042
3223
 
3043
3224
  [[package]]
3044
3225
  name = "riggen-app"
3045
- version = "0.1.0"
3226
+ version = "0.2.1-dev"
3046
3227
  dependencies = [
3047
3228
  "console_error_panic_hook",
3048
3229
  "eframe",
@@ -3050,6 +3231,7 @@ dependencies = [
3050
3231
  "egui-wgpu",
3051
3232
  "egui_kittest",
3052
3233
  "getrandom 0.3.4",
3234
+ "js-sys",
3053
3235
  "pollster 1.0.1",
3054
3236
  "rfd",
3055
3237
  "riggen-core",
@@ -3063,11 +3245,12 @@ dependencies = [
3063
3245
  "wasm-bindgen-futures",
3064
3246
  "web-sys",
3065
3247
  "web-time",
3248
+ "zip",
3066
3249
  ]
3067
3250
 
3068
3251
  [[package]]
3069
3252
  name = "riggen-core"
3070
- version = "0.1.0"
3253
+ version = "0.2.1-dev"
3071
3254
  dependencies = [
3072
3255
  "riggen-mesh",
3073
3256
  "serde",
@@ -3076,8 +3259,9 @@ dependencies = [
3076
3259
 
3077
3260
  [[package]]
3078
3261
  name = "riggen-export"
3079
- version = "0.1.0"
3262
+ version = "0.2.1-dev"
3080
3263
  dependencies = [
3264
+ "quick-xml 0.36.2",
3081
3265
  "riggen-core",
3082
3266
  "riggen-mesh",
3083
3267
  "serde",
@@ -3087,16 +3271,29 @@ dependencies = [
3087
3271
 
3088
3272
  [[package]]
3089
3273
  name = "riggen-mesh"
3090
- version = "0.1.0"
3274
+ version = "0.2.1-dev"
3091
3275
  dependencies = [
3092
3276
  "glam 0.30.10",
3277
+ "parry3d-f64",
3093
3278
  "stl_io",
3094
3279
  "tobj",
3095
3280
  ]
3096
3281
 
3282
+ [[package]]
3283
+ name = "riggen-py"
3284
+ version = "0.2.1-dev"
3285
+ dependencies = [
3286
+ "pyo3",
3287
+ "riggen-core",
3288
+ "riggen-export",
3289
+ "riggen-mesh",
3290
+ "serde",
3291
+ "serde_json",
3292
+ ]
3293
+
3097
3294
  [[package]]
3098
3295
  name = "riggen-viewport"
3099
- version = "0.1.0"
3296
+ version = "0.2.1-dev"
3100
3297
  dependencies = [
3101
3298
  "bytemuck",
3102
3299
  "egui",
@@ -3105,6 +3302,12 @@ dependencies = [
3105
3302
  "web-time",
3106
3303
  ]
3107
3304
 
3305
+ [[package]]
3306
+ name = "robust"
3307
+ version = "1.2.0"
3308
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3309
+ checksum = "4e27ee8bb91ca0adcf0ecb116293afa12d393f9c2b9b9cd54d33e8078fe19839"
3310
+
3108
3311
  [[package]]
3109
3312
  name = "ron"
3110
3313
  version = "0.12.2"
@@ -3119,6 +3322,17 @@ dependencies = [
3119
3322
  "unicode-ident",
3120
3323
  ]
3121
3324
 
3325
+ [[package]]
3326
+ name = "rstar"
3327
+ version = "0.13.0"
3328
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3329
+ checksum = "5912b862fa5ffb462607bfd1e35036c458c537921f508c8235a83d5f3987edfe"
3330
+ dependencies = [
3331
+ "heapless",
3332
+ "num-traits",
3333
+ "smallvec",
3334
+ ]
3335
+
3122
3336
  [[package]]
3123
3337
  name = "rustc-hash"
3124
3338
  version = "1.1.0"
@@ -3172,6 +3386,15 @@ version = "1.0.23"
3172
3386
  source = "registry+https://github.com/rust-lang/crates.io-index"
3173
3387
  checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f"
3174
3388
 
3389
+ [[package]]
3390
+ name = "safe_arch"
3391
+ version = "1.2.0"
3392
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3393
+ checksum = "42c6efa15875e6ecb39ca61fb0b0c1a40b84fac5a5ffe71eef7d1000c8eb3f5f"
3394
+ dependencies = [
3395
+ "bytemuck",
3396
+ ]
3397
+
3175
3398
  [[package]]
3176
3399
  name = "same-file"
3177
3400
  version = "1.0.6"
@@ -3309,6 +3532,18 @@ dependencies = [
3309
3532
  "libc",
3310
3533
  ]
3311
3534
 
3535
+ [[package]]
3536
+ name = "simba"
3537
+ version = "0.10.2"
3538
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3539
+ checksum = "f1a7200d82ff1c7b4235efd12f11e2537a402c91cf83a5cb97ce80eef787fde7"
3540
+ dependencies = [
3541
+ "approx",
3542
+ "num-complex",
3543
+ "num-traits",
3544
+ "wide",
3545
+ ]
3546
+
3312
3547
  [[package]]
3313
3548
  name = "simd-adler32"
3314
3549
  version = "0.3.10"
@@ -3443,6 +3678,18 @@ dependencies = [
3443
3678
  "serde",
3444
3679
  ]
3445
3680
 
3681
+ [[package]]
3682
+ name = "spade"
3683
+ version = "2.15.1"
3684
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3685
+ checksum = "9699399fd9349b00b184f5635b074f9ec93afffef30c853f8c875b32c0f8c7fa"
3686
+ dependencies = [
3687
+ "hashbrown 0.16.1",
3688
+ "num-traits",
3689
+ "robust",
3690
+ "smallvec",
3691
+ ]
3692
+
3446
3693
  [[package]]
3447
3694
  name = "spirv"
3448
3695
  version = "0.4.0+sdk-1.4.341.0"
@@ -3509,6 +3756,12 @@ dependencies = [
3509
3756
  "syn 2.0.119",
3510
3757
  ]
3511
3758
 
3759
+ [[package]]
3760
+ name = "target-lexicon"
3761
+ version = "0.13.5"
3762
+ source = "registry+https://github.com/rust-lang/crates.io-index"
3763
+ checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
3764
+
3512
3765
  [[package]]
3513
3766
  name = "tempfile"
3514
3767
  version = "3.27.0"
@@ -3742,6 +3995,12 @@ dependencies = [
3742
3995
  "rustc-hash 2.1.3",
3743
3996
  ]
3744
3997
 
3998
+ [[package]]
3999
+ name = "typed-path"
4000
+ version = "0.12.3"
4001
+ source = "registry+https://github.com/rust-lang/crates.io-index"
4002
+ checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e"
4003
+
3745
4004
  [[package]]
3746
4005
  name = "typeid"
3747
4006
  version = "1.0.3"
@@ -3947,7 +4206,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
3947
4206
  checksum = "38a91b4eaddff87b1cd1074985e3713da4af2c49742d1b356b2c01670a67a078"
3948
4207
  dependencies = [
3949
4208
  "cc",
3950
- "downcast-rs",
4209
+ "downcast-rs 1.2.1",
3951
4210
  "rustix 1.1.4",
3952
4211
  "scoped-tls",
3953
4212
  "smallvec",
@@ -4300,6 +4559,16 @@ dependencies = [
4300
4559
  "web-sys",
4301
4560
  ]
4302
4561
 
4562
+ [[package]]
4563
+ name = "wide"
4564
+ version = "1.7.0"
4565
+ source = "registry+https://github.com/rust-lang/crates.io-index"
4566
+ checksum = "8cf05ca94c9fba0c51316899caa1d1e74a064fc310a5efa7375e614343d415be"
4567
+ dependencies = [
4568
+ "bytemuck",
4569
+ "safe_arch",
4570
+ ]
4571
+
4303
4572
  [[package]]
4304
4573
  name = "winapi-util"
4305
4574
  version = "0.1.11"
@@ -4923,6 +5192,18 @@ dependencies = [
4923
5192
  "syn 3.0.4",
4924
5193
  ]
4925
5194
 
5195
+ [[package]]
5196
+ name = "zip"
5197
+ version = "8.6.0"
5198
+ source = "registry+https://github.com/rust-lang/crates.io-index"
5199
+ checksum = "2d04a6b5381502aa6087c94c669499eb1602eb9c5e8198e534de571f7154809b"
5200
+ dependencies = [
5201
+ "crc32fast",
5202
+ "indexmap",
5203
+ "memchr",
5204
+ "typed-path",
5205
+ ]
5206
+
4926
5207
  [[package]]
4927
5208
  name = "zlib-rs"
4928
5209
  version = "0.6.7"
@@ -1,21 +1,27 @@
1
1
  [workspace]
2
2
  resolver = "3"
3
- members = ["crates/riggen-mesh", "crates/riggen-core", "crates/riggen-export", "crates/riggen-viewport", "crates/riggen-app"]
3
+ members = ["crates/riggen-mesh", "crates/riggen-core", "crates/riggen-export", "crates/riggen-py"]
4
4
 
5
5
  [workspace.package]
6
- version = "0.1.0"
6
+ version = "0.2.1-dev"
7
7
  edition = "2024"
8
8
  license = "MIT OR Apache-2.0"
9
9
 
10
10
  # `cargo run` is the interactive loop, and an unoptimized wgpu/egui is slow
11
11
  # enough to be felt. Deps are built once at full optimization; our own crates
12
- # stay at `1` so backtraces and stepping still work (docs/01-architecture.md
12
+ # stay at `1` so backtraces and stepping still work (docs/ARCHITECTURE.md
13
13
  # §Cargo workspace, carried from RoboCAD).
14
14
  [profile.dev]
15
15
  opt-level = 1
16
16
 
17
+ # `debug = false` for dependencies only: 93% of a debug binary was DWARF for
18
+ # crates nobody steps through (596 MB → 39 MB stripped, measured 2026-09-06),
19
+ # and cargo never collects the old copies, so `target/` reached 76 GB. Their
20
+ # symbol names survive in backtraces — that is the symbol table, not debug
21
+ # info — and our own crates above keep theirs in full.
17
22
  [profile.dev.package."*"]
18
23
  opt-level = 3
24
+ debug = false
19
25
 
20
26
  # The wheel is the product (ADR-0002): its size is what `pip install` pulls
21
27
  # and its startup is what the user sees. Stripped, thin-LTO, one codegen
@@ -25,6 +31,21 @@ strip = true
25
31
  lto = "thin"
26
32
  codegen-units = 1
27
33
 
34
+ # The web demo (ADR-0017, Architecture §The web build). What the browser
35
+ # pays for
36
+ # is the *download*, not the last few percent of throughput: `opt-level = "s"`
37
+ # and fat LTO over the whole graph trade a little speed for a much smaller
38
+ # `.wasm`, and the viewport still holds 60 fps (the demo's own status bar
39
+ # says so). `panic = "abort"` is deliberately **not** here: eframe's panic
40
+ # handler is what turns a crash into a page that says what happened
41
+ # (`web/main.js`), and unwinding is how it gets the message.
42
+ [profile.web]
43
+ inherits = "release"
44
+ opt-level = "s"
45
+ lto = "fat"
46
+ codegen-units = 1
47
+ strip = true
48
+
28
49
  [workspace.dependencies]
29
50
  riggen-mesh = { path = "crates/riggen-mesh" }
30
51
  riggen-core = { path = "crates/riggen-core" }
@@ -45,6 +66,16 @@ stl_io = "0.11"
45
66
  # build, where it does not compile without a JS shim we have no use for.
46
67
  tobj = { version = "4", default-features = false, features = ["use_f64"] }
47
68
 
69
+ # Approximate convex decomposition (ADR-0011): Dimforge's pure-Rust V-HACD,
70
+ # `transformation::vhacd`, at f64 — the algorithm `riggen-mesh::decompose`
71
+ # wraps beside our own quickhull. Default features: `default-features =
72
+ # false` drops the crate's own `dim3`/`f64` selection and does not compile,
73
+ # and the default set pulls neither `rayon` nor `serde`. Its `glamx` bridge
74
+ # pins a third glam (0.33) beside our 0.30 and transform-gizmo's 0.32; no
75
+ # parry or glam-0.33 type appears in a riggen signature (ADR-0007's
76
+ # containment, applied again).
77
+ parry3d-f64 = "0.30"
78
+
48
79
  # UI stack pinned together: egui/eframe/egui-wgpu 0.36.x from crates.io, wgpu
49
80
  # version dictated by egui-wgpu — never depend on a different wgpu (ADR-0001).
50
81
  egui = "0.36"
@@ -72,6 +103,26 @@ web-time = "1"
72
103
  # URDF parser: the round-trip FK test reads our own URDF back through it
73
104
  # (dev, step 6), and File › Import URDF… is built on it (step 13).
74
105
  urdf-rs = "0.9"
106
+ # The XML pull parser behind `xml::parse`, the reading half of the MJCF
107
+ # import (ADR-0015 §2). 0.36 is the version `urdf-rs` already compiles, so
108
+ # this line adds a dependency and no crate. Escaping, CDATA and encodings
109
+ # are exactly what the writer's `escape` must not have to invert by hand.
110
+ quick-xml = "0.36"
111
+
112
+ # The Python SDK's binding layer (ADR-0009). `abi3-py310`: one extension
113
+ # module for every CPython ≥ 3.10 (`requires-python`), so the wheel matrix
114
+ # stays one wheel per platform. `extension-module` is *not* here — it is a
115
+ # feature of `riggen-py` that only maturin enables, so the workspace build
116
+ # still links libpython and `cargo clippy --workspace` sees the crate.
117
+ pyo3 = { version = "0.29", features = ["abi3-py310"] }
118
+
119
+ # Writing the export directory as one file, which is what a browser
120
+ # download is (ADR-0017 §6). `default-features = false`: no compression, no
121
+ # encryption, no time crate — a stored zip is a header, the bytes and a
122
+ # central directory, and the crate is here for the CRC-32 and the offsets,
123
+ # not for an algorithm. Not gated to wasm: the acceptance test that reads
124
+ # the archive back is native.
125
+ zip = { version = "8", default-features = false }
75
126
 
76
127
  # Only to block on `Instance::enumerate_adapters` in the "is there a GPU at
77
128
  # all?" probe of the snapshot harness — `egui_kittest` panics rather than