diff --git a/apps/solidcraft-cli/tests/action_matrix.rs b/apps/solidcraft-cli/tests/action_matrix.rs index 5b47da80..b6bc925e 100644 --- a/apps/solidcraft-cli/tests/action_matrix.rs +++ b/apps/solidcraft-cli/tests/action_matrix.rs @@ -995,7 +995,6 @@ fn a_fillet_or_chamfer_on_one_edge_ending_at_a_cylinder() { } #[test] -#[ignore = "fails until #557 is fixed"] fn a_sketch_on_a_patterned_boss_top() { let mut c: Vec = rectangle(json!("XY"), [0., 0.], [60., 20.]).into(); c.extend([ diff --git a/apps/solidcraft-cli/tests/design_corpus.rs b/apps/solidcraft-cli/tests/design_corpus.rs index 125331fb..9e57b768 100644 --- a/apps/solidcraft-cli/tests/design_corpus.rs +++ b/apps/solidcraft-cli/tests/design_corpus.rs @@ -137,18 +137,12 @@ fn body_names_saved_before_exact_history_keep_their_pieces() { /// ignored test below that checks its faces; a listed plane whose face attaches fails the main /// check until it is removed from here. type Planes = &'static [([f64; 3], f64)]; -const NO_ATTACHMENT_YET: [(&str, &str, Option, u32); 9] = [ - ("issue-489-stacked-join", "Body1", Some(&[([1., 0., 0.], 35.), ([-1., 0., 0.], 35.)]), 491), - ("issue-489-stacked-join", "Body1", Some(&[([0., 0., 1.], 30.)]), 492), - ("m0-revolve-primitives", "Body2", Some(&[([-FRAC_1_SQRT_2, 0., FRAC_1_SQRT_2], -21. * FRAC_1_SQRT_2)]), 493), - ("split-body-pieces", "Body1", Some(&[([0., FRAC_1_SQRT_2, FRAC_1_SQRT_2], 38.5 * FRAC_1_SQRT_2), ([0., -1., 0.], -18.)]), 493), - ("split-body-pieces", "Body1 (1)", Some(&[([0., 1., 0.], 12.)]), 493), +const NO_ATTACHMENT_YET: [(&str, &str, Option, u32); 4] = [ ("m0-revolve-primitives", "Body1", None, 494), ("naming-split-pieces", "Body1", None, 494), ("modern-plastic", "Body1", None, 494), ("modern-sheet-metal", "Body1", None, 495), ]; -use std::f64::consts::FRAC_1_SQRT_2; /// The issue a face is listed under, and whether it is listed by its plane (not as every face). fn known_without_attachment(design: &str, body: &str, normal: [f64; 3], distance: f64) -> Option<(u32, bool)> { @@ -267,24 +261,6 @@ fn known_faces_attach(issue: u32) { assert!(problems.is_empty(), "{}", problems.join("\n")); } -#[test] -#[ignore = "fails until #491 is fixed"] -fn a_side_face_join_merged_from_two_extrudes_takes_an_attached_sketch() { - known_faces_attach(491); -} - -#[test] -#[ignore = "fails until #492 is fixed"] -fn a_face_split_into_pieces_by_a_later_feature_takes_an_attached_sketch() { - known_faces_attach(492); -} - -#[test] -#[ignore = "fails until #493 is fixed"] -fn cut_walls_and_chamfer_faces_take_an_attached_sketch() { - known_faces_attach(493); -} - #[test] #[ignore = "fails until #494 is fixed"] fn faces_after_revolve_offset_face_and_boss_take_an_attached_sketch() { diff --git a/crates/doc/src/config_certificates.rs b/crates/doc/src/config_certificates.rs index 1176e251..3a54b3c9 100644 --- a/crates/doc/src/config_certificates.rs +++ b/crates/doc/src/config_certificates.rs @@ -179,6 +179,13 @@ pub enum FaceCertificate { source: Box, inner: bool, }, + /// A flat face known by its exact history name (the target's `name`, without piece + /// numbers): what the kernel's face history says it came from, followed through every + /// feature since (a cut wall `F5:side:l1`, a chamfer `F7:blend:…`, a pattern copy + /// `F4:top@F6.2`, a face a join merged from two features). Used where no construction + /// certificate above names the face uniquely. Its plane is the face's exact current plane in + /// the frame [`lineage_frame`] gives it. See docs/face-attachments.md. + Lineage, } impl FaceCertificate { @@ -210,8 +217,9 @@ impl FaceCertificate { && payload_sha256.bytes().all(|byte| byte.is_ascii_digit() || (b'a'..=b'f').contains(&byte)) } Self::ShellPlanar { source_producer, source, .. } => { - *source_producer != 0 && !matches!(source.as_ref(), Self::ShellPlanar { .. }) && source.validate().is_ok() + *source_producer != 0 && !matches!(source.as_ref(), Self::ShellPlanar { .. } | Self::Lineage) && source.validate().is_ok() } + Self::Lineage => true, }; if valid { Ok(()) } else { Err(DocError::Invalid("invalid face source certificate".into())) } } @@ -258,13 +266,16 @@ pub(crate) fn validate_certificate_json(value: &serde_json::Value) -> Result<()> .and_then(serde_json::Value::as_str) .is_some_and(|digest| digest.len() == 64 && digest.bytes().all(|byte| byte.is_ascii_digit() || (b'a'..=b'f').contains(&byte))) } + Some("lineage") => fields.len() == 1, Some("shell_planar") => { fields.len() == 4 && fields.keys().all(|key| ["kind", "source_producer", "source", "inner"].contains(&key.as_str())) && nonzero("source_producer") && fields.get("inner").and_then(serde_json::Value::as_bool).is_some() && fields.get("source").is_some_and(|source| { - source.as_object().is_some_and(|source| source.get("kind").and_then(serde_json::Value::as_str) != Some("shell_planar")) + source + .as_object() + .is_some_and(|source| !matches!(source.get("kind").and_then(serde_json::Value::as_str), Some("shell_planar" | "lineage"))) && validate_certificate_json(source).is_ok() }) } @@ -286,6 +297,7 @@ pub(crate) fn shell_certificate_role(source: &FaceCertificate, inner: bool) -> R FaceCertificate::ExtrudeCap { high, outer, holes, .. } => format!("cap:{}:{}", if *high { "high" } else { "low" }, cap_key(outer, holes)), FaceCertificate::Imported { payload_sha256, item, face } => format!("import:{payload_sha256}:{item}:{face}"), FaceCertificate::ShellPlanar { .. } => return Err(DocError::Invalid("nested shell source certificates are unsupported".into())), + FaceCertificate::Lineage => return Err(DocError::Invalid("a shell's source needs a construction certificate".into())), }; Ok(format!("shell:{}:{role}", if inner { "inner" } else { "outer" })) } @@ -551,6 +563,153 @@ impl Document { } } +/// The frame a [`FaceCertificate::Lineage`] face's plane is given, from the plane alone (never +/// from how a kernel parametrizes the surface, so it survives rebuilds and kernel changes): its +/// origin where the body's definition origin projects onto the plane, its x axis the first of +/// the definition's X, Y and Z axes that is not steep to the plane (`|cos| < 0.6`; one always +/// is), projected onto it. A face that moves along its normal keeps the frame where it was; +/// one that moves within its plane (a Move feature) keeps it too, as a sketch on a face does +/// in the definition's coordinates. +pub fn lineage_frame(body: &ModelBody, plane: &solidcraft_geom::Plane) -> Option { + use solidcraft_geom::Vec3; + let n = plane.normal(); + let m = &body.source_transform; + let origin = crate::apply_point(m, Vec3::ZERO); + let axis = [Vec3::X, Vec3::Y, Vec3::Z].into_iter().filter_map(|a| crate::apply_vector(m, a).normalized()).find(|a| a.dot(n).abs() < 0.6)?; + let x = axis - n * axis.dot(n); + let origin = origin - n * (origin - plane.origin).dot(n); + solidcraft_geom::Plane::new(origin, x, n.cross(x)) +} + +/// Whether two exact planes are one oriented plane (pieces of one face). +fn same_oriented_plane(a: &solidcraft_geom::Plane, b: &solidcraft_geom::Plane, scale: f64) -> bool { + a.normal().dot(b.normal()) >= 1. - 1e-8 && (b.origin - a.origin).dot(a.normal()).abs() <= 1e-7 * (1. + scale) +} + +impl Document { + /// The exact plane an anchor on face `index` of `body` is measured in: the construction + /// certificate's plane, or for a [`FaceCertificate::Lineage`] face its current exact plane in + /// the [`lineage_frame`]. + pub fn anchor_face_plane(&self, body: &ModelBody, index: usize, certificate: Option<&FaceCertificate>) -> Option { + match certificate { + Some(FaceCertificate::Lineage) => body.body.planar_face(index).and_then(|plane| lineage_frame(body, &plane)), + _ => body.body.face_plane(index), + } + } + + /// A target for flat face `index` of `body` by its exact history name + /// ([`FaceCertificate::Lineage`]), when that name follows exact history, names a feature of + /// the design and finds this face (with its other pieces, all on one oriented plane). + pub(crate) fn lineage_face_target( + &self, + body: &ModelBody, + index: usize, + point: solidcraft_geom::Vec3, + ) -> Option { + let names = crate::naming::names(body); + if !names.verified(index) { + return None; + } + let name = crate::naming::strip_piece(names.faces.get(index)?).to_string(); + let origin = name.strip_prefix('F')?.split_once(':')?.0.parse::().ok()?; + let inverse = crate::mat_inverse(&body.source_transform)?; + let target = crate::config::ConfigFaceTarget { + body: body.definition_name().into(), + origin_feature: origin, + name, + point: crate::apply_point(&inverse, point), + certificate: Some(FaceCertificate::Lineage), + }; + self.configuration_face_indices(body, &target).ok()?.contains(&index).then_some(target) + } + + /// The faces of `body` an exact history name finds: those named `name` or a piece of it, else + /// (a later join merged it into another face) the face that answers to it. Every one must + /// follow exact history and lie on one oriented plane. + pub(crate) fn lineage_face_indices(&self, body: &ModelBody, name: &str) -> Result> { + let names = crate::naming::names(body); + let mut indices: Vec = + names.faces.iter().enumerate().filter(|(_, face)| crate::naming::strip_piece(face) == name).map(|(index, _)| index).collect(); + if indices.is_empty() { + indices = + names.info.iter().enumerate().filter(|(_, info)| info.aliases.iter().any(|alias| alias == name)).map(|(index, _)| index).collect(); + } + if indices.is_empty() { + return Err(DocError::Unknown(format!("face `{name}` on `{}` no longer exists", body.name))); + } + self.coplanar_pieces(body, &indices, |index| names.verified(index))?; + Ok(indices) + } + + /// Check that `indices` are pieces of one flat face: each `exact` and planar, all on one + /// oriented plane, and not split on purpose (Split Face: its pieces are separate faces, so + /// a pick on one never stands for the whole; docs/face-attachments.md). + pub(crate) fn coplanar_pieces(&self, body: &ModelBody, indices: &[usize], exact: impl Fn(usize) -> bool) -> Result<()> { + let scale = body.body.size(); + let mut first = None; + for index in indices { + if !exact(*index) { + return Err(DocError::Invalid("this face's history is not exact".into())); + } + let plane = body.body.planar_face(*index).ok_or_else(|| DocError::Invalid("attached face is not flat".into()))?; + match &first { + None => first = Some(plane), + Some(first) if same_oriented_plane(first, &plane, scale) => {} + Some(_) => return Err(DocError::Invalid("attached face pieces no longer share one oriented plane".into())), + } + } + if let (Some(plane), true) = (first, indices.len() > 1) { + let tolerance = 1e-6 * (1. + scale); + let on_plane = |line: &Vec| { + !line.is_empty() && line.iter().all(|p| (*p - plane.origin).dot(plane.normal()).abs() <= tolerance) + }; + if body.body.split_lines().is_some_and(|lines| lines.iter().any(on_plane)) { + return Err(DocError::Invalid( + "this face was split on purpose (Split Face): pick an exact face piece's own plane with fixed:true".into(), + )); + } + } + Ok(()) + } + + /// Of several faces carrying one construction certificate of feature `origin`, the pieces of + /// that feature's own face: copies a pattern or mirror made carry their seed's certificate + /// but are named as copies (`…@F.`, docs/face-attachments.md), and pieces + /// a later feature split the face into share its exact name and plane. + pub(crate) fn certified_pieces(&self, body: &ModelBody, indices: Vec, origin: u64) -> Result> { + if indices.len() < 2 { + return Ok(indices); + } + let names = crate::naming::names(body); + let own = format!("F{origin}:"); + let stem = |index: usize| names.faces.get(index).map(|name| crate::naming::strip_piece(name)); + let seed: Vec = + indices.into_iter().filter(|index| stem(*index).is_some_and(|name| name.starts_with(&own) && !name.contains('@'))).collect(); + let ambiguous = || DocError::Unknown("attached planar face certificate is missing or ambiguous".into()); + let first = seed.first().and_then(|index| stem(*index)).ok_or_else(ambiguous)?; + if seed.iter().any(|index| stem(*index) != Some(first)) { + return Err(ambiguous()); + } + // The certificate is exact; the names only tell the seed from its copies here. + self.coplanar_pieces(body, &seed, |_| true).map_err(|_| ambiguous())?; + Ok(seed) + } + + /// Of several faces carrying one certificate of feature `origin`, those that are not a + /// pattern's or mirror's copies (named `…@F.`), when any is not. + pub(crate) fn without_copies(&self, body: &ModelBody, indices: Vec) -> Vec { + if indices.len() < 2 { + return indices; + } + let names = crate::naming::names(body); + let copy = |index: &usize| names.faces.get(*index).is_some_and(|name| crate::naming::strip_piece(name).contains('@')); + if indices.iter().all(copy) { + return indices; + } + indices.into_iter().filter(|index| !copy(index)).collect() + } +} + pub(crate) fn payload_digest(payload: &str) -> String { use sha2::{Digest, Sha256}; format!("{:x}", Sha256::digest(payload.as_bytes())) diff --git a/crates/doc/src/config_styles.rs b/crates/doc/src/config_styles.rs index e02b9b53..f17250ac 100644 --- a/crates/doc/src/config_styles.rs +++ b/crates/doc/src/config_styles.rs @@ -145,6 +145,7 @@ impl Document { && self.feature(*sketch).is_some_and(|feature| matches!(&feature.kind, FeatureKind::Sketch { sketch, .. } if sketch.curves.iter().any(|candidate| candidate.id == *curve && !candidate.construction && matches!(candidate.kind, solidcraft_sketch::CurveKind::Line { .. } | solidcraft_sketch::CurveKind::Circle { .. } | solidcraft_sketch::CurveKind::Arc { .. })))) } (super::FaceCertificate::Imported { .. }, FeatureKind::Import { .. }) => role.strip_prefix("face:").is_some_and(|index| index.parse::().is_ok()), + (super::FaceCertificate::Lineage, _) => !role.is_empty(), (super::FaceCertificate::ShellPlanar { source_producer, source, inner }, FeatureKind::Shell { .. }) => { *source_producer != target.origin_feature && self.flat_certificate_producer_matches(*source_producer, source) @@ -185,6 +186,9 @@ impl Document { if body.body.is_mesh() || body.definition_name() != target.body { return Err(DocError::Invalid("configured face definition does not match".into())); } + if let Some(super::FaceCertificate::Lineage) = &target.certificate { + return self.lineage_face_indices(body, &target.name); + } if let Some(super::FaceCertificate::ShellPlanar { source_producer, source, inner }) = &target.certificate { let indices: Vec<_> = body.body.face_sources().into_iter().flatten().enumerate().filter_map(|(index, current)| { matches!(current, Some(solidcraft_kernel::FaceSource::ShellPlanar { producer: Some(producer), source: current_source, inner: current_inner, .. }) if *producer == target.origin_feature && inner == current_inner && super::flat_source_matches(source, current_source, *source_producer)).then_some(index) @@ -238,10 +242,10 @@ impl Document { matched.then_some(index) }) .collect(); - if indices.len() != 1 { + if indices.is_empty() { return Err(DocError::Unknown("attached planar face certificate is missing or ambiguous".into())); } - return Ok(indices); + return self.certified_pieces(body, indices, target.origin_feature); } if let Some(super::FaceCertificate::ExtrudeSide { sketch, curve }) = &target.certificate { let indices: Vec<_> = body.body.face_sources().into_iter().flatten().enumerate().filter_map(|(index, source)| { @@ -250,7 +254,7 @@ impl Document { if indices.is_empty() { return Err(DocError::Unknown("constructed side certificate no longer exists".into())); } - return Ok(indices); + return Ok(self.without_copies(body, indices)); } if let Some(super::FaceCertificate::Imported { payload_sha256, item, face }) = &target.certificate { let indices: Vec<_> = body.body.face_sources().into_iter().flatten().enumerate().filter_map(|(index, source)| { @@ -259,7 +263,7 @@ impl Document { if indices.is_empty() { return Err(DocError::Unknown("immutable import face certificate no longer exists".into())); } - return Ok(indices); + return Ok(self.without_copies(body, indices)); } let names = crate::naming::face_names(body); let indices: Vec = diff --git a/crates/doc/src/face_anchor.rs b/crates/doc/src/face_anchor.rs index c60d8ed5..6aee9da9 100644 --- a/crates/doc/src/face_anchor.rs +++ b/crates/doc/src/face_anchor.rs @@ -144,15 +144,30 @@ impl Document { author: u64, author_path: &[u64], ) -> Result { - let source = body + // A construction certificate that names this face alone, else its exact history name. + let certified = body .body .face_plane(index) + .ok_or_else(|| DocError::Invalid("this face has no exact planar source; choose a fixed plane instead".into())) + .and_then(|source| { + let target = self.strong_face_target(body, index, source.origin)?; + if target.certificate.is_none() { + return Err(DocError::Invalid("this face has no supported construction certificate; choose a fixed plane instead".into())); + } + let indices = self.configuration_face_indices(body, &target)?; + self.coplanar_pieces(body, &indices, |_| true)?; + Ok(target) + }); + let target = match certified { + Ok(target) => target, + Err(error) => match body.body.planar_face(index).and_then(|plane| self.lineage_face_target(body, index, plane.origin)) { + Some(target) => target, + None => return Err(error), + }, + }; + let source = self + .anchor_face_plane(body, index, target.certificate.as_ref()) .ok_or_else(|| DocError::Invalid("this face has no exact planar source; choose a fixed plane instead".into()))?; - let target = self.strong_face_target(body, index, source.origin)?; - if target.certificate.is_none() { - return Err(DocError::Invalid("this face has no supported construction certificate; choose a fixed plane instead".into())); - } - self.configuration_face_indices(body, &target)?; let mut anchor = FaceAnchor { target, component: self.model_body_component(body), @@ -178,9 +193,14 @@ impl Document { state.body(&anchor.target.body).ok_or_else(|| DocError::Unknown(format!("attached body `{}` no longer exists", anchor.target.body)))?; let indices = self.configuration_face_indices(body, &anchor.target)?; let first = indices.first().copied().ok_or_else(|| DocError::Unknown("attached face no longer exists".into()))?; - let plane = body.body.face_plane(first).ok_or_else(|| DocError::Invalid("attached face no longer has an exact planar source".into()))?; + let certificate = anchor.target.certificate.as_ref(); + let plane = self + .anchor_face_plane(body, first, certificate) + .ok_or_else(|| DocError::Invalid("attached face no longer has an exact planar source".into()))?; for index in indices.iter().skip(1) { - let other = body.body.face_plane(*index).ok_or_else(|| DocError::Invalid("attached face pieces are not exactly planar".into()))?; + let other = self + .anchor_face_plane(body, *index, certificate) + .ok_or_else(|| DocError::Invalid("attached face pieces are not exactly planar".into()))?; if plane.normal().dot(other.normal()) < 1. - 1e-8 || (other.origin - plane.origin).dot(plane.normal()).abs() > 1e-7 { return Err(DocError::Invalid("attached face pieces no longer share one oriented plane".into())); } diff --git a/crates/doc/src/format.rs b/crates/doc/src/format.rs index 4e1484f4..25afaa8c 100644 --- a/crates/doc/src/format.rs +++ b/crates/doc/src/format.rs @@ -66,6 +66,10 @@ //! A design can also keep what was hidden when it was saved (`visibility`: hidden bodies, //! occurrence placements, sketches and origin items; `browser.visibility`). A design without //! it shows everything, as it always did; a reader that ignores it loses only the hiding. +//! Sketch face anchors can name a flat face by its exact history name (a `lineage` +//! certificate: the target's `name`, e.g. a cut wall `F5:side:l1` or a pattern copy +//! `F4:top@F6.2`), where no construction certificate names it alone. Anchors with +//! construction certificates resolve as before. use serde_json::Value; diff --git a/crates/engine/src/cmd/face_tests.rs b/crates/engine/src/cmd/face_tests.rs index ed698845..43740ebf 100644 --- a/crates/engine/src/cmd/face_tests.rs +++ b/crates/engine/src/cmd/face_tests.rs @@ -136,31 +136,42 @@ fn generated_profiles_and_press_pull_convert_rotated_occurrence_picks_once() { } } +/// A 40 x 30 x 20 box whose top is split at x = 20 and its left half raised 5 by Offset Face: +/// the raised top has no construction certificate and no exact history name yet (#494). +fn raised_half(s: &mut Session, body: &str) { + run(s, "solid.box", json!({"length":40,"width":30,"height":20,"body_name":body})); + run(s, "solid.split_face", json!({"faces":[[10,15,20]],"plane":{"origin":[20,0,0],"normal":[1,0,0]}})); + run(s, "solid.offset_face", json!({"faces":[[10,15,20]],"distance":5})); +} + #[test] fn legacy_internal_capture_refuses_an_uncaptured_source_in_another_component() { let mut s = Session::default(); let component = run(&mut s, "component.create", json!({"name":"Source"})); let occurrence = component["occurrence"].as_u64().unwrap(); - run(&mut s, "solid.box", json!({"length":40,"width":30,"height":20,"body_name":"Stock"})); - // A top merged from two joined boxes has no single certified source: the legacy path. - run(&mut s, "solid.box", json!({"length":40,"width":30,"height":20,"corner":[40,0,0],"operation":"join"})); + // A face Offset Face raised has no construction certificate or exact history name yet: + // the legacy path. + raised_half(&mut s, "Stock"); run(&mut s, "component.activate", json!({"component":0})); run(&mut s, "occurrence.move", json!({"occurrence":occurrence,"translate":[30,0,0],"capture":false})); let state = s.model.state(); - let index = state + // The raised half's top. + let end = state .body("Stock") .unwrap() .body .faces(1e-4) .unwrap() - .iter() - .find(|face| face.plane_normal.is_some_and(|normal| normal.z > 0.999) && (face.centroid.z - 20.0).abs() < 1e-6) - .unwrap() - .index; + .into_iter() + .find(|face| face.plane_normal.is_some_and(|normal| normal.z > 0.999) && (face.centroid.z - 25.0).abs() < 1e-6) + .unwrap(); let before = s.doc.to_json(); - let error = - super::super::sketch::face::capture_internal(&s, &json!({"face":[35,5,20],"body":"Stock","index":index,"path":[occurrence]}), "internal") - .unwrap_err(); + let error = super::super::sketch::face::capture_internal( + &s, + &json!({"face":[40,15,25],"body":"Stock","index":end.index,"path":[occurrence]}), + "internal", + ) + .unwrap_err(); assert!(error.to_string().contains("capture the source occurrence position"), "{error}"); assert_eq!(s.doc.to_json(), before); } @@ -278,14 +289,14 @@ fn join_keeps_exact_face_attachments_from_both_operands() { } #[test] -fn join_leaves_a_face_merged_from_both_operands_without_an_attachment() { +fn join_gives_a_face_merged_from_both_operands_its_history_name() { let mut s = Session::default(); run(&mut s, "solid.box", json!({"length":20,"width":20,"height":10})); run(&mut s, "solid.box", json!({"length":20,"width":20,"height":10,"corner":[20,0,0],"operation":"join"})); - // Both boxes' tops share one support: no single construction identity owns it. - let error = s.execute("sketch.create", &json!({"plane":{"face":[10,10,10]}})).unwrap_err().to_string(); - assert!(error.contains("fixed:true"), "{error}"); - run(&mut s, "sketch.create", json!({"plane":{"face":[10,10,10],"fixed":true}})); + // Both boxes' tops share one support: no single construction certificate owns it, but its + // exact history names it (#491). + let top = run(&mut s, "sketch.create", json!({"plane":{"face":[10,10,10]}}))["sketch"].as_u64().unwrap(); + assert_eq!(face_anchor(&s, top).target.certificate, Some(solidcraft_doc::config::FaceCertificate::Lineage)); // An unshared support keeps its box role. run(&mut s, "sketch.finish", json!({})); let side = run(&mut s, "sketch.create", json!({"plane":{"face":[0,10,5]}}))["sketch"].as_u64().unwrap(); diff --git a/crates/engine/src/cmd/features.rs b/crates/engine/src/cmd/features.rs index 04c5bb22..3b60e20b 100644 --- a/crates/engine/src/cmd/features.rs +++ b/crates/engine/src/cmd/features.rs @@ -1574,6 +1574,9 @@ mod offset_edit_guard_tests; #[path = "offset_plane_face_tests.rs"] mod offset_plane_face_tests; +#[cfg(test)] +#[path = "lineage_face_tests.rs"] +mod lineage_face_tests; #[cfg(test)] #[path = "stacked_face_tests.rs"] mod stacked_face_tests; diff --git a/crates/engine/src/cmd/lineage_face_tests.rs b/crates/engine/src/cmd/lineage_face_tests.rs new file mode 100644 index 00000000..4bf797c2 --- /dev/null +++ b/crates/engine/src/cmd/lineage_face_tests.rs @@ -0,0 +1,166 @@ +//! Sketches on flat faces that no construction certificate names: a Cut's walls and floor, a +//! chamfer, a pattern's copies, a side a Join merged from two features, the pieces of a split +//! face (#491, #492, #493, #557). They attach by the face's exact history name +//! (`FaceCertificate::Lineage`), follow the face through parameter edits and survive a save. +#![allow(clippy::unwrap_used, clippy::expect_used, clippy::panic)] +use crate::Session; +use serde_json::{Value, json}; +use solidcraft_doc::FaceAttachmentStatus; +use solidcraft_doc::config::FaceCertificate; + +fn run(s: &mut Session, command: &str, params: Value) -> Value { + s.execute(command, ¶ms).unwrap_or_else(|e| panic!("{command} {params}: {e}")) +} + +fn sketch_on(s: &mut Session, at: [f64; 3], name: &str) { + run(s, "sketch.create", json!({"plane": {"face": at}, "name": name})); + run(s, "sketch.finish", json!({})); +} + +fn status(s: &Session, sketch: &str) -> FaceAttachmentStatus { + let id = s.doc.find_feature(sketch).map(|f| f.id).unwrap(); + s.placed_document().sketch_face_attachment(id, &s.model) +} + +fn healthy(s: &Session, sketch: &str) -> (solidcraft_geom::Plane, Option) { + match status(s, sketch) { + FaceAttachmentStatus::Healthy { plane, target, .. } => (plane, target.certificate), + other => panic!("{sketch}: {other:?}"), + } +} + +fn no_errors(s: &Session) { + assert!(s.model.results.iter().all(|r| r.error.is_none()), "{:?}", s.model.results); +} + +fn reopened(s: &Session) -> Session { + let mut t = Session::new(solidcraft_doc::Document::from_json(&s.doc.to_json()).unwrap()); + t.refresh(); + no_errors(&t); + t +} + +/// A 40 x 30 x 10 block with a slot cut 5 deep across it from x = `slot_x` (a parameter), 10 wide. +fn slotted_block() -> Session { + let mut s = Session::default(); + run(&mut s, "sketch.create", json!({"plane": "XY", "name": "S"})); + run(&mut s, "sketch.rectangle.two_point", json!({"p0": [0, 0], "p1": [40, 30]})); + run(&mut s, "sketch.finish", json!({})); + run(&mut s, "solid.extrude", json!({"distance": 10, "name": "Block"})); + run(&mut s, "parameters.add", json!({"name": "slot_x", "expression": "15 mm"})); + run(&mut s, "sketch.create", json!({"plane": "XY", "name": "SlotSketch"})); + run(&mut s, "sketch.rectangle.two_point", json!({"p0": [15, -5], "p1": [25, 35]})); + run(&mut s, "sketch.dimension", json!({"entities": ["origin", "p1"], "type": "horizontal", "value": "slot_x"})); + run(&mut s, "sketch.dimension", json!({"entities": ["l1"], "value": "10 mm"})); + run(&mut s, "sketch.finish", json!({})); + run(&mut s, "solid.extrude", json!({"sketch": "SlotSketch", "distance": 12, "start_offset": 5, "operation": "cut", "name": "Slot"})); + no_errors(&s); + s +} + +#[test] +fn a_cut_wall_and_floor_take_a_sketch_that_follows_the_cut() { + let mut s = slotted_block(); + sketch_on(&mut s, [15., 15., 7.5], "Wall"); + sketch_on(&mut s, [20., 15., 5.], "Floor"); + let (wall, certificate) = healthy(&s, "Wall"); + assert_eq!(certificate, Some(FaceCertificate::Lineage)); + // The wall faces into the slot (+x), its frame's origin over the design origin. + assert!((wall.normal().x - 1.).abs() < 1e-9 && wall.origin.x.abs() > 14.9 && (wall.origin.x - 15.).abs() < 1e-9, "{wall:?}"); + assert!((wall.origin.y.abs() + wall.origin.z.abs()) < 1e-9, "{wall:?}"); + let (floor, _) = healthy(&s, "Floor"); + assert!((floor.normal().z - 1.).abs() < 1e-9 && (floor.origin.z - 5.).abs() < 1e-9, "{floor:?}"); + + // The slot moves: the sketch on its wall moves with it. + run(&mut s, "parameters.change", json!({"name": "slot_x", "expression": "20 mm"})); + no_errors(&s); + let (wall, _) = healthy(&s, "Wall"); + assert!((wall.origin.x - 20.).abs() < 1e-9, "{wall:?}"); + let t = reopened(&s); + assert!((healthy(&t, "Wall").0.origin.x - 20.).abs() < 1e-9); + assert!((healthy(&t, "Floor").0.origin.z - 5.).abs() < 1e-9); +} + +#[test] +fn the_pieces_of_a_split_top_take_a_sketch() { + let mut s = slotted_block(); + // The slot splits the block's top in two; each piece takes a sketch (on that face's plane). + for (name, x) in [("Left", 5.), ("Right", 35.)] { + sketch_on(&mut s, [x, 15., 10.], name); + assert!((healthy(&s, name).0.origin.z - 10.).abs() < 1e-9, "{name}"); + } + run(&mut s, "parameters.change", json!({"name": "slot_x", "expression": "20 mm"})); + no_errors(&s); + assert!((healthy(&s, "Left").0.origin.z - 10.).abs() < 1e-9); +} + +#[test] +fn a_chamfer_face_takes_a_sketch_that_follows_the_chamfer() { + let mut s = Session::default(); + run(&mut s, "parameters.add", json!({"name": "bevel", "expression": "3 mm"})); + run(&mut s, "solid.box", json!({"length": 40, "width": 30, "height": 10, "name": "Base"})); + run(&mut s, "solid.chamfer", json!({"edges": [[40, 15, 10]], "distance": "bevel", "name": "Bevel"})); + no_errors(&s); + sketch_on(&mut s, [38.5, 15., 8.5], "OnBevel"); + let (plane, certificate) = healthy(&s, "OnBevel"); + assert_eq!(certificate, Some(FaceCertificate::Lineage)); + let n = std::f64::consts::FRAC_1_SQRT_2; + assert!((plane.normal().x - n).abs() < 1e-9 && (plane.normal().z - n).abs() < 1e-9, "{plane:?}"); + // A bigger chamfer moves the face inward: the sketch goes with it. + let height = |p: &solidcraft_geom::Plane| (p.origin - solidcraft_geom::Vec3::new(40., 0., 10.)).dot(p.normal()); + assert!((height(&plane) + 3. * n).abs() < 1e-9, "{plane:?}"); + run(&mut s, "parameters.change", json!({"name": "bevel", "expression": "5 mm"})); + no_errors(&s); + assert!((height(&healthy(&s, "OnBevel").0) + 5. * n).abs() < 1e-9); + healthy(&reopened(&s), "OnBevel"); +} + +/// A plate with a boss patterned 3 times along x, `pitch` apart. +fn patterned_bosses(sketch_on_seed_first: bool) -> Session { + let mut s = Session::default(); + run(&mut s, "parameters.add", json!({"name": "pitch", "expression": "20 mm"})); + run(&mut s, "sketch.create", json!({"plane": "XY"})); + run(&mut s, "sketch.rectangle.two_point", json!({"p0": [0, 0], "p1": [80, 20]})); + run(&mut s, "sketch.finish", json!({})); + run(&mut s, "solid.extrude", json!({"distance": 5})); + run(&mut s, "sketch.create", json!({"plane": {"face": [40, 10, 5]}})); + run(&mut s, "sketch.circle.center", json!({"center": [10, 10], "radius": 4})); + run(&mut s, "sketch.finish", json!({})); + run(&mut s, "solid.extrude", json!({"distance": 6, "operation": "join", "name": "Boss"})); + if sketch_on_seed_first { + sketch_on(&mut s, [10., 10., 11.], "Seed"); + } + run(&mut s, "solid.pattern.rectangular", json!({"features": ["Boss"], "dir1": [1, 0, 0], "count1": 3, "spacing1": "pitch", "name": "Row"})); + no_errors(&s); + s +} + +#[test] +fn each_patterned_copy_takes_its_own_sketch() { + let mut s = patterned_bosses(true); + // A sketch made on the seed before the pattern keeps its construction certificate: the + // copies carry it too, but are named as copies. + assert!(matches!(healthy(&s, "Seed").1, Some(FaceCertificate::ExtrudeCap { .. }))); + for (name, x) in [("First", 10.), ("Middle", 30.), ("Last", 50.)] { + sketch_on(&mut s, [x, 10., 11.], name); + assert!((healthy(&s, name).0.origin.z - 11.).abs() < 1e-9, "{name}"); + } + run(&mut s, "parameters.change", json!({"name": "pitch", "expression": "25 mm"})); + no_errors(&s); + for name in ["Seed", "First", "Middle", "Last"] { + healthy(&s, name); + } + let t = reopened(&s); + for name in ["Seed", "Middle", "Last"] { + healthy(&t, name); + } +} + +#[test] +fn a_piece_of_a_face_split_on_purpose_still_needs_a_fixed_plane() { + let mut s = Session::default(); + run(&mut s, "solid.box", json!({"length": 10, "width": 10, "height": 10, "body_name": "Modified"})); + run(&mut s, "solid.split_face", json!({"body": "Modified", "faces": [[5, 5, 10]], "plane": {"origin": [5, 0, 0], "normal": [1, 0, 0]}})); + let error = s.execute("sketch.create", &json!({"plane": {"face": [2.5, 5, 10]}})).unwrap_err().to_string(); + assert!(error.contains("fixed:true"), "{error}"); +} diff --git a/crates/engine/src/cmd/sketch_face_tests.rs b/crates/engine/src/cmd/sketch_face_tests.rs index 6eda25f0..ba684c29 100644 --- a/crates/engine/src/cmd/sketch_face_tests.rs +++ b/crates/engine/src/cmd/sketch_face_tests.rs @@ -75,9 +75,10 @@ fn explicit_rebind_preserves_geometry_dimensions_context_and_one_undo() { #[test] fn unsupported_face_has_explicit_fixed_alternative_and_no_live_projection() { let mut s = Session::default(); - run(&mut s, "solid.box", json!({"length":10,"width":10,"height":10,"body_name":"Base"})); - // The tops of two joined boxes merge into one face that no single construction owns. - run(&mut s, "solid.box", json!({"length":10,"width":10,"height":10,"corner":[10,0,0],"operation":"join"})); + // A top half Offset Face raised: no construction certificate and no exact history name yet. + run(&mut s, "solid.box", json!({"length":40,"width":30,"height":20,"body_name":"Base"})); + run(&mut s, "solid.split_face", json!({"faces":[[10,15,20]],"plane":{"origin":[20,0,0],"normal":[1,0,0]}})); + run(&mut s, "solid.offset_face", json!({"faces":[[10,15,20]],"distance":5})); let mut pick = top_pick(&s, "Base"); let before = s.doc.to_json(); let error = s.execute("sketch.create", &json!({"plane":pick})).unwrap_err(); diff --git a/crates/engine/src/cmd/stacked_face_tests.rs b/crates/engine/src/cmd/stacked_face_tests.rs index c9b708dd..673d62da 100644 --- a/crates/engine/src/cmd/stacked_face_tests.rs +++ b/crates/engine/src/cmd/stacked_face_tests.rs @@ -67,20 +67,13 @@ fn sketch_and_offset_plane_on_the_top_face_of_a_face_sketched_extrude() { assert!((plane.origin.z - 20.).abs() < 1e-9 && (plane.normal().z - 1.).abs() < 1e-9, "{case}: {plane:?}"); s.execute("construct.plane.offset", &json!({"base": {"face": top}, "offset": 5, "name": "Above"})) .unwrap_or_else(|e| panic!("{case}: {e}")); - // The second extrude's flat side is an exact source too, unless a full-face - // Join merged it with the first extrude's side: that face belongs to neither, - // so it offers the explicit fixed plane with a readable reason. + // The second extrude's flat side attaches too, also where a full-face Join + // merged it with the first extrude's side (#491): that face is known by its + // exact history name. if !circle { let side = if full { [40., 20., 15.] } else { [30., 20., 15.] }; - let params = json!({"plane": {"face": side}, "name": "Side"}); - if full && operation == "join" { - let error = s.execute("sketch.create", ¶ms).unwrap_err().to_string(); - assert!(error.contains("merged") && error.contains("fixed:true"), "{case}: {error}"); - run(&mut s, "sketch.create", json!({"plane": {"face": side, "fixed": true}, "name": "Side"})); - } else { - s.execute("sketch.create", ¶ms).unwrap_or_else(|e| panic!("{case} side: {e}")); - assert!((healthy(&s, "Side").normal().x - 1.).abs() < 1e-9, "{case}"); - } + s.execute("sketch.create", &json!({"plane": {"face": side}, "name": "Side"})).unwrap_or_else(|e| panic!("{case} side: {e}")); + assert!((healthy(&s, "Side").normal().x - 1.).abs() < 1e-9, "{case}"); run(&mut s, "sketch.finish", json!({})); } s.refresh(); diff --git a/crates/engine/src/tests.rs b/crates/engine/src/tests.rs index 9e0b42d3..ecff5abc 100644 --- a/crates/engine/src/tests.rs +++ b/crates/engine/src/tests.rs @@ -830,12 +830,16 @@ fn step_open_then_model_on_it() { run(&mut s, "solid.hole", json!({"position": at(28.0, 15.0, 20.0), "diameter": 6})); want -= PI * 9.0 * 20.0; assert!(rel(volume(&mut s), want) < 5e-4, "{} vs {want}", volume(&mut s)); - // Modified imported faces no longer have an immutable construction certificate. - // The public attachment refuses them; the user can explicitly choose a fixed plane. - let before_fixed = s.doc.to_json(); - assert!(s.execute("sketch.create", &json!({"plane":{"face":at(10.0,15.0,20.0)}})).is_err()); - assert_eq!(s.doc.to_json(), before_fixed); - run(&mut s, "sketch.create", json!({"plane": {"face": at(10.0, 15.0, 20.0), "fixed": true}})); + // Modified imported faces no longer have an immutable construction certificate; the top + // attaches by its exact history name instead. + let top = run(&mut s, "sketch.create", json!({"plane": {"face": at(10.0, 15.0, 20.0)}}))["sketch"].as_u64().unwrap(); + assert!(matches!( + s.placed_document().sketch_face_attachment(top, &s.model), + doc::FaceAttachmentStatus::Healthy { + target: doc::config::ConfigFaceTarget { certificate: Some(doc::config::FaceCertificate::Lineage), .. }, + .. + } + )); let c = [x0 + 10.0, y0 + 15.0]; // Sketch coordinates on the face are relative to the model origin projected onto it. run(&mut s, "sketch.rectangle.two_point", json!({"p0": [c[0] - 4.0, c[1] - 4.0], "p1": [c[0] + 4.0, c[1] + 4.0]})); diff --git a/crates/kernel/src/history.rs b/crates/kernel/src/history.rs index 89f91a43..938283b3 100644 --- a/crates/kernel/src/history.rs +++ b/crates/kernel/src/history.rs @@ -6,6 +6,14 @@ //! the operation's own operand list, which each operation documents. A body made by an //! operation carries its history (see [`Body::history`]); [`History::substitute`] composes an //! operation with one that made one of its operands. +//! +//! This is what persistent names and face attachments stand on. The document composes each +//! feature's histories into face names (`F5:side:l1`, `F7:blend:…`, `F4:top@F6.2`, see +//! `solidcraft_doc::history_names`); a name is exact only when every operation on the way +//! reported its history. A flat face with an exact name takes a durable sketch attachment by that +//! name (`FaceCertificate::Lineage`, docs/face-attachments.md), so an operation that records its +//! history here gives its faces attachments with no attachment code of its own. An operation +//! that can't should leave its result without one (`Body::without_history`), never guess. use std::collections::BTreeSet; diff --git a/crates/kernel/src/prism.rs b/crates/kernel/src/prism.rs index 00967908..7d428aa4 100644 --- a/crates/kernel/src/prism.rs +++ b/crates/kernel/src/prism.rs @@ -1225,7 +1225,12 @@ fn sew_sections( for (r, piece) in crate::extrude(plane, section, levels[first], levels[end])?.into_iter().enumerate() { remaining_faces = remaining_faces.checked_sub(piece.face_count()).ok_or_else(|| KernelError::Failed("prism output face budget".into()))?; - pieces.push((piece, lineage::Built::Extruded { section: tagged.region(r), lo: levels[first], hi: levels[end] })); + // Each slab's section, as read there: the same outline, but its walls + // read beside whichever operand is there. + let layers = + (first..end).map(|k| Some((slabs.get(k)?.region(r), *levels.get(k)?, *levels.get(k + 1)?))).collect::>>(); + let layers = layers.ok_or_else(|| KernelError::Failed("missing prism section".into()))?; + pieces.push((piece, lineage::Built::Extruded { layers })); } } else { let (piece, built) = sew_connected_sections(plane, d, &levels[first..=end], &slabs[first..end], tol, coalesce, history) @@ -1507,6 +1512,13 @@ fn simple_prism_indexed(a: &Body, b: &Body, op: BoolOp, [ia, ib]: [&LazyIndex; 2 if (u - x).abs() > tol * (1.0 + u) || (u - y).abs() > tol * (1.0 + u) { return sew_stack(&plane, d, &pa, &pb, tol, &history).map(|r| r.map(Some)); } + // One outline end to end: also slab by slab, so the history follows each operand's + // walls (one longer prism, whose walls are made from both). + if let Some(Ok(body)) = sew_stack(&plane, d, &pa, &pb, tol, &history) + && body.history().is_some() + { + return Some(Ok(Some(body))); + } (pa.lo.min(pb.lo), pa.hi.max(pb.hi)) } else { (pa.lo, pa.hi) @@ -1518,7 +1530,7 @@ fn simple_prism_indexed(a: &Body, b: &Body, op: BoolOp, [ia, ib]: [&LazyIndex; 2 }; // Each body over its region. let mut pieces: Vec<(Body, lineage::Built)> = - bodies.into_iter().enumerate().map(|(r, b)| (b, lineage::Built::Extruded { section: section.region(r), lo, hi })).collect(); + bodies.into_iter().enumerate().map(|(r, b)| (b, lineage::Built::Extruded { layers: vec![(section.region(r), lo, hi)] })).collect(); let last = pieces.pop()?; if !pieces.is_empty() { // Several pieces: one body of several lumps (the last first). diff --git a/crates/kernel/src/prism_lineage.rs b/crates/kernel/src/prism_lineage.rs index f82cd5f1..b1b5e2f0 100644 --- a/crates/kernel/src/prism_lineage.rs +++ b/crates/kernel/src/prism_lineage.rs @@ -59,8 +59,11 @@ pub(super) struct Context<'a> { /// How one piece of the result was built. pub(super) enum Built { - /// One body of `crate::extrude` of the section's one region between levels `lo` and `hi`. - Extruded { section: Section, lo: f64, hi: f64 }, + /// One body of `crate::extrude` of a section's one region through `layers`: successive + /// slabs (the section as read in each, between its two levels), bottom first, all of one + /// outline. Several where operands stacked end to end share an outline (one wall then lies + /// over each operand's wall in turn, and is made from all of them). + Extruded { layers: Vec<(Section, f64, f64)> }, /// Sewn (`sew_connected_sections`) from these faces, the sewing saying which each face of /// the piece was built from (`None`: it could not). Sewn { specs: Vec, faces: Option> }, @@ -111,10 +114,11 @@ impl Spec { } } -/// A face of a piece: the wall over a segment with this tag between two levels, or a cap. +/// A face of an extruded piece: a wall or a cap. #[derive(Clone, Copy)] enum Kind { - Wall(Tag, f64, f64), + /// The wall over this segment of the section. + Wall(usize), Cap(usize), } @@ -139,7 +143,7 @@ impl<'a> Context<'a> { let mut edges = HashMap::new(); for (body, built) in pieces { let (f, e) = match built { - Built::Extruded { section, lo, hi } => self.extruded(caps, body, section, *lo, *hi)?, + Built::Extruded { layers } => self.extruded(caps, body, layers)?, Built::Sewn { specs, faces } => self.sewn(caps, body, specs, faces.as_deref()?)?, Built::Traced => { let h = body.history()?; @@ -331,28 +335,35 @@ impl<'a> Context<'a> { } } - /// Faces and edges of a piece `crate::extrude` built from a section of one region. Its - /// history says which faces are walls over which segment (numbered over the region's - /// loops in order) and which are its caps; the start cap's wires run over the segments in - /// loop order (as the extrude builds them), so the vertex after each wire edge is where one - /// segment runs into the next, or splits. + /// Faces and edges of a piece `crate::extrude` built from a section of one region through + /// `layers` (see [`Built::Extruded`]). Its history says which faces are walls over which + /// segment (numbered over the region's loops in order) and which are its caps; the start + /// cap's wires run over the segments in loop order (as the extrude builds them), so the + /// vertex after each wire edge is where one segment runs into the next, or splits. A wall + /// through several layers is made from the wall each layer's segment was read beside, and + /// an edge between two walls from the operand edges there in each layer. #[allow(clippy::type_complexity)] fn extruded( &self, caps: &[Cap], body: &Body, - section: &Section, - lo: f64, - hi: f64, + layers: &[(Section, f64, f64)], ) -> Option<(Vec<(BTreeSet, bool)>, HashMap>)> { let h = body.history()?; - let tags = section.segments().1; - let tops = [self.cap_origins(caps, section, lo, false), self.cap_origins(caps, section, hi, true)]; + let ((first, lo, _), (last, _, hi)) = (layers.first()?, layers.last()?); + let (lo, hi) = (*lo, *hi); + let tags: Vec> = layers.iter().map(|(section, ..)| section.segments().1).collect(); + let count = tags.first()?.len(); + if tags.iter().any(|t| t.len() != count) { + return None; + } + let tag = |layer: usize, segment: usize| tags.get(layer).and_then(|t| t.get(segment)).copied(); + let tops = [self.cap_origins(caps, first, lo, false), self.cap_origins(caps, last, hi, true)]; let kinds: Vec = h .faces .iter() .map(|f| match f.origins.as_slice() { - [FaceOrigin::Profile { segment }] => Some(Kind::Wall(*tags.get(*segment)?, lo, hi)), + [FaceOrigin::Profile { segment }] => (*segment < count).then_some(Kind::Wall(*segment)), [FaceOrigin::Cap { end }] => Some(Kind::Cap(usize::from(*end))), _ => None, }) @@ -360,7 +371,14 @@ impl<'a> Context<'a> { let faces = kinds .iter() .map(|k| match *k { - Kind::Wall(t, lo, hi) => Some((std::iter::once(Self::wall(t)?).collect(), self.whole(caps, t, lo, hi))), + Kind::Wall(segment) => { + let walls = (0..layers.len()).map(|layer| Self::wall(tag(layer, segment)?)).collect::>>()?; + let whole = match layers { + [(_, lo, hi)] => self.whole(caps, tag(0, segment)?, *lo, *hi), + _ => false, + }; + Some((walls, whole)) + } Kind::Cap(end) => Some(tops.get(end).filter(|o| !o.is_empty())?.clone()).map(|o| (o, false)), }) .collect::>>()?; @@ -374,7 +392,9 @@ impl<'a> Context<'a> { }) }; let start = kinds.iter().position(|k| matches!(k, Kind::Cap(0)))?; - let mut junctions: HashMap = HashMap::new(); + // At each vertex of the start cap: the segment running into it, the one running out, + // and whether that is one segment the extrude split there. + let mut junctions: HashMap = HashMap::new(); for w in body.solid.face_iter().nth(start)?.absolute_boundaries() { let es: Vec = w.edge_iter().cloned().collect(); let segs: Vec = es.iter().map(segment_of).collect::>()?; @@ -383,20 +403,27 @@ impl<'a> Context<'a> { } for (k, e) in es.iter().enumerate() { let (s, next) = (*segs.get(k)?, *segs.get((k + 1) % segs.len())?); - let (t, u) = (*tags.get(s)?, *tags.get(next)?); - // A segment the extrude split in two runs on through the vertex between. - let pair = if s != next || k + 1 == segs.len() { (t, u) } else { (Tag { end: None, ..t }, Tag { start: None, ..t }) }; - junctions.insert(e.back().id(), pair); + junctions.insert(e.back().id(), (s, next, s == next && k + 1 != segs.len())); } } let mut origins = HashMap::new(); for (e, fs) in edges.iter().zip(&bounds) { let [f, g] = fs.as_slice() else { return None }; let o = match (kinds.get(*f)?, kinds.get(*g)?) { - (Kind::Wall(t, ..), Kind::Cap(end)) | (Kind::Cap(end), Kind::Wall(t, ..)) => self.cap_edge(*t, tops.get(*end)?)?, + (Kind::Wall(segment), Kind::Cap(end)) | (Kind::Cap(end), Kind::Wall(segment)) => { + let layer = if *end == 0 { 0 } else { layers.len() - 1 }; + self.cap_edge(tag(layer, *segment)?, tops.get(*end)?)? + } (Kind::Wall(..), Kind::Wall(..)) => { - let (t1, t2) = [e.absolute_front().id(), e.absolute_back().id()].iter().find_map(|v| junctions.get(v))?; - self.junction(*t1, *t2, lo, hi)? + let (s, next, split) = *[e.absolute_front().id(), e.absolute_back().id()].iter().find_map(|v| junctions.get(v))?; + let mut o = BTreeSet::new(); + for (layer, (_, lo, hi)) in layers.iter().enumerate() { + let (t, u) = (tag(layer, s)?, tag(layer, next)?); + // A segment the extrude split in two runs on through the vertex between. + let (t, u) = if split { (Tag { end: None, ..t }, Tag { start: None, ..t }) } else { (t, u) }; + o.extend(self.junction(t, u, *lo, *hi)?); + } + o.into_iter().collect() } _ => return None, }; diff --git a/docs/action-matrix.md b/docs/action-matrix.md index 0228bce7..8c9811c1 100644 --- a/docs/action-matrix.md +++ b/docs/action-matrix.md @@ -263,10 +263,10 @@ make a legacy face sketch there). | 2 | | A helix edge projected along its axis is a point (expected) | `edge.project` 2 | 1 | oracle/50-sweep-tight-bend `Bend/F3:side:c1#1\|F3:side:c1#2~2` | Where the face history stands (`crates/kernel/src/history.rs`, [face attachments](face-attachments.md)): -a face takes an attached sketch only when the body carries an exact source certificate for it. -Extrude caps and sides, boxes, shells' inner walls, STEP faces and sheet metal panels have one, -and booleans, fillets and shells pass untouched faces' sources through. Everything that makes or -reshapes faces without recording one (cut walls, holes, chamfers, revolves, lofts, sweeps, drafts, -tapers, splits, intersects, shell rims, pattern and mirror copies, sheet metal rims) leaves faces -that refuse a sketch, and press-pull and extrude-from-face then fall back to a legacy face sketch -that is found again by a point. Together they are the largest group of failures. +a flat face takes an attached sketch when the body carries an exact source certificate for it +(extrude caps and sides, boxes, shells' inner walls, STEP faces, sheet metal panels), or else +when its persistent name follows exact history (a `lineage` certificate): cut walls and floors, +chamfers, pattern and mirror copies, sides a Join merged, and pieces of a split face. What still +refuses a sketch is what makes faces without recording their history (revolves in some cases, +Offset Face, the plastic features, lofts, sweeps, drafts, tapers, shell rims, sheet metal rims): +press-pull and extrude-from-face then fall back to a legacy face sketch found again by a point. diff --git a/docs/face-attachments.md b/docs/face-attachments.md index 074a6882..b7166f3a 100644 --- a/docs/face-attachments.md +++ b/docs/face-attachments.md @@ -13,12 +13,28 @@ profile's cap. A profile drawn over a face sketch's projected boundary (a rectan traced over the whole face, or a strip whose sides lie on the face's edges) is identified by the drawn curves: where a drawn curve and a projected one cover the same edge, the drawn curve is the source. Two drawn curves, or two projections, over one edge remain ambiguous. Curved surfaces cannot host a planar sketch through this workflow. -Edited surfaces without retained construction provenance, ambiguous sources, and unsupported -generators require an explicit fixed plane instead. A face that a Join merged from two features' coplanar -faces belongs to neither, so it also needs a fixed plane. The error says why, and the Create -Sketch dialog then offers **Use fixed plane**, which places the sketch on that face's current -plane without following later changes. A nearby or parallel face is never used -to repair a new attachment automatically. + +Every other flat face is attached by its exact history name (a `lineage` certificate) when it +has one: the persistent name the kernel's face history gives it, which says what made the face +and follows it through every later feature. That covers a Cut's walls and floor +(`F5:side:l1`, `F5:top`), a chamfer face (`F7:blend:…`), each copy a pattern or mirror makes +(`F4:top@F6.2`: the seed's face and the copy's instance), a side wall a Join merged from two +features (named after the first, answering to the other), and the pieces a later feature split +a face into (all pieces of one name on one oriented plane are that face). A lineage face's +plane is its current exact plane, measured in a frame that depends on the plane alone: its +origin where the definition origin projects onto it, its x axis the first of the definition's +X, Y and Z axes not steep to it (`|cos| < 0.6`), projected. The construction certificates +above still come first; a lineage certificate is used where none names the face alone. Copies +carry their seed's construction certificate, so a sketch attached to the seed before it was +patterned keeps resolving to the seed: of the faces carrying one certificate, the producing +feature's own face is the one whose name is not a copy's. + +Faces whose history is not exact (Offset Face, the plastic features, sheet metal rims, faces a +feature rebuilt without reporting its history), ambiguous sources, and the pieces of a face +split on purpose with Split Face (each piece is its own face) require an explicit fixed plane +instead. The error says why, and the Create Sketch dialog then offers **Use fixed plane**, +which places the sketch on that face's current plane without following later changes. A +nearby or parallel face is never used to repair a new attachment automatically. The flat faces of a sheet metal body are the exception: they have no construction certificate, so a sketch on one attaches to its panel by name (`sheet:::`) @@ -58,7 +74,9 @@ A missing author path also requires explicit repair. Reattachment and creation c pending positions only on the involved source and author paths. Failed commands restore those pending positions; undo restores the previous attachment and placement state. -File format 11 introduced these optional attachments, which format 12 also preserves. Existing designs with face references +File format 11 introduced these optional attachments, which format 12 also preserves. Format 16 +adds the `lineage` certificate (older readers ask for an update rather than meeting an unknown +kind); anchors saved with construction certificates resolve as before. Existing designs with face references without an attachment retain their legacy geometry and lookup behavior when opened; they are not silently upgraded. Redefining such a sketch onto a supported selected face creates the stronger attachment. Unsupported legacy geometry can instead be retained on an explicit diff --git a/tests/action_matrix/baseline.json b/tests/action_matrix/baseline.json index 25f51a8a..ae4adc9e 100644 --- a/tests/action_matrix/baseline.json +++ b/tests/action_matrix/baseline.json @@ -146,7 +146,7 @@ "Body1/F2:side:l1|F2:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", "Body1/F2:side:l1|F2:start": "edge.axis edge.axis+edit edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:side:l1|F2:top#[F2:side:l1,F4:side:l5]": "edge.axis edge.axis+edit edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F2:side:l2": "face.angle_plane face.angle_plane+edit face.draft_neutral !face.extrude face.hole face.hole+edit face.midplane !face.offset_plane !face.press_pull face.shell face.shell+edit !face.sketch", + "Body1/F2:side:l2": "face.angle_plane face.angle_plane+edit face.draft_neutral face.extrude face.hole face.hole+edit face.midplane face.offset_plane face.press_pull face.shell face.shell+edit face.sketch", "Body1/F2:side:l2|F2:side:l3": "edge.axis edge.chamfer edge.chamfer+edit edge.fillet edge.fillet+edit edge.normal_plane edge.normal_plane+edit edge.project", "Body1/F2:side:l2|F2:start": "edge.axis edge.chamfer edge.chamfer+edit edge.fillet edge.fillet+edit edge.normal_plane edge.project", "Body1/F2:side:l2|F2:top#[F2:side:l1,F4:side:l5]": "edge.axis edge.chamfer edge.fillet edge.fillet+edit edge.normal_plane edge.project", @@ -158,7 +158,7 @@ "Body1/F2:side:l3|F2:side:l4": "edge.axis edge.chamfer edge.chamfer+edit edge.fillet edge.normal_plane edge.project", "Body1/F2:side:l3|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:side:l3|F2:top#[F2:side:l3,F4:side:l7]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F2:side:l4": "face.angle_plane face.angle_plane+edit face.draft_neutral !face.extrude face.hole face.hole+edit !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F2:side:l4": "face.angle_plane face.angle_plane+edit face.draft_neutral face.extrude face.hole face.hole+edit face.offset_plane face.press_pull face.shell face.sketch", "Body1/F2:side:l4|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:side:l4|F2:top#[F2:side:l1,F4:side:l5]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:side:l4|F2:top#[F2:side:l3,F4:side:l7]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -166,9 +166,9 @@ "Body1/F2:side:l4|F4:side:l7": "edge.axis edge.chamfer edge.fillet edge.fillet+edit edge.normal_plane edge.normal_plane+edit edge.project", "Body1/F2:side:l4|F4:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:start": "face.angle_plane face.draft_neutral face.draft_neutral+edit face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", - "Body1/F2:top#[F2:side:l1,F4:side:l5]": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F2:top#[F2:side:l1,F4:side:l5]": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1/F2:top#[F2:side:l1,F4:side:l5]|F4:side:l5": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project edge.project+edit", - "Body1/F2:top#[F2:side:l3,F4:side:l7]": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F2:top#[F2:side:l3,F4:side:l7]": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F2:top#[F2:side:l3,F4:side:l7]|F4:side:l7": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project edge.project+edit", "Body1/F4:side:l5": "face.angle_plane face.draft_neutral face.draft_neutral+edit face.extrude face.hole face.midplane face.offset_plane face.press_pull face.press_pull+edit face.shell face.sketch", "Body1/F4:side:l5|F4:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -324,7 +324,7 @@ "design": "load" }, "corpus/m0-revolve-primitives": { - "Body1/F2:end": "face.angle_plane !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F2:end": "face.angle_plane face.extrude !face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1/F2:end|F2:side:l1#[F2:end]": "edge.axis edge.chamfer !edge.fillet edge.normal_plane edge.project", "Body1/F2:end|F2:side:l2#[F2:end]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:end|F2:side:l3#[F2:end]": "edge.axis edge.chamfer !edge.fillet edge.normal_plane edge.project", @@ -355,7 +355,7 @@ "Body1/F2:side:l4#[F2:end]": "curved.axis curved.tangent_plane", "Body1/F2:side:l4#[F2:start]": "curved.axis curved.tangent_plane", "Body1/F2:side:l4#[F2:start]|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F2:start": "face.angle_plane !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F2:start": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1/body": "body.copy body.mirror body.move body.pattern", "Body1/v[F2:end & F2:side:l1#[F2:end] & F2:side:l2#[F2:end]]": "vertex.plane_three_points vertex.point", "Body1/v[F2:end & F2:side:l1#[F2:end] & F2:side:l4#[F2:end]]": "vertex.plane_three_points vertex.point", @@ -400,7 +400,7 @@ "Body2/F3:-z|F4:side#2": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Body2/F4:side#1": "curved.axis curved.tangent_plane", "Body2/F4:side#2": "curved.axis curved.tangent_plane", - "Body2/F6:blend:F3:+z|F3:-x": "face.angle_plane !face.draft_neutral !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body2/F6:blend:F3:+z|F3:-x": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body2/body": "body.copy body.mirror body.move body.pattern", "Body2/v[F3:+x & F3:+y & F3:+z]": "vertex.plane_three_points vertex.point", "Body2/v[F3:+x & F3:+y & F3:-z]": "vertex.plane_three_points vertex.point", @@ -859,7 +859,7 @@ "design": "load" }, "corpus/naming-split-pieces": { - "Body1/F2:side:l1": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F2:side:l1": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F2:side:l1|F2:side:l2": "edge.axis !edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:side:l1|F2:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:side:l1|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -870,11 +870,11 @@ "Body1/F2:side:l1|F4:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:side:l1|F5:blend:F2:side:l2|F2:top#[F2:side:l2,F4:side:l2]": "!edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:side:l1|F6:blend:F2:side:l4|F2:top#[F2:side:l4,F4:side:l4]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F2:side:l2": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F2:side:l2": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F2:side:l2|F2:side:l3": "edge.axis !edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:side:l2|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:side:l2|F5:blend:F2:side:l2|F2:top#[F2:side:l2,F4:side:l2]": "edge.axis edge.normal_plane edge.project", - "Body1/F2:side:l3": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F2:side:l3": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1/F2:side:l3|F2:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:side:l3|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:side:l3|F2:top#[F2:side:l2,F4:side:l2]": "edge.axis !edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -884,23 +884,23 @@ "Body1/F2:side:l3|F4:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:side:l3|F5:blend:F2:side:l2|F2:top#[F2:side:l2,F4:side:l2]": "!edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:side:l3|F6:blend:F2:side:l4|F2:top#[F2:side:l4,F4:side:l4]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F2:side:l4": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F2:side:l4": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F2:side:l4|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:side:l4|F6:blend:F2:side:l4|F2:top#[F2:side:l4,F4:side:l4]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F2:start": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F2:start": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F2:top#[F2:side:l2,F4:side:l2]": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", "Body1/F2:top#[F2:side:l2,F4:side:l2]|F4:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:top#[F2:side:l2,F4:side:l2]|F5:blend:F2:side:l2|F2:top#[F2:side:l2,F4:side:l2]": "edge.axis edge.normal_plane edge.project", "Body1/F2:top#[F2:side:l4,F4:side:l4]": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", "Body1/F2:top#[F2:side:l4,F4:side:l4]|F4:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:top#[F2:side:l4,F4:side:l4]|F6:blend:F2:side:l4|F2:top#[F2:side:l4,F4:side:l4]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F4:side:l2": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F4:side:l2": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F4:side:l2|F4:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F4:side:l4": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F4:side:l4": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1/F4:side:l4|F4:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F4:top": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F4:top": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1/F5:blend:F2:side:l2|F2:top#[F2:side:l2,F4:side:l2]": "curved.axis curved.tangent_plane", - "Body1/F6:blend:F2:side:l4|F2:top#[F2:side:l4,F4:side:l4]": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F6:blend:F2:side:l4|F2:top#[F2:side:l4,F4:side:l4]": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1/body": "body.copy body.mirror body.move body.pattern", "Body1/v[F2:side:l1 & F2:side:l2 & F2:start]": "vertex.plane_three_points vertex.point", "Body1/v[F2:side:l1 & F2:side:l2 & F5:blend:F2:side:l2|F2:top#[F2:side:l2,F4:side:l2]]": "vertex.plane_three_points vertex.point", @@ -945,7 +945,7 @@ "Body1 (1)/F2:top#[F2:side:l1,F4:side:l1]": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1 (1)/F2:top#[F2:side:l1,F4:side:l1]|F4:side:l1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1 (1)/F2:top#[F2:side:l1,F4:side:l1]|F5:blend:F2:side:l1|F2:top#[F2:side:l1,F4:side:l1]": "edge.axis edge.normal_plane edge.project", - "Body1 (1)/F4:side:l1": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1 (1)/F4:side:l1": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1 (1)/F5:blend:F2:side:l1|F2:top#[F2:side:l1,F4:side:l1]": "curved.axis curved.tangent_plane", "Body1 (1)/body": "body.copy body.mirror body.move body.pattern", "Body1 (1)/v[F2:side:l1 & F2:side:l2#[F2:side:l1,F4:side:l1] & F2:start#[F2:side:l1,F4:side:l1]]": "vertex.plane_three_points vertex.point", @@ -978,8 +978,8 @@ "Body1/F2:top#[F2:side:l3,F4:side:l3]": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1/F2:top#[F2:side:l3,F4:side:l3]|F4:side:l3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:top#[F2:side:l3,F4:side:l3]|F6:blend:F2:side:l3|F2:top#[F2:side:l3,F4:side:l3]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F4:side:l3": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", - "Body1/F6:blend:F2:side:l3|F2:top#[F2:side:l3,F4:side:l3]": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F4:side:l3": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", + "Body1/F6:blend:F2:side:l3|F2:top#[F2:side:l3,F4:side:l3]": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1/body": "body.copy body.mirror body.move body.pattern", "Body1/v[F2:side:l2#[F2:side:l3,F4:side:l3] & F2:side:l3 & F2:start#[F2:side:l3,F4:side:l3]]": "vertex.plane_three_points vertex.point", "Body1/v[F2:side:l2#[F2:side:l3,F4:side:l3] & F2:side:l3 & F6:blend:F2:side:l3|F2:top#[F2:side:l3,F4:side:l3]]": "vertex.plane_three_points vertex.point", @@ -1084,7 +1084,7 @@ "Enclosure/F2:start|F3:blend:F2:side:l1|F2:side:l4": "edge.chamfer edge.chamfer+edit edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", "Enclosure/F2:start|F3:blend:F2:side:l2|F2:side:l3": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Enclosure/F2:start|F3:blend:F2:side:l3|F2:side:l4": "edge.chamfer edge.chamfer+edit edge.fillet edge.normal_plane edge.project", - "Enclosure/F2:top": "face.angle_plane face.angle_plane+edit !face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Enclosure/F2:top": "face.angle_plane face.angle_plane+edit !face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Enclosure/F2:top|F3:blend:F2:side:l1|F2:side:l2": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Enclosure/F2:top|F3:blend:F2:side:l1|F2:side:l4": "edge.chamfer edge.fillet edge.normal_plane edge.project edge.project+edit", "Enclosure/F2:top|F3:blend:F2:side:l2|F2:side:l3": "edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -1186,14 +1186,14 @@ "Enclosure/F4:inner:F3:blend:F2:side:l1|F2:side:l4": "curved.axis curved.tangent_plane", "Enclosure/F4:inner:F3:blend:F2:side:l2|F2:side:l3": "curved.axis curved.tangent_plane", "Enclosure/F4:inner:F3:blend:F2:side:l3|F2:side:l4": "curved.axis curved.tangent_plane", - "Enclosure/F6:side:l1": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Enclosure/F6:side:l1": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Enclosure/F6:side:l1|F6:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", "Enclosure/F6:side:l1|F6:side:l4": "edge.axis edge.chamfer edge.fillet edge.fillet+edit edge.normal_plane edge.project", - "Enclosure/F6:side:l2": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Enclosure/F6:side:l2": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Enclosure/F6:side:l2|F6:side:l3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Enclosure/F6:side:l3": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Enclosure/F6:side:l3": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Enclosure/F6:side:l3|F6:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", - "Enclosure/F6:side:l4": "face.angle_plane face.angle_plane+edit !face.draft_neutral !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Enclosure/F6:side:l4": "face.angle_plane face.angle_plane+edit !face.draft_neutral face.extrude !face.hole face.offset_plane face.press_pull face.shell face.sketch", "Enclosure/F7:face:18": "curved.axis curved.tangent_plane", "Enclosure/F7:face:18|F7:face:24": "edge.chamfer edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", "Enclosure/F7:face:19": "curved.axis curved.tangent_plane", @@ -1345,43 +1345,43 @@ "design": "load" }, "demo/pi-case": { - "Body1/F11:side:l5": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F11:side:l5": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F11:side:l5|F11:side:l6": "edge.axis edge.axis+edit edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F11:side:l5|F11:side:l8": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F11:side:l5|F2:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project edge.project+edit", "Body1/F11:side:l5|F4:inner:F2:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F11:side:l6": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F11:side:l6": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F11:side:l6|F11:side:l7": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F11:side:l6|F2:side:l2~1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F11:side:l6|F2:side:l2~2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F11:side:l6|F4:inner:F2:side:l2~1": "edge.axis edge.chamfer edge.chamfer+edit edge.fillet edge.normal_plane edge.project", "Body1/F11:side:l6|F4:inner:F2:side:l2~2": "edge.axis edge.chamfer edge.chamfer+edit edge.fillet edge.normal_plane edge.project", - "Body1/F11:side:l7": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.hole+edit face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F11:side:l7": "face.angle_plane !face.draft_neutral face.extrude face.hole face.hole+edit face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F11:side:l7|F11:side:l8": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F11:side:l7|F2:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project edge.project+edit", "Body1/F11:side:l7|F4:inner:F2:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F11:side:l8": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F11:side:l8": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F11:side:l8|F2:side:l2~1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", "Body1/F11:side:l8|F2:side:l2~2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", "Body1/F11:side:l8|F4:inner:F2:side:l2~1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F11:side:l8|F4:inner:F2:side:l2~2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F13:side:l5": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "Body1/F13:side:l5@F14.1": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.hole+edit face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F13:side:l5": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "Body1/F13:side:l5@F14.1": "face.angle_plane !face.draft_neutral face.extrude face.hole !face.hole+edit face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F13:side:l5@F14.1|F13:side:l6@F14.1": "edge.axis edge.axis+edit edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l5@F14.1|F13:side:l8@F14.1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l5@F14.1|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l5@F14.1|F4:inner:F2:start#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F6:side:c1,F6:side:c1@F7.1,F6:side:c1@F7.2,F6:side:c1@F7.3]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", - "Body1/F13:side:l5@F14.2": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F13:side:l5@F14.2": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F13:side:l5@F14.2|F13:side:l6@F14.2": "edge.axis edge.axis+edit edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l5@F14.2|F13:side:l8@F14.2": "edge.axis edge.axis+edit edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l5@F14.2|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l5@F14.2|F4:inner:F2:start#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F6:side:c1,F6:side:c1@F7.1,F6:side:c1@F7.2,F6:side:c1@F7.3]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project edge.project+edit", - "Body1/F13:side:l5@F14.3": "face.angle_plane face.angle_plane+edit !face.draft_neutral !face.extrude !face.hole face.midplane face.midplane+edit !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F13:side:l5@F14.3": "face.angle_plane face.angle_plane+edit !face.draft_neutral face.extrude !face.hole face.midplane face.midplane+edit face.offset_plane face.press_pull face.shell face.sketch", "Body1/F13:side:l5@F14.3|F13:side:l6@F14.3": "edge.axis edge.axis+edit edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l5@F14.3|F13:side:l8@F14.3": "edge.axis edge.axis+edit edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l5@F14.3|F2:start": "edge.axis edge.chamfer edge.chamfer+edit edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l5@F14.3|F4:inner:F2:start#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F6:side:c1,F6:side:c1@F7.1,F6:side:c1@F7.2,F6:side:c1@F7.3]": "edge.axis edge.chamfer edge.fillet edge.fillet+edit edge.normal_plane edge.project", - "Body1/F13:side:l5@F14.4": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F13:side:l5@F14.4": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F13:side:l5@F14.4|F13:side:l6@F14.4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l5@F14.4|F13:side:l8@F14.4": "edge.axis edge.axis+edit edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l5@F14.4|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -1390,57 +1390,57 @@ "Body1/F13:side:l5|F13:side:l8": "edge.axis edge.axis+edit edge.chamfer edge.fillet edge.normal_plane edge.project edge.project+edit", "Body1/F13:side:l5|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l5|F4:inner:F2:start#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F6:side:c1,F6:side:c1@F7.1,F6:side:c1@F7.2,F6:side:c1@F7.3]": "edge.axis edge.chamfer edge.fillet edge.fillet+edit edge.normal_plane edge.normal_plane+edit edge.project", - "Body1/F13:side:l6": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "Body1/F13:side:l6@F14.1": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F13:side:l6": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "Body1/F13:side:l6@F14.1": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F13:side:l6@F14.1|F13:side:l7@F14.1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l6@F14.1|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project edge.project+edit", "Body1/F13:side:l6@F14.1|F4:inner:F2:start#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F6:side:c1,F6:side:c1@F7.1,F6:side:c1@F7.2,F6:side:c1@F7.3]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F13:side:l6@F14.2": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.midplane face.midplane+edit !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F13:side:l6@F14.2": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.midplane face.midplane+edit face.offset_plane face.press_pull face.shell face.sketch", "Body1/F13:side:l6@F14.2|F13:side:l7@F14.2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l6@F14.2|F2:start": "edge.axis edge.chamfer edge.chamfer+edit edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", "Body1/F13:side:l6@F14.2|F4:inner:F2:start#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F6:side:c1,F6:side:c1@F7.1,F6:side:c1@F7.2,F6:side:c1@F7.3]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F13:side:l6@F14.3": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F13:side:l6@F14.3": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F13:side:l6@F14.3|F13:side:l7@F14.3": "edge.axis edge.axis+edit edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l6@F14.3|F2:start": "edge.axis edge.axis+edit edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l6@F14.3|F4:inner:F2:start#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F6:side:c1,F6:side:c1@F7.1,F6:side:c1@F7.2,F6:side:c1@F7.3]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F13:side:l6@F14.4": "face.angle_plane face.angle_plane+edit !face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell face.shell+edit !face.sketch", + "Body1/F13:side:l6@F14.4": "face.angle_plane face.angle_plane+edit !face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.shell+edit face.sketch", "Body1/F13:side:l6@F14.4|F13:side:l7@F14.4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l6@F14.4|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", "Body1/F13:side:l6@F14.4|F4:inner:F2:start#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F6:side:c1,F6:side:c1@F7.1,F6:side:c1@F7.2,F6:side:c1@F7.3]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l6|F13:side:l7": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project edge.project+edit", "Body1/F13:side:l6|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project edge.project+edit", "Body1/F13:side:l6|F4:inner:F2:start#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F6:side:c1,F6:side:c1@F7.1,F6:side:c1@F7.2,F6:side:c1@F7.3]": "edge.axis edge.axis+edit edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F13:side:l7": "face.angle_plane face.angle_plane+edit !face.draft_neutral !face.extrude face.hole face.hole+edit !face.offset_plane !face.press_pull face.shell face.shell+edit !face.sketch", - "Body1/F13:side:l7@F14.1": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.hole+edit !face.offset_plane !face.press_pull face.shell face.shell+edit !face.sketch", + "Body1/F13:side:l7": "face.angle_plane face.angle_plane+edit !face.draft_neutral face.extrude face.hole face.hole+edit face.offset_plane face.press_pull face.shell face.shell+edit face.sketch", + "Body1/F13:side:l7@F14.1": "face.angle_plane !face.draft_neutral face.extrude face.hole face.hole+edit face.offset_plane face.press_pull face.shell face.shell+edit face.sketch", "Body1/F13:side:l7@F14.1|F13:side:l8@F14.1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project edge.project+edit", "Body1/F13:side:l7@F14.1|F2:start": "edge.axis edge.chamfer edge.fillet edge.fillet+edit edge.normal_plane edge.project", "Body1/F13:side:l7@F14.1|F4:inner:F2:start#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F6:side:c1,F6:side:c1@F7.1,F6:side:c1@F7.2,F6:side:c1@F7.3]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F13:side:l7@F14.2": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F13:side:l7@F14.2": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1/F13:side:l7@F14.2|F13:side:l8@F14.2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l7@F14.2|F2:start": "edge.axis edge.axis+edit edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l7@F14.2|F4:inner:F2:start#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F6:side:c1,F6:side:c1@F7.1,F6:side:c1@F7.2,F6:side:c1@F7.3]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F13:side:l7@F14.3": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.hole+edit !face.offset_plane !face.press_pull face.shell face.shell+edit !face.sketch", + "Body1/F13:side:l7@F14.3": "face.angle_plane !face.draft_neutral face.extrude face.hole face.hole+edit face.offset_plane face.press_pull face.shell face.shell+edit face.sketch", "Body1/F13:side:l7@F14.3|F13:side:l8@F14.3": "edge.axis edge.axis+edit edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l7@F14.3|F2:start": "edge.axis edge.chamfer edge.chamfer+edit edge.fillet edge.fillet+edit edge.normal_plane edge.project", "Body1/F13:side:l7@F14.3|F4:inner:F2:start#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F6:side:c1,F6:side:c1@F7.1,F6:side:c1@F7.2,F6:side:c1@F7.3]": "edge.axis edge.chamfer edge.chamfer+edit edge.fillet edge.fillet+edit edge.normal_plane edge.project", - "Body1/F13:side:l7@F14.4": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F13:side:l7@F14.4": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1/F13:side:l7@F14.4|F13:side:l8@F14.4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project edge.project+edit", "Body1/F13:side:l7@F14.4|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project edge.project+edit", "Body1/F13:side:l7@F14.4|F4:inner:F2:start#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F6:side:c1,F6:side:c1@F7.1,F6:side:c1@F7.2,F6:side:c1@F7.3]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l7|F13:side:l8": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l7|F2:start": "edge.axis edge.chamfer edge.fillet edge.fillet+edit edge.normal_plane edge.project", "Body1/F13:side:l7|F4:inner:F2:start#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F6:side:c1,F6:side:c1@F7.1,F6:side:c1@F7.2,F6:side:c1@F7.3]": "edge.axis edge.chamfer edge.fillet edge.fillet+edit edge.normal_plane edge.normal_plane+edit edge.project", - "Body1/F13:side:l8": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "Body1/F13:side:l8@F14.1": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F13:side:l8": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "Body1/F13:side:l8@F14.1": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F13:side:l8@F14.1|F2:start": "edge.axis edge.axis+edit edge.chamfer edge.fillet edge.normal_plane edge.project edge.project+edit", "Body1/F13:side:l8@F14.1|F4:inner:F2:start#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F6:side:c1,F6:side:c1@F7.1,F6:side:c1@F7.2,F6:side:c1@F7.3]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project edge.project+edit", - "Body1/F13:side:l8@F14.2": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell face.shell+edit !face.sketch", + "Body1/F13:side:l8@F14.2": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.shell+edit face.sketch", "Body1/F13:side:l8@F14.2|F2:start": "edge.axis edge.chamfer edge.chamfer+edit edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", "Body1/F13:side:l8@F14.2|F4:inner:F2:start#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F6:side:c1,F6:side:c1@F7.1,F6:side:c1@F7.2,F6:side:c1@F7.3]": "edge.axis edge.chamfer edge.fillet edge.fillet+edit edge.normal_plane edge.project", - "Body1/F13:side:l8@F14.3": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F13:side:l8@F14.3": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F13:side:l8@F14.3|F2:start": "edge.axis edge.axis+edit edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l8@F14.3|F4:inner:F2:start#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F6:side:c1,F6:side:c1@F7.1,F6:side:c1@F7.2,F6:side:c1@F7.3]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F13:side:l8@F14.4": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F13:side:l8@F14.4": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F13:side:l8@F14.4|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", "Body1/F13:side:l8@F14.4|F4:inner:F2:start#[F4:inner:F2:side:l1,F4:inner:F2:side:l2,F4:inner:F2:side:l3,F4:inner:F2:side:l4,F4:inner:F3:blend:F2:side:l1|F2:side:l2,F4:inner:F3:blend:F2:side:l1|F2:side:l4,F4:inner:F3:blend:F2:side:l2|F2:side:l3,F4:inner:F3:blend:F2:side:l3|F2:side:l4,F6:side:c1,F6:side:c1@F7.1,F6:side:c1@F7.2,F6:side:c1@F7.3]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F13:side:l8|F2:start": "edge.axis edge.axis+edit edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -2301,7 +2301,7 @@ "Lid/F14:side:l2|F15:blend:F14:side:l1|F14:side:l2": "edge.axis edge.normal_plane edge.project edge.project+edit", "Lid/F14:side:l2|F15:blend:F14:side:l2|F14:side:l3": "edge.axis edge.axis+edit edge.normal_plane edge.project edge.project+edit", "Lid/F14:side:l2|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", - "Lid/F14:side:l3": "face.angle_plane face.angle_plane+edit !face.draft_neutral !face.extrude face.hole face.hole+edit face.midplane face.offset_plane !face.press_pull face.shell face.sketch", + "Lid/F14:side:l3": "face.angle_plane face.angle_plane+edit !face.draft_neutral face.extrude face.hole face.hole+edit face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Lid/F14:side:l3|F14:top": "edge.axis edge.chamfer edge.fillet edge.fillet+edit edge.normal_plane edge.normal_plane+edit edge.project", "Lid/F14:side:l3|F15:blend:F14:side:l2|F14:side:l3": "edge.axis edge.normal_plane edge.project", "Lid/F14:side:l3|F15:blend:F14:side:l3|F14:side:l4": "edge.axis edge.normal_plane edge.project", @@ -2311,7 +2311,7 @@ "Lid/F14:side:l4|F15:blend:F14:side:l1|F14:side:l4": "edge.axis edge.axis+edit edge.normal_plane edge.project", "Lid/F14:side:l4|F15:blend:F14:side:l3|F14:side:l4": "edge.axis edge.normal_plane edge.project", "Lid/F14:side:l4|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Lid/F14:start": "face.angle_plane face.angle_plane+edit !face.draft_neutral !face.extrude face.hole face.hole+edit face.midplane !face.offset_plane !face.press_pull face.shell face.shell+edit !face.sketch", + "Lid/F14:start": "face.angle_plane face.angle_plane+edit !face.draft_neutral !face.extrude face.hole face.hole+edit face.midplane face.offset_plane !face.press_pull face.shell face.shell+edit face.sketch", "Lid/F14:start|F18:side:a17": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Lid/F14:start|F18:side:a18": "edge.chamfer edge.chamfer+edit edge.fillet edge.normal_plane edge.project", "Lid/F14:start|F18:side:a19": "edge.chamfer edge.fillet edge.normal_plane edge.project edge.project+edit", @@ -2345,7 +2345,7 @@ "Lid/F15:blend:F14:side:l1|F14:side:l2|F2:top": "edge.chamfer edge.fillet edge.fillet+edit edge.normal_plane edge.project", "Lid/F15:blend:F14:side:l1|F14:side:l4": "curved.axis curved.tangent_plane", "Lid/F15:blend:F14:side:l1|F14:side:l4|F2:top": "edge.chamfer edge.chamfer+edit edge.fillet edge.fillet+edit edge.normal_plane edge.project", - "Lid/F15:blend:F14:side:l2|F14:side:l3": "!curved.axis curved.tangent_plane", + "Lid/F15:blend:F14:side:l2|F14:side:l3": "curved.axis curved.tangent_plane", "Lid/F15:blend:F14:side:l2|F14:side:l3|F2:top": "edge.chamfer edge.fillet edge.fillet+edit edge.normal_plane edge.project", "Lid/F15:blend:F14:side:l3|F14:side:l4": "curved.axis curved.tangent_plane", "Lid/F15:blend:F14:side:l3|F14:side:l4|F2:top": "edge.chamfer edge.chamfer+edit edge.fillet edge.fillet+edit edge.normal_plane edge.project", @@ -2397,15 +2397,15 @@ "Lid/F18:side:l16": "face.angle_plane face.angle_plane+edit !face.draft_neutral face.extrude !face.hole face.midplane face.midplane+edit face.offset_plane face.press_pull !face.shell face.sketch", "Lid/F18:side:l16|F18:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", "Lid/F18:side:l16|F2:top": "edge.axis edge.axis+edit edge.chamfer edge.fillet edge.normal_plane edge.project", - "Lid/F18:side:l17": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.offset_plane !face.press_pull !face.shell face.sketch", + "Lid/F18:side:l17": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.offset_plane !face.press_pull !face.shell face.sketch", "Lid/F18:side:l17|F18:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Lid/F18:side:l18": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.hole+edit face.offset_plane !face.press_pull !face.shell face.sketch face.sketch+edit", "Lid/F18:side:l18|F18:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", - "Lid/F18:side:l19": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.offset_plane !face.press_pull !face.shell face.sketch", + "Lid/F18:side:l19": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.offset_plane !face.press_pull !face.shell face.sketch", "Lid/F18:side:l19|F18:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Lid/F18:side:l20": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.offset_plane !face.press_pull !face.shell face.sketch", "Lid/F18:side:l20|F18:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Lid/F18:top": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.press_pull+edit !face.shell face.sketch", + "Lid/F18:top": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.press_pull+edit !face.shell face.sketch", "Lid/F20:side:ls#1": "!curved.axis curved.tangent_plane", "Lid/F20:side:ls#2": "!curved.axis curved.tangent_plane", "Lid/F20:side:ls@F21.1#1": "!curved.axis curved.tangent_plane curved.tangent_plane+edit", @@ -2414,7 +2414,7 @@ "Lid/F20:side:ls@F21.2#2": "!curved.axis curved.tangent_plane", "Lid/F20:side:ls@F21.3#1": "!curved.axis curved.tangent_plane", "Lid/F20:side:ls@F21.3#2": "!curved.axis curved.tangent_plane", - "Lid/F2:top": "face.angle_plane face.angle_plane+edit !face.draft_neutral !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Lid/F2:top": "face.angle_plane face.angle_plane+edit !face.draft_neutral !face.extrude !face.hole face.offset_plane !face.press_pull face.shell face.sketch", "Lid/body": "body.copy body.mirror body.move body.pattern body.pattern+edit", "Lid/v[F14:side:l1 & F14:top & F15:blend:F14:side:l1|F14:side:l2]": "vertex.plane_three_points vertex.point", "Lid/v[F14:side:l1 & F14:top & F15:blend:F14:side:l1|F14:side:l4]": "vertex.plane_three_points vertex.point", @@ -2575,7 +2575,7 @@ "Vase/F2:side:a1#2|F2:side:l3#2": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", "Vase/F2:side:a1#3|F2:side:l2#3": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", "Vase/F2:side:a1#3|F2:side:l3#3": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", - "Vase/F2:side:l1": "!face.extrude face.hole face.midplane !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Vase/F2:side:l1": "face.extrude face.hole face.midplane face.offset_plane face.press_pull !face.shell face.sketch", "Vase/F2:side:l1|F2:side:l2#1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Vase/F2:side:l1|F2:side:l2#2": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Vase/F2:side:l1|F2:side:l2#3": "edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -2588,7 +2588,7 @@ "Vase/F2:side:l3#2|F2:side:l4": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Vase/F2:side:l3#3": "curved.axis curved.tangent_plane", "Vase/F2:side:l3#3|F2:side:l4": "edge.chamfer edge.fillet edge.normal_plane edge.project", - "Vase/F2:side:l4": "!face.extrude face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Vase/F2:side:l4": "face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch", "Vase/body": "body.copy body.mirror body.move body.pattern", "Vase/v[F2:side:a1#1 & F2:side:a1#2 & F2:side:l2#1 & F2:side:l2#2]": "vertex.plane_three_points vertex.point", "Vase/v[F2:side:a1#1 & F2:side:a1#2 & F2:side:l3#1 & F2:side:l3#2]": "vertex.plane_three_points vertex.point", @@ -2617,8 +2617,8 @@ "Frustum/F2:side:l3|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Frustum/F2:side:l4|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Frustum/F2:side:l4|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Frustum/F2:start": "face.angle_plane !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "Frustum/F2:top": "face.angle_plane !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Frustum/F2:start": "face.angle_plane face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "Frustum/F2:top": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Frustum/body": "body.copy body.mirror body.move body.pattern", "Frustum/v[F2:side:l1 & F2:side:l2 & F2:start]": "vertex.plane_three_points vertex.point", "Frustum/v[F2:side:l1 & F2:side:l2 & F2:top]": "vertex.plane_three_points vertex.point", @@ -2785,14 +2785,14 @@ "Box/F2:top|F3:blend:F2:side:l2|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Box/F2:top|F3:blend:F2:side:l3|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Box/F2:top|F3:blend:F2:side:l4|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Box/F3:blend:F2:side:l1|F2:top": "face.angle_plane !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Box/F3:blend:F2:side:l1|F2:top": "face.angle_plane face.extrude !face.hole face.offset_plane face.press_pull face.shell face.sketch", "Box/F3:blend:F2:side:l1|F2:top|F3:blend:F2:side:l2|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Box/F3:blend:F2:side:l1|F2:top|F3:blend:F2:side:l4|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Box/F3:blend:F2:side:l2|F2:top": "face.angle_plane !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Box/F3:blend:F2:side:l2|F2:top": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Box/F3:blend:F2:side:l2|F2:top|F3:blend:F2:side:l3|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Box/F3:blend:F2:side:l3|F2:top": "face.angle_plane !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Box/F3:blend:F2:side:l3|F2:top": "face.angle_plane face.extrude !face.hole face.offset_plane face.press_pull face.shell face.sketch", "Box/F3:blend:F2:side:l3|F2:top|F3:blend:F2:side:l4|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Box/F3:blend:F2:side:l4|F2:top": "face.angle_plane !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Box/F3:blend:F2:side:l4|F2:top": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Box/body": "body.copy body.mirror body.move body.pattern", "Box/v[F2:side:l1 & F2:side:l2 & F2:start]": "vertex.plane_three_points vertex.point", "Box/v[F2:side:l1 & F2:side:l2 & F3:blend:F2:side:l1|F2:top & F3:blend:F2:side:l2|F2:top]": "vertex.plane_three_points vertex.point", @@ -2830,7 +2830,7 @@ "Box/F2:side:l4|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Box/F2:side:l4|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Box/F2:start": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", - "Box/F2:top": "face.angle_plane face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Box/F2:top": "face.angle_plane face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Box/F2:top|F3:inner:F2:side:l1": "edge.axis edge.chamfer !edge.fillet edge.normal_plane edge.project", "Box/F2:top|F3:inner:F2:side:l2": "edge.axis edge.chamfer !edge.fillet edge.normal_plane edge.project", "Box/F2:top|F3:inner:F2:side:l3": "edge.axis edge.chamfer !edge.fillet edge.normal_plane edge.project", @@ -3138,8 +3138,8 @@ "Base/F4:side:c1@F5.1#1|F4:top@F5.1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Base/F4:side:c1@F5.1#2": "curved.axis curved.tangent_plane", "Base/F4:side:c1@F5.1#2|F4:top@F5.1": "edge.chamfer edge.fillet edge.normal_plane edge.project", - "Base/F4:top": "!face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "Base/F4:top@F5.1": "!face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Base/F4:top": "face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "Base/F4:top@F5.1": "face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Base/body": "body.copy body.mirror body.move body.pattern", "Base/v[F2:side:l1 & F2:side:l2 & F2:start]": "vertex.plane_three_points vertex.point", "Base/v[F2:side:l1 & F2:side:l2 & F2:top]": "vertex.plane_three_points vertex.point", @@ -3181,7 +3181,7 @@ "A/F2:side:l4": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "A/F2:side:l4|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "A/F2:side:l4|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "A/F2:start": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "A/F2:start": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "A/F2:start|F4:side:c1#1#[F2:side:l2,F2:start]": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", "A/F2:start|F4:side:c1#2#[F2:side:l2,F2:start]": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", "A/F2:top": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", @@ -3263,22 +3263,22 @@ "design": "load" }, "oracle/15-combine-intersect": { - "A/F2:bottom": "!face.extrude face.hole face.midplane !face.offset_plane !face.press_pull !face.shell !face.sketch", + "A/F2:bottom": "face.extrude face.hole face.midplane face.offset_plane face.press_pull !face.shell face.sketch", "A/F2:bottom|F4:side:a1#6~1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "A/F2:bottom|F4:side:a1#6~2": "edge.chamfer edge.fillet edge.normal_plane edge.project", - "A/F2:side:l1": "!face.extrude face.hole face.midplane !face.offset_plane !face.press_pull !face.shell !face.sketch", + "A/F2:side:l1": "face.extrude face.hole face.midplane face.offset_plane face.press_pull !face.shell face.sketch", "A/F2:side:l1|F4:side:a1#4~1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "A/F2:side:l1|F4:side:a1#4~2": "edge.chamfer edge.fillet edge.normal_plane edge.project", - "A/F2:side:l2": "!face.extrude face.hole face.midplane !face.offset_plane !face.press_pull !face.shell !face.sketch", + "A/F2:side:l2": "face.extrude face.hole face.midplane face.offset_plane face.press_pull !face.shell face.sketch", "A/F2:side:l2|F4:side:a1#1~1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "A/F2:side:l2|F4:side:a1#1~2": "edge.chamfer edge.fillet edge.normal_plane edge.project", - "A/F2:side:l3": "!face.extrude face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", + "A/F2:side:l3": "face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch", "A/F2:side:l3|F4:side:a1#3~1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "A/F2:side:l3|F4:side:a1#3~2": "edge.chamfer edge.fillet edge.normal_plane edge.project", - "A/F2:side:l4": "!face.extrude face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", + "A/F2:side:l4": "face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch", "A/F2:side:l4|F4:side:a1#2~1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "A/F2:side:l4|F4:side:a1#2~2": "edge.chamfer edge.fillet edge.normal_plane edge.project", - "A/F2:top": "!face.extrude face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", + "A/F2:top": "face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch", "A/F2:top|F4:side:a1#5~1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "A/F2:top|F4:side:a1#5~2": "edge.chamfer edge.fillet edge.normal_plane edge.project", "A/F4:side:a1#1": "curved.tangent_plane", @@ -3302,7 +3302,7 @@ "design": "load" }, "oracle/16-sweep": { - "Tube/F3:end": "!face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Tube/F3:end": "face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Tube/F3:end|F3:side:c1#[F3:end]#1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Tube/F3:end|F3:side:c1#[F3:end]#2": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Tube/F3:side:c1#1": "curved.axis curved.tangent_plane", @@ -3319,7 +3319,7 @@ "Tube/F3:side:c1#[F3:start]#1|F3:start": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Tube/F3:side:c1#[F3:start]#2": "curved.axis curved.tangent_plane", "Tube/F3:side:c1#[F3:start]#2|F3:start": "edge.chamfer edge.fillet edge.normal_plane edge.project", - "Tube/F3:start": "!face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Tube/F3:start": "face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Tube/body": "body.copy body.mirror body.move body.pattern", "Tube/v[F3:end & F3:side:c1#[F3:end]#1 & F3:side:c1#[F3:end]#2]": "vertex.point", "Tube/v[F3:end & F3:side:c1#[F3:end]#1 & F3:side:c1#[F3:end]#2] (2)": "vertex.point", @@ -3332,7 +3332,7 @@ "design": "load" }, "oracle/17-loft": { - "Loft/F4:end": "!face.extrude face.hole face.midplane !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Loft/F4:end": "face.extrude face.hole face.midplane face.offset_plane face.press_pull !face.shell face.sketch", "Loft/F4:end|F4:side:l1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Loft/F4:end|F4:side:l2": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Loft/F4:end|F4:side:l3": "edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -3345,7 +3345,7 @@ "Loft/F4:side:l3|F4:side:l4": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Loft/F4:side:l3|F4:start": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Loft/F4:side:l4|F4:start": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", - "Loft/F4:start": "face.angle_plane !face.extrude face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Loft/F4:start": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch", "Loft/body": "body.copy body.mirror body.move body.pattern", "Loft/v[F4:end & F4:side:l1 & F4:side:l2]": "vertex.plane_three_points vertex.point", "Loft/v[F4:end & F4:side:l1 & F4:side:l4]": "vertex.plane_three_points vertex.point", @@ -3519,24 +3519,24 @@ "design": "load" }, "oracle/21-draft": { - "Box/F2:side:l1": "face.angle_plane !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Box/F2:side:l1": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Box/F2:side:l1|F2:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Box/F2:side:l1|F2:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Box/F2:side:l1|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Box/F2:side:l1|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Box/F2:side:l2": "face.angle_plane !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Box/F2:side:l2": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Box/F2:side:l2|F2:side:l3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Box/F2:side:l2|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Box/F2:side:l2|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Box/F2:side:l3": "face.angle_plane !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Box/F2:side:l3": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Box/F2:side:l3|F2:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Box/F2:side:l3|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Box/F2:side:l3|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Box/F2:side:l4": "face.angle_plane !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Box/F2:side:l4": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Box/F2:side:l4|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Box/F2:side:l4|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Box/F2:start": "face.angle_plane !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "Box/F2:top": "face.angle_plane !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Box/F2:start": "face.angle_plane face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "Box/F2:top": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Box/body": "body.copy body.mirror body.move body.pattern", "Box/v[F2:side:l1 & F2:side:l2 & F2:start]": "vertex.plane_three_points vertex.point", "Box/v[F2:side:l1 & F2:side:l2 & F2:top]": "vertex.plane_three_points vertex.point", @@ -3602,12 +3602,12 @@ "Bracket/F12:side:c2#2": "curved.axis curved.tangent_plane", "Bracket/F12:side:c2#2|F2:side:l3": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F12:side:c2#2|F4:side:l1": "edge.chamfer edge.fillet edge.normal_plane edge.project", - "Bracket/F13:blend:F2:side:l1|F2:side:l2": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Bracket/F13:blend:F2:side:l1|F2:side:l2": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Bracket/F13:blend:F2:side:l1|F2:side:l2|F2:side:l1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F13:blend:F2:side:l1|F2:side:l2|F2:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F13:blend:F2:side:l1|F2:side:l2|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F13:blend:F2:side:l1|F2:side:l2|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Bracket/F13:blend:F2:side:l1|F2:side:l4": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Bracket/F13:blend:F2:side:l1|F2:side:l4": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Bracket/F13:blend:F2:side:l1|F2:side:l4|F2:side:l1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F13:blend:F2:side:l1|F2:side:l4|F2:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F13:blend:F2:side:l1|F2:side:l4|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -3615,18 +3615,18 @@ "Bracket/F2:side:l1": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Bracket/F2:side:l1|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F2:side:l1|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Bracket/F2:side:l2": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Bracket/F2:side:l2": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Bracket/F2:side:l2|F2:side:l3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F2:side:l2|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F2:side:l2|F2:top": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Bracket/F2:side:l2|F4:side:l1": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Bracket/F2:side:l2|F4:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F2:side:l2|F5:blend:F2:top|F4:side:l1#[F2:side:l2,F8:top]": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", - "Bracket/F2:side:l3": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Bracket/F2:side:l3": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Bracket/F2:side:l3|F2:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F2:side:l3|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F2:side:l3|F4:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Bracket/F2:side:l4": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Bracket/F2:side:l4": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Bracket/F2:side:l4|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F2:side:l4|F2:top": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Bracket/F2:side:l4|F4:side:l1": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", @@ -3651,11 +3651,11 @@ "Bracket/F5:blend:F2:top|F4:side:l1#[F2:side:l2,F8:top]|F8:top": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", "Bracket/F5:blend:F2:top|F4:side:l1#[F2:side:l4,F8:bottom]": "curved.axis curved.tangent_plane", "Bracket/F5:blend:F2:top|F4:side:l1#[F2:side:l4,F8:bottom]|F8:bottom": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", - "Bracket/F8:bottom": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Bracket/F8:bottom": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Bracket/F8:bottom|F8:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F8:side:l2": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", "Bracket/F8:side:l2|F8:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Bracket/F8:top": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Bracket/F8:top": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Bracket/body": "body.copy body.mirror body.move body.pattern", "Bracket/v[F10:side:c1#1 & F10:side:c1#2 & F2:start]": "vertex.point", "Bracket/v[F10:side:c1#1 & F10:side:c1#2 & F2:start] (2)": "vertex.point", @@ -3882,7 +3882,7 @@ "Block/F2:top|F5:blend:F4:side:l1|F4:side:l4": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Block/F2:top|F5:blend:F4:side:l2|F4:side:l3": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Block/F2:top|F5:blend:F4:side:l3|F4:side:l4": "edge.chamfer edge.fillet edge.normal_plane edge.project", - "Block/F4:bottom": "face.angle_plane !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Block/F4:bottom": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Block/F4:bottom|F6:blend:F4:bottom|F4:side:l1": "edge.axis edge.normal_plane edge.project", "Block/F4:bottom|F6:blend:F4:bottom|F4:side:l2": "edge.axis edge.normal_plane edge.project", "Block/F4:bottom|F6:blend:F4:bottom|F4:side:l3": "edge.axis edge.normal_plane edge.project", @@ -3891,19 +3891,19 @@ "Block/F4:bottom|F6:blend:F4:bottom|F5:blend:F4:side:l1|F4:side:l4": "edge.normal_plane edge.project", "Block/F4:bottom|F6:blend:F4:bottom|F5:blend:F4:side:l2|F4:side:l3": "edge.normal_plane edge.project", "Block/F4:bottom|F6:blend:F4:bottom|F5:blend:F4:side:l3|F4:side:l4": "edge.normal_plane edge.project", - "Block/F4:side:l1": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Block/F4:side:l1": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Block/F4:side:l1|F5:blend:F4:side:l1|F4:side:l2": "edge.axis edge.normal_plane edge.project", "Block/F4:side:l1|F5:blend:F4:side:l1|F4:side:l4": "edge.axis edge.normal_plane edge.project", "Block/F4:side:l1|F6:blend:F4:bottom|F4:side:l1": "edge.axis edge.normal_plane edge.project", - "Block/F4:side:l2": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Block/F4:side:l2": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Block/F4:side:l2|F5:blend:F4:side:l1|F4:side:l2": "edge.axis edge.normal_plane edge.project", "Block/F4:side:l2|F5:blend:F4:side:l2|F4:side:l3": "edge.axis edge.normal_plane edge.project", "Block/F4:side:l2|F6:blend:F4:bottom|F4:side:l2": "edge.axis edge.normal_plane edge.project", - "Block/F4:side:l3": "face.angle_plane !face.draft_neutral !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Block/F4:side:l3": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.offset_plane face.press_pull face.shell face.sketch", "Block/F4:side:l3|F5:blend:F4:side:l2|F4:side:l3": "edge.axis edge.normal_plane edge.project", "Block/F4:side:l3|F5:blend:F4:side:l3|F4:side:l4": "edge.axis edge.normal_plane edge.project", "Block/F4:side:l3|F6:blend:F4:bottom|F4:side:l3": "edge.axis edge.normal_plane edge.project", - "Block/F4:side:l4": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Block/F4:side:l4": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Block/F4:side:l4|F5:blend:F4:side:l1|F4:side:l4": "edge.axis edge.normal_plane edge.project", "Block/F4:side:l4|F5:blend:F4:side:l3|F4:side:l4": "edge.axis edge.normal_plane edge.project", "Block/F4:side:l4|F6:blend:F4:bottom|F4:side:l4": "edge.axis edge.normal_plane edge.project", @@ -3997,11 +3997,11 @@ "Block/F2:top|F4:side:l1": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Block/F2:top|F4:side:l2#[F2:top,F4:start]": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Block/F2:top|F4:side:l2#[F2:top]": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", - "Block/F4:end": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Block/F4:end": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Block/F4:end|F4:side:l1": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Block/F4:end|F4:side:l2#[F4:end]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Block/F4:end|F4:side:l4#[F4:end]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Block/F4:side:l1": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Block/F4:side:l1": "face.angle_plane face.draft_neutral !face.extrude face.hole face.offset_plane !face.press_pull face.shell face.sketch", "Block/F4:side:l1|F4:side:l2#[F2:top,F4:start]": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", "Block/F4:side:l1|F4:side:l2#[F2:top]": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", "Block/F4:side:l1|F4:side:l2#[F4:end]": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", @@ -4017,7 +4017,7 @@ "Block/F4:side:l4#[F4:end]": "curved.axis curved.tangent_plane", "Block/F4:side:l4#[F4:start]": "curved.axis curved.tangent_plane", "Block/F4:side:l4#[F4:start]|F4:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Block/F4:start": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Block/F4:start": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Block/body": "body.copy body.mirror body.move body.pattern", "Block/v[F2:bottom & F2:side:l1 & F2:side:l2]": "vertex.plane_three_points vertex.point", "Block/v[F2:bottom & F2:side:l1 & F2:side:l4]": "vertex.plane_three_points vertex.point", @@ -4430,8 +4430,8 @@ "Slot/F4:blend:F2:side:a2|F2:start": "curved.axis curved.tangent_plane", "Slot/F4:blend:F2:side:a2|F2:start|F4:blend:F2:side:l1|F2:start": "edge.axis edge.normal_plane edge.project", "Slot/F4:blend:F2:side:a2|F2:start|F4:blend:F2:side:l2|F2:start": "edge.axis edge.normal_plane edge.project", - "Slot/F4:blend:F2:side:l1|F2:start": "face.angle_plane !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", - "Slot/F4:blend:F2:side:l2|F2:start": "face.angle_plane !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Slot/F4:blend:F2:side:l1|F2:start": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", + "Slot/F4:blend:F2:side:l2|F2:start": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Slot/body": "body.copy body.mirror body.move body.pattern", "Slot/v[F2:side:a1 & F2:side:l1 & F3:blend:F2:side:a1|F2:top & F3:blend:F2:side:l1|F2:top]": "vertex.plane_three_points vertex.point", "Slot/v[F2:side:a1 & F2:side:l1 & F4:blend:F2:side:a1|F2:start & F4:blend:F2:side:l1|F2:start]": "vertex.plane_three_points vertex.point", @@ -4486,13 +4486,13 @@ "Box/F2:top|F4:blend:F2:top|F3:blend:F2:side:l1|F2:side:l4": "edge.axis edge.normal_plane edge.project", "Box/F2:top|F4:blend:F2:top|F3:blend:F2:side:l2|F2:side:l3": "edge.axis edge.normal_plane edge.project", "Box/F2:top|F4:blend:F2:top|F3:blend:F2:side:l3|F2:side:l4": "edge.axis edge.normal_plane edge.project", - "Box/F3:blend:F2:side:l1|F2:side:l2": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Box/F3:blend:F2:side:l1|F2:side:l2": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Box/F3:blend:F2:side:l1|F2:side:l2|F4:blend:F2:top|F3:blend:F2:side:l1|F2:side:l2": "edge.axis edge.normal_plane edge.project", - "Box/F3:blend:F2:side:l1|F2:side:l4": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Box/F3:blend:F2:side:l1|F2:side:l4": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Box/F3:blend:F2:side:l1|F2:side:l4|F4:blend:F2:top|F3:blend:F2:side:l1|F2:side:l4": "edge.axis edge.normal_plane edge.project", - "Box/F3:blend:F2:side:l2|F2:side:l3": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Box/F3:blend:F2:side:l2|F2:side:l3": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Box/F3:blend:F2:side:l2|F2:side:l3|F4:blend:F2:top|F3:blend:F2:side:l2|F2:side:l3": "edge.axis edge.normal_plane edge.project", - "Box/F3:blend:F2:side:l3|F2:side:l4": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Box/F3:blend:F2:side:l3|F2:side:l4": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Box/F3:blend:F2:side:l3|F2:side:l4|F4:blend:F2:top|F3:blend:F2:side:l3|F2:side:l4": "edge.axis edge.normal_plane edge.project", "Box/F4:blend:F2:side:l1|F2:top": "curved.axis curved.tangent_plane", "Box/F4:blend:F2:side:l1|F2:top|F4:blend:F2:top|F3:blend:F2:side:l1|F2:side:l2": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", @@ -4671,7 +4671,7 @@ "Pyramid/F4:side:l4|F5:blend:F4:side:l1|F4:side:l4#[F4:side:l1,F4:side:l4,F5:blend:F4:side:l4|F4:start]": "edge.axis edge.normal_plane edge.project", "Pyramid/F4:side:l4|F5:blend:F4:side:l3|F4:side:l4": "edge.axis edge.normal_plane edge.project", "Pyramid/F4:side:l4|F5:blend:F4:side:l4|F4:start#[F4:side:l4,F4:start]": "edge.axis edge.normal_plane edge.project", - "Pyramid/F4:start": "face.angle_plane !face.extrude face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Pyramid/F4:start": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch", "Pyramid/F4:start|F5:blend:F4:side:l1|F4:start": "edge.axis edge.normal_plane edge.project", "Pyramid/F4:start|F5:blend:F4:side:l2|F4:start#[F4:side:l2,F4:start,F5:blend:F4:side:l3|F4:start]": "edge.axis edge.normal_plane edge.project", "Pyramid/F4:start|F5:blend:F4:side:l3|F4:start#[F4:side:l3,F4:start,F5:blend:F4:side:l4|F4:start]": "edge.axis edge.normal_plane edge.project", @@ -4804,11 +4804,11 @@ "A/F2:side:l3|F2:start#[F2:side:l1,F2:side:l2,F2:side:l3,F2:side:l4]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "A/F2:side:l4": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "A/F2:side:l4|F2:start#[F2:side:l1,F2:side:l2,F2:side:l3,F2:side:l4]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "A/F2:start#[F2:side:l1,F2:side:l2,F2:side:l3,F2:side:l4]": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "A/F2:start#[F2:side:l1,F2:side:l2,F2:side:l3,F2:side:l4]": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "A/F2:start#[F2:side:l1,F2:side:l2,F2:side:l3,F2:side:l4]|F7:side:c1#2": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", "A/F2:start#[F2:side:l1,F2:side:l2,F2:side:l3,F2:side:l4]|F7:side:c1#4": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", "A/F2:start#[F2:side:l1,F2:side:l2,F2:side:l3,F2:side:l4]|F7:side:c1#6": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", - "A/F2:start#[F4:side:a1]": "!face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "A/F2:start#[F4:side:a1]": "face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "A/F2:start#[F4:side:a1]|F4:side:a1#1": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", "A/F2:start#[F4:side:a1]|F4:side:a1#2": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", "A/F2:start#[F4:side:a1]|F4:side:a1#3": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", @@ -5447,7 +5447,7 @@ "Bar (1)/F2:start#[F2:side:l4,F4:side:l4]|F4:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bar (1)/F2:top#[F2:side:l4,F4:side:l4]": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Bar (1)/F2:top#[F2:side:l4,F4:side:l4]|F4:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Bar (1)/F4:side:l4": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Bar (1)/F4:side:l4": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Bar (1)/body": "body.copy body.mirror body.move body.pattern", "Bar (1)/v[F2:side:l1#[F2:side:l4,F4:side:l4] & F2:side:l4 & F2:start#[F2:side:l4,F4:side:l4]]": "vertex.plane_three_points vertex.point", "Bar (1)/v[F2:side:l1#[F2:side:l4,F4:side:l4] & F2:side:l4 & F2:top#[F2:side:l4,F4:side:l4]]": "vertex.plane_three_points vertex.point", @@ -5474,7 +5474,7 @@ "Bar/F2:start#[F2:side:l2,F4:side:l2]|F4:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bar/F2:top#[F2:side:l2,F4:side:l2]": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Bar/F2:top#[F2:side:l2,F4:side:l2]|F4:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Bar/F4:side:l2": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Bar/F4:side:l2": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Bar/body": "body.copy body.mirror body.move body.pattern", "Bar/v[F2:side:l1#[F2:side:l2,F4:side:l2] & F2:side:l2 & F2:start#[F2:side:l2,F4:side:l2]]": "vertex.plane_three_points vertex.point", "Bar/v[F2:side:l1#[F2:side:l2,F4:side:l2] & F2:side:l2 & F2:top#[F2:side:l2,F4:side:l2]]": "vertex.plane_three_points vertex.point", @@ -5518,7 +5518,7 @@ "L/F2:side:l6|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "L/F2:side:l6|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "L/F2:start": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", - "L/F2:top": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "L/F2:top": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "L/F2:top|F3:inner:F2:side:l1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "L/F2:top|F3:inner:F2:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "L/F2:top|F3:inner:F2:side:l3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -5598,7 +5598,7 @@ "Part/F2:side:l4": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Part/F2:side:l4|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Part/F2:side:l4|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Part/F2:start": "face.angle_plane face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Part/F2:start": "face.angle_plane face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Part/F2:start|F5:inner:F2:side:l1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Part/F2:start|F5:inner:F2:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Part/F2:start|F5:inner:F2:side:l3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -5663,7 +5663,7 @@ "design": "load" }, "oracle/46-shell-two-open-faces": { - "Box/F2:side:l1": "face.angle_plane face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Box/F2:side:l1": "face.angle_plane face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Box/F2:side:l1|F2:side:l2~1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Box/F2:side:l1|F2:side:l2~2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Box/F2:side:l1|F2:side:l4~1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -5690,7 +5690,7 @@ "Box/F2:side:l4|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Box/F2:side:l4|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Box/F2:start": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", - "Box/F2:top": "face.angle_plane face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Box/F2:top": "face.angle_plane face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Box/F2:top|F3:inner:F2:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Box/F2:top|F3:inner:F2:side:l3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Box/F2:top|F3:inner:F2:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -5729,29 +5729,29 @@ "design": "load" }, "oracle/47-draft-curved-pocket": { - "Block/F2:side:l1": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Block/F2:side:l1": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Block/F2:side:l1|F2:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Block/F2:side:l1|F2:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Block/F2:side:l1|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Block/F2:side:l1|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Block/F2:side:l2": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Block/F2:side:l2": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Block/F2:side:l2|F2:side:l3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Block/F2:side:l2|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Block/F2:side:l2|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Block/F2:side:l3": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Block/F2:side:l3": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Block/F2:side:l3|F2:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Block/F2:side:l3|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Block/F2:side:l3|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Block/F2:side:l4": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Block/F2:side:l4": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Block/F2:side:l4|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Block/F2:side:l4|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Block/F2:start": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "Block/F2:top": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Block/F2:start": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "Block/F2:top": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Block/F2:top|F4:side:a1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Block/F2:top|F4:side:a2": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Block/F2:top|F4:side:l1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Block/F2:top|F4:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Block/F4:bottom": "face.angle_plane !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Block/F4:bottom": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Block/F4:bottom|F4:side:a1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Block/F4:bottom|F4:side:a2": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Block/F4:bottom|F4:side:l1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -5762,8 +5762,8 @@ "Block/F4:side:a2": "curved.axis curved.tangent_plane", "Block/F4:side:a2|F4:side:l1": "edge.axis edge.normal_plane edge.project", "Block/F4:side:a2|F4:side:l2": "edge.axis edge.normal_plane edge.project", - "Block/F4:side:l1": "face.angle_plane !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", - "Block/F4:side:l2": "face.angle_plane !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Block/F4:side:l1": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", + "Block/F4:side:l2": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Block/body": "body.copy body.mirror body.move body.pattern", "Block/v[F2:side:l1 & F2:side:l2 & F2:start]": "vertex.plane_three_points vertex.point", "Block/v[F2:side:l1 & F2:side:l2 & F2:top]": "vertex.plane_three_points vertex.point", @@ -5910,7 +5910,7 @@ "design": "load" }, "oracle/50-sweep-tight-bend": { - "Bend/F3:end": "!face.extrude face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Bend/F3:end": "face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch", "Bend/F3:end|F3:side:c1#[F3:end]#1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Bend/F3:end|F3:side:c1#[F3:end]#2": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Bend/F3:side:c1#1": "curved.axis curved.tangent_plane", @@ -5931,7 +5931,7 @@ "Bend/F3:side:c1#[F3:start]#1|F3:start": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Bend/F3:side:c1#[F3:start]#2": "curved.axis curved.tangent_plane", "Bend/F3:side:c1#[F3:start]#2|F3:start": "edge.chamfer edge.fillet edge.normal_plane edge.project", - "Bend/F3:start": "!face.extrude face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Bend/F3:start": "face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch", "Bend/body": "body.copy body.mirror body.move body.pattern", "Bend/v[F3:end & F3:side:c1#[F3:end]#1 & F3:side:c1#[F3:end]#2]": "vertex.point", "Bend/v[F3:end & F3:side:c1#[F3:end]#1 & F3:side:c1#[F3:end]#2] (2)": "vertex.point", @@ -5944,7 +5944,7 @@ "design": "load" }, "oracle/51-loft-rect-circle-offset": { - "Loft/F4:end": "!face.extrude face.hole face.midplane !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Loft/F4:end": "face.extrude face.hole face.midplane face.offset_plane face.press_pull !face.shell face.sketch", "Loft/F4:end|F4:side:l1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Loft/F4:end|F4:side:l2": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Loft/F4:end|F4:side:l3": "edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -5957,7 +5957,7 @@ "Loft/F4:side:l3|F4:side:l4": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Loft/F4:side:l3|F4:start": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Loft/F4:side:l4|F4:start": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", - "Loft/F4:start": "face.angle_plane !face.extrude face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Loft/F4:start": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch", "Loft/body": "body.copy body.mirror body.move body.pattern", "Loft/v[F4:end & F4:side:l1 & F4:side:l2]": "vertex.plane_three_points vertex.point", "Loft/v[F4:end & F4:side:l1 & F4:side:l4]": "vertex.plane_three_points vertex.point", @@ -6190,13 +6190,13 @@ "design": "load" }, "oracle/54-mirror-body-fillets": { - "Bracket/F2:side:l1": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Bracket/F2:side:l1": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Bracket/F2:side:l1|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F2:side:l1|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F2:side:l1|F3:blend:F2:side:l1|F2:side:l2": "edge.axis edge.normal_plane edge.project", "Bracket/F2:side:l1|F3:blend:F2:side:l1|F2:side:l2@F6.1": "edge.axis edge.normal_plane edge.project", - "Bracket/F2:side:l2": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "Bracket/F2:side:l2@F6.1": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Bracket/F2:side:l2": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "Bracket/F2:side:l2@F6.1": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Bracket/F2:side:l2@F6.1|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F2:side:l2@F6.1|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F2:side:l2@F6.1|F3:blend:F2:side:l1|F2:side:l2@F6.1": "edge.axis edge.normal_plane edge.project", @@ -6205,12 +6205,12 @@ "Bracket/F2:side:l2|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F2:side:l2|F3:blend:F2:side:l1|F2:side:l2": "edge.axis edge.normal_plane edge.project", "Bracket/F2:side:l2|F3:blend:F2:side:l2|F2:side:l3": "edge.axis edge.normal_plane edge.project", - "Bracket/F2:side:l3": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Bracket/F2:side:l3": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Bracket/F2:side:l3|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F2:side:l3|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F2:side:l3|F3:blend:F2:side:l2|F2:side:l3": "edge.axis edge.normal_plane edge.project", "Bracket/F2:side:l3|F3:blend:F2:side:l2|F2:side:l3@F6.1": "edge.axis edge.normal_plane edge.project", - "Bracket/F2:start": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Bracket/F2:start": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Bracket/F2:start|F3:blend:F2:side:l1|F2:side:l2": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F2:start|F3:blend:F2:side:l1|F2:side:l2@F6.1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F2:start|F3:blend:F2:side:l2|F2:side:l3": "edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -6219,7 +6219,7 @@ "Bracket/F2:start|F5:side:c1#1@F6.1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F2:start|F5:side:c1#2": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F2:start|F5:side:c1#2@F6.1": "edge.chamfer edge.fillet edge.normal_plane edge.project", - "Bracket/F2:top": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Bracket/F2:top": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Bracket/F2:top|F3:blend:F2:side:l1|F2:side:l2": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F2:top|F3:blend:F2:side:l1|F2:side:l2@F6.1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Bracket/F2:top|F3:blend:F2:side:l2|F2:side:l3": "edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -6582,7 +6582,7 @@ "Stand/F2:side:l4|F4:blend:F2:side:l4|F2:side:l5~1": "edge.axis edge.normal_plane edge.project", "Stand/F2:side:l4|F4:blend:F2:side:l4|F2:side:l5~2": "edge.axis edge.normal_plane edge.project", "Stand/F2:side:l4|F4:blend:F2:side:l4|F2:side:l5~3": "edge.axis edge.normal_plane edge.project", - "Stand/F2:side:l5": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Stand/F2:side:l5": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Stand/F2:side:l5|F2:top~1": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Stand/F2:side:l5|F2:top~2": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Stand/F2:side:l5|F2:top~3": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", @@ -6614,7 +6614,7 @@ "Stand/F2:side:l8|F3:blend:F2:side:l8|F2:side:l9~1": "edge.axis edge.normal_plane edge.project", "Stand/F2:side:l8|F3:blend:F2:side:l8|F2:side:l9~2": "edge.axis edge.normal_plane edge.project", "Stand/F2:side:l8|F3:blend:F2:side:l8|F2:side:l9~3": "edge.axis edge.normal_plane edge.project", - "Stand/F2:side:l9": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Stand/F2:side:l9": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Stand/F2:side:l9|F2:top": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Stand/F2:side:l9|F3:blend:F2:side:l8|F2:side:l9~1": "edge.axis edge.normal_plane edge.project", "Stand/F2:side:l9|F3:blend:F2:side:l8|F2:side:l9~2": "edge.axis edge.normal_plane edge.project", @@ -6626,14 +6626,14 @@ "Stand/F3:blend:F2:side:l5|F2:side:l6": "curved.axis curved.tangent_plane", "Stand/F3:blend:F2:side:l8|F2:side:l9": "curved.axis curved.tangent_plane", "Stand/F4:blend:F2:side:l4|F2:side:l5": "curved.axis curved.tangent_plane", - "Stand/F6:side:l1": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Stand/F6:side:l1": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Stand/F6:side:l1|F6:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Stand/F6:side:l1|F6:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Stand/F6:side:l2": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Stand/F6:side:l2": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Stand/F6:side:l2|F6:side:l3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Stand/F6:side:l3": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Stand/F6:side:l3": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Stand/F6:side:l3|F6:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Stand/F6:side:l4": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Stand/F6:side:l4": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Stand/body": "body.copy body.mirror body.move body.pattern", "Stand/v[F2:bottom & F2:side:l1 & F2:side:l10]": "vertex.plane_three_points vertex.point", "Stand/v[F2:bottom & F2:side:l1 & F2:side:l2]": "vertex.plane_three_points vertex.point", @@ -6706,16 +6706,16 @@ "design": "load" }, "oracle/59-enclosure-base": { - "Enclosure/F11:bottom#[F11:side:c1]": "!face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Enclosure/F11:bottom#[F11:side:c1]": "face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Enclosure/F11:bottom#[F11:side:c1]|F11:side:c1#1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Enclosure/F11:bottom#[F11:side:c1]|F11:side:c1#2": "edge.chamfer edge.fillet edge.normal_plane edge.project", - "Enclosure/F11:bottom#[F11:side:c2]": "!face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Enclosure/F11:bottom#[F11:side:c2]": "face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Enclosure/F11:bottom#[F11:side:c2]|F11:side:c2#1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Enclosure/F11:bottom#[F11:side:c2]|F11:side:c2#2": "edge.chamfer edge.fillet edge.normal_plane edge.project", - "Enclosure/F11:bottom#[F11:side:c3]": "!face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Enclosure/F11:bottom#[F11:side:c3]": "face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Enclosure/F11:bottom#[F11:side:c3]|F11:side:c3#1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Enclosure/F11:bottom#[F11:side:c3]|F11:side:c3#2": "edge.chamfer edge.fillet edge.normal_plane edge.project", - "Enclosure/F11:bottom#[F11:side:c4]": "!face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Enclosure/F11:bottom#[F11:side:c4]": "face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Enclosure/F11:bottom#[F11:side:c4]|F11:side:c4#1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Enclosure/F11:bottom#[F11:side:c4]|F11:side:c4#2": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Enclosure/F11:side:c1#1": "curved.axis curved.tangent_plane", @@ -6799,7 +6799,7 @@ "Enclosure/F2:start|F3:blend:F2:side:l1|F2:side:l4": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Enclosure/F2:start|F3:blend:F2:side:l2|F2:side:l3": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Enclosure/F2:start|F3:blend:F2:side:l3|F2:side:l4": "edge.chamfer edge.fillet edge.normal_plane edge.project", - "Enclosure/F2:top": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Enclosure/F2:top": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Enclosure/F2:top|F3:blend:F2:side:l1|F2:side:l2": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Enclosure/F2:top|F3:blend:F2:side:l1|F2:side:l4": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Enclosure/F2:top|F3:blend:F2:side:l2|F2:side:l3": "edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -6916,15 +6916,15 @@ "Enclosure/F7:side:c4#1|F7:top#[F7:side:c4]": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Enclosure/F7:side:c4#2": "curved.axis curved.tangent_plane", "Enclosure/F7:side:c4#2|F7:top#[F7:side:c4]": "edge.chamfer edge.fillet edge.normal_plane edge.project", - "Enclosure/F7:top#[F7:side:c1]": "!face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "Enclosure/F7:top#[F7:side:c2]": "!face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "Enclosure/F7:top#[F7:side:c3]": "!face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "Enclosure/F7:top#[F7:side:c4]": "!face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Enclosure/F7:top#[F7:side:c1]": "face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "Enclosure/F7:top#[F7:side:c2]": "face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "Enclosure/F7:top#[F7:side:c3]": "face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "Enclosure/F7:top#[F7:side:c4]": "face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Enclosure/F8:side:r2": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", "Enclosure/F8:side:r2|F8:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Enclosure/F8:side:r4": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", "Enclosure/F8:side:r4|F8:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Enclosure/F8:top": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Enclosure/F8:top": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Enclosure/body": "body.copy body.mirror body.move body.pattern", "Enclosure/v[F11:bottom#[F11:side:c1] & F11:side:c1#1 & F11:side:c1#2]": "vertex.point", "Enclosure/v[F11:bottom#[F11:side:c1] & F11:side:c1#1 & F11:side:c1#2] (2)": "vertex.point", @@ -7049,7 +7049,7 @@ "design": "load" }, "oracle/60-pipe-flange": { - "Flange/F2:side:l1": "!face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Flange/F2:side:l1": "face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Flange/F2:side:l1|F2:side:l2#1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Flange/F2:side:l1|F2:side:l2#2": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Flange/F2:side:l1|F2:side:l2#3": "edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -7078,7 +7078,7 @@ "Flange/F2:side:l2#2|F2:side:l3": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Flange/F2:side:l2#3": "curved.axis curved.tangent_plane", "Flange/F2:side:l2#3|F2:side:l3": "edge.chamfer edge.fillet edge.normal_plane edge.project", - "Flange/F2:side:l3": "!face.extrude face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Flange/F2:side:l3": "face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch", "Flange/F2:side:l3|F4:side:c1#1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Flange/F2:side:l3|F4:side:c1#2": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Flange/F2:side:l3|F4:side:c1@F5.1#1": "edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -7107,7 +7107,7 @@ "Flange/F2:side:l4#3": "curved.axis curved.tangent_plane", "Flange/F2:side:l4#3|F2:side:l5": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Flange/F2:side:l4#3|F7:blend:F2:side:l3|F2:side:l4#3": "edge.normal_plane edge.project", - "Flange/F2:side:l5": "!face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Flange/F2:side:l5": "face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Flange/F2:side:l5|F6:blend:F2:side:l5|F2:side:l6#1": "!edge.chamfer edge.fillet edge.normal_plane edge.project", "Flange/F2:side:l5|F6:blend:F2:side:l5|F2:side:l6#2": "!edge.chamfer edge.fillet edge.normal_plane edge.project", "Flange/F2:side:l5|F6:blend:F2:side:l5|F2:side:l6#3": "!edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -7199,7 +7199,7 @@ "design": "load" }, "oracle/61-shaft-keyway": { - "Shaft/F2:side:l1": "!face.extrude face.hole face.midplane !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Shaft/F2:side:l1": "face.extrude face.hole face.midplane face.offset_plane face.press_pull !face.shell face.sketch", "Shaft/F2:side:l1|F3:blend:F2:side:l1|F2:side:l2#1": "!edge.chamfer edge.fillet edge.normal_plane edge.project", "Shaft/F2:side:l1|F3:blend:F2:side:l1|F2:side:l2#2": "!edge.chamfer edge.fillet edge.normal_plane edge.project", "Shaft/F2:side:l1|F3:blend:F2:side:l1|F2:side:l2#3": "!edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -7212,7 +7212,7 @@ "Shaft/F2:side:l2#3": "curved.axis curved.tangent_plane", "Shaft/F2:side:l2#3|F2:side:l3": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Shaft/F2:side:l2#3|F3:blend:F2:side:l1|F2:side:l2#3": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", - "Shaft/F2:side:l3": "!face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Shaft/F2:side:l3": "face.extrude !face.hole face.midplane face.offset_plane face.press_pull !face.shell face.sketch", "Shaft/F2:side:l3|F2:side:l4#1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Shaft/F2:side:l3|F2:side:l4#2": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Shaft/F2:side:l3|F2:side:l4#3": "edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -7228,7 +7228,7 @@ "Shaft/F2:side:l4#3|F6:side:a1": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", "Shaft/F2:side:l4#3|F6:side:a2": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", "Shaft/F2:side:l4#3|F6:side:l1": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", - "Shaft/F2:side:l5": "!face.extrude !face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Shaft/F2:side:l5": "face.extrude !face.hole face.offset_plane face.press_pull !face.shell face.sketch", "Shaft/F2:side:l5|F2:side:l6#1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Shaft/F2:side:l5|F2:side:l6#2": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Shaft/F2:side:l5|F2:side:l6#3": "edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -7238,7 +7238,7 @@ "Shaft/F2:side:l6#2|F3:blend:F2:side:l6#2|F2:side:l7": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", "Shaft/F2:side:l6#3": "curved.axis curved.tangent_plane", "Shaft/F2:side:l6#3|F3:blend:F2:side:l6#3|F2:side:l7": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", - "Shaft/F2:side:l7": "!face.extrude face.hole face.midplane !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Shaft/F2:side:l7": "face.extrude face.hole face.midplane face.offset_plane face.press_pull !face.shell face.sketch", "Shaft/F2:side:l7|F3:blend:F2:side:l6#1|F2:side:l7": "!edge.chamfer edge.fillet edge.normal_plane edge.project", "Shaft/F2:side:l7|F3:blend:F2:side:l6#2|F2:side:l7": "!edge.chamfer edge.fillet edge.normal_plane edge.project", "Shaft/F2:side:l7|F3:blend:F2:side:l6#3|F2:side:l7": "!edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -7248,7 +7248,7 @@ "Shaft/F3:blend:F2:side:l6#1|F2:side:l7": "curved.axis curved.tangent_plane", "Shaft/F3:blend:F2:side:l6#2|F2:side:l7": "curved.axis curved.tangent_plane", "Shaft/F3:blend:F2:side:l6#3|F2:side:l7": "curved.axis curved.tangent_plane", - "Shaft/F6:bottom": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Shaft/F6:bottom": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch", "Shaft/F6:bottom|F6:side:a1": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", "Shaft/F6:bottom|F6:side:a2": "!edge.chamfer !edge.fillet edge.normal_plane edge.project", "Shaft/F6:bottom|F6:side:l1": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", @@ -7259,8 +7259,8 @@ "Shaft/F6:side:a2": "curved.axis curved.tangent_plane", "Shaft/F6:side:a2|F6:side:l1": "edge.axis edge.normal_plane edge.project", "Shaft/F6:side:a2|F6:side:l2": "edge.axis edge.normal_plane edge.project", - "Shaft/F6:side:l1": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull !face.shell !face.sketch", - "Shaft/F6:side:l2": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Shaft/F6:side:l1": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.midplane face.offset_plane !face.press_pull !face.shell face.sketch", + "Shaft/F6:side:l2": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch", "Shaft/body": "body.copy body.mirror body.move body.pattern", "Shaft/v[F2:side:l1 & F3:blend:F2:side:l1|F2:side:l2#1 & F3:blend:F2:side:l1|F2:side:l2#2]": "vertex.plane_three_points vertex.point", "Shaft/v[F2:side:l1 & F3:blend:F2:side:l1|F2:side:l2#1 & F3:blend:F2:side:l1|F2:side:l2#3]": "vertex.plane_three_points vertex.point", @@ -7299,7 +7299,7 @@ "design": "load" }, "oracle/62-heat-sink": { - "HeatSink/F2:side:l1": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F2:side:l1": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F2:side:l1|F2:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:side:l1|F2:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:side:l1|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -7368,7 +7368,7 @@ "HeatSink/F2:side:l2|F2:side:l3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:side:l2|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:side:l2|F2:top#[F2:side:l2,F5:side:l2]#[F2:side:l2,F5:side:l2@F6.14]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F2:side:l3": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F2:side:l3": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F2:side:l3|F2:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:side:l3|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:side:l3|F2:top#[F2:side:l2,F5:side:l2]#[F2:side:l2,F5:side:l2@F6.14]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -7436,127 +7436,127 @@ "HeatSink/F2:side:l4|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:side:l4|F2:top#[F2:side:l4,F5:side:l4]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:start": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", - "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F2:side:l2,F5:side:l2@F6.14]": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F2:side:l2,F5:side:l2@F6.14]": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F2:side:l2,F5:side:l2@F6.14]|F5:side:l2@F6.14": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2,F5:side:l4@F6.1]": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2,F5:side:l4@F6.1]": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2,F5:side:l4@F6.1]|F5:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2,F5:side:l4@F6.1]|F5:side:l4@F6.1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.1,F5:side:l4@F6.2]": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.1,F5:side:l4@F6.2]": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.1,F5:side:l4@F6.2]|F5:side:l2@F6.1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.1,F5:side:l4@F6.2]|F5:side:l4@F6.2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.10,F5:side:l4@F6.11]": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.10,F5:side:l4@F6.11]": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.10,F5:side:l4@F6.11]|F5:side:l2@F6.10": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.10,F5:side:l4@F6.11]|F5:side:l4@F6.11": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.11,F5:side:l4@F6.12]": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.11,F5:side:l4@F6.12]": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.11,F5:side:l4@F6.12]|F5:side:l2@F6.11": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.11,F5:side:l4@F6.12]|F5:side:l4@F6.12": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.12,F5:side:l4@F6.13]": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.12,F5:side:l4@F6.13]": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.12,F5:side:l4@F6.13]|F5:side:l2@F6.12": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.12,F5:side:l4@F6.13]|F5:side:l4@F6.13": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.13,F5:side:l4@F6.14]": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.13,F5:side:l4@F6.14]": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.13,F5:side:l4@F6.14]|F5:side:l2@F6.13": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.13,F5:side:l4@F6.14]|F5:side:l4@F6.14": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.2,F5:side:l4@F6.3]": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.2,F5:side:l4@F6.3]": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.2,F5:side:l4@F6.3]|F5:side:l2@F6.2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.2,F5:side:l4@F6.3]|F5:side:l4@F6.3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.3,F5:side:l4@F6.4]": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.3,F5:side:l4@F6.4]": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.3,F5:side:l4@F6.4]|F5:side:l2@F6.3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.3,F5:side:l4@F6.4]|F5:side:l4@F6.4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.4,F5:side:l4@F6.5]": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.4,F5:side:l4@F6.5]": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.4,F5:side:l4@F6.5]|F5:side:l2@F6.4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.4,F5:side:l4@F6.5]|F5:side:l4@F6.5": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.5,F5:side:l4@F6.6]": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.5,F5:side:l4@F6.6]": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.5,F5:side:l4@F6.6]|F5:side:l2@F6.5": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.5,F5:side:l4@F6.6]|F5:side:l4@F6.6": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.6,F5:side:l4@F6.7]": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.6,F5:side:l4@F6.7]": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.6,F5:side:l4@F6.7]|F5:side:l2@F6.6": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.6,F5:side:l4@F6.7]|F5:side:l4@F6.7": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.7,F5:side:l4@F6.8]": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.7,F5:side:l4@F6.8]": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.7,F5:side:l4@F6.8]|F5:side:l2@F6.7": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.7,F5:side:l4@F6.8]|F5:side:l4@F6.8": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.8,F5:side:l4@F6.9]": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.8,F5:side:l4@F6.9]": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.8,F5:side:l4@F6.9]|F5:side:l2@F6.8": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.8,F5:side:l4@F6.9]|F5:side:l4@F6.9": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.9,F5:side:l4@F6.10]": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.9,F5:side:l4@F6.10]": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.9,F5:side:l4@F6.10]|F5:side:l2@F6.9": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F2:top#[F2:side:l2,F5:side:l2]#[F5:side:l2@F6.9,F5:side:l4@F6.10]|F5:side:l4@F6.10": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F2:top#[F2:side:l4,F5:side:l4]": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F2:top#[F2:side:l4,F5:side:l4]": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F2:top#[F2:side:l4,F5:side:l4]|F5:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l2": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "HeatSink/F5:side:l2@F6.1": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "HeatSink/F5:side:l2@F6.10": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l2": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "HeatSink/F5:side:l2@F6.1": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "HeatSink/F5:side:l2@F6.10": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l2@F6.10|F5:top@F6.10": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l2@F6.11": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l2@F6.11": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l2@F6.11|F5:top@F6.11": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l2@F6.12": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l2@F6.12": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l2@F6.12|F5:top@F6.12": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l2@F6.13": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l2@F6.13": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l2@F6.13|F5:top@F6.13": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l2@F6.14": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l2@F6.14": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l2@F6.14|F5:top@F6.14": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F5:side:l2@F6.1|F5:top@F6.1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l2@F6.2": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l2@F6.2": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l2@F6.2|F5:top@F6.2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l2@F6.3": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l2@F6.3": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l2@F6.3|F5:top@F6.3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l2@F6.4": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l2@F6.4": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l2@F6.4|F5:top@F6.4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l2@F6.5": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l2@F6.5": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l2@F6.5|F5:top@F6.5": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l2@F6.6": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l2@F6.6": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l2@F6.6|F5:top@F6.6": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l2@F6.7": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l2@F6.7": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l2@F6.7|F5:top@F6.7": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l2@F6.8": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l2@F6.8": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l2@F6.8|F5:top@F6.8": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l2@F6.9": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l2@F6.9": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l2@F6.9|F5:top@F6.9": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F5:side:l2|F5:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l4": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", - "HeatSink/F5:side:l4@F6.1": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", - "HeatSink/F5:side:l4@F6.10": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l4": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", + "HeatSink/F5:side:l4@F6.1": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", + "HeatSink/F5:side:l4@F6.10": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l4@F6.10|F5:top@F6.10": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l4@F6.11": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l4@F6.11": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l4@F6.11|F5:top@F6.11": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l4@F6.12": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l4@F6.12": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l4@F6.12|F5:top@F6.12": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l4@F6.13": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l4@F6.13": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l4@F6.13|F5:top@F6.13": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l4@F6.14": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l4@F6.14": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l4@F6.14|F5:top@F6.14": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F5:side:l4@F6.1|F5:top@F6.1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l4@F6.2": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l4@F6.2": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l4@F6.2|F5:top@F6.2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l4@F6.3": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l4@F6.3": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l4@F6.3|F5:top@F6.3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l4@F6.4": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l4@F6.4": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l4@F6.4|F5:top@F6.4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l4@F6.5": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l4@F6.5": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l4@F6.5|F5:top@F6.5": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l4@F6.6": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l4@F6.6": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l4@F6.6|F5:top@F6.6": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l4@F6.7": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l4@F6.7": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l4@F6.7|F5:top@F6.7": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l4@F6.8": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l4@F6.8": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l4@F6.8|F5:top@F6.8": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:side:l4@F6.9": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:side:l4@F6.9": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/F5:side:l4@F6.9|F5:top@F6.9": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "HeatSink/F5:side:l4|F5:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "HeatSink/F5:top": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "HeatSink/F5:top@F6.1": "face.angle_plane face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "HeatSink/F5:top@F6.10": "face.angle_plane face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "HeatSink/F5:top@F6.11": "face.angle_plane face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "HeatSink/F5:top@F6.12": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "HeatSink/F5:top@F6.13": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "HeatSink/F5:top@F6.14": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "HeatSink/F5:top@F6.2": "face.angle_plane face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "HeatSink/F5:top@F6.3": "face.angle_plane face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "HeatSink/F5:top@F6.4": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "HeatSink/F5:top@F6.5": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "HeatSink/F5:top@F6.6": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "HeatSink/F5:top@F6.7": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "HeatSink/F5:top@F6.8": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", - "HeatSink/F5:top@F6.9": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "HeatSink/F5:top": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "HeatSink/F5:top@F6.1": "face.angle_plane face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "HeatSink/F5:top@F6.10": "face.angle_plane face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "HeatSink/F5:top@F6.11": "face.angle_plane face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "HeatSink/F5:top@F6.12": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "HeatSink/F5:top@F6.13": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "HeatSink/F5:top@F6.14": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "HeatSink/F5:top@F6.2": "face.angle_plane face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "HeatSink/F5:top@F6.3": "face.angle_plane face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "HeatSink/F5:top@F6.4": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "HeatSink/F5:top@F6.5": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "HeatSink/F5:top@F6.6": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "HeatSink/F5:top@F6.7": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "HeatSink/F5:top@F6.8": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", + "HeatSink/F5:top@F6.9": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "HeatSink/body": "body.copy body.mirror body.move body.pattern", "HeatSink/v[F2:side:l1 & F2:side:l2 & F2:start]": "vertex.plane_three_points vertex.point", "HeatSink/v[F2:side:l1 & F2:side:l2 & F2:top#[F2:side:l2,F5:side:l2]#[F2:side:l2,F5:side:l2@F6.14]]": "vertex.plane_three_points vertex.point", @@ -7690,7 +7690,7 @@ "Hinge/F2:side:l1|F2:top~1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Hinge/F2:side:l1|F2:top~2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Hinge/F2:side:l1|F2:top~3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Hinge/F2:side:l2": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Hinge/F2:side:l2": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull !face.shell face.sketch", "Hinge/F2:side:l2|F2:side:l3#[F2:side:l2,F8:side:l2]": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Hinge/F2:side:l2|F2:start~1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Hinge/F2:side:l2|F2:start~2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -7710,7 +7710,7 @@ "Hinge/F2:side:l3#[F2:side:l4,F8:side:l4]|F2:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Hinge/F2:side:l3#[F2:side:l4,F8:side:l4]|F4:side:c1#[F2:side:l3]#[F2:side:l4,F8:side:l4]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Hinge/F2:side:l3#[F2:side:l4,F8:side:l4]|F8:side:l4": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", - "Hinge/F2:side:l4": "face.angle_plane face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Hinge/F2:side:l4": "face.angle_plane face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull !face.shell face.sketch", "Hinge/F2:side:l4|F2:start~1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Hinge/F2:side:l4|F2:start~2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Hinge/F2:side:l4|F2:top~1": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", @@ -7750,11 +7750,11 @@ "Hinge/F6:side:c1#2#[F2:side:l2,F8:side:l2]|F8:side:l2": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Hinge/F6:side:c1#2#[F2:side:l4,F8:side:l4]": "curved.axis curved.tangent_plane", "Hinge/F6:side:c1#2#[F2:side:l4,F8:side:l4]|F8:side:l4": "edge.chamfer edge.fillet edge.normal_plane edge.project", - "Hinge/F8:side:l1": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Hinge/F8:side:l1": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch", "Hinge/F8:side:l1|F8:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Hinge/F8:side:l1|F8:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Hinge/F8:side:l2": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", - "Hinge/F8:side:l4": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Hinge/F8:side:l2": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch", + "Hinge/F8:side:l4": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch", "Hinge/body": "body.copy body.mirror body.move body.pattern", "Hinge/v[F2:side:l1 & F2:side:l2 & F2:start]": "vertex.plane_three_points vertex.point", "Hinge/v[F2:side:l1 & F2:side:l2 & F2:top]": "vertex.plane_three_points vertex.point", @@ -8987,11 +8987,11 @@ "Frame/F2:side#[F5:face:18,F5:face:20]|F3:-x": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Frame/F2:side#[F5:face:23,F5:face:25]": "curved.axis curved.tangent_plane", "Frame/F2:side#[F5:face:23,F5:face:25]|F3:-x": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", - "Frame/F3:+z#[F4:+y,F5:face:11]": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Frame/F3:+z#[F4:+y,F5:face:11]": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Frame/F3:+z#[F4:+y,F5:face:11]|F3:-x": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Frame/F3:+z#[F4:+y,F5:face:11]|F4:+y#[F3:+z,F5:face:12]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Frame/F3:+z#[F4:+y,F5:face:11]|F5:face:11": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", - "Frame/F3:+z#[F4:-y,F5:face:9]": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Frame/F3:+z#[F4:-y,F5:face:9]": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Frame/F3:+z#[F4:-y,F5:face:9]|F3:-x": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Frame/F3:+z#[F4:-y,F5:face:9]|F4:-y#[F3:+z,F5:face:9]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Frame/F3:+z#[F4:-y,F5:face:9]|F5:face:9": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", @@ -9004,19 +9004,19 @@ "Frame/F3:-x|F4:-y#[F3:-z,F5:face:0]": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Frame/F3:-x|F5:face:21": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Frame/F3:-x|F5:face:26": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", - "Frame/F3:-z#[F4:+y,F5:face:4]": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Frame/F3:-z#[F4:+y,F5:face:4]": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Frame/F3:-z#[F4:+y,F5:face:4]|F4:+y#[F3:-z,F5:face:4]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Frame/F3:-z#[F4:+y,F5:face:4]|F5:face:4": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", - "Frame/F3:-z#[F4:-y,F5:face:3]": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Frame/F3:-z#[F4:-y,F5:face:3]": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Frame/F3:-z#[F4:-y,F5:face:3]|F4:-y#[F3:-z,F5:face:0]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Frame/F3:-z#[F4:-y,F5:face:3]|F5:face:3": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", - "Frame/F4:+y#[F3:+z,F5:face:12]": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Frame/F4:+y#[F3:+z,F5:face:12]": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Frame/F4:+y#[F3:+z,F5:face:12]|F5:face:12": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", - "Frame/F4:+y#[F3:-z,F5:face:4]": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Frame/F4:+y#[F3:-z,F5:face:4]": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Frame/F4:+y#[F3:-z,F5:face:4]|F5:face:4": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", - "Frame/F4:-y#[F3:+z,F5:face:9]": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Frame/F4:-y#[F3:+z,F5:face:9]": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Frame/F4:-y#[F3:+z,F5:face:9]|F5:face:9": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", - "Frame/F4:-y#[F3:-z,F5:face:0]": "face.angle_plane !face.draft_neutral !face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Frame/F4:-y#[F3:-z,F5:face:0]": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Frame/F4:-y#[F3:-z,F5:face:0]|F5:face:0": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Frame/F5:face:0": "curved.axis curved.tangent_plane", "Frame/F5:face:11": "curved.axis curved.tangent_plane", @@ -9104,7 +9104,7 @@ "Body1/F2:top|F4:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:top|F6:side:c1#1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:top|F6:side:c1#2": "edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F4:bottom": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F4:bottom": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F4:bottom|F4:side:l1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F4:bottom|F4:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F4:bottom|F4:side:l3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -9113,20 +9113,20 @@ "Body1/F4:bottom|F9:side:l3": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Body1/F4:bottom|F9:side:l3#[F9:side:l1]#1": "edge.axis edge.normal_plane edge.project", "Body1/F4:bottom|F9:side:l3#[F9:side:l1]#2": "edge.axis edge.normal_plane edge.project", - "Body1/F4:side:l1": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F4:side:l1": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F4:side:l1|F4:side:l2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F4:side:l1|F4:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F4:side:l2": "face.angle_plane !face.draft_neutral !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F4:side:l2": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1/F4:side:l2|F4:side:l3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F4:side:l3": "face.angle_plane !face.draft_neutral !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F4:side:l3": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1/F4:side:l3|F4:side:l4": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F4:side:l4": "face.angle_plane !face.draft_neutral !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", - "Body1/F6:bottom": "!face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F4:side:l4": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.offset_plane face.press_pull face.shell face.sketch", + "Body1/F6:bottom": "face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F6:bottom|F6:side:c1#1": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F6:bottom|F6:side:c1#2": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F6:side:c1#1": "curved.axis curved.tangent_plane", "Body1/F6:side:c1#2": "curved.axis curved.tangent_plane", - "Body1/F9:end": "face.angle_plane !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F9:end": "face.angle_plane face.extrude !face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1/F9:end|F9:side:l1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F9:end|F9:side:l3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F9:end|F9:side:l3#[F9:side:l1]#1": "edge.axis edge.normal_plane edge.project", @@ -9136,7 +9136,7 @@ "Body1/F9:side:l1|F9:side:l3#[F9:side:l1]#2": "edge.axis !edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F9:side:l3": "face.angle_plane !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", "Body1/F9:side:l3#[F9:side:l1]#1": "face.angle_plane !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", - "Body1/F9:side:l3#[F9:side:l1]#2": "face.angle_plane !face.extrude !face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Body1/F9:side:l3#[F9:side:l1]#2": "face.angle_plane !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", "Body1/F9:side:l3|F9:side:l3#[F9:side:l1]#1": "edge.axis !edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F9:side:l3|F9:side:l3#[F9:side:l1]#2": "edge.axis !edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/body": "body.copy body.mirror body.move body.pattern", @@ -9223,7 +9223,7 @@ "Tool/F2:side:l4|F2:top": "edge.axis edge.chamfer !edge.fillet edge.normal_plane edge.project", "Tool/F2:side:l4|F4:side:l1": "edge.axis edge.chamfer !edge.fillet edge.normal_plane edge.project", "Tool/F2:top": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.offset_plane face.press_pull !face.shell face.sketch", - "Tool/F4:side:l1": "face.angle_plane !face.draft_neutral !face.extrude !face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Tool/F4:side:l1": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.offset_plane !face.press_pull !face.shell face.sketch", "Tool/body": "body.copy body.mirror body.move body.pattern", "Tool/v[F2:bottom & F2:side:l1 & F2:side:l2]": "vertex.plane_three_points vertex.point", "Tool/v[F2:bottom & F2:side:l1 & F4:side:l1]": "vertex.plane_three_points vertex.point", @@ -9292,7 +9292,7 @@ "Tool/F2:side:l4|F2:top": "edge.axis edge.chamfer !edge.fillet edge.normal_plane edge.project", "Tool/F2:side:l4|F4:side:l1": "edge.axis edge.chamfer !edge.fillet edge.normal_plane edge.project", "Tool/F2:top": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.offset_plane face.press_pull !face.shell face.sketch", - "Tool/F4:side:l1": "face.angle_plane !face.draft_neutral !face.extrude !face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Tool/F4:side:l1": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.offset_plane !face.press_pull !face.shell face.sketch", "Tool/body": "body.copy body.mirror body.move body.pattern", "Tool/v[F2:bottom & F2:side:l1 & F2:side:l2]": "vertex.plane_three_points vertex.point", "Tool/v[F2:bottom & F2:side:l1 & F4:side:l1]": "vertex.plane_three_points vertex.point", @@ -9333,7 +9333,7 @@ "Body1/F2:side:l4|F2:top~2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:side:l4|F2:top~3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:start": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", - "Body1/F2:top": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F2:top": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F2:top|F5:side:l1#[F5:side:l3]#1~1": "edge.axis edge.normal_plane edge.project", "Body1/F2:top|F5:side:l1#[F5:side:l3]#1~2": "edge.axis edge.normal_plane edge.project", "Body1/F2:top|F5:side:l1#[F5:side:l3]#2~1": "edge.axis edge.normal_plane edge.project", @@ -9344,18 +9344,18 @@ "Body1/F2:top|F5:side:l1~3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:top|F5:side:l3~1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:top|F5:side:l3~2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F5:end": "face.angle_plane !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F5:end": "face.angle_plane face.extrude !face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1/F5:end|F5:side:l1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F5:end|F5:side:l1#[F5:side:l3]#1": "edge.axis edge.normal_plane edge.project", "Body1/F5:end|F5:side:l1#[F5:side:l3]#2": "edge.axis edge.normal_plane edge.project", "Body1/F5:end|F5:side:l3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F5:side:l1": "face.angle_plane !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", "Body1/F5:side:l1#[F5:side:l3]#1": "face.angle_plane !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", - "Body1/F5:side:l1#[F5:side:l3]#1|F5:side:l3": "edge.axis !edge.chamfer edge.fillet edge.normal_plane edge.project", + "Body1/F5:side:l1#[F5:side:l3]#1|F5:side:l3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F5:side:l1#[F5:side:l3]#2": "face.angle_plane !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", "Body1/F5:side:l1#[F5:side:l3]#2|F5:side:l3": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F5:side:l1|F5:side:l1#[F5:side:l3]#1": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F5:side:l1|F5:side:l1#[F5:side:l3]#2": "edge.axis !edge.chamfer edge.fillet edge.normal_plane edge.project", + "Body1/F5:side:l1|F5:side:l1#[F5:side:l3]#2": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F5:side:l3": "face.angle_plane !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", "Body1/body": "body.copy body.mirror body.move body.pattern", "Body1/v[F2:side:l1 & F2:side:l2 & F2:start]": "vertex.plane_three_points vertex.point", @@ -9423,7 +9423,7 @@ "Body1/F2:start|F3:blend:F2:side:l1|F2:side:l4": "edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F2:start|F3:blend:F2:side:l2|F2:side:l3": "edge.chamfer edge.fillet edge.normal_plane edge.project edge.project+edit", "Body1/F2:start|F3:blend:F2:side:l3|F2:side:l4": "edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F2:top": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F2:top": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F2:top|F3:blend:F2:side:l1|F2:side:l2": "edge.chamfer edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", "Body1/F2:top|F3:blend:F2:side:l1|F2:side:l4": "edge.chamfer edge.chamfer+edit edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", "Body1/F2:top|F3:blend:F2:side:l2|F2:side:l3": "edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -9609,14 +9609,14 @@ "Body1/F4:face:5": "curved.axis curved.tangent_plane curved.tangent_plane+edit", "Body1/F4:face:6": "curved.axis curved.axis+edit curved.tangent_plane", "Body1/F4:face:7": "curved.axis curved.tangent_plane curved.tangent_plane+edit", - "Body1/F5:blend:F2:side:l1|F2:top": "face.angle_plane !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F5:blend:F2:side:l1|F2:top": "face.angle_plane face.extrude !face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1/F5:blend:F2:side:l1|F2:top|F5:blend:F2:side:l2|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F5:blend:F2:side:l1|F2:top|F5:blend:F2:side:l4|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F5:blend:F2:side:l2|F2:top": "face.angle_plane face.angle_plane+edit !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F5:blend:F2:side:l2|F2:top": "face.angle_plane face.angle_plane+edit face.extrude !face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1/F5:blend:F2:side:l2|F2:top|F5:blend:F2:side:l3|F2:top": "edge.axis edge.axis+edit edge.chamfer edge.fillet edge.normal_plane edge.project edge.project+edit", - "Body1/F5:blend:F2:side:l3|F2:top": "face.angle_plane !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F5:blend:F2:side:l3|F2:top": "face.angle_plane face.extrude !face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1/F5:blend:F2:side:l3|F2:top|F5:blend:F2:side:l4|F2:top": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project edge.project+edit", - "Body1/F5:blend:F2:side:l4|F2:top": "face.angle_plane !face.extrude !face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F5:blend:F2:side:l4|F2:top": "face.angle_plane face.extrude !face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1/body": "body.copy body.mirror body.move body.move+edit body.pattern", "Body1/v[F2:side:l1 & F2:side:l2 & F2:start]": "vertex.plane_three_points vertex.point", "Body1/v[F2:side:l1 & F2:side:l2 & F5:blend:F2:side:l1|F2:top & F5:blend:F2:side:l2|F2:top]": "vertex.plane_three_points vertex.point", @@ -9699,7 +9699,7 @@ "Body1/F2:side:l4|F2:top": "edge.axis edge.chamfer edge.fillet edge.fillet+edit edge.normal_plane edge.project", "Body1/F2:start": "face.angle_plane face.angle_plane+edit !face.draft_neutral face.extrude face.hole face.hole+edit face.midplane face.midplane+edit face.offset_plane face.press_pull !face.shell face.sketch face.sketch+edit", "Body1/F2:top": "face.angle_plane !face.draft_neutral face.extrude face.hole face.midplane face.offset_plane face.press_pull !face.shell face.sketch", - "Body1/F6:end": "!face.extrude face.hole face.midplane !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Body1/F6:end": "!face.extrude face.hole face.midplane face.offset_plane !face.press_pull !face.shell face.sketch", "Body1/F6:end|F6:side:l5": "edge.chamfer edge.fillet edge.normal_plane edge.project edge.project+edit", "Body1/F6:end|F6:side:l6": "edge.chamfer edge.chamfer+edit edge.fillet edge.normal_plane edge.project", "Body1/F6:end|F6:side:l7": "edge.chamfer edge.fillet edge.normal_plane edge.project edge.project+edit", @@ -9712,7 +9712,7 @@ "Body1/F6:side:l7|F6:side:l8": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Body1/F6:side:l7|F6:start": "edge.axis !edge.chamfer !edge.fillet edge.normal_plane edge.project", "Body1/F6:side:l8|F6:start": "edge.axis edge.axis+edit !edge.chamfer !edge.fillet edge.normal_plane edge.project", - "Body1/F6:start": "face.angle_plane !face.extrude face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Body1/F6:start": "face.angle_plane face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch", "Body1/body": "body.copy body.mirror body.move body.move+edit body.pattern", "Body1/v[F2:side:l1 & F2:side:l2 & F2:start]": "vertex.plane_three_points vertex.point", "Body1/v[F2:side:l1 & F2:side:l2 & F2:top]": "vertex.plane_three_points vertex.point", @@ -9771,15 +9771,15 @@ "Block/F2:side#2": "curved.axis curved.tangent_plane", "Block/F2:side#2|F2:top": "edge.chamfer edge.fillet edge.fillet+edit edge.normal_plane edge.normal_plane+edit edge.project", "Block/F2:top": "face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch face.sketch+edit", - "Block/F4:+x": "face.angle_plane face.angle_plane+edit !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Block/F4:+x": "face.angle_plane face.angle_plane+edit !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Block/F4:+x|F4:+y": "edge.axis edge.chamfer edge.fillet edge.fillet+edit edge.normal_plane edge.project", "Block/F4:+x|F4:-y": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", "Block/F4:+x|F4:-z": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Block/F4:+y": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Block/F4:+y": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Block/F4:+y|F4:-z": "edge.axis edge.chamfer edge.chamfer+edit edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", - "Block/F4:-y": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Block/F4:-y": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Block/F4:-y|F4:-z": "edge.axis edge.chamfer edge.chamfer+edit edge.fillet edge.normal_plane edge.project", - "Block/F4:-z": "face.angle_plane face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Block/F4:-z": "face.angle_plane face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Block/body": "body.copy body.mirror body.move body.pattern body.pattern+edit", "Block/v[F1:+x & F1:+y & F1:+z]": "vertex.plane_three_points vertex.plane_three_points+edit vertex.point", "Block/v[F1:+x & F1:+y & F1:-z]": "vertex.plane_three_points vertex.point", @@ -9810,7 +9810,7 @@ "design": "load" }, "typical/revolved-part": { - "Body1/F2:side:l1": "!face.extrude face.hole face.midplane !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F2:side:l1": "face.extrude face.hole face.midplane face.offset_plane face.press_pull face.shell face.sketch", "Body1/F2:side:l1|F2:side:l2#1": "edge.chamfer edge.chamfer+edit edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", "Body1/F2:side:l1|F2:side:l2#2": "edge.chamfer edge.chamfer+edit edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", "Body1/F2:side:l1|F2:side:l2#3": "edge.chamfer edge.chamfer+edit edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", @@ -9844,7 +9844,7 @@ "Body1/F2:side:l6#2|F2:side:l7": "edge.chamfer edge.chamfer+edit edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", "Body1/F2:side:l6#3": "curved.axis curved.tangent_plane", "Body1/F2:side:l6#3|F2:side:l7": "edge.chamfer edge.chamfer+edit edge.fillet edge.normal_plane edge.normal_plane+edit edge.project", - "Body1/F2:side:l7": "!face.extrude face.hole !face.offset_plane !face.press_pull face.shell !face.sketch", + "Body1/F2:side:l7": "face.extrude face.hole face.offset_plane face.press_pull face.shell face.sketch", "Body1/body": "body.copy body.copy+edit body.mirror body.move body.pattern", "Body1/v[F2:side:l1 & F2:side:l2#1 & F2:side:l2#2]": "vertex.plane_three_points vertex.plane_three_points+edit vertex.point", "Body1/v[F2:side:l1 & F2:side:l2#1 & F2:side:l2#3]": "vertex.plane_three_points vertex.plane_three_points+edit vertex.point", @@ -10015,7 +10015,7 @@ "design": "load" }, "typical/sweep": { - "Body1/F3:end": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Body1/F3:end": "face.angle_plane !face.draft_neutral face.extrude face.hole face.offset_plane face.press_pull !face.shell face.sketch", "Body1/F3:end|F3:side:l1#[F3:end]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F3:end|F3:side:l2#[F3:end]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", "Body1/F3:end|F3:side:l3#[F3:end]": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", @@ -10062,7 +10062,7 @@ "Body1/F3:side:l4#[F3:end]": "face.angle_plane !face.draft_neutral !face.extrude !face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", "Body1/F3:side:l4#[F3:start]": "face.angle_plane !face.draft_neutral !face.extrude face.hole !face.offset_plane !face.press_pull !face.shell !face.sketch", "Body1/F3:side:l4#[F3:start]|F3:start": "edge.axis edge.chamfer edge.fillet edge.normal_plane edge.project", - "Body1/F3:start": "face.angle_plane !face.draft_neutral !face.extrude !face.hole face.midplane !face.offset_plane !face.press_pull !face.shell !face.sketch", + "Body1/F3:start": "face.angle_plane !face.draft_neutral face.extrude !face.hole face.midplane face.offset_plane face.press_pull !face.shell face.sketch", "Body1/body": "body.copy body.mirror body.move body.pattern", "Body1/v[F3:end & F3:side:l1#[F3:end] & F3:side:l2#[F3:end]]": "vertex.plane_three_points vertex.point", "Body1/v[F3:end & F3:side:l1#[F3:end] & F3:side:l4#[F3:end]]": "vertex.plane_three_points vertex.point",