* Change to unzip * Download kcl-samples as zip to public dir * Fix fetch:samples, e2e electron still not working * Change error message to be clearer * Refactor so that input and output directories of sim tests can be different * Add kcl samples test implementation * Update output since adding kcl_samples tests * Update kcl-samples branch * Fix git-ignore pattern to only apply to the root * Fix yarn install and yarn fetch:samples to work the first time * Remove unneeded exists check * Change to use kcl-samples in public directory * Add kcl-samples * Update output since updating kcl-samples * Update output files * Change to not fetch samples during yarn install * Update output after merge * Ignore kcl-samples in codespell * WIP: Don't run e2e if only kcl-samples changed * Conditionally run cargo tests * Fix to round floating point values in program memory arrays * Update output since merge and rounding numbers in memory * Fix memory redaction for floating point to find more values * Fix float redaction pattern * Update output since rounding floating point numbers * Add center to floating point pattern * Fix trigger to use picomatch syntax * Update output since rounding center * Remove kcl-samples github workflows * Enable Rust backtrace * Update output after re-running * Update output after changing order of post-extrude commands * Fix to have deterministic order of commands * Update output after reverting ordering changes * Update kcl-samples * Update output after updating samples * Fix error messages to show the names of all samples that failed * Change cargo test command to match current one * Update kcl-samples * Update output since updating kcl-samples * Add generate manifest workflow and yarn script * Fix error check to actually work * Change util function to be what we actually need * Move new files after merge * Fix paths since directory move * Add dependabot updates for kcl-samples * Add GitHub workflow to make PR to kcl-samples repo * Add GitHub workflow to check kcl-samples header comments * Fix worfklow to change to the right directory * Add auto-commit simulation test output changes * Add permissions to workflows * Fix to run git commit step * Install just if needed * Fix directory of justfile * Add installation of cargo-insta * Fix to use underscore * Fix to allow just command failure * Change to always install CLI tools and cache them * Trying to fix overwrite failing * Combine commands * Change reviewer * Change to PR targeting the next branch * Change git commands to not do unnecessary fetch * Comment out trigger for creating a PR * Update kcl-samples from next branch * Update outputs after kcl-samples change * Fix to use bash pipefail * Add rust backtrace * Print full env from sim tests * Change command to use long option name * Fix to use ci profile even when calling through just * Add INSTA_UPDATE=always * Fix git push by using an app token on checkout * Add comments * Fix to use bash options * Change to echo when no changes are found * Fix so that kcl-samples updates don't trigger full run * Fix paths to reflect new crate location * Fix path detection * Fix e2e job to ignore kcl_samples simulation test output * Fix the fetch logic for the KCL samples after vendoring (#5661) Fixes the last 2 E2E tests for #5460. --------- Co-authored-by: Pierre Jacquier <pierre@zoo.dev> Co-authored-by: Pierre Jacquier <pierrejacquier39@gmail.com> Co-authored-by: Frank Noirot <frank@zoo.dev>
198 lines
5.6 KiB
Plaintext
198 lines
5.6 KiB
Plaintext
// Car Wheel
|
|
// A sports car wheel with a circular lug pattern and spokes.
|
|
|
|
|
|
// Set units
|
|
@settings(defaultLengthUnit = in)
|
|
|
|
|
|
// Import Constants
|
|
import lugCount, lugSpacing, offset, backSpacing, wheelWidth, wheelDiameter, spokeCount, spokeGap, spokeAngle, spokeThickness from "globals.kcl"
|
|
|
|
// Create the wheel center
|
|
lugBase = startSketchOn('XZ')
|
|
|> circle(
|
|
center = [0, 0],
|
|
radius = (lugSpacing + 1.5) / 2
|
|
)
|
|
|> hole(circle(
|
|
center = [0, 0],
|
|
radius = (lugSpacing - 1.5) / 2
|
|
), %)
|
|
|> extrude(length = wheelWidth / 20)
|
|
|
|
// Extend the wheel center and bore holes to accomidate the lug heads
|
|
lugExtrusion = startSketchOn(lugBase, 'END')
|
|
|> circle(
|
|
center = [0, 0],
|
|
radius = (lugSpacing + 1.5) / 2
|
|
)
|
|
|> hole(circle(
|
|
center = [0, 0],
|
|
radius = (lugSpacing - 1.5) / 2
|
|
), %)
|
|
|> extrude(length = wheelWidth / 10)
|
|
|
|
// Create the circular pattern for the lugs
|
|
lugClearance = startSketchOn(lugExtrusion, 'END')
|
|
|> circle(
|
|
center = [lugSpacing / 2, 0],
|
|
radius = 1.2 / 2
|
|
)
|
|
|> patternCircular2d(
|
|
arcDegrees = 360,
|
|
center = [0, 0],
|
|
instances = lugCount,
|
|
rotateDuplicates = true
|
|
)
|
|
|> extrude(length = -wheelWidth / 10)
|
|
|
|
// Create the circular pattern for the lug holes
|
|
lugHoles = startSketchOn(lugBase, 'END')
|
|
|> circle(
|
|
center = [lugSpacing / 2, 0],
|
|
radius = 16 * mm() / 2
|
|
)
|
|
|> patternCircular2d(
|
|
arcDegrees = 360,
|
|
center = [0, 0],
|
|
instances = lugCount,
|
|
rotateDuplicates = true
|
|
)
|
|
|> extrude(length = -wheelWidth / 20)
|
|
|> appearance(color = "#ffffff", metalness = 0, roughness = 0)
|
|
|
|
// Add detail to the wheel center by revolving curved edge profiles
|
|
wheelCenterInner = startSketchOn('XY')
|
|
|> startProfileAt([(lugSpacing - 1.5) / 2, 0], %)
|
|
|> yLine(-wheelWidth / 10 - (wheelWidth / 20), %)
|
|
|> bezierCurve({
|
|
to = [-0.4, 0.3],
|
|
control1 = [-0.3, 0],
|
|
control2 = [0, 0.3]
|
|
}, %)
|
|
|> yLineTo(0, %)
|
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|
|> close()
|
|
|> revolve({ axis = 'y' }, %)
|
|
|> appearance(color = "#ffffff", metalness = 0, roughness = 0)
|
|
|
|
wheelCenterOuter = startSketchOn('XY')
|
|
|> startProfileAt([(lugSpacing + 1.5) / 2, 0], %)
|
|
|> yLine(-wheelWidth / 10 - (wheelWidth / 20), %)
|
|
|> bezierCurve({
|
|
to = [0.4, -0.1],
|
|
control1 = [0.3, 0],
|
|
control2 = [0.2, -0.3]
|
|
}, %)
|
|
|> yLineTo(-wheelWidth / 20, %)
|
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|
|> close()
|
|
|> revolve({ axis = 'y' }, %)
|
|
|> appearance(color = "#ffffff", metalness = 0, roughness = 0)
|
|
|
|
// Write a function that defines the spoke geometry, patterns and extrudes it
|
|
fn spoke(spokeGap, spokeAngle, spokeThickness) {
|
|
// Seperating the spoke base planes
|
|
plane001 = {
|
|
plane = {
|
|
origin = [0.0, 0.0, spokeGap / 2],
|
|
xAxis = [1.0, 0.0, spokeAngle],
|
|
yAxis = [0.0, 1.0, 0.0],
|
|
zAxis = [0.0, 0.0, 1.0]
|
|
}
|
|
}
|
|
|
|
// Spoke cross sections
|
|
spokeProfile = startSketchOn(plane001)
|
|
|> startProfileAt([(lugSpacing + 2) / 2, -0.7], %)
|
|
|> bezierCurve({
|
|
to = [
|
|
(wheelDiameter - lugSpacing - 2.9) / 2,
|
|
offset
|
|
],
|
|
control1 = [
|
|
(wheelDiameter - lugSpacing - 2.9) / 3.5,
|
|
offset / 7
|
|
],
|
|
control2 = [
|
|
(wheelDiameter - lugSpacing - 2.9) / 4,
|
|
offset / 1.5
|
|
]
|
|
}, %)
|
|
|> yLine(-wheelWidth / 15, %)
|
|
|> bezierCurve({
|
|
to = [
|
|
-(wheelDiameter - lugSpacing - 2.9) / 2,
|
|
-offset
|
|
],
|
|
control1 = [
|
|
-(wheelDiameter - lugSpacing - 2.9) / 5,
|
|
-offset / 7
|
|
],
|
|
control2 = [
|
|
-(wheelDiameter - lugSpacing - 2.9) / 5,
|
|
-offset / 1.5
|
|
]
|
|
}, %)
|
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|
|> close()
|
|
|
|
// Circular pattern spokes
|
|
spokePattern = extrude(spokeProfile, length = spokeThickness)
|
|
|> patternCircular3d(
|
|
axis = [0, 1, 0],
|
|
center = [0, -2000, 0],
|
|
instances = spokeCount,
|
|
arcDegrees = 360,
|
|
rotateDuplicates = true
|
|
)
|
|
|> appearance(color = "#ffffff", metalness = 0, roughness = 0)
|
|
return spokePattern
|
|
}
|
|
|
|
spoke(spokeGap, spokeAngle, spokeThickness)
|
|
spoke(-spokeGap, -spokeAngle, -spokeThickness)
|
|
|
|
// Define and revolve wheel exterior
|
|
startSketchOn('XY')
|
|
|> startProfileAt([
|
|
wheelDiameter / 2,
|
|
-wheelWidth + backSpacing + offset
|
|
], %)
|
|
|> yLine(wheelWidth * 0.25, %)
|
|
|> line(end = [-wheelWidth * 0.02, wheelWidth * 0.02])
|
|
|> yLine(wheelWidth * 0.25, %)
|
|
|> line(end = [wheelWidth * 0.02, wheelWidth * 0.02])
|
|
|> yLineTo(backSpacing + offset, %)
|
|
|> line(end = [wheelWidth * 0.05, wheelWidth * .01])
|
|
|> yLine(wheelWidth * 0.05, %)
|
|
|> xLine(-wheelWidth * 0.03, %)
|
|
|> yLine(-wheelWidth * 0.02, %)
|
|
|> line(end = [-wheelWidth * 0.05, -wheelWidth * 0.01])
|
|
|> yLine(-backSpacing * 0.7, %)
|
|
|> line(end = [
|
|
-wheelDiameter * 0.01,
|
|
-wheelWidth * 0.02
|
|
])
|
|
|> yLineTo(offset - 0.2, %)
|
|
|> line(end = [
|
|
-wheelDiameter * 0.03,
|
|
-wheelWidth * 0.02
|
|
])
|
|
|> yLine(-wheelWidth * 0.02, %)
|
|
|> line(end = [
|
|
wheelDiameter * 0.03,
|
|
-wheelWidth * 0.1
|
|
])
|
|
|> yLine(-wheelWidth * 0.05, %)
|
|
|> line(end = [wheelWidth * 0.02, -wheelWidth * 0.02])
|
|
|> yLineTo(-wheelWidth + backSpacing + offset - 0.28, %)
|
|
|> line(end = [wheelWidth * 0.05, -wheelWidth * 0.01])
|
|
|> yLine(-wheelWidth * 0.02, %)
|
|
|> xLine(wheelWidth * 0.03, %)
|
|
|> yLine(wheelWidth * 0.05, %)
|
|
|> close()
|
|
|> revolve({ axis = 'y' }, %)
|
|
|> appearance(color = "#ffffff", metalness = 0, roughness = 0)
|