pattern:scale
List of: Scheme Extensions
Subjects: Patterns
Contents: Kernel

Action: Creates a new pattern by applying a scale law to an existing pattern.

Filename: kern/kern_scm/pattern_scm.cxx

Syntax: (pattern:scale pat scale root [merge=#t])

Arg Types: pat pattern

scale law

root position

merge boolean

Returns: pattern

Description: Applies a scale law to an existing pattern, merging with any existing scaling or, optionally (with merge=#f), replacing it.


pat specifies a pattern.


scale law specifies the scaling to be applied. The scale law may evaluate to a scalar if unform scaling is desired or to a gvector if non-unform scaling is desired.


root specifies the neutral point about which the scaling takes place (i.e., the point on the seed entity that remains fixed while the entity's dimensions are altered).


If merge is specified as false (#f), the existing pattern is replaced. The default vaule is true (#t).

Example: ; pattern:scale

; make a prism

(define height 1)

;; height

(define maj_rad 1)

;; maj_rad

(define min_rad 0.5)

;; min_rad

(define num_sides 3)

;; num_sides

(define prism (solid:prism


height maj_rad min_rad num_sides))

;; prism

; position the prism

(define origin (position 1 2 3))

;; origin

(define transform (entity:transform prism


(transform:axes


origin (gvector 1 0 0) (gvector 0 1 0))))

;; transform

; position the prism

(define origin (position 1 2 3))

;; origin

(define transform2 (entity:transform prism


(transform:axes


origin (gvector 1 0 0) (gvector 0 1 0))))

;; transform2

; make a pattern

(define x-vec (gvector 2 0 0))

;; x-vec

(define num_x 5)

;; num_x

(define y-vec (gvector 0 2 0))

;; y-vec

(define num_y 5)

;; num_y

(define pat (pattern:linear x-vec num_x y-vec num_y))

;; pat

; modify the pattern

(define scale (law "(Y+1)/5"))

;; scale

(define root origin)

;; root

(set! pat (pattern:scale pat scale root))

;; #[pattern

;; trans-vec: "DOMAIN(X*VEC(2,0,0)+X2*VEC

;; (0,2,0),0,4,0,4)"

;; x-vec: "null_law"

;; y-vec: "null_law"

;; z-vec: "null_law"

;; scale: "null_law"

;; keep: "null_law"

;; no list]

; modify the pattern again

(set! scale (law "(5 - X)/5"))

;; #[law "(Y+1)/5"]

(set! pat (pattern:scale pat scale root))

;; #[pattern

;; trans-vec: "DOMAIN(X*VEC(2,0,0)+X2*VEC

;; (0,2,0),0,4,0,4)+VEC(1,2,3)"

;; x-vec: "null_law"

;; y-vec: "null_law"

;; z-vec: "null_law"

;; scale: "(Y+1)/5"

;; keep: "null_law"

;; no list]

; apply the pattern to the prism

(define body (entity:pattern prism pat))

;; body
PDF/KERN/14SCI.PDF
HTM/DATA/KERN/KERN/14SCI/0089.HTM