Skip to content

Commit ee37d0b

Browse files
authored
YOYO NEW KCL DOCS!! (#694)
1 parent b9c23b2 commit ee37d0b

34 files changed

+2071
-40
lines changed

content/kcl-test-outputs/models/serial_test_example_fn_std-sketch-extrude7_output.gltf

Lines changed: 902 additions & 0 deletions
Large diffs are not rendered by default.

content/kcl-test-outputs/models/serial_test_example_fn_std-sketch-extrude8_output.gltf

Lines changed: 445 additions & 0 deletions
Large diffs are not rendered by default.
41.2 KB
Loading
106 KB
Loading

content/pages/docs/kcl-samples/README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ When you submit a PR to add or modify KCL samples, images will be generated and
5151
[![c-shape-solid](screenshots/c-shape-solid.png)](c-shape-solid/main.kcl)
5252
#### [car-wheel-assembly](car-wheel-assembly/main.kcl) ([screenshot](screenshots/car-wheel-assembly.png))
5353
[![car-wheel-assembly](screenshots/car-wheel-assembly.png)](car-wheel-assembly/main.kcl)
54+
#### [cassette](cassette/main.kcl) ([screenshot](screenshots/cassette.png))
55+
[![cassette](screenshots/cassette.png)](cassette/main.kcl)
5456
#### [clock](clock/main.kcl) ([screenshot](screenshots/clock.png))
5557
[![clock](screenshots/clock.png)](clock/main.kcl)
5658
#### [coilover-assembly](coilover-assembly/main.kcl) ([screenshot](screenshots/coilover-assembly.png))
@@ -119,6 +121,8 @@ When you submit a PR to add or modify KCL samples, images will be generated and
119121
[![gridfinity-bins-stacking-lip](screenshots/gridfinity-bins-stacking-lip.png)](gridfinity-bins-stacking-lip/main.kcl)
120122
#### [hammer](hammer/main.kcl) ([screenshot](screenshots/hammer.png))
121123
[![hammer](screenshots/hammer.png)](hammer/main.kcl)
124+
#### [hand-trolley](hand-trolley/main.kcl) ([screenshot](screenshots/hand-trolley.png))
125+
[![hand-trolley](screenshots/hand-trolley.png)](hand-trolley/main.kcl)
122126
#### [helical-gear](helical-gear/main.kcl) ([screenshot](screenshots/helical-gear.png))
123127
[![helical-gear](screenshots/helical-gear.png)](helical-gear/main.kcl)
124128
#### [helical-planetary-gearset](helical-planetary-gearset/main.kcl) ([screenshot](screenshots/helical-planetary-gearset.png))
@@ -225,6 +229,8 @@ When you submit a PR to add or modify KCL samples, images will be generated and
225229
[![split-washer-spring-version](screenshots/split-washer-spring-version.png)](split-washer-spring-version/main.kcl)
226230
#### [spool](spool/main.kcl) ([screenshot](screenshots/spool.png))
227231
[![spool](screenshots/spool.png)](spool/main.kcl)
232+
#### [sprocket](sprocket/main.kcl) ([screenshot](screenshots/sprocket.png))
233+
[![sprocket](screenshots/sprocket.png)](sprocket/main.kcl)
228234
#### [spur-gear](spur-gear/main.kcl) ([screenshot](screenshots/spur-gear.png))
229235
[![spur-gear](screenshots/spur-gear.png)](spur-gear/main.kcl)
230236
#### [spur-reduction-gearset](spur-reduction-gearset/main.kcl) ([screenshot](screenshots/spur-reduction-gearset.png))

content/pages/docs/kcl-samples/bike-hub-washer/main.kcl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// Bike hub washer
12
// Washer to protect the hub, it is made for the front wheel and might work for various generic front hubs.
23

34
@settings(defaultLengthUnit = mm)
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
// Sprocket Cassette
2+
// A sprocket cassette is a stack of individual sprockets that mount together on a splined hub to provide multiple gear ratios
3+
4+
// Set Units
5+
@settings(defaultLengthUnit = in)
6+
7+
// Define parameters
8+
// #25 chain size
9+
chainPitch = 1 / 4
10+
rollerWidth = 3 / 32
11+
rollerDiameter = 0.13
12+
pinDiameter = 3 / 32
13+
shaftDiameter = 12mm
14+
15+
// Define a function to create a sprocket with a specific number of teeth
16+
fn sprocket(@speed, nTeeth) {
17+
pitchDiameter = chainPitch * 1 / sin(180deg / nTeeth)
18+
19+
// Sketch the central mounting spine to be cut from each sprocket profile
20+
spline = startSketchOn(XZ)
21+
|> startProfile(at = [shaftDiameter / 2, 0])
22+
|> arc(angleStart = 0, angleEnd = 10, radius = shaftDiameter / 2)
23+
|> line(endAbsolute = polar(angle = 10deg, length = shaftDiameter / 2 - 0.01))
24+
|> arc(angleStart = 10, angleEnd = 20, radius = shaftDiameter / 2 - 0.01)
25+
|> line(endAbsolute = polar(angle = 20deg, length = shaftDiameter / 2))
26+
|> patternCircular2d(instances = 360 / 20, center = [0, 0])
27+
|> close()
28+
29+
// build the sprocket
30+
sprocket = startSketchOn(offsetPlane(XZ, offset = -speed * rollerWidth))
31+
|> startProfile(at = [
32+
(pitchDiameter - rollerDiameter) / 2,
33+
0
34+
])
35+
|> arc(angleStart = 180, angleEnd = 90 + 360 / nTeeth, diameter = rollerDiameter)
36+
|> tangentialArc(angle = 28deg, radius = chainPitch - (rollerDiameter / 2))
37+
|> arc(interiorAbsolute = polar(angle = 170 / nTeeth, length = sqrt(lastSegX() ^ 2 + lastSegY() ^ 2)), endAbsolute = polar(angle = 180 / nTeeth, length = sqrt(lastSegX() ^ 2 + lastSegY() ^ 2)))
38+
|> mirror2d(axis = X)
39+
|> patternCircular2d(instances = nTeeth, center = [0, 0])
40+
|> close()
41+
|> subtract2d(tool = spline)
42+
|> extrude(length = rollerWidth / 2)
43+
44+
// Place a mounting spacer between each sprocket body
45+
spacer = startSketchOn(sprocket, face = END)
46+
|> circle(center = [0, 0], diameter = shaftDiameter * 1.3)
47+
|> subtract2d(tool = circle(center = [0, 0], diameter = shaftDiameter))
48+
|> extrude(length = rollerWidth / 2, method = NEW)
49+
|> appearance(color = "#0f0f0f")
50+
51+
return sprocket
52+
}
53+
54+
// Create a 7-speed cassette from 11 to 36 teeth
55+
reduce(
56+
[11, 15, 19, 23, 27, 31, 36],
57+
initial = 0_,
58+
f = fn(@nTeeth, accum) {
59+
// speed index is accum + 1 since accum starts at 0
60+
sprocket(accum + 1, nTeeth = nTeeth)
61+
return accum + 1
62+
},
63+
)
Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
// Hand Trolley Axle
2+
3+
// Set units
4+
@settings(defaultLengthUnit = in)
5+
6+
// Import parameters
7+
import * from "parameters.kcl"
8+
9+
// Model the lifting grate as a sheet metal part
10+
grate = startSketchOn(-YZ)
11+
|> startProfile(at = [-grateDepth, 0])
12+
|> yLine(length = grateThickness, tag = $seg11)
13+
|> xLine(endAbsolute = tubeDiameter)
14+
|> tangentialArc(angle = 90deg, radius = bendRadius)
15+
|> yLine(length = 1.5, tag = $seg01)
16+
|> xLine(length = grateThickness, tag = $seg10)
17+
|> yLine(length = -segLen(seg01))
18+
|> tangentialArc(angle = -90deg, radius = bendRadius + grateThickness)
19+
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
20+
|> close()
21+
|> extrude(
22+
length = frameWidth + tubeDiameter,
23+
symmetric = true,
24+
tagStart = $capStart001,
25+
tagEnd = $capEnd001,
26+
)
27+
|> fillet(
28+
radius = 1,
29+
tags = [
30+
getCommonEdge(faces = [seg10, capStart001]),
31+
getCommonEdge(faces = [seg11, capEnd001]),
32+
getCommonEdge(faces = [seg10, capEnd001]),
33+
getCommonEdge(faces = [seg11, capStart001])
34+
],
35+
)
36+
37+
// Model the path of the outer rail of the trolley frame
38+
outerRail = startSketchOn(offsetPlane(XZ, offset = tubeDiameter / 2))
39+
|> startProfile(at = [-frameWidth / 2, grateThickness])
40+
|> yLine(endAbsolute = height - tubeBend)
41+
|> tangentialArc(angle = -90deg, radius = tubeBend)
42+
|> xLine(endAbsolute = 0, tag = $seg02)
43+
|> xLine(length = segLen(seg02))
44+
|> tangentialArc(angle = -90deg, radius = tubeBend)
45+
|> yLine(endAbsolute = profileStartY())
46+
47+
// Sweep the tube profile around the outer rail path to give it a thickness
48+
outerRailThicken = startSketchOn(offsetPlane(XY, offset = grateThickness))
49+
|> circle(center = [-frameWidth / 2, -tubeDiameter / 2], diameter = tubeDiameter)
50+
|> sweep(path = outerRail)
51+
52+
// The minimum allowable straight length should equal double the bend radius
53+
centerRail = startSketchOn(YZ)
54+
|> startProfile(at = [-tubeDiameter / 2, grateThickness])
55+
|> yLine(length = tubeBend * 2)
56+
|> tangentialArc(angle = 30deg, radius = tubeBend, tag = $seg03)
57+
|> angledLine(angle = tangentToEnd(seg03), length = tubeBend * 2)
58+
|> tangentialArc(angle = -30deg, radius = tubeBend, tag = $seg04)
59+
|> angledLine(angle = tangentToEnd(seg04), endAbsoluteY = height - (tubeBend * 3.835), tag = $seg27)
60+
|> tangentialArc(angle = 45deg, radius = tubeBend, tag = $seg05)
61+
|> angledLine(angle = tangentToEnd(seg05), length = tubeBend * 2)
62+
|> tangentialArc(angle = -135deg, radius = tubeBend, tag = $seg06)
63+
|> angledLine(angle = tangentToEnd(seg06), endAbsoluteX = -tubeDiameter / 2)
64+
65+
// Sweep the tube profile around the center rail path to give it a thickness
66+
centerRailThicken = startSketchOn(XY)
67+
|> circle(center = [0, -tubeDiameter / 2], diameter = tubeDiameter)
68+
|> sweep(path = centerRail)
69+
70+
// Model supporting ribs for the trolley frame
71+
rib = startSketchOn(offsetPlane(XY, offset = 14))
72+
|> startProfile(at = [
73+
-(frameWidth - tubeDiameter) / 2 - .05,
74+
-.6
75+
])
76+
|> arc(interiorAbsolute = [0, -3.15], endAbsolute = [-profileStartX(), profileStartY()], tag = $seg14)
77+
|> angledLine(angle = tangentToEnd(seg14) + 90, length = grateThickness)
78+
|> arc(interiorAbsolute = [0, -3.15 + grateThickness], endAbsolute = [-lastSegX(), lastSegY()])
79+
|> line(endAbsolute = [profileStartX(), profileStartY()])
80+
|> close()
81+
|> extrude(length = 1)
82+
|> patternLinear3d(instances = 3, distance = segLen(seg27) / 3, axis = [0, 0, 1])
83+
84+
// Create welded brackets to support the axle
85+
brackets = startSketchOn(offsetPlane(YZ, offset = frameWidth / 2))
86+
|> startProfile(at = [-tubeDiameter, wheelDiameter / 2 - 3])
87+
|> yLine(length = 0.54, tag = $seg16)
88+
|> tangentialArc(angle = 60deg, radius = bendRadius, tag = $seg07)
89+
|> angledLine(angle = tangentToEnd(seg07), length = 2.58, tag = $seg15)
90+
|> tangentialArc(angle = -90deg, radius = bendRadius + grateThickness)
91+
|> tangentialArc(angle = 60deg, radius = 1.5)
92+
|> tangentialArc(angle = -90deg, radius = bendRadius + grateThickness, tag = $seg08)
93+
|> angledLine(angle = tangentToEnd(seg08), length = segLen(seg15))
94+
|> tangentialArc(angle = 60deg, radius = bendRadius, tag = $seg09)
95+
|> yLine(length = segLen(seg16))
96+
|> xLine(length = grateThickness)
97+
|> yLine(length = -segLen(seg16))
98+
|> tangentialArc(angle = -60deg, radius = bendRadius + grateThickness, tag = $seg17)
99+
|> angledLine(angle = tangentToEnd(seg17), length = segLen(seg15))
100+
|> tangentialArc(angle = 90deg, radius = bendRadius)
101+
|> tangentialArc(angle = -60deg, radius = 1.5 + grateThickness)
102+
|> tangentialArc(angle = 90deg, radius = bendRadius, tag = $seg18)
103+
|> angledLine(angle = tangentToEnd(seg18), length = segLen(seg15))
104+
|> tangentialArc(angle = -60deg, radius = bendRadius + grateThickness, tag = $seg19)
105+
|> yLine(length = -segLen(seg16))
106+
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
107+
|> close()
108+
|> extrude(length = 0.75 * tubeDiameter, symmetric = true)
109+
110+
// Model a bearing for the axle on each bracket
111+
axlebearing = startSketchOn(offsetPlane(YZ, offset = frameWidth / 2))
112+
|> circle(center = [-3.67, wheelDiameter / 2], diameter = 1)
113+
|> subtract2d(tool = circle(center = [-3.67, wheelDiameter / 2], diameter = .75))
114+
|> extrude(length = tubeDiameter, symmetric = true)
115+
116+
patternLinear3d(
117+
[brackets, axlebearing],
118+
instances = 2,
119+
distance = frameWidth,
120+
axis = [-1, 0, 0],
121+
)
122+
123+
axle = startSketchOn(-YZ)
124+
|> circle(center = [3.67, wheelDiameter / 2], diameter = 0.75)
125+
|> extrude(length = frameWidth + 4, symmetric = true)
126+
127+
// Revolve a wheel that mounts to the trolley axle
128+
wheel = startSketchOn(offsetPlane(XY, offset = wheelDiameter / 2))
129+
|> startProfile(at = [
130+
-frameWidth / 2 - 0.65,
131+
-3.67 + 0.75 / 2
132+
])
133+
|> xLine(length = -2.7)
134+
|> yLine(endAbsolute = -3.67)
135+
|> xLine(length = -0.5)
136+
|> yLine(length = 0.44)
137+
|> tangentialArc(angle = -85deg, radius = 0.2, tag = $seg21)
138+
|> angledLine(angle = tangentToEnd(seg21), length = 1.14)
139+
|> tangentialArc(angle = 85deg, radius = 0.1, tag = $seg22)
140+
|> angledLine(angle = tangentToEnd(seg22), length = 1.28)
141+
|> tangentialArc(angle = 85deg, radius = 0.1, tag = $seg23)
142+
|> angledLine(angle = tangentToEnd(seg23), length = 0.95)
143+
|> tangentialArc(angle = -80deg, radius = 0.2, tag = $seg24)
144+
|> angledLine(angle = tangentToEnd(seg24), length = 0.77)
145+
|> xLine(length = 0.15)
146+
|> angledLine(angle = tangentToEnd(seg24), length = -0.7)
147+
|> xLine(length = 2)
148+
|> angledLine(angle = -tangentToEnd(seg24), length = -0.7)
149+
|> xLine(length = 0.12)
150+
|> angledLine(angle = -tangentToEnd(seg24), length = 0.77)
151+
|> tangentialArc(angle = -80deg, radius = 0.2, tag = $seg25)
152+
|> angledLine(angle = tangentToEnd(seg25), length = 0.43)
153+
|> tangentialArc(angle = 85deg, radius = 0.1)
154+
|> yLine(length = -0.91)
155+
|> tangentialArc(angle = 85deg, radius = 0.1)
156+
|> angledLine(angle = -tangentToEnd(seg25), endAbsoluteX = profileStartX())
157+
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
158+
|> close()
159+
|> revolve(axis = {
160+
direction = [1.0, 0.0],
161+
origin = [0.0, -3.67]
162+
})
163+
164+
tire = startSketchOn(offsetPlane(XY, offset = wheelDiameter / 2))
165+
|> startProfile(at = [-frameWidth / 2 - 3.55, -1.05])
166+
|> angledLine(angle = 100, length = 0.73, tag = $seg26)
167+
|> tangentialArc(endAbsolute = [lastSegX(), wheelDiameter / 2.1 - 3.67])
168+
|> tangentialArc(angle = 10deg, radius = 1)
169+
|> tangentialArc(angle = -90deg, radius = wheelDiameter / 100, tag = $seg12)
170+
|> angledLine(angle = tangentToEnd(seg12), length = 2.25)
171+
|> tangentialArc(angle = -90deg, radius = wheelDiameter / 100)
172+
|> tangentialArc(angle = 10deg, radius = 1)
173+
|> tangentialArc(endAbsolute = [lastSegX(), segEndY(seg26)], tag = $seg13)
174+
|> angledLine(angle = -100deg, length = segLen(seg26))
175+
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
176+
|> close()
177+
|> revolve(axis = {
178+
direction = [1.0, 0.0],
179+
origin = [0.0, -3.67]
180+
})
181+
|> appearance(color = "#010101", metalness = 10, roughness = 70)
182+
183+
patternCircular3d(
184+
[wheel, tire],
185+
instances = 2,
186+
axis = [0, 0, 1],
187+
center = [0, -3.67, 0],
188+
)
189+
190+
appearance(
191+
[
192+
grate,
193+
brackets,
194+
axlebearing,
195+
outerRailThicken,
196+
centerRailThicken,
197+
rib,
198+
wheel
199+
],
200+
color,
201+
metalness = 40,
202+
roughness,
203+
)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// Hand Trolley
2+
// A hand trolley, also known as a hand truck, is a small, wheeled cart with a weldment frame, used to move heavy or bulky items over short distances. It's essentially a simple lever system that makes lifting and moving objects much easier
3+
4+
// Set units
5+
@settings(defaultLengthUnit = in)
6+
7+
// Import parameters
8+
import * from "parameters.kcl"
9+
import "wheel.kcl" as wheel
10+
import "weldment.kcl" as weldment
11+
12+
import "axle.kcl" as axle
13+
wheel
14+
|> patternCircular3d(instances = 2, axis = [0, 0, 1], center = [0, -3.67, 0])
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Set units
2+
@settings(defaultLengthUnit = in)
3+
4+
// Define parameters
5+
export frameWidth = 20
6+
export tubeDiameter = 1
7+
export height = 51
8+
export grateDepth = 10
9+
export grateThickness = 0.090
10+
export wheelDiameter = 10
11+
export color = "#c00c0c"
12+
export metalness = 40
13+
export roughness = 30
14+
15+
// Calculate stock material bend radii
16+
export tubeBend = tubeDiameter * 2.5
17+
export bendRadius = grateThickness * 1.25

0 commit comments

Comments
 (0)