fix sketch on face of union (#6949)
* fix sketch on face of union Signed-off-by: Jess Frazelle <github@jessfraz.com> * rotate the model Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> --------- Signed-off-by: Jess Frazelle <github@jessfraz.com>
This commit is contained in:
@ -14,7 +14,7 @@ use super::{args::TyF64, DEFAULT_TOLERANCE};
|
||||
use crate::{
|
||||
errors::{KclError, KclErrorDetails},
|
||||
execution::{types::RuntimeType, ExecState, KclValue, Solid},
|
||||
std::Args,
|
||||
std::{patterns::GeometryTrait, Args},
|
||||
};
|
||||
|
||||
/// Union two or more solids into a single solid.
|
||||
@ -123,7 +123,7 @@ pub(crate) async fn inner_union(
|
||||
let solid_out_id = exec_state.next_uuid();
|
||||
|
||||
let mut solid = solids[0].clone();
|
||||
solid.id = solid_out_id;
|
||||
solid.set_id(solid_out_id);
|
||||
let mut new_solids = vec![solid.clone()];
|
||||
|
||||
if args.ctx.no_engine_commands().await {
|
||||
@ -155,7 +155,7 @@ pub(crate) async fn inner_union(
|
||||
|
||||
// If we have more solids, set those as well.
|
||||
if !extra_solid_ids.is_empty() {
|
||||
solid.id = extra_solid_ids[0];
|
||||
solid.set_id(extra_solid_ids[0]);
|
||||
new_solids.push(solid.clone());
|
||||
}
|
||||
|
||||
@ -249,7 +249,7 @@ pub(crate) async fn inner_intersect(
|
||||
let solid_out_id = exec_state.next_uuid();
|
||||
|
||||
let mut solid = solids[0].clone();
|
||||
solid.id = solid_out_id;
|
||||
solid.set_id(solid_out_id);
|
||||
let mut new_solids = vec![solid.clone()];
|
||||
|
||||
if args.ctx.no_engine_commands().await {
|
||||
@ -281,7 +281,7 @@ pub(crate) async fn inner_intersect(
|
||||
|
||||
// If we have more solids, set those as well.
|
||||
if !extra_solid_ids.is_empty() {
|
||||
solid.id = extra_solid_ids[0];
|
||||
solid.set_id(extra_solid_ids[0]);
|
||||
new_solids.push(solid.clone());
|
||||
}
|
||||
|
||||
@ -385,7 +385,7 @@ pub(crate) async fn inner_subtract(
|
||||
let solid_out_id = exec_state.next_uuid();
|
||||
|
||||
let mut solid = solids[0].clone();
|
||||
solid.id = solid_out_id;
|
||||
solid.set_id(solid_out_id);
|
||||
let mut new_solids = vec![solid.clone()];
|
||||
|
||||
if args.ctx.no_engine_commands().await {
|
||||
@ -419,7 +419,7 @@ pub(crate) async fn inner_subtract(
|
||||
|
||||
// If we have more solids, set those as well.
|
||||
if !extra_solid_ids.is_empty() {
|
||||
solid.id = extra_solid_ids[0];
|
||||
solid.set_id(extra_solid_ids[0]);
|
||||
new_solids.push(solid.clone());
|
||||
}
|
||||
|
||||
|
@ -598,7 +598,7 @@ fn array_to_point2d(
|
||||
.map(|val| val.as_point2d().unwrap())
|
||||
}
|
||||
|
||||
trait GeometryTrait: Clone {
|
||||
pub trait GeometryTrait: Clone {
|
||||
type Set: Into<Vec<Self>> + Clone;
|
||||
fn id(&self) -> Uuid;
|
||||
fn original_id(&self) -> Uuid;
|
||||
@ -608,6 +608,7 @@ trait GeometryTrait: Clone {
|
||||
source_ranges: Vec<SourceRange>,
|
||||
exec_state: &mut ExecState,
|
||||
) -> Result<[TyF64; 3], KclError>;
|
||||
#[allow(async_fn_in_trait)]
|
||||
async fn flush_batch(args: &Args, exec_state: &mut ExecState, set: &Self::Set) -> Result<(), KclError>;
|
||||
}
|
||||
|
||||
@ -641,6 +642,8 @@ impl GeometryTrait for Solid {
|
||||
type Set = Vec<Solid>;
|
||||
fn set_id(&mut self, id: Uuid) {
|
||||
self.id = id;
|
||||
// We need this for in extrude.rs when you sketch on face.
|
||||
self.sketch.id = id;
|
||||
}
|
||||
|
||||
fn id(&self) -> Uuid {
|
||||
|
Reference in New Issue
Block a user