Model constructor
This commit is contained in:
@@ -2,15 +2,15 @@ function fCube(dims) = (
|
|||||||
let(x = fIsVector(dims) ? dims[0] : dims,
|
let(x = fIsVector(dims) ? dims[0] : dims,
|
||||||
y = fIsVector(dims) ? dims[1] : dims,
|
y = fIsVector(dims) ? dims[1] : dims,
|
||||||
z = fIsVector(dims) ? dims[2] : dims)
|
z = fIsVector(dims) ? dims[2] : dims)
|
||||||
[
|
fModel(
|
||||||
[fKeyPoints, fCartesianProduct([[0, x], [0, y], [0, z]])],
|
points=fCartesianProduct([[0, x], [0, y], [0, z]]),
|
||||||
[fKeyFaces, [
|
faces=[
|
||||||
[0, 2, 3, 1], // -x
|
[0, 2, 3, 1], // -x
|
||||||
[0, 1, 5, 4], // -y
|
[0, 1, 5, 4], // -y
|
||||||
[0, 4, 6, 2], // -z
|
[0, 4, 6, 2], // -z
|
||||||
[4, 5, 7, 6], // +x
|
[4, 5, 7, 6], // +x
|
||||||
[2, 6, 7, 3], // +y
|
[2, 6, 7, 3], // +y
|
||||||
[1, 3, 7, 5], // +z
|
[1, 3, 7, 5], // +z
|
||||||
]],
|
|
||||||
]
|
]
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -3,16 +3,15 @@ function fCylinder(h, r, r1=undef, r2=undef, sides=36) = (
|
|||||||
side_range = [0 : sides - 1],
|
side_range = [0 : sides - 1],
|
||||||
int_r1 = (r1 == undef) ? r : r1,
|
int_r1 = (r1 == undef) ? r : r1,
|
||||||
int_r2 = (r2 == undef) ? r : r2)
|
int_r2 = (r2 == undef) ? r : r2)
|
||||||
[
|
fModel(
|
||||||
[fKeyPoints,
|
points=
|
||||||
[for (side = side_range)
|
[for (side = side_range)
|
||||||
for (params = [[int_r1, 0], [int_r2, h]])
|
for (params = [[int_r1, 0], [int_r2, h]])
|
||||||
let (angle = side * degrees_per_side,
|
let (angle = side * degrees_per_side,
|
||||||
radius = params[0],
|
radius = params[0],
|
||||||
height = params[1])
|
height = params[1])
|
||||||
[radius * sin(angle), radius * cos(angle), height]],
|
[radius * sin(angle), radius * cos(angle), height]],
|
||||||
],
|
faces=concat(
|
||||||
[fKeyFaces, concat(
|
|
||||||
// bottom
|
// bottom
|
||||||
[[for (side = [sides : -1 : 0]) side * 2]],
|
[[for (side = [sides : -1 : 0]) side * 2]],
|
||||||
// top
|
// top
|
||||||
@@ -20,7 +19,6 @@ function fCylinder(h, r, r1=undef, r2=undef, sides=36) = (
|
|||||||
// sides
|
// sides
|
||||||
[for (side = side_range)
|
[for (side = side_range)
|
||||||
[for (vertex = [2, 3, 1, 0]) (side * 2 + vertex) % (sides * 2)]]
|
[for (vertex = [2, 3, 1, 0]) (side * 2 + vertex) % (sides * 2)]]
|
||||||
)],
|
)
|
||||||
]
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ function fSphere(r, sides=36, stripes=18) = (
|
|||||||
let(degrees_per_slice = 180 / stripes,
|
let(degrees_per_slice = 180 / stripes,
|
||||||
degrees_per_side = 360 / sides,
|
degrees_per_side = 360 / sides,
|
||||||
top_index = (stripes - 1) * sides)
|
top_index = (stripes - 1) * sides)
|
||||||
[
|
fModel(
|
||||||
[fKeyPoints, concat(
|
points=concat(
|
||||||
[for (stripe_index = [1 : stripes - 1])
|
[for (stripe_index = [1 : stripes - 1])
|
||||||
for (side_index = [0 : sides - 1])
|
for (side_index = [0 : sides - 1])
|
||||||
let (stripe_angle = stripe_index * degrees_per_slice,
|
let (stripe_angle = stripe_index * degrees_per_slice,
|
||||||
@@ -18,8 +18,8 @@ function fSphere(r, sides=36, stripes=18) = (
|
|||||||
[0, 0, r], // top
|
[0, 0, r], // top
|
||||||
[0, 0, -r], // bottom
|
[0, 0, -r], // bottom
|
||||||
]
|
]
|
||||||
)],
|
),
|
||||||
[fKeyFaces, concat(
|
faces=concat(
|
||||||
// side squares
|
// side squares
|
||||||
[for (stripe_index = [2 : stripes - 1])
|
[for (stripe_index = [2 : stripes - 1])
|
||||||
for (side_index = [0 : sides - 1])
|
for (side_index = [0 : sides - 1])
|
||||||
@@ -49,6 +49,6 @@ function fSphere(r, sides=36, stripes=18) = (
|
|||||||
side_base + side_index,
|
side_base + side_index,
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
)],
|
)
|
||||||
]
|
)
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -5,6 +5,13 @@
|
|||||||
fKeyPoints = "points";
|
fKeyPoints = "points";
|
||||||
fKeyFaces = "faces";
|
fKeyFaces = "faces";
|
||||||
|
|
||||||
|
function fModel(points, faces) = (
|
||||||
|
[
|
||||||
|
[fKeyPoints, points],
|
||||||
|
[fKeyFaces, faces],
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
function fPoints(model) = (
|
function fPoints(model) = (
|
||||||
fMapLookup(fKeyPoints, model)
|
fMapLookup(fKeyPoints, model)
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user