* bump modeling-cmds, nuke slow world Signed-off-by: Jess Frazelle <github@jessfraz.com> * more stuffs 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> * i mechanical engineered today Signed-off-by: Jess Frazelle <github@jessfraz.com> * reverse uno your revolves 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> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * retry logic 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> * fixes 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>
72 lines
2.1 KiB
Plaintext
72 lines
2.1 KiB
Plaintext
// Fan
|
|
// Spinning axial fan that moves airflow
|
|
|
|
// Set units
|
|
@settings(defaultLengthUnit = mm)
|
|
|
|
// Import parameters
|
|
import * from "parameters.kcl"
|
|
|
|
// Model the center of the fan
|
|
fanCenter = startSketchOn(YZ)
|
|
|> circle(center = [0, 0], radius = fanHeight / 2, tag = $centerBend)
|
|
|> extrude(%, length = fanHeight)
|
|
|> fillet(radius = 1.5, tags = [getOppositeEdge(centerBend)])
|
|
|
|
// Create a function for a lofted fan blade cross section that rotates about the center hub of the fan
|
|
fn fanBlade(offsetHeight, startAngle) {
|
|
fanBlade = startSketchOn(offsetPlane(YZ, offset = offsetHeight))
|
|
|> startProfile(at = [
|
|
15 * cos(startAngle),
|
|
15 * sin(startAngle)
|
|
])
|
|
|> arc(angleStart = startAngle, angleEnd = startAngle + 14, radius = 15)
|
|
|> arc(
|
|
endAbsolute = [
|
|
fanSize * 22 / 50 * cos(startAngle - 20),
|
|
fanSize * 22 / 50 * sin(startAngle - 20)
|
|
],
|
|
interiorAbsolute = [
|
|
fanSize * 11 / 50 * cos(startAngle + 3),
|
|
fanSize * 11 / 50 * sin(startAngle + 3)
|
|
],
|
|
)
|
|
|> arc(
|
|
endAbsolute = [
|
|
fanSize * 22 / 50 * cos(startAngle - 24),
|
|
fanSize * 22 / 50 * sin(startAngle - 24)
|
|
],
|
|
interiorAbsolute = [
|
|
fanSize * 22 / 50 * cos(startAngle - 22),
|
|
fanSize * 22 / 50 * sin(startAngle - 22)
|
|
],
|
|
)
|
|
|> arc(
|
|
endAbsolute = [profileStartX(%), profileStartY(%)],
|
|
interiorAbsolute = [
|
|
fanSize * 11 / 50 * cos(startAngle - 5),
|
|
fanSize * 11 / 50 * sin(startAngle - 5)
|
|
],
|
|
)
|
|
|> close()
|
|
return fanBlade
|
|
}
|
|
|
|
// Loft the fan blade cross sections into a single blade, then pattern them about the fan center
|
|
crossSections = [
|
|
fanBlade(offsetHeight = 4.5, startAngle = 50),
|
|
fanBlade(offsetHeight = (fanHeight - 2 - 4) / 2, startAngle = 30),
|
|
fanBlade(offsetHeight = fanHeight - 2, startAngle = 0)
|
|
]
|
|
bladeLoft = loft(crossSections)
|
|
|> patternCircular3d(
|
|
instances = 9,
|
|
axis = [1, 0, 0],
|
|
center = [0, 0, 0],
|
|
arcDegrees = 360,
|
|
rotateDuplicates = true,
|
|
)
|
|
|
|
[fanCenter, bladeLoft]
|
|
|> appearance(color = "#110803")
|