Skip to content

Commit

Permalink
apply fillets before a shell (#3261)
Browse files Browse the repository at this point in the history
* add test for fillet and shell

Signed-off-by: Jess Frazelle <[email protected]>

* apply fillets before a shell

Signed-off-by: Jess Frazelle <[email protected]>

---------

Signed-off-by: Jess Frazelle <[email protected]>
  • Loading branch information
jessfraz authored Aug 4, 2024
1 parent 29f57be commit 21389c0
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 0 deletions.
5 changes: 5 additions & 0 deletions src/wasm-lib/kcl/src/std/shell.rs
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,11 @@ async fn inner_shell(
}));
}

// 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_extrude_group_set(extrude_group.clone().into())
.await?;

args.batch_modeling_cmd(
uuid::Uuid::new_v4(),
ModelingCmd::Solid3DShellFace {
Expand Down
81 changes: 81 additions & 0 deletions src/wasm-lib/tests/executor/inputs/fillet-and-shell.kcl
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
const rpizWidth = 30
const rpizLength = 65

const caseThickness = 1

const border = 4

const screwHeight = 4

const caseWidth = rpizWidth + border * 2
const caseLength = rpizLength + border * 2
const caseHeight = 8

const widthBetweenScrews = 23
const lengthBetweenScrews = 29 * 2

const miniHdmiDistance = 12.4
const microUsb1Distance = 41.4
const microUsb2Distance = 54

const miniHdmiWidth = 11.2
const microUsbWidth = 7.4
const connectorPadding = 4

const miniHdmiHole = startSketchAt([
0,
border + miniHdmiDistance - (miniHdmiWidth / 2)
])
|> lineTo([
0,
border + miniHdmiDistance + miniHdmiWidth / 2
], %)
|> lineTo([
1,
border + miniHdmiDistance + miniHdmiWidth / 2
], %)
|> lineTo([
1,
border + miniHdmiDistance - (miniHdmiWidth / 2)
], %)
|> close(%)

const case = startSketchOn('XY')
|> startProfileAt([0, 0], %)
|> lineTo([caseWidth, 0], %, $edge1)
|> lineTo([caseWidth, caseLength], %, $edge2)
|> lineTo([0, caseLength], %, $edge3)
|> close(%, $edge4)
|> extrude(caseHeight, %)
|> fillet({
radius: 1,
tags: [
getNextAdjacentEdge(edge1),
getNextAdjacentEdge(edge2),
getNextAdjacentEdge(edge3),
getNextAdjacentEdge(edge4)
],
}, %)


fn m25Screw = (x, y, height) => {
const screw = startSketchOn("XY")
|> startProfileAt([0, 0], %)
|> circle([x, y], 2.5, %)
|> hole(circle([x, y], 1.25, %), %)
|> extrude(height, %)
return screw
}

m25Screw(border + rpizWidth / 2 - (widthBetweenScrews / 2), 0 + border + rpizLength / 2 - (lengthBetweenScrews / 2), screwHeight)

m25Screw(border + rpizWidth / 2 - (widthBetweenScrews / 2), 0 + border + rpizLength / 2 + lengthBetweenScrews / 2, screwHeight)

m25Screw(border + rpizWidth / 2 + widthBetweenScrews / 2, 0 + border + rpizLength / 2 + lengthBetweenScrews / 2, screwHeight)

m25Screw(border + rpizWidth / 2 + widthBetweenScrews / 2, 0 + border + rpizLength / 2 - (lengthBetweenScrews / 2), screwHeight)

shell({
faces: ['end'],
thickness: caseThickness
}, case)
12 changes: 12 additions & 0 deletions src/wasm-lib/tests/executor/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2371,3 +2371,15 @@ someFunction('INVALID')
r#"semantic: KclErrorDetails { source_ranges: [SourceRange([89, 114]), SourceRange([126, 155]), SourceRange([159, 182])], message: "Argument at index 0 was supposed to be type kcl_lib::std::sketch::SketchData but wasn't" }"#
);
}

#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_fillet_and_shell() {
let code = kcl_input!("fillet-and-shell");

let result = execute_and_snapshot(code, UnitLength::Mm).await;
assert!(result.is_err());
assert_eq!(
result.err().unwrap().to_string(),
r#"engine: KclErrorDetails { source_ranges: [SourceRange([2004, 2065])], message: "Modeling command failed: [ApiError { error_code: InternalEngine, message: \"Shell of non-planar solid3d not available yet\" }]" }"#
);
}

0 comments on commit 21389c0

Please sign in to comment.