On this page:
flomap-pin
flomap-pin*
flomap-lt-superimpose
flomap-lc-superimpose
flomap-lb-superimpose
flomap-ct-superimpose
flomap-cc-superimpose
flomap-cb-superimpose
flomap-rt-superimpose
flomap-rc-superimpose
flomap-rb-superimpose
flomap-vl-append
flomap-vc-append
flomap-vr-append
flomap-ht-append
flomap-hc-append
flomap-hb-append

4.9 Compositing🔗

Unless stated otherwise, compositing functions assume every flomap argument has an alpha component.

procedure

(flomap-pin fm1 x1 y1 fm2)  flomap

  fm1 : flomap
  x1 : Integer
  y1 : Integer
  fm2 : flomap
(flomap-pin fm1 x1 y1 fm2 x2 y2)  flomap
  fm1 : flomap
  x1 : Integer
  y1 : Integer
  fm2 : flomap
  x2 : Integer
  y2 : Integer
Superimposes fm2 over fm1 so that point x2 y2 on flomap f2 is directly over point x1 y1 on flomap f1. If x2 and y2 are not provided, they are assumed to be 0. The result is expanded as necessary.

fm1 and fm2 must have the same number of components.

Examples:
> (flomap-pin fm -10 -10 sine-fm)

flomap-pin: expected two flomaps with the same number of

components; given one with 4 and one with 1

> (define circle-fm
    (draw-flomap (λ (fm-dc)
                   (send fm-dc set-pen "black" 4 'short-dash)
                   (send fm-dc set-brush "yellow" 'solid)
                   (send fm-dc set-alpha 1/2)
                   (send fm-dc draw-ellipse 2 2 124 124))
                 128 128))
> (flomap->bitmap (flomap-pin fm 0 0 circle-fm 64 64))

image

> (flomap->bitmap (flomap-pin sine-fm 50 0 sine-fm))

image

The other compositing functions are defined in terms of flomap-pin.

procedure

(flomap-pin* x1-frac    
  y1-frac    
  x2-frac    
  y2-frac    
  fm0    
  fm ...)  flomap
  x1-frac : Real
  y1-frac : Real
  x2-frac : Real
  y2-frac : Real
  fm0 : flomap
  fm : flomap
For each adjacent pair fm1 fm2 in the argument list, pins fm2 over fm1.

The pin-over points are calculated from the four real arguments as follows. If fm1 is size w1×h1, then x1 = (* w1 x1-frac) and y1 = (* h1 y1-frac), and similarly for x2 and y2.

The following example pins the upper-left corner of each fm2 over a point near the upper-left corner of each fm1:
> (flomap->bitmap (flomap-pin* 1/8 1/8 0 0
                               circle-fm circle-fm circle-fm))

image

All the flomap superimpose and append functions are defined using flomap-pin* with different pin-over point fractions. For example, (flomap-lt-superimpose fm0 fm ...) = (flomap-pin* 0 0 0 0 fm0 fm ...), and (flomap-vc-append fm0 fm ...) = (flomap-pin* 1/2 1 1/2 0 fm0 fm ...).

procedure

(flomap-lt-superimpose fm0 fm ...)  flomap

  fm0 : flomap
  fm : flomap

procedure

(flomap-lc-superimpose fm0 fm ...)  flomap

  fm0 : flomap
  fm : flomap

procedure

(flomap-lb-superimpose fm0 fm ...)  flomap

  fm0 : flomap
  fm : flomap

procedure

(flomap-ct-superimpose fm0 fm ...)  flomap

  fm0 : flomap
  fm : flomap

procedure

(flomap-cc-superimpose fm0 fm ...)  flomap

  fm0 : flomap
  fm : flomap

procedure

(flomap-cb-superimpose fm0 fm ...)  flomap

  fm0 : flomap
  fm : flomap

procedure

(flomap-rt-superimpose fm0 fm ...)  flomap

  fm0 : flomap
  fm : flomap

procedure

(flomap-rc-superimpose fm0 fm ...)  flomap

  fm0 : flomap
  fm : flomap

procedure

(flomap-rb-superimpose fm0 fm ...)  flomap

  fm0 : flomap
  fm : flomap
These create a new flomap by superimposing the flomaps in the argument list. The two-letter abbreviation determines the pin-over points. For example, flomap-lt-superimpose (“flomap left-top superimpose”) pins points 0 0 together on each adjacent pair of flomaps:
See flomap-pin and flomap-pin* for implementation details.

procedure

(flomap-vl-append fm0 fm ...)  flomap

  fm0 : flomap
  fm : flomap

procedure

(flomap-vc-append fm0 fm ...)  flomap

  fm0 : flomap
  fm : flomap

procedure

(flomap-vr-append fm0 fm ...)  flomap

  fm0 : flomap
  fm : flomap

procedure

(flomap-ht-append fm0 fm ...)  flomap

  fm0 : flomap
  fm : flomap

procedure

(flomap-hc-append fm0 fm ...)  flomap

  fm0 : flomap
  fm : flomap

procedure

(flomap-hb-append fm0 fm ...)  flomap

  fm0 : flomap
  fm : flomap
These create a new flomap by spatially appending the flomaps in the argument list. The two-letter abbreviation determines direction (v or h) and alignment (l, c, r, or t, c, b).

Example:
> (flomap->bitmap (flomap-ht-append circle-fm fm
                                    (flomap-scale circle-fm 1/2)))

image

See flomap-pin and flomap-pin* for implementation details.