I’ve improved and tidied up the extrusion code and added it to the fluxus collection. Here’s an animation and the documentation:
(build-extrusion profile-list path-list width-list tex-vscale up)
Returns primitive-id
Returns an indexed polygon primitive made by extruding the profile
along path and scaling using values in width. The path and width
lists need to be the same size. tex-vscale allows you to scale
the texture coordinates along the length of the extrusion. An
up vector is needed for aiming the profile along the path.
(clear)
(build-extrusion
(build-circle-profile 20 0.3)
(list
(vector 0 0 0)
(vector 0 1 2)
(vector 0 -1 4)
(vector 0 0 6))
(list 0 1 1 0) 1 (vector 0 1 0))
(build-partial-extrusion profile-list path-list tex-vscale)
Returns primitive-id
Builds a primitive ready to be used with partial-extrusion. Use
this is for animating growth along extrusions.
(partial-extrude profile-list t profile-list path-list width-list up grow-value)
Returns primitive-id
Animates growth along extrusions. t is a value between 0 and the
length of the path, and controls how far along the extrusion to
calculate. Grow value is a scale to control how much the profile
is scaled to change it’s width as it grows.
(clear)
(define profile (build-circle-profile 10 0.3))
(define path (build-list 20 (lambda (i) (vector (crndf) (crndf) i))))
(define width (build-list 20 (lambda (_) 1)))
(hint-wire)
(define p (build-partial-extrusion profile path 1))
(every-frame
(with-primitive p
(partial-extrude (* (length path) 0.5 (+ (sin (time)) 1))
profile path width (vector 0 1 0) 0.1)))