transform after fillet bug fix (#5882)
* fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * rotate Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * its not jsut translate Signed-off-by: Jess Frazelle <github@jessfraz.com> * its not jsut translate Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix Signed-off-by: Jess Frazelle <github@jessfraz.com> --------- Signed-off-by: Jess Frazelle <github@jessfraz.com>
This commit is contained in:
@ -376,7 +376,7 @@ impl Args {
|
||||
pub(crate) async fn flush_batch_for_solids(
|
||||
&self,
|
||||
exec_state: &mut ExecState,
|
||||
solids: Vec<Solid>,
|
||||
solids: &[Solid],
|
||||
) -> Result<(), KclError> {
|
||||
// Make sure we don't traverse sketches more than once.
|
||||
let mut traversed_sketches = Vec::new();
|
||||
|
@ -363,7 +363,7 @@ async fn execute_pattern_transform<T: GeometryTrait>(
|
||||
// Flush the batch for our fillets/chamfers if there are any.
|
||||
// If we do not flush these, then you won't be able to pattern something with fillets.
|
||||
// Flush just the fillets/chamfers that apply to these solids.
|
||||
T::flush_batch(args, exec_state, geo_set.clone()).await?;
|
||||
T::flush_batch(args, exec_state, &geo_set).await?;
|
||||
let starting: Vec<T> = geo_set.into();
|
||||
|
||||
if args.ctx.context_type == crate::execution::ContextType::Mock {
|
||||
@ -614,7 +614,7 @@ trait GeometryTrait: Clone {
|
||||
fn original_id(&self) -> Uuid;
|
||||
fn set_id(&mut self, id: Uuid);
|
||||
fn array_to_point3d(val: &KclValue, source_ranges: Vec<SourceRange>) -> Result<Point3d, KclError>;
|
||||
async fn flush_batch(args: &Args, exec_state: &mut ExecState, set: Self::Set) -> Result<(), KclError>;
|
||||
async fn flush_batch(args: &Args, exec_state: &mut ExecState, set: &Self::Set) -> Result<(), KclError>;
|
||||
}
|
||||
|
||||
impl GeometryTrait for Sketch {
|
||||
@ -633,7 +633,7 @@ impl GeometryTrait for Sketch {
|
||||
Ok(Point3d { x, y, z: 0.0 })
|
||||
}
|
||||
|
||||
async fn flush_batch(_: &Args, _: &mut ExecState, _: Self::Set) -> Result<(), KclError> {
|
||||
async fn flush_batch(_: &Args, _: &mut ExecState, _: &Self::Set) -> Result<(), KclError> {
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
@ -656,7 +656,7 @@ impl GeometryTrait for Solid {
|
||||
array_to_point3d(val, source_ranges)
|
||||
}
|
||||
|
||||
async fn flush_batch(args: &Args, exec_state: &mut ExecState, solid_set: Self::Set) -> Result<(), KclError> {
|
||||
async fn flush_batch(args: &Args, exec_state: &mut ExecState, solid_set: &Self::Set) -> Result<(), KclError> {
|
||||
args.flush_batch_for_solids(exec_state, solid_set).await
|
||||
}
|
||||
}
|
||||
@ -1221,7 +1221,7 @@ async fn inner_pattern_circular_3d(
|
||||
// Flush the batch for our fillets/chamfers if there are any.
|
||||
// If we do not flush these, then you won't be able to pattern something with fillets.
|
||||
// Flush just the fillets/chamfers that apply to these solids.
|
||||
args.flush_batch_for_solids(exec_state, solids.clone()).await?;
|
||||
args.flush_batch_for_solids(exec_state, &solids).await?;
|
||||
|
||||
let starting_solids = solids;
|
||||
|
||||
|
@ -210,7 +210,7 @@ async fn inner_shell(
|
||||
for solid in &solids {
|
||||
// Flush the batch for our fillets/chamfers if there are any.
|
||||
// If we do not do these for sketch on face, things will fail with face does not exist.
|
||||
args.flush_batch_for_solids(exec_state, vec![solid.clone()]).await?;
|
||||
args.flush_batch_for_solids(exec_state, &[solid.clone()]).await?;
|
||||
|
||||
for tag in &faces {
|
||||
let extrude_plane_id = tag.get_face_id(solid, exec_state, &args, false).await?;
|
||||
@ -320,7 +320,7 @@ async fn inner_hollow(
|
||||
) -> Result<Box<Solid>, KclError> {
|
||||
// Flush the batch for our fillets/chamfers if there are any.
|
||||
// If we do not do these for sketch on face, things will fail with face does not exist.
|
||||
args.flush_batch_for_solids(exec_state, vec![(*solid).clone()]).await?;
|
||||
args.flush_batch_for_solids(exec_state, &[(*solid).clone()]).await?;
|
||||
|
||||
args.batch_modeling_cmd(
|
||||
exec_state.next_uuid(),
|
||||
|
@ -1269,7 +1269,7 @@ pub(crate) async fn inner_start_profile_at(
|
||||
SketchSurface::Face(face) => {
|
||||
// Flush the batch for our fillets/chamfers if there are any.
|
||||
// If we do not do these for sketch on face, things will fail with face does not exist.
|
||||
args.flush_batch_for_solids(exec_state, vec![(*face.solid).clone()])
|
||||
args.flush_batch_for_solids(exec_state, &[(*face.solid).clone()])
|
||||
.await?;
|
||||
}
|
||||
SketchSurface::Plane(plane) if !plane.is_standard() => {
|
||||
|
@ -147,6 +147,12 @@ async fn inner_scale(
|
||||
exec_state: &mut ExecState,
|
||||
args: Args,
|
||||
) -> Result<SolidOrSketchOrImportedGeometry, KclError> {
|
||||
// If we have a solid, flush the fillets and chamfers.
|
||||
// Only transforms needs this, it is very odd, see: https://github.com/KittyCAD/modeling-app/issues/5880
|
||||
if let SolidOrSketchOrImportedGeometry::SolidSet(solids) = &objects {
|
||||
args.flush_batch_for_solids(exec_state, solids).await?;
|
||||
}
|
||||
|
||||
for object_id in objects.ids() {
|
||||
let id = exec_state.next_uuid();
|
||||
|
||||
@ -344,6 +350,12 @@ async fn inner_translate(
|
||||
exec_state: &mut ExecState,
|
||||
args: Args,
|
||||
) -> Result<SolidOrSketchOrImportedGeometry, KclError> {
|
||||
// If we have a solid, flush the fillets and chamfers.
|
||||
// Only transforms needs this, it is very odd, see: https://github.com/KittyCAD/modeling-app/issues/5880
|
||||
if let SolidOrSketchOrImportedGeometry::SolidSet(solids) = &objects {
|
||||
args.flush_batch_for_solids(exec_state, solids).await?;
|
||||
}
|
||||
|
||||
for object_id in objects.ids() {
|
||||
let id = exec_state.next_uuid();
|
||||
|
||||
@ -690,6 +702,12 @@ async fn inner_rotate(
|
||||
exec_state: &mut ExecState,
|
||||
args: Args,
|
||||
) -> Result<SolidOrSketchOrImportedGeometry, KclError> {
|
||||
// If we have a solid, flush the fillets and chamfers.
|
||||
// Only transforms needs this, it is very odd, see: https://github.com/KittyCAD/modeling-app/issues/5880
|
||||
if let SolidOrSketchOrImportedGeometry::SolidSet(solids) = &objects {
|
||||
args.flush_batch_for_solids(exec_state, solids).await?;
|
||||
}
|
||||
|
||||
for object_id in objects.ids() {
|
||||
let id = exec_state.next_uuid();
|
||||
|
||||
|
Reference in New Issue
Block a user