Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions content/pages/docs/kcl-samples/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ ex. `just overwrite-sim-test-sample angle-gauge`
---
#### [angle-gauge](angle-gauge/main.kcl) ([screenshot](screenshots/angle-gauge.png))
[![angle-gauge](screenshots/angle-gauge.png)](angle-gauge/main.kcl)
#### [artificial-heart](artificial-heart/main.kcl) ([screenshot](screenshots/artificial-heart.png))
[![artificial-heart](screenshots/artificial-heart.png)](artificial-heart/main.kcl)
#### [axial-fan](axial-fan/main.kcl) ([screenshot](screenshots/axial-fan.png))
[![axial-fan](screenshots/axial-fan.png)](axial-fan/main.kcl)
#### [ball-bearing](ball-bearing/main.kcl) ([screenshot](screenshots/ball-bearing.png))
Expand Down
233 changes: 233 additions & 0 deletions content/pages/docs/kcl-samples/artificial-heart/housing.kcl
Original file line number Diff line number Diff line change
@@ -0,0 +1,233 @@
// Housing

// Set units
@settings(defaultLengthUnit = in)

// Sketch the primary housing for the pump, to be revolved
sketch001 = sketch(on = XY) {
line1 = line(start = [var 0.47in, var -0.19in], end = [var 0.47in, var -0.23in])
line2 = line(start = [var 0.47in, var -0.23in], end = [var 1.5in, var -0.23in])
coincident([line1.end, line2.start])
line3 = line(start = [var 1.5in, var -0.23in], end = [var 1.5in, var -0.63in])
coincident([line2.end, line3.start])
arc1 = arc(start = [var 1.43in, var -0.7in], end = [var 1.5in, var -0.63in], center = [var 1.43in, var -0.63in])
coincident([line3.end, arc1.end])
tangent([line3, arc1])
line4 = line(start = [var 1.43in, var -0.7in], end = [var 0.2in, var -0.7in])
coincident([line4.start, arc1.start])
line5 = line(start = [var 0.2in, var -0.7in], end = [var 0.2in, var -0.73in])
coincident([line4.end, line5.start])
line6 = line(start = [var 0.2in, var -0.73in], end = [var 1.43in, var -0.73in])
coincident([line5.end, line6.start])
arc2 = arc(start = [var 1.43in, var -0.73in], end = [var 1.53in, var -0.63in], center = [var 1.43in, var -0.63in])
coincident([line6.end, arc2.start])
tangent([line6, arc2])
line7 = line(start = [var 1.53in, var -0.63in], end = [var 1.53in, var 0.67in])
coincident([line7.start, arc2.end])
arc3 = arc(start = [var 1.53in, var 0.67in], end = [var 1.43in, var 0.77in], center = [var 1.43in, var 0.67in])
coincident([line7.end, arc3.start])
tangent([line7, arc3])
line8 = line(start = [var 1.43in, var 0.77in], end = [var 0.2in, var 0.77in])
coincident([line8.start, arc3.end])
line9 = line(start = [var 0.2in, var 0.77in], end = [var 0.2in, var 0.74in])
coincident([line8.end, line9.start])
line10 = line(start = [var 0.2in, var 0.74in], end = [var 1.43in, var 0.74in])
coincident([line9.end, line10.start])
arc4 = arc(start = [var 1.5in, var 0.67in], end = [var 1.43in, var 0.74in], center = [var 1.43in, var 0.67in])
coincident([line10.end, arc4.end])
tangent([line10, arc4])
line11 = line(start = [var 1.5in, var 0.67in], end = [var 1.5in, var -0.19in])
coincident([line11.start, arc4.start])
line12 = line(start = [var 1.5in, var -0.19in], end = [var 0.47in, var -0.19in])
coincident([line11.end, line12.start])
coincident([line12.end, line1.start])
horizontal(line6)
horizontal(line4)
horizontal(line2)
horizontal(line12)
horizontal(line10)
horizontal(line8)
vertical(line9)
vertical(line1)
vertical(line5)
vertical(line3)
vertical(line11)
vertical(line7)
tangent([line4, arc1])
tangent([line7, arc2])
coincident([arc2.center, arc1.center])
coincident([arc4.center, arc3.center])
tangent([line11, arc4])
tangent([line8, arc3])
radius(arc2) == .1
radius(arc1) == .07
equalRadius([arc2, arc3])
equalRadius([arc1, arc4])
horizontalDistance([ORIGIN, line3.start]) == 1.5
verticalDistance([line5.start, ORIGIN]) == .7

verticalDistance([arc2.start, ORIGIN]) == 0.73in
horizontalDistance([ORIGIN, line5.start]) == .2
coincident([line5, line9])
verticalDistance([line12.end, ORIGIN]) == 0.19
distance([line1.start, line1.end]) == 0.04
}
region001 = region(point = [0.4700984in, -0.21in], sketch = sketch001)
hide(sketch001)
revolve001 = revolve(region001, angle = 360deg, axis = Y)
|> appearance(color = "#ededed", opacity = 30)

// Model a bore with the same outer diameter as the housing, which will be used for cutting the exterior ports to shape
sketch002 = sketch(on = XZ) {
circle1 = circle(start = [var -1.18in, var 0.92in], center = [var 0in, var 0in])
coincident([circle1.center, ORIGIN])
radius(circle1) == 3 / 2
}
hide(sketch002)
region002 = region(point = [0in, 0in], sketch = sketch002)

extrude002 = extrude(region002, length = 2, symmetric = true)

// Model the two exterior bungs
sketch003 = sketch(on = -YZ) {
line1 = line(start = [var 0in, var 0in], end = [var -0.3in, var -0.1in], construction = true)
coincident([line1.start, ORIGIN])
line2 = line(start = [var 0in, var 0in], end = [var 0.3in, var 0.1in], construction = true)
coincident([line2.start, line1.start])
coincident([line2, line1])
equalLength([line2, line1])
circle1 = circle(start = [var 0.44in, var 0.03in], center = [var 0.3in, var 0.1in])
coincident([circle1.center, line2.end])
circle2 = circle(start = [var -0.15in, var -0.15in], center = [var -0.3in, var -0.1in])
coincident([circle2.center, line1.end])
circle3 = circle(start = [var -0.17in, var -0.14in], center = [var -0.3in, var -0.1in])
coincident([circle3.center, line1.end])
circle4 = circle(start = [var 0.3in, var -0.04in], center = [var 0.3in, var 0.1in])
coincident([circle4.center, line2.end])
equalRadius([circle2, circle1])
equalRadius([circle4, circle3])
radius(circle1) == .2
radius(circle4) == .17
horizontalDistance([circle3.center, circle4.center]) == .75
verticalDistance([circle3.center, circle4.center]) == .2
}
hide(sketch003)

region003 = region(point = [-0.5707679in, -0.0595579in], sketch = sketch003)
region004 = region(point = [0.2134512in, 0.2177397in], sketch = sketch003)

extrude001 = extrude([region003, region004], length = 1.8)
|> appearance(color = "#ededed", opacity = 30)

// Rotate the outlet bungs into position, then cut so they fit the housing
|> rotate(pitch = 45, global = true)
|> subtract(tools = extrude002)

// Model a pocket on the front face of the housing
sketch004 = sketch(on = offsetPlane(XZ, offset = 0.73)) {
arc1 = arc(start = [var -0.13in, var 1.27in], end = [var -1.27in, var -0.18in], center = [var 0in, var 0in])
coincident([arc1.center, ORIGIN])
arc2 = arc(start = [var 0.91in, var -1.04in], end = [var 1.28in, var -0.5in], center = [var 0in, var 0in])
coincident([arc2.center, arc1.center])
coincident([arc2.start, arc2.start])
arc3 = arc(start = [var 0.05in, var 1.2in], end = [var -0.13in, var 1.27in], center = [var -0.11in, var 1.07in])
coincident([arc1.start, arc3.end])
tangent([arc1, arc3])
arc4 = arc(start = [var 1.28in, var -0.5in], end = [var 1.25in, var -0.31in], center = [var 1.1in, var -0.43in])
coincident([arc2.end, arc4.start])
tangent([arc2, arc4])
arc5 = arc(start = [var 0.7in, var -1.07in], end = [var 0.91in, var -1.04in], center = [var 0.78in, var -0.89in])
coincident([arc2.start, arc5.end])
tangent([arc2, arc5])
arc6 = arc(start = [var -1.27in, var -0.18in], end = [var -1.14in, var -0.34in], center = [var -1.07in, var -0.15in])
coincident([arc1.end, arc6.start])
tangent([arc1, arc6])
line1 = line(start = [var -1.14in, var -0.34in], end = [var 0.7in, var -1.07in])
coincident([line1.start, arc6.end])
coincident([line1.end, arc5.start])
line2 = line(start = [var 1.25in, var -0.31in], end = [var 0.05in, var 1.2in])
coincident([line2.start, arc4.end])
coincident([line2.end, arc3.start])
tangent([line1, arc6])
tangent([line1, arc5])
tangent([line2, arc4])
tangent([line2, arc3])
equalRadius([arc5, arc4, arc3, arc6])
radius(arc6) == .2
radius(arc1) == 1.28in
radius(arc2) == 1.38in
circle1 = circle(start = [var 0.59in, var -0.15in], center = [var 0in, var 0in])
coincident([circle1.center, arc1.center])
diameter(circle1) == 1.22in
}
hide(sketch004)
region006 = region(point = [-1.007515in, 0.7893424in], sketch = sketch004)

extrude004 = extrude(region006, length = .02)
|> appearance(color = "#ededed", opacity = 30)

// Sketch the path for the front face inlet bung
sketch005 = sketch(on = XY) {
line1 = line(start = [var 0in, var -0.7in], end = [var 0in, var -0.75in])
vertical([line1.start, ORIGIN])
vertical([line1.end, ORIGIN])
verticalDistance([line1.start, ORIGIN]) == 0.7
verticalDistance([line1.end, line1.start]) == .05
arc1 = arc(start = [var 0in, var -0.75in], end = [var 0.6in, var -1.16in], center = [var 0.47in, var -0.75in])
coincident([line1.end, arc1.start])
tangent([line1, arc1])
arc2 = arc(start = [var 0.91in, var -1.09in], end = [var 0.6in, var -1.16in], center = [var 0.98in, var -2.13in])
coincident([arc1.end, arc2.end])
tangent([arc1, arc2])
}

// Model the profile of the front inlet bung, then sweep
sketch006 = sketch(on = offsetPlane(XZ, offset = 0.7)) {
circle1 = circle(start = [var 0.17in, var 0.15in], center = [var 0in, var 0in])
coincident([circle1.center, ORIGIN])
circle2 = circle(start = [var 0.12in, var 0.09in], center = [var 0in, var 0in])
coincident([circle2.center, circle1.center])
radius(circle1) == 0.2
radius(circle2) == 0.17
}
hide(sketch006)
region005 = region(point = [-0.1498938in, -0.1322592in], sketch = sketch006)

sweep001 = sweep(region005, path = sketch005)
|> appearance(color = "#ededed", opacity = 30)
|> rotate(pitch = 80)

// Sketch the path for the rear face inlet bung
sketch007 = sketch(on = XY) {
line1 = line(start = [var 0in, var 0.7in], end = [var 0in, var 0.75in])
vertical([line1.start, ORIGIN])
vertical([line1.end, ORIGIN])
arc1 = arc(start = [var 0.53in, var 1.23in], end = [var 0in, var 0.75in], center = [var 0.48in, var 0.75in])
coincident([line1.end, arc1.end])
tangent([line1, arc1])
arc2 = arc(start = [var 0.53in, var 1.23in], end = [var 0.81in, var 1.2in], center = [var 1.32in, var 8.66in])
coincident([arc1.start, arc2.start])
tangent([arc1, arc2])
verticalDistance([ORIGIN, line1.start]) == .7
verticalDistance([line1.start, line1.end]) == .05
line2 = line(start = [var 0.48in, var 0.75in], end = [var 0.53in, var 1.23in], construction = true)
coincident([line2.start, arc1.center])
coincident([line2.end, arc2.start])
angle([line2, line1]) == 6
}

// Model the profile of the rear inlet bung, then sweep
sketch008 = sketch(on = offsetPlane(XZ, offset = -0.7)) {
circle1 = circle(start = [var 0.17in, var 0.15in], center = [var 0in, var 0in])
coincident([circle1.center, ORIGIN])
circle2 = circle(start = [var 0.12in, var 0.09in], center = [var 0in, var 0in])
coincident([circle2.center, circle1.center])
radius(circle1) == 0.2
radius(circle2) == 0.17
}
hide(sketch008)
region008 = region(point = [-0.1498938in, -0.1322592in], sketch = sketch008)

sweep002 = sweep(region008, path = sketch007)
|> appearance(color = "#ededed", opacity = 30)
|> rotate(pitch = 75)
123 changes: 123 additions & 0 deletions content/pages/docs/kcl-samples/artificial-heart/impeller.kcl
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
// Impeller

// Set units
@settings(defaultLengthUnit = in, experimentalFeatures = allow)

// Define parameters
impellerDiameter = 3
plateHeight = 0.1
vaneCount = 7
vaneHeight = 0.1
vaneThickness = 0.14
mountDiameter = 0.25

// Revolve the base plate of the impeller
sketch002 = sketch(on = XY) {
line2 = line(start = [var 1.5in, var 0.25in], end = [var 1.5in, var 0.35in])
line3 = line(start = [var 1.5in, var 0.35in], end = [var 0.49in, var 0.35in])
coincident([line2.end, line3.start])
arc4 = arc(start = [var 0.33in, var 0.46in], end = [var 0.49in, var 0.35in], center = [var 0.49in, var 0.52in])
coincident([line3.end, arc4.end])
line5 = line(start = [var 0.33in, var 0.46in], end = [var 0.24in, var 0.69in])
coincident([arc4.start, line5.start])
line6 = line(start = [var 0.24in, var 0.69in], end = [var 0in, var 0.69in])
coincident([line5.end, line6.start])
distance([line2.start, line2.end]) == plateHeight
horizontal(line3)
horizontal(line6)
line8 = line(start = [var 0in, var 0in], end = [var 2.31in, var 0in], construction = true)
horizontal([line8.end, ORIGIN])
line10 = line(start = [var 1.5in, var -0.25in], end = [var 1.5in, var -0.35in])
line11 = line(start = [var 1.5in, var -0.35in], end = [var 0.49in, var -0.35in])
coincident([line10.end, line11.start])
arc1 = arc(start = [var 0.49in, var -0.35in], end = [var 0.33in, var -0.46in], center = [var 0.49in, var -0.52in])
coincident([line11.end, arc1.start])
tangent([line11, arc1])
line12 = line(start = [var 0.33in, var -0.46in], end = [var 0.24in, var -0.69in])
coincident([line12.start, arc1.end])
line13 = line(start = [var 0.24in, var -0.69in], end = [var 0in, var -0.69in])
coincident([line12.end, line13.start])
symmetric([line2, line10], axis = line8)
vertical(line2)
symmetric([line11, line3], axis = line8)
symmetric([arc1, arc4], axis = line8)
symmetric([line12, line5], axis = line8)
symmetric([line13, line6], axis = line8)
coincident([line8.start, ORIGIN])
tangent([line5, arc4])
line1 = line(start = [var 0.4in, var 0in], end = [var 0.4in, var 0.25in])
horizontal([line1.start, ORIGIN])
line4 = line(start = [var 0.4in, var 0.25in], end = [var 1.5in, var 0.25in])
coincident([line1.end, line4.start])
coincident([line4.end, line2.start])
line7 = line(start = [var 0in, var 0.69in], end = [var 0in, var -0.69in])
coincident([line7.start, line6.end])
coincident([line7.end, line13.end])
line9 = line(start = [var 0.4in, var 0in], end = [var 0.4in, var -0.25in])
coincident([line9.start, line1.start])
line14 = line(start = [var 0.4in, var -0.25in], end = [var 1.5in, var -0.25in])
coincident([line9.end, line14.start])
coincident([line14.end, line10.start])
vertical(line1)
distance([line1.start, line1.end]) == 0.25
horizontal(line4)
horizontalDistance([line8.start, line4.end]) == impellerDiameter / 2
horizontalDistance([line8.start, line9.start]) == .4
symmetric([line1, line9], axis = line8)
symmetric([line14, line4], axis = line8)
vertical(line7)
coincident([line7, line8.start])
}
hide(sketch002)
region002 = region(segments = [sketch002.line1, sketch002.line2])
basePlate = revolve(region002, axis = Y)

// Model a vane of the impeller
sketch003 = sketch(on = offsetPlane(XZ, offset = 0.4)) {
arc1 = arc(start = [var -0.04in, var -0.71in], end = [var 1.46in, var 0.12in], center = [var 0.47in, var 0.14in])
arc2 = arc(start = [var 0.04in, var -0.59in], end = [var -0.04in, var -0.71in], center = [var 0in, var -0.65in])
coincident([arc1.start, arc2.end])
arc3 = arc(start = [var 0.04in, var -0.59in], end = [var 1.32in, var 0.12in], center = [var 0.47in, var 0.14in])
coincident([arc2.start, arc3.start])
arc4 = arc(start = [var 1.46in, var 0.12in], end = [var 1.32in, var 0.12in], center = [var 1.39in, var 0.12in])
coincident([arc3.end, arc4.end])
coincident([arc1.end, arc4.start])
radius(arc2) == 0.07in
diameter(arc3) == 1.7
radius(arc4) == 0.07in
line2 = line(start = [var 1.39in, var 0.12in], end = [var 0in, var 0in], construction = true)
coincident([line2.end, ORIGIN])
line3 = line(start = [var 0in, var 0in], end = [var 0in, var -0.65in], construction = true)
coincident([line2.end, line3.start])
coincident([line3.end, arc2.center])
line4 = line(start = [var -0.04in, var -0.71in], end = [var 0.04in, var -0.59in], construction = true)
coincident([line4.start, arc1.start])
coincident([line4.end, arc2.start])
coincident([line3.end, line4])
line5 = line(start = [var 1.32in, var 0.12in], end = [var 1.46in, var 0.12in], construction = true)
coincident([line5.start, arc4.end])
coincident([line5.end, arc1.end])
coincident([line2.start, line5])
equalLength([line4, line5])
distance([line5.start, line5.end]) == vaneThickness
vertical(line3)
distance([line3.start, line3.end]) == 0.65
coincident([arc3.center, arc1.center])
tangent([arc1, arc2])
tangent([arc3, arc4])
angle([line2, line3]) == 85
distance([line2.start, line2.end]) == 1.4
coincident([line2.start, arc4.center])
}
hide(sketch003)
region003 = region(point = [0.9542in, -0.7280643in], sketch = sketch003)

vane = extrude(region003, length = vaneHeight)
// Pattern the vane around the Z axis
|> patternCircular3d(
useOriginal = true,
instances = vaneCount,
axis = Y,
center = [0, 0, 0],
)
|> patternLinear3d(instances = 2, distance = 1, axis = Y)
12 changes: 12 additions & 0 deletions content/pages/docs/kcl-samples/artificial-heart/main.kcl
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// Artificial Heart
// A model of a permanent electromagnetic blood pump
// Categories: Medical

// Define units
@settings(defaultLengthUnit = mm)

// Import all components
import "housing.kcl" as housing
import "stator.kcl" as stator
import "impeller.kcl" as impeller
import "plumbing.kcl" as plumbing
Loading
Loading