Add point cloud

This commit is contained in:
Michael Mikovsky
2025-05-09 09:29:43 -06:00
parent af31fe3a04
commit 34d36f51a6
8 changed files with 343 additions and 432 deletions
Generated
+42 -328
View File
@@ -20,13 +20,11 @@ dependencies = [
"log", "log",
"ndarray", "ndarray",
"once_cell", "once_cell",
"pasture-core",
"pasture-io",
"ply-rs", "ply-rs",
"rand 0.9.1", "rand 0.9.1",
"serde", "serde",
"serde_json", "serde_json",
"syn 2.0.101", "syn",
"typetag", "typetag",
"ureq", "ureq",
"wgpu 25.0.0", "wgpu 25.0.0",
@@ -226,12 +224,6 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04"
[[package]]
name = "android-tzdata"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
[[package]] [[package]]
name = "android_system_properties" name = "android_system_properties"
version = "0.1.5" version = "0.1.5"
@@ -297,15 +289,6 @@ version = "1.0.98"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
[[package]]
name = "approx"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
dependencies = [
"num-traits",
]
[[package]] [[package]]
name = "arbitrary" name = "arbitrary"
version = "1.4.1" version = "1.4.1"
@@ -340,15 +323,9 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]]
name = "array-init"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d62b7694a562cdf5a74227903507c56ab2cc8bdd1f781ed5cb4cf9c9f810bfc"
[[package]] [[package]]
name = "arrayref" name = "arrayref"
version = "0.3.9" version = "0.3.9"
@@ -482,7 +459,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -517,7 +494,7 @@ checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -639,15 +616,6 @@ version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]]
name = "bincode"
version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
dependencies = [
"serde",
]
[[package]] [[package]]
name = "bit-set" name = "bit-set"
version = "0.8.0" version = "0.8.0"
@@ -669,12 +637,6 @@ version = "0.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61"
[[package]]
name = "bitfield"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2d7e60934ceec538daadb9d8432424ed043a904d8e0243f3c6446bce549a46ac"
[[package]] [[package]]
name = "bitflags" name = "bitflags"
version = "1.3.2" version = "1.3.2"
@@ -768,7 +730,7 @@ checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -900,20 +862,6 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "chrono"
version = "0.4.41"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d"
dependencies = [
"android-tzdata",
"iana-time-zone",
"js-sys",
"num-traits",
"wasm-bindgen",
"windows-link",
]
[[package]] [[package]]
name = "clipboard-win" name = "clipboard-win"
version = "5.4.0" version = "5.4.0"
@@ -1164,7 +1112,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -1393,7 +1341,7 @@ checksum = "fc4caf64a58d7a6d65ab00639b046ff54399a39f5f2554728895ace4b297cd79"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -1404,7 +1352,7 @@ checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -1580,12 +1528,6 @@ dependencies = [
"miniz_oxide", "miniz_oxide",
] ]
[[package]]
name = "float-ord"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7bad48618fdb549078c333a7a8528acb57af271d0433bdecd523eb620628364e"
[[package]] [[package]]
name = "fnv" name = "fnv"
version = "1.0.7" version = "1.0.7"
@@ -1616,7 +1558,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -1667,7 +1609,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -1980,30 +1922,6 @@ version = "1.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
[[package]]
name = "iana-time-zone"
version = "0.1.63"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
dependencies = [
"android_system_properties",
"core-foundation-sys",
"iana-time-zone-haiku",
"js-sys",
"log",
"wasm-bindgen",
"windows-core",
]
[[package]]
name = "iana-time-zone-haiku"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
dependencies = [
"cc",
]
[[package]] [[package]]
name = "icu_collections" name = "icu_collections"
version = "1.5.0" version = "1.5.0"
@@ -2119,7 +2037,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -2209,7 +2127,7 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -2227,15 +2145,6 @@ version = "1.70.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
[[package]]
name = "itertools"
version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
dependencies = [
"either",
]
[[package]] [[package]]
name = "itertools" name = "itertools"
version = "0.12.1" version = "0.12.1"
@@ -2272,7 +2181,7 @@ checksum = "f3c30758ddd7188629c6713fc45d1188af4f44c90582311d0c8d8c9907f60c48"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -2350,47 +2259,6 @@ version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
[[package]]
name = "las"
version = "0.8.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc1269d29c76146444ebfef86b78644e5507a5c7a98bc8fb4e60ddf255044ad7"
dependencies = [
"byteorder",
"chrono",
"laz 0.9.3",
"log",
"num-traits",
"thiserror 1.0.69",
"uuid",
]
[[package]]
name = "laz"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b25725927b0a5a0d86c12a18dac2c11ecb8caca47d37bc45b77a187d8f28dd21"
dependencies = [
"byteorder",
"num-traits",
]
[[package]]
name = "laz"
version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e9be1582ff02cb56b08a4d273cc5f77eacd89d33a0c682ede9d0912e1c17773"
dependencies = [
"byteorder",
"num-traits",
]
[[package]]
name = "lazy_static"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
[[package]] [[package]]
name = "lebe" name = "lebe"
version = "0.5.2" version = "0.5.2"
@@ -2530,15 +2398,6 @@ version = "2.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
[[package]]
name = "memmap2"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f49388d20533534cd19360ad3d6a7dadc885944aa802ba3995040c5ec11288c6"
dependencies = [
"libc",
]
[[package]] [[package]]
name = "memmap2" name = "memmap2"
version = "0.9.5" version = "0.9.5"
@@ -2635,35 +2494,6 @@ dependencies = [
"unicode-ident", "unicode-ident",
] ]
[[package]]
name = "nalgebra"
version = "0.32.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b5c17de023a86f59ed79891b2e5d5a94c705dbe904a5b5c9c952ea6221b03e4"
dependencies = [
"approx",
"bytemuck",
"matrixmultiply",
"nalgebra-macros",
"num-complex",
"num-rational",
"num-traits",
"serde",
"simba",
"typenum",
]
[[package]]
name = "nalgebra-macros"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "254a5372af8fc138e36684761d3c0cdb758a4410e938babcff1c860ce14ddbfc"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.101",
]
[[package]] [[package]]
name = "ndarray" name = "ndarray"
version = "0.16.1" version = "0.16.1"
@@ -2776,7 +2606,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
dependencies = [ dependencies = [
"num-traits", "num-traits",
"serde",
] ]
[[package]] [[package]]
@@ -2787,7 +2616,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -2838,7 +2667,7 @@ dependencies = [
"proc-macro-crate", "proc-macro-crate",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -3208,66 +3037,6 @@ version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
[[package]]
name = "pasture-core"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c02bd10ab8c2678e35e437a5375e72fb02c651bc55557b8cafe0203c3023ef70"
dependencies = [
"anyhow",
"bytemuck",
"byteorder",
"float-ord",
"itertools 0.10.5",
"lazy_static",
"nalgebra",
"num-traits",
"pasture-derive",
"rayon",
"static_assertions",
"uuid",
]
[[package]]
name = "pasture-derive"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a94e8b8d76fdd50f66d24bb27a16609672526b7cd32b70b96fabdfca3faffe8"
dependencies = [
"anyhow",
"quote",
"syn 1.0.109",
]
[[package]]
name = "pasture-io"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1549a18a77860548819d3614ed7838eab23a8632659f4e6451bc063f17fe4e5"
dependencies = [
"anyhow",
"array-init",
"bincode",
"bitfield",
"bytemuck",
"byteorder",
"chrono",
"float-ord",
"itertools 0.10.5",
"las",
"laz 0.8.3",
"lazy_static",
"memmap2 0.7.1",
"nalgebra",
"num-traits",
"pasture-core",
"pasture-derive",
"scopeguard",
"serde",
"serde_json",
"static_assertions",
]
[[package]] [[package]]
name = "peg" name = "peg"
version = "0.6.3" version = "0.6.3"
@@ -3318,7 +3087,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -3454,7 +3223,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30" checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30"
dependencies = [ dependencies = [
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -3596,7 +3365,7 @@ dependencies = [
"built", "built",
"cfg-if 1.0.0", "cfg-if 1.0.0",
"interpolate_name", "interpolate_name",
"itertools 0.12.1", "itertools",
"libc", "libc",
"libfuzzer-sys", "libfuzzer-sys",
"log", "log",
@@ -3862,15 +3631,6 @@ version = "1.0.20"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
[[package]]
name = "safe_arch"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96b02de82ddbe1b636e6170c21be622223aea188ef2e139be0a5b219ec215323"
dependencies = [
"bytemuck",
]
[[package]] [[package]]
name = "same-file" name = "same-file"
version = "1.0.6" version = "1.0.6"
@@ -3900,7 +3660,7 @@ checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec"
dependencies = [ dependencies = [
"ab_glyph", "ab_glyph",
"log", "log",
"memmap2 0.9.5", "memmap2",
"smithay-client-toolkit", "smithay-client-toolkit",
"tiny-skia", "tiny-skia",
] ]
@@ -3931,7 +3691,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -3954,7 +3714,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -3992,19 +3752,6 @@ dependencies = [
"libc", "libc",
] ]
[[package]]
name = "simba"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae"
dependencies = [
"approx",
"num-complex",
"num-traits",
"paste",
"wide",
]
[[package]] [[package]]
name = "simd-adler32" name = "simd-adler32"
version = "0.3.7" version = "0.3.7"
@@ -4072,7 +3819,7 @@ dependencies = [
"cursor-icon", "cursor-icon",
"libc", "libc",
"log", "log",
"memmap2 0.9.5", "memmap2",
"rustix 0.38.44", "rustix 0.38.44",
"thiserror 1.0.69", "thiserror 1.0.69",
"wayland-backend", "wayland-backend",
@@ -4151,7 +3898,7 @@ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"rustversion", "rustversion",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -4160,17 +3907,6 @@ version = "2.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
[[package]]
name = "syn"
version = "1.0.109"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]] [[package]]
name = "syn" name = "syn"
version = "2.0.101" version = "2.0.101"
@@ -4190,7 +3926,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -4260,7 +3996,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -4271,7 +4007,7 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -4373,7 +4109,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -4433,7 +4169,7 @@ checksum = "35f5380909ffc31b4de4f4bdf96b877175a016aa2ca98cee39fcfd8c4d53d952"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -4548,12 +4284,6 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "uuid"
version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9"
[[package]] [[package]]
name = "v_frame" name = "v_frame"
version = "0.3.8" version = "0.3.8"
@@ -4624,7 +4354,7 @@ dependencies = [
"log", "log",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
"wasm-bindgen-shared", "wasm-bindgen-shared",
] ]
@@ -4659,7 +4389,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
"wasm-bindgen-backend", "wasm-bindgen-backend",
"wasm-bindgen-shared", "wasm-bindgen-shared",
] ]
@@ -5093,16 +4823,6 @@ dependencies = [
"web-sys", "web-sys",
] ]
[[package]]
name = "wide"
version = "0.7.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "41b5576b9a81633f3e8df296ce0063042a73507636cbe956c61133dd7034ab22"
dependencies = [
"bytemuck",
"safe_arch",
]
[[package]] [[package]]
name = "winapi" name = "winapi"
version = "0.2.8" version = "0.2.8"
@@ -5177,7 +4897,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -5188,15 +4908,9 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]]
name = "windows-link"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38"
[[package]] [[package]]
name = "windows-result" name = "windows-result"
version = "0.2.0" version = "0.2.0"
@@ -5442,7 +5156,7 @@ dependencies = [
"dpi", "dpi",
"js-sys", "js-sys",
"libc", "libc",
"memmap2 0.9.5", "memmap2",
"ndk", "ndk",
"objc2 0.5.2", "objc2 0.5.2",
"objc2-app-kit 0.2.2", "objc2-app-kit 0.2.2",
@@ -5596,7 +5310,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
"synstructure", "synstructure",
] ]
@@ -5656,7 +5370,7 @@ checksum = "709ab20fc57cb22af85be7b360239563209258430bccf38d8b979c5a2ae3ecce"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
"zbus-lockstep", "zbus-lockstep",
"zbus_xml", "zbus_xml",
"zvariant", "zvariant",
@@ -5671,7 +5385,7 @@ dependencies = [
"proc-macro-crate", "proc-macro-crate",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
"zvariant_utils", "zvariant_utils",
] ]
@@ -5725,7 +5439,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -5736,7 +5450,7 @@ checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -5756,7 +5470,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
"synstructure", "synstructure",
] ]
@@ -5785,7 +5499,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
[[package]] [[package]]
@@ -5834,7 +5548,7 @@ dependencies = [
"proc-macro-crate", "proc-macro-crate",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
"zvariant_utils", "zvariant_utils",
] ]
@@ -5846,5 +5560,5 @@ checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.101", "syn",
] ]
-2
View File
@@ -33,5 +33,3 @@ env_logger = "0.11.8"
ply-rs = "0.1.3" ply-rs = "0.1.3"
wgpu = "25.0.0" wgpu = "25.0.0"
dialog = "0.3.0" dialog = "0.3.0"
pasture-core = "0.5.0"
pasture-io = "0.5.0"
+2 -5
View File
@@ -44,12 +44,9 @@ impl eframe::App for App {
fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) {
egui::CentralPanel::default().show(ctx, |ui| { egui::CentralPanel::default().show(ctx, |ui| {
self.pane_manager.render(ui); self.pane_manager.render(ui);
// egui::scroll_area::ScrollArea::vertical().show(ui, |ui| {
// egui::Frame::canvas(ui.style()).show(ui, |ui| {
// self.custom_painting(ui.max_rect(), ui);
// });
// })
}); });
ctx.request_repaint();
} }
// fn on_exit(&mut self, gl: Option<&glow::Context>) { // fn on_exit(&mut self, gl: Option<&glow::Context>) {
+81 -1
View File
@@ -10,11 +10,12 @@ use std::{
use std::io::Cursor; use std::io::Cursor;
use byteorder::{LittleEndian, ReadBytesExt}; use byteorder::{LittleEndian, ReadBytesExt};
use egui::{Ui, mutex::Mutex}; use egui::{Color32, Ui, mutex::Mutex};
use crate::{ use crate::{
fetch_frame::{FrameMessage, ProcessedFrames, decode_frame, frame_config_encode, normalize}, fetch_frame::{FrameMessage, ProcessedFrames, decode_frame, frame_config_encode, normalize},
pane_manager::{Pane, PaneMode, PaneState, PsudoCreationContext}, pane_manager::{Pane, PaneMode, PaneState, PsudoCreationContext},
panes::point_cloud_renderer::LivePointView,
}; };
// Constants (replace with your actual values) // Constants (replace with your actual values)
@@ -27,6 +28,8 @@ pub struct CameraPane {
frames: Arc<Mutex<ProcessedFrames>>, frames: Arc<Mutex<ProcessedFrames>>,
#[serde(skip)] #[serde(skip)]
thread_handle: Option<thread::JoinHandle<()>>, thread_handle: Option<thread::JoinHandle<()>>,
#[serde(skip)]
point_cloud: LivePointView,
} }
impl Default for CameraPane { impl Default for CameraPane {
@@ -52,6 +55,7 @@ impl Default for CameraPane {
Self { Self {
frames, frames,
thread_handle: Some(decoder_handle), thread_handle: Some(decoder_handle),
point_cloud: LivePointView::default(),
} }
} }
} }
@@ -68,6 +72,7 @@ impl Pane for CameraPane {
} }
fn init(&mut self, pcc: &PsudoCreationContext) { fn init(&mut self, pcc: &PsudoCreationContext) {
self.point_cloud.init(pcc);
// decoder_thread(rx, tx); // decoder_thread(rx, tx);
// let mut frames_lock = self.frames.lock(); // let mut frames_lock = self.frames.lock();
@@ -123,11 +128,86 @@ impl Pane for CameraPane {
if !processed { if !processed {
ui.heading("Waiting for frames..."); ui.heading("Waiting for frames...");
} }
if let Some(ref status) = frames.status {
if let Some(ref depth) = frames.depth {
if let Some(ref rgb) = frames.rgb {
let mut points: Vec<(i32, i32, i32, Color32)> = Vec::new();
for i in 0..(320 * 240) {
let x = i / 240;
let y = i % 320;
// println!("{:?}", status.get((x, y)));
let status = status.get((x, y));
if status.is_none() {
continue;
}
let status = *status.unwrap();
if status != 0 {
continue;
}
// if *status.get((x, y)).unwrap() != 0u16 {
// continue;
// }
//
let (r, g, b) = if let Some((rgbx, rgby)) = scale_shift_rgb_xy(x, y) {
(
*rgb.get((rgbx, rgby, 0)).unwrap() as u8,
*rgb.get((rgbx, rgby, 1)).unwrap() as u8,
*rgb.get((rgbx, rgby, 2)).unwrap() as u8,
)
} else {
(255, 255, 255)
};
let d = *depth.get((x, y)).unwrap();
points.push((
(y as i32) * 5,
(x as i32) * 5,
d as i32,
Color32::from_rgb(r, g, b),
))
}
self.point_cloud.set_points(points);
}
}
}
self.point_cloud.render(ui);
} }
fn context_menu(&mut self, ui: &mut Ui) {} fn context_menu(&mut self, ui: &mut Ui) {}
} }
fn scale_shift_rgb_xy(x: usize, y: usize) -> Option<(usize, usize)> {
static X_OFFSET: f32 = -10.;
static Y_OFFSET: f32 = -10.;
static SCAME: f32 = 1.9;
let x = ((x as f32 + X_OFFSET) * SCAME) as usize;
let y = ((y as f32 + Y_OFFSET) * SCAME) as usize;
if x < 0 || y >= 640 {
return None;
}
if y < 0 || x >= 480 {
return None;
}
// println!("{}, {}", x, y);
Some((x as usize, y as usize))
}
fn fetch_frame() -> Result<Vec<u8>, Box<dyn std::error::Error>> { fn fetch_frame() -> Result<Vec<u8>, Box<dyn std::error::Error>> {
is_success(&frame_config_encode(1, 0, 255, 0, 2, 7, 1, 0, 0))?; is_success(&frame_config_encode(1, 0, 255, 0, 2, 7, 1, 0, 0))?;
+152
View File
@@ -0,0 +1,152 @@
use std::{
error::Error,
sync::{Arc, Mutex},
time::Instant,
};
use eframe::egui_glow;
use egui::{Align2, Color32, FontId, InputState, Stroke, Ui};
use glam::Vec3;
use wgpu::Color;
use crate::pane_manager::PsudoCreationContext;
use super::renderer::{self, Camera, PointRenderer};
#[derive(serde::Serialize, serde::Deserialize)]
pub struct LivePointView {
#[serde(skip)]
renderer: Arc<Mutex<PointRenderer>>,
#[serde(skip)]
points: Vec<(i32, i32, i32, Color32)>,
}
impl Default for LivePointView {
fn default() -> Self {
Self {
renderer: Arc::new(Mutex::new(PointRenderer::default())),
points: Vec::new(),
}
}
}
impl LivePointView {
pub fn init(&mut self, pcc: &PsudoCreationContext) {
let renderer = self.renderer.lock();
if renderer.is_ok() {
renderer
.unwrap()
.init(pcc.gl.clone(), 100_000)
.expect("Failed to init renderer!");
} else {
error!("Live point view - Failed to initilize renderer!");
}
}
pub fn render(&mut self, ui: &mut Ui) {
egui::Window::new("Live point view").show(ui.ctx(), |ui| {
let max_rect = ui.max_rect();
let renderer = self.renderer.clone();
if renderer.lock().is_err() {
error!("Live point view - Failed to lock renderer!");
return;
}
if renderer.lock().unwrap().gl.is_none() {
error!("Live point view - Failed to aquire opengl!");
return;
}
renderer.lock().unwrap().clear();
let start_time = Instant::now();
let (rect, response) = ui.allocate_exact_size(
egui::Vec2 {
x: max_rect.width(),
y: max_rect.height(),
},
egui::Sense::drag(),
);
let input_state: Option<InputState> = ui.input(|input_state| {
if response.hovered() {
//&& response.has_focus() {
Some(input_state.clone())
} else {
None
}
});
for &(x, y, z, color) in &self.points {
renderer.lock().unwrap().add_point(x, y, z, color);
}
let o = <std::option::Option<Camera> as Clone>::clone(&renderer.lock().unwrap().camera)
.unwrap()
.orientation
.clone();
let cb = egui_glow::CallbackFn::new(move |_info, _painter| {
renderer
.lock()
.unwrap()
.render(max_rect, input_state.clone());
});
let callback = egui::PaintCallback {
rect: max_rect,
callback: Arc::new(cb),
};
ui.painter().add(callback);
let line_length: f32 = 20.;
// if let Some(input_state) = input_state {
// if input_state.pointer.any_down() {
let drawline = |pos: Vec3, color: Color32| {
ui.painter().line_segment(
[
rect.center(),
rect.center()
+ egui::Vec2 {
x: line_length * pos.x,
y: -line_length * pos.y,
},
],
Stroke { width: 1.5, color },
);
};
drawline(o.inverse() * glam::Vec3::X, Color32::RED);
drawline(o.inverse() * glam::Vec3::Y, Color32::BLUE);
drawline(o.inverse() * glam::Vec3::Z, Color32::GREEN);
let text_size = 12.;
ui.painter().text(
max_rect.min,
Align2::LEFT_TOP,
format!("{} ms", start_time.elapsed().as_millis()),
FontId::monospace(text_size),
Color32::WHITE,
);
ui.painter().text(
max_rect.min
+ egui::Vec2 {
x: 0.,
y: text_size,
},
Align2::LEFT_TOP,
format!("{} points", self.points.len()),
FontId::monospace(text_size),
Color32::WHITE,
);
});
}
pub fn set_points(&mut self, points: Vec<(i32, i32, i32, Color32)>) {
self.points = points;
}
}
+3
View File
@@ -1,3 +1,6 @@
mod liveview;
mod pane; mod pane;
mod renderer; mod renderer;
pub use liveview::LivePointView;
pub use pane::PointRendererPane; pub use pane::PointRendererPane;
+2 -2
View File
@@ -39,7 +39,7 @@ impl Pane for PointRendererPane {
} }
} }
fn init(&mut self, pcc: &PsudoCreationContext) { fn init(&mut self, pcc: &PsudoCreationContext) {
self.renderer.lock().init(pcc.gl.clone(), 1_000_000); self.renderer.lock().init(pcc.gl.clone(), 100_000);
} }
fn name(&mut self) -> &str { fn name(&mut self) -> &str {
"Point Cloud" "Point Cloud"
@@ -101,7 +101,7 @@ impl Pane for PointRendererPane {
if self.points.is_empty() { if self.points.is_empty() {
let radius = 1000i32; let radius = 1000i32;
for i in 0..100000 { for i in 0..100_000 {
// let theta = (i as f32 * 0.1).sin() * std::f32::consts::PI; // let theta = (i as f32 * 0.1).sin() * std::f32::consts::PI;
// let phi = (i as f32 * 0.1).cos() * std::f32::consts::PI; // let phi = (i as f32 * 0.1).cos() * std::f32::consts::PI;
+61 -94
View File
@@ -2,12 +2,6 @@ use eframe::egui_glow;
use egui::{Color32, InputState, Rect}; use egui::{Color32, InputState, Rect};
use egui_glow::glow; use egui_glow::glow;
use glam::{Mat4, Quat, Vec3}; use glam::{Mat4, Quat, Vec3};
use pasture_core::containers::{
BorrowedBuffer, BorrowedBufferExt, InterleavedBufferMut, VectorBuffer,
};
use pasture_core::layout::attributes::{COLOR_RGB, POSITION_3D};
use pasture_core::nalgebra::Vector3;
use pasture_io::base::read_all;
use std::fs::File; use std::fs::File;
use std::io::{BufRead, BufReader}; use std::io::{BufRead, BufReader};
use std::sync::Arc; use std::sync::Arc;
@@ -471,60 +465,33 @@ impl PointRenderer {
.title("File Selection") .title("File Selection")
// .path("/home/user/Downloads") // .path("/home/user/Downloads")
.show() .show()
.expect("Could not display dialog box"); .expect("Could not display dialog box")
.expect("Could not select file");
let mut points = read_all::<VectorBuffer, _>("pointcloud.las")?;
let loaded_points: Vec<(i32, i32, i32, Color32)> = Vec::with_capacity(points.len());
let has_pos = points.point_layout().has_attribute(&POSITION_3D);
let has_color = points.point_layout().has_attribute(&COLOR_RGB);
if has_pos {
for position in points
.view_attribute::<Vector3<f64>>(&POSITION_3D)
.into_iter()
.take(10)
{
info!("({};{};{})", position.x, position.y, position.z);
}
}
if has_color {
for i in 0..points.len() {
let point = points.get_point_mut(i);
warn!("{:?}", point);
// println!("({};{};{})", color.x, position.y, position.z);
}
}
Err("".into())
// let file = File::open(path).map_err(|e| format!("Failed to open file: {}", e))?; // let file = File::open(path).map_err(|e| format!("Failed to open file: {}", e))?;
// let reader = BufReader::new(file); let file = File::open(choice)?;
// let mut lines = reader.lines(); let reader = BufReader::new(file);
let mut lines = reader.lines();
// // Parse header // Parse header
// let header = Self::parse_ply_header(&mut lines)?; let header = Self::parse_ply_header(&mut lines)?;
// // Clear existing points // Clear existing points
// self.clear(); self.clear();
// // Reserve capacity // Reserve capacity
// self.points self.points
// .as_mut() .as_mut()
// .as_mut() .as_mut()
// .expect("Not Initialised") .expect("Not Initialised")
// .reserve(header.vertex_count * 7); .reserve(header.vertex_count * 7);
// // Parse vertices based on format // Parse vertices based on format
// if header.is_binary { if header.is_binary {
// return Err("Binary PLY files not yet supported".to_string()); return Err("Binary PLY files not yet supported".into());
// } else { } else {
// self.parse_ascii_ply_data(lines, header) self.parse_ascii_ply_data(lines, header)
// } }
} }
fn parse_ply_header<B: BufRead>(lines: &mut std::io::Lines<B>) -> Result<PlyHeader, String> { fn parse_ply_header<B: BufRead>(lines: &mut std::io::Lines<B>) -> Result<PlyHeader, String> {
@@ -569,54 +536,54 @@ impl PointRenderer {
}) })
} }
// fn parse_ascii_ply_data<B: BufRead>( fn parse_ascii_ply_data<B: BufRead>(
// &mut self, &mut self,
// lines: std::io::Lines<B>, lines: std::io::Lines<B>,
// header: PlyHeader, header: PlyHeader,
// ) -> Result<Vec<(i32, i32, i32, Color32)>, String> { ) -> Result<Vec<(i32, i32, i32, Color32)>, Box<dyn std::error::Error>> {
// let mut vec: Vec<(i32, i32, i32, Color32)> = Vec::new(); let mut vec: Vec<(i32, i32, i32, Color32)> = Vec::new();
// for line in lines.take(header.vertex_count) { for line in lines.take(header.vertex_count) {
// let line = line.map_err(|e| format!("Failed to read line: {}", e))?; let line = line.map_err(|e| format!("Failed to read line: {}", e))?;
// let parts: Vec<&str> = line.split_whitespace().collect(); let parts: Vec<&str> = line.split_whitespace().collect();
// if parts.len() < 3 { if parts.len() < 3 {
// return Err("Invalid vertex data".to_string()); return Err("Invalid vertex data".into());
// } }
// // Parse position // Parse position
// let x = parts[0] let x = parts[0]
// .parse::<f32>() .parse::<f32>()
// .map_err(|_| "Invalid X coordinate")?; .map_err(|_| "Invalid X coordinate")?;
// let y = parts[1] let y = parts[1]
// .parse::<f32>() .parse::<f32>()
// .map_err(|_| "Invalid Y coordinate")?; .map_err(|_| "Invalid Y coordinate")?;
// let z = parts[2] let z = parts[2]
// .parse::<f32>() .parse::<f32>()
// .map_err(|_| "Invalid Z coordinate")?; .map_err(|_| "Invalid Z coordinate")?;
// // Convert to fixed point (scale by 1000 for better precision) // Convert to fixed point (scale by 1000 for better precision)
// let x = (x * 1000.0) as i32; let x = (x * 1000.0) as i32;
// let y = (y * 1000.0) as i32; let y = (y * 1000.0) as i32;
// let z = (z * 1000.0) as i32; let z = (z * 1000.0) as i32;
// // Parse colors if present // Parse colors if present
// let color = if header.has_colors && parts.len() >= 6 { let color = if header.has_colors && parts.len() >= 6 {
// let r = parts[3].parse::<u8>().unwrap_or(255); let r = parts[3].parse::<u8>().unwrap_or(255);
// let g = parts[4].parse::<u8>().unwrap_or(255); let g = parts[4].parse::<u8>().unwrap_or(255);
// let b = parts[5].parse::<u8>().unwrap_or(255); let b = parts[5].parse::<u8>().unwrap_or(255);
// Color32::from_rgb(r, g, b) Color32::from_rgb(r, g, b)
// } else { } else {
// Color32::WHITE Color32::WHITE
// }; };
// vec.push((x, y, z, color)); vec.push((x, y, z, color));
// // self.add_point(x, y, z, color); // self.add_point(x, y, z, color);
// } }
// Ok(vec) Ok(vec)
// } }
} }
impl Drop for PointRenderer { impl Drop for PointRenderer {