diff --git a/src/wasm-lib/Cargo.lock b/src/wasm-lib/Cargo.lock index dc5c396b0..904a03433 100644 --- a/src/wasm-lib/Cargo.lock +++ b/src/wasm-lib/Cargo.lock @@ -121,9 +121,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" +checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7" dependencies = [ "backtrace", ] @@ -176,7 +176,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -187,7 +187,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -204,7 +204,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -401,9 +401,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", @@ -474,7 +474,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -665,7 +665,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -676,7 +676,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -737,7 +737,7 @@ dependencies = [ "rustfmt-wrapper", "serde", "serde_tokenstream", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -748,7 +748,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -791,7 +791,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -829,7 +829,7 @@ checksum = "a1ab991c1362ac86c61ab6f556cff143daa22e5a15e4e189df818b2fd19fe65b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -990,7 +990,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -1086,7 +1086,7 @@ dependencies = [ "inflections", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -1112,7 +1112,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http 1.1.0", + "http 1.2.0", "indexmap 2.7.0", "slab", "tokio", @@ -1215,9 +1215,9 @@ dependencies = [ [[package]] name = "http" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", @@ -1242,7 +1242,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.1.0", + "http 1.2.0", ] [[package]] @@ -1253,7 +1253,7 @@ checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "pin-project-lite", ] @@ -1303,7 +1303,7 @@ dependencies = [ "futures-channel", "futures-util", "h2", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "httparse", "itoa", @@ -1320,7 +1320,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", - "http 1.1.0", + "http 1.2.0", "hyper 1.4.1", "hyper-util", "rustls", @@ -1340,7 +1340,7 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "hyper 1.4.1", "pin-project-lite", @@ -1494,7 +1494,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -1705,7 +1705,7 @@ dependencies = [ "git_rev", "gltf-json", "handlebars", - "http 1.1.0", + "http 1.2.0", "iai", "image", "indexmap 2.7.0", @@ -1792,7 +1792,7 @@ dependencies = [ "data-encoding", "format_serde_error", "futures", - "http 1.1.0", + "http 1.2.0", "itertools 0.13.0", "log", "mime_guess", @@ -1818,9 +1818,8 @@ dependencies = [ [[package]] name = "kittycad-modeling-cmds" -version = "0.2.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b77259b37acafa360d98af27431ac394bc8899eeed7037513832ddbee856811" +version = "0.2.80" +source = "git+https://github.com/KittyCAD/modeling-api.git?branch=mike/multi-extrude-experimentation2#e2dd07d25f76b87f69eccdbd9f6b526da02f226c" dependencies = [ "anyhow", "chrono", @@ -1828,7 +1827,7 @@ dependencies = [ "enum-iterator", "enum-iterator-derive", "euler", - "http 1.1.0", + "http 1.2.0", "kittycad-modeling-cmds-macros", "kittycad-unit-conversion-derive", "measurements", @@ -1844,24 +1843,22 @@ dependencies = [ [[package]] name = "kittycad-modeling-cmds-macros" version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb9bb1a594541b878adc1c8dcb821328774bf7aa09b65b104a206b1291a5235c" +source = "git+https://github.com/KittyCAD/modeling-api.git?branch=mike/multi-extrude-experimentation2#e2dd07d25f76b87f69eccdbd9f6b526da02f226c" dependencies = [ "kittycad-modeling-cmds-macros-impl", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "kittycad-modeling-cmds-macros-impl" version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6607507a8a0e4273b943179f0a3ef8e90712308d1d3095246040c29cfdbf985b" +source = "git+https://github.com/KittyCAD/modeling-api.git?branch=mike/multi-extrude-experimentation2#e2dd07d25f76b87f69eccdbd9f6b526da02f226c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2011,7 +2008,7 @@ checksum = "dcf09caffaac8068c346b6df2a7fc27a177fd20b39421a39ce0a211bde679a6c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2310,7 +2307,7 @@ dependencies = [ "regex", "regex-syntax 0.8.5", "structmeta", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2324,7 +2321,7 @@ dependencies = [ "regex", "regex-syntax 0.8.5", "structmeta", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2364,7 +2361,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2422,7 +2419,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2552,14 +2549,14 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] name = "proc-macro2" -version = "1.0.89" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" dependencies = [ "unicode-ident", ] @@ -2611,7 +2608,7 @@ dependencies = [ "proc-macro2", "pyo3-macros-backend", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2624,7 +2621,7 @@ dependencies = [ "proc-macro2", "pyo3-build-config", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -2862,7 +2859,7 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", "hyper 1.4.1", @@ -2904,7 +2901,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f67ad7fdf5c0a015763fcd164bee294b13fb7b6f89f1b55961d40f00c3e32d6b" dependencies = [ "async-trait", - "http 1.1.0", + "http 1.2.0", "reqwest", "reqwest-middleware", ] @@ -2917,7 +2914,7 @@ checksum = "d1ccd3b55e711f91a9885a2fa6fbbb2e39db1776420b062efc058c6410f7e5e3" dependencies = [ "anyhow", "async-trait", - "http 1.1.0", + "http 1.2.0", "reqwest", "serde", "thiserror 1.0.68", @@ -2934,7 +2931,7 @@ dependencies = [ "async-trait", "futures", "getrandom", - "http 1.1.0", + "http 1.2.0", "hyper 1.4.1", "parking_lot 0.11.2", "reqwest", @@ -2955,7 +2952,7 @@ dependencies = [ "anyhow", "async-trait", "getrandom", - "http 1.1.0", + "http 1.2.0", "matchit", "opentelemetry", "reqwest", @@ -3159,7 +3156,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3199,9 +3196,9 @@ checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" -version = "1.0.215" +version = "1.0.216" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" dependencies = [ "serde_derive", ] @@ -3217,13 +3214,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.215" +version = "1.0.216" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3234,7 +3231,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3258,7 +3255,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3279,7 +3276,7 @@ dependencies = [ "proc-macro2", "quote", "serde", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3428,7 +3425,7 @@ dependencies = [ "proc-macro2", "quote", "structmeta-derive", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3439,7 +3436,7 @@ checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3461,7 +3458,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3504,9 +3501,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.87" +version = "2.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d" +checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" dependencies = [ "proc-macro2", "quote", @@ -3530,7 +3527,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3638,7 +3635,7 @@ checksum = "a7c61ec9a6f64d2793d8a45faba21efbe3ced62a886d44c36a009b2b519b4c7e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3649,7 +3646,7 @@ checksum = "22efd00f33f93fa62848a7cab956c3d38c8d43095efda1decfc2b3a5dc0b8972" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3761,7 +3758,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3903,7 +3900,7 @@ checksum = "84fd902d4e0b9a4b27f2f440108dc034e1758628a9b702f8ec61ad66355422fa" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -3931,7 +3928,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -4014,7 +4011,7 @@ checksum = "0ea0b99e8ec44abd6f94a18f28f7934437809dd062820797c52401298116f70e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "termcolor", ] @@ -4027,7 +4024,7 @@ dependencies = [ "byteorder", "bytes", "data-encoding", - "http 1.1.0", + "http 1.2.0", "httparse", "log", "rand 0.8.5", @@ -4193,7 +4190,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -4255,7 +4252,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "wasm-bindgen-shared", ] @@ -4290,7 +4287,7 @@ checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4671,7 +4668,7 @@ checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "synstructure", ] @@ -4693,7 +4690,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] @@ -4713,7 +4710,7 @@ checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", "synstructure", ] @@ -4742,7 +4739,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.87", + "syn 2.0.90", ] [[package]] diff --git a/src/wasm-lib/Cargo.toml b/src/wasm-lib/Cargo.toml index 23c9d7b36..7da7df88b 100644 --- a/src/wasm-lib/Cargo.toml +++ b/src/wasm-lib/Cargo.toml @@ -76,7 +76,7 @@ members = [ [workspace.dependencies] http = "1" kittycad = { version = "0.3.28", default-features = false, features = ["js", "requests"] } -kittycad-modeling-cmds = { version = "0.2.77", features = ["websocket"] } +kittycad-modeling-cmds = { version = "0.2.80", features = ["websocket"] } [workspace.lints.clippy] assertions_on_result_states = "warn" @@ -93,6 +93,7 @@ name = "modify" path = "tests/modify/main.rs" # Example: how to point modeling-api at a different repo (e.g. a branch or a local clone) -#[patch.crates-io] +[patch.crates-io] +kittycad-modeling-cmds = { git = "https://github.com/KittyCAD/modeling-api.git", branch = "mike/multi-extrude-experimentation2" } #kittycad-modeling-cmds = { path = "../../../modeling-api/modeling-cmds" } #kittycad-modeling-session = { path = "../../../modeling-api/modeling-session" } diff --git a/src/wasm-lib/kcl/src/std/extrude.rs b/src/wasm-lib/kcl/src/std/extrude.rs index 42f886206..d7c3de65c 100644 --- a/src/wasm-lib/kcl/src/std/extrude.rs +++ b/src/wasm-lib/kcl/src/std/extrude.rs @@ -1,6 +1,6 @@ //! Functions related to extruding. -use std::collections::HashMap; +use std::collections::{ HashMap, HashSet }; use anyhow::Result; use derive_docs::stdlib; @@ -87,43 +87,102 @@ async fn inner_extrude( // Extrude the element(s). let sketches: Vec = sketch_set.into(); + let sketch_on_ids: HashSet<_> = sketches.iter().map(|sketch| sketch.on.id()).collect(); + let consistent_sketch_base = sketch_on_ids.len() == 1; + let mut solids = Vec::new(); - for sketch in &sketches { - // Before we extrude, we need to enable the sketch mode. - // We do this here in case extrude is called out of order. + + if !consistent_sketch_base || sketches.len() == 1 { + for sketch in &sketches { + // Before we extrude, we need to enable the sketch mode. + // We do this here in case extrude is called out of order. + args.batch_modeling_cmd( + exec_state.id_generator.next_uuid(), + ModelingCmd::from(mcmd::EnableSketchMode { + animated: false, + ortho: false, + entity_id: sketch.on.id(), + adjust_camera: false, + planar_normal: if let SketchSurface::Plane(plane) = &sketch.on { + // We pass in the normal for the plane here. + Some(plane.z_axis.into()) + } else { + None + }, + }), + ) + .await?; + + args.batch_modeling_cmd( + id, + ModelingCmd::from(mcmd::Extrude { + target: sketch.id.into(), + distance: LengthUnit(length), + faces: None, + }), + ) + .await?; + + // Disable the sketch mode. + args.batch_modeling_cmd( + exec_state.id_generator.next_uuid(), + ModelingCmd::SketchModeDisable(mcmd::SketchModeDisable {}), + ) + .await?; + + //everything inside this call is EXTREMELY inefficient - mike + //we should be doing this on demand as we need it, not upfront + solids.push(do_post_extrude(sketch.clone(), length, exec_state, args.clone()).await?); + } + } else { args.batch_modeling_cmd( exec_state.id_generator.next_uuid(), ModelingCmd::from(mcmd::EnableSketchMode { animated: false, ortho: false, - entity_id: sketch.on.id(), + entity_id: *sketch_on_ids.iter().next().unwrap(), //someone else can make this better adjust_camera: false, - planar_normal: if let SketchSurface::Plane(plane) = &sketch.on { - // We pass in the normal for the plane here. - Some(plane.z_axis.into()) - } else { - None - }, + planar_normal: None, //TODO - handle this too }), ) .await?; + let sketch_ids: Vec<_> = sketches.iter().map(|sketch| sketch.id).collect(); + args.batch_modeling_cmd( id, - ModelingCmd::from(mcmd::Extrude { - target: sketch.id.into(), + ModelingCmd::from(mcmd::MultiExtrude { + target_ids: sketch_ids, distance: LengthUnit(length), }), ) - .await?; + .await?; - // Disable the sketch mode. args.batch_modeling_cmd( exec_state.id_generator.next_uuid(), ModelingCmd::SketchModeDisable(mcmd::SketchModeDisable {}), ) .await?; - solids.push(do_post_extrude(sketch.clone(), length, exec_state, args.clone()).await?); + + //HACK - not doing this for patterns. see above - mike + //for sketch in &sketches { + //solids.push(do_post_extrude(sketch.clone(), length, exec_state, args.clone()).await?); + //} + + /*let solid = Box::new(Solid { + // Ok so you would think that the id would be the id of the solid, + // that we passed in to the function, but it's actually the id of the + // sketch. + id: sketch.id, + value: new_value, + meta: sketch.meta.clone(), + sketch, + height: length, + start_cap_id, + end_cap_id, + edge_cuts: vec![], + }); + solids.push(solid);*/ } Ok(solids.into())