Add sectional argument and edit flow for point-and-click Sweep (#5480)
* WIP: Expose the sectional argument in the Sweep command flow Fixes #5301 * A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores) * A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores) * A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores) * Working edit flow * Lint * Allow in place editing, more consistent code * A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores) * A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores) * Remove validation on non-selection arg * A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores) * Comment out bad test * Clean up for review * Hack sectional * Made selection args hidden * Fix edit issue in e2e * Clean up * Add face filtering filter for opposite and next adjacent faces * Lint * Fixme back * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 * Use updateModelingState in codemod * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 * Improve filtering readibility * Fix base test * I liked return but clippy didn't * Working tests, isolating the change to sectional sweep, don't like the api change * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 * Clean up snapshots * A snapshot a day keeps the bugs away! 📷🐛 * A snapshot a day keeps the bugs away! 📷🐛 --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
This commit is contained in:
		@ -130,6 +130,7 @@ async fn inner_extrude(
 | 
			
		||||
                sketch,
 | 
			
		||||
                id.into(),
 | 
			
		||||
                length,
 | 
			
		||||
                false,
 | 
			
		||||
                &NamedCapTags {
 | 
			
		||||
                    start: tag_start.as_ref(),
 | 
			
		||||
                    end: tag_end.as_ref(),
 | 
			
		||||
@ -154,6 +155,7 @@ pub(crate) async fn do_post_extrude<'a>(
 | 
			
		||||
    sketch: &Sketch,
 | 
			
		||||
    solid_id: ArtifactId,
 | 
			
		||||
    length: f64,
 | 
			
		||||
    sectional: bool,
 | 
			
		||||
    named_cap_tags: &'a NamedCapTags<'a>,
 | 
			
		||||
    exec_state: &mut ExecState,
 | 
			
		||||
    args: &Args,
 | 
			
		||||
@ -201,6 +203,25 @@ pub(crate) async fn do_post_extrude<'a>(
 | 
			
		||||
        vec![]
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    // Face filtering attempt in order to resolve https://github.com/KittyCAD/modeling-app/issues/5328
 | 
			
		||||
    // In case of a sectional sweep, empirically it looks that the first n faces that are yielded from the sweep
 | 
			
		||||
    // are the ones that work with GetOppositeEdge and GetNextAdjacentEdge, aka the n sides in the sweep.
 | 
			
		||||
    // So here we're figuring out that n number as yielded_sides_count here,
 | 
			
		||||
    // making sure that circle() calls count but close() don't (no length)
 | 
			
		||||
    let count_of_first_set_of_faces_if_sectional = if sectional {
 | 
			
		||||
        sketch
 | 
			
		||||
            .paths
 | 
			
		||||
            .iter()
 | 
			
		||||
            .filter(|p| {
 | 
			
		||||
                let is_circle = matches!(p, Path::Circle { .. });
 | 
			
		||||
                let has_length = p.get_base().from != p.get_base().to;
 | 
			
		||||
                is_circle || has_length
 | 
			
		||||
            })
 | 
			
		||||
            .count()
 | 
			
		||||
    } else {
 | 
			
		||||
        usize::MAX
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    for (curve_id, face_id) in face_infos
 | 
			
		||||
        .iter()
 | 
			
		||||
        .filter(|face_info| face_info.cap == ExtrusionFaceCapType::None)
 | 
			
		||||
@ -211,6 +232,7 @@ pub(crate) async fn do_post_extrude<'a>(
 | 
			
		||||
                None
 | 
			
		||||
            }
 | 
			
		||||
        })
 | 
			
		||||
        .take(count_of_first_set_of_faces_if_sectional)
 | 
			
		||||
    {
 | 
			
		||||
        // Batch these commands, because the Rust code doesn't actually care about the outcome.
 | 
			
		||||
        // So, there's no need to await them.
 | 
			
		||||
 | 
			
		||||
@ -174,6 +174,7 @@ async fn inner_loft(
 | 
			
		||||
            &sketch,
 | 
			
		||||
            id.into(),
 | 
			
		||||
            0.0,
 | 
			
		||||
            false,
 | 
			
		||||
            &super::extrude::NamedCapTags {
 | 
			
		||||
                start: tag_start.as_ref(),
 | 
			
		||||
                end: tag_end.as_ref(),
 | 
			
		||||
 | 
			
		||||
@ -299,6 +299,7 @@ async fn inner_revolve(
 | 
			
		||||
                sketch,
 | 
			
		||||
                id.into(),
 | 
			
		||||
                0.0,
 | 
			
		||||
                false,
 | 
			
		||||
                &super::extrude::NamedCapTags {
 | 
			
		||||
                    start: tag_start.as_ref(),
 | 
			
		||||
                    end: tag_end.as_ref(),
 | 
			
		||||
 | 
			
		||||
@ -183,6 +183,7 @@ async fn inner_sweep(
 | 
			
		||||
                sketch,
 | 
			
		||||
                id.into(),
 | 
			
		||||
                0.0,
 | 
			
		||||
                sectional.unwrap_or(false),
 | 
			
		||||
                &super::extrude::NamedCapTags {
 | 
			
		||||
                    start: tag_start.as_ref(),
 | 
			
		||||
                    end: tag_end.as_ref(),
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user