Module: Processing::GraphicsContext

Included in:
Context, Graphics
Defined in:
lib/processing/graphics_context.rb

Overview

Drawing context

Constant Summary collapse

PI =

PI

Math::PI
HALF_PI =

PI / 2

PI / 2
QUARTER_PI =

PI / 4

PI / 4
TWO_PI =

PI * 2

PI * 2
TAU =

PI * 2

PI * 2
PROCESSING =

Processing mode for renderMode().

:processing
P5JS =

p5.js mode for renderMode().

:p5js
RGBA =

RGBA format for createImage().

:rgba
RGB =

RGB format for createImage, or RGB mode for colorMode().

:rgb
HSB =

HSB mode for colorMode().

:hsb
RADIANS =

Radian mode for angleMode().

:radians
DEGREES =

Degree mode for angleMode().

:degrees
CORNER =

Mode for rectMode(), ellipseMode(), imageMode(), and shapeMode().

:corner
CORNERS =

Mode for rectMode(), ellipseMode(), imageMode(), and shapeMode().

:corners
CENTER =

Mode for rectMode(), ellipseMode(), imageMode(), shapeMode(), and textAlign().

:center
RADIUS =

Mode for rectMode() and ellipseMode().

:radius
ROUND =

Mode for strokeCap() and strokeJoin().

:round
SQUARE =

Mode for strokeCap().

:butt
PROJECT =

Mode for strokeCap().

:square
MITER =

Mode for strokeJoin().

:miter
BEVEL =

Mode for strokeCap() and strokeJoin().

:square
BLEND =

Mode for blendMode().

:normal
ADD =

Mode for blendMode().

:add
SUBTRACT =

Mode for blendMode().

:subtract
LIGHTEST =

Mode for blendMode().

:lightest
DARKEST =

Mode for blendMode().

:darkest
EXCLUSION =

Mode for blendMode().

:exclusion
MULTIPLY =

Mode for blendMode().

:multiply
SCREEN =

Mode for blendMode().

:screen
REPLACE =

Mode for blendMode().

:replace
LEFT =

Key code or Mode for textAlign().

:left
RIGHT =

Key code or Mode for textAlign().

:right
TOP =

Mode for textAlign().

:top
BOTTOM =

Mode for textAlign().

:bottom
BASELINE =

Mode for textAlign().

:baseline
IMAGE =

Mode for textureMode().

:image
NORMAL =

Mode for textureMode().

:normal
CLAMP =

Mode for textureWrap().

:clamp
REPEAT =

Mode for textureWrap().

:repeat
THRESHOLD =

Filter type for filter()

:threshold
GRAY =

Filter type for filter()

:gray
INVERT =

Filter type for filter()

:invert
BLUR =

Filter type for filter()

:blur
LINE =

Shape mode for createShape()

:line
RECT =

Shape mode for createShape()

:rect
ELLIPSE =

Shape mode for createShape()

:ellipse
ARC =

Shape mode for createShape()

:arc
TRIANGLE =

Shape mode for createShape()

:triangle
QUAD =

Shape mode for createShape()

:quad
GROUP =

Shape mode for createShape()

:group
POINTS =

Shape mode for beginShape()

:points
LINES =

Shape mode for beginShape()

:lines
TRIANGLES =

Shape mode for beginShape()

:triangles
TRIANGLE_FAN =

Shape mode for beginShape()

:triangle_fan
TRIANGLE_STRIP =

Shape mode for beginShape()

:triangle_strip
QUADS =

Shape mode for beginShape()

:quads
QUAD_STRIP =

Shape mode for beginShape()

:quad_strip
TESS =

Shape mode for beginShape()

:tess
OPEN =

OPEN flag for endShape()

:open
CLOSE =

CLOSE flag for endShape()

:close
ENTER =

Key codes.

:enter
SPACE =
:space
TAB =
:tab
DELETE =
:delete
BACKSPACE =
:backspace
ESC =
:escape
HOME =
:home
PAGEUP =

END = :end

:pageup
PAGEDOWN =
:pagedown
CLEAR =
:clear
SHIFT =
:shift
CONTROL =
:control
ALT =
:alt
WIN =
:win
COMMAND =
:command
OPTION =
:option
FUNCTION =
:function
CAPSLOCK =
:capslock
SECTION =
:section
HELP =
:help
F1 =
:f1
F2 =
:f2
F3 =
:f3
F4 =
:f4
F5 =
:f5
F6 =
:f6
F7 =
:f7
F8 =
:f8
F9 =
:f9
F10 =
:f10
F11 =
:f11
F12 =
:f12
F13 =
:f13
F14 =
:f14
F15 =
:f15
F16 =
:f16
F17 =
:f17
F18 =
:f18
F19 =
:f19
F20 =
:f20
F21 =
:f21
F22 =
:f22
F23 =
:f23
F24 =
:f24
UP =
:up
DOWN =
:down
COLOR_CODES =
{
  aliceblue:            '#f0f8ff',
  antiquewhite:         '#faebd7',
  aqua:                 '#00ffff',
  aquamarine:           '#7fffd4',
  azure:                '#f0ffff',
  beige:                '#f5f5dc',
  bisque:               '#ffe4c4',
  black:                '#000000',
  blanchedalmond:       '#ffebcd',
  blue:                 '#0000ff',
  blueviolet:           '#8a2be2',
  brown:                '#a52a2a',
  burlywood:            '#deb887',
  cadetblue:            '#5f9ea0',
  chartreuse:           '#7fff00',
  chocolate:            '#d2691e',
  coral:                '#ff7f50',
  cornflowerblue:       '#6495ed',
  cornsilk:             '#fff8dc',
  crimson:              '#dc143c',
  cyan:                 '#00ffff',
  darkblue:             '#00008b',
  darkcyan:             '#008b8b',
  darkgoldenrod:        '#b8860b',
  darkgray:             '#a9a9a9',
  darkgreen:            '#006400',
  darkgrey:             '#a9a9a9',
  darkkhaki:            '#bdb76b',
  darkmagenta:          '#8b008b',
  darkolivegreen:       '#556b2f',
  darkorange:           '#ff8c00',
  darkorchid:           '#9932cc',
  darkred:              '#8b0000',
  darksalmon:           '#e9967a',
  darkseagreen:         '#8fbc8f',
  darkslateblue:        '#483d8b',
  darkslategray:        '#2f4f4f',
  darkslategrey:        '#2f4f4f',
  darkturquoise:        '#00ced1',
  darkviolet:           '#9400d3',
  deeppink:             '#ff1493',
  deepskyblue:          '#00bfff',
  dimgray:              '#696969',
  dimgrey:              '#696969',
  dodgerblue:           '#1e90ff',
  firebrick:            '#b22222',
  floralwhite:          '#fffaf0',
  forestgreen:          '#228b22',
  fuchsia:              '#ff00ff',
  gainsboro:            '#dcdcdc',
  ghostwhite:           '#f8f8ff',
  goldenrod:            '#daa520',
  gold:                 '#ffd700',
  gray:                 '#808080',
  green:                '#008000',
  greenyellow:          '#adff2f',
  grey:                 '#808080',
  honeydew:             '#f0fff0',
  hotpink:              '#ff69b4',
  indianred:            '#cd5c5c',
  indigo:               '#4b0082',
  ivory:                '#fffff0',
  khaki:                '#f0e68c',
  lavenderblush:        '#fff0f5',
  lavender:             '#e6e6fa',
  lawngreen:            '#7cfc00',
  lemonchiffon:         '#fffacd',
  lightblue:            '#add8e6',
  lightcoral:           '#f08080',
  lightcyan:            '#e0ffff',
  lightgoldenrodyellow: '#fafad2',
  lightgray:            '#d3d3d3',
  lightgreen:           '#90ee90',
  lightgrey:            '#d3d3d3',
  lightpink:            '#ffb6c1',
  lightsalmon:          '#ffa07a',
  lightseagreen:        '#20b2aa',
  lightskyblue:         '#87cefa',
  lightslategray:       '#778899',
  lightslategrey:       '#778899',
  lightsteelblue:       '#b0c4de',
  lightyellow:          '#ffffe0',
  lime:                 '#00ff00',
  limegreen:            '#32cd32',
  linen:                '#faf0e6',
  magenta:              '#ff00ff',
  maroon:               '#800000',
  mediumaquamarine:     '#66cdaa',
  mediumblue:           '#0000cd',
  mediumorchid:         '#ba55d3',
  mediumpurple:         '#9370db',
  mediumseagreen:       '#3cb371',
  mediumslateblue:      '#7b68ee',
  mediumspringgreen:    '#00fa9a',
  mediumturquoise:      '#48d1cc',
  mediumvioletred:      '#c71585',
  midnightblue:         '#191970',
  mintcream:            '#f5fffa',
  mistyrose:            '#ffe4e1',
  moccasin:             '#ffe4b5',
  navajowhite:          '#ffdead',
  navy:                 '#000080',
  oldlace:              '#fdf5e6',
  olive:                '#808000',
  olivedrab:            '#6b8e23',
  orange:               '#ffa500',
  orangered:            '#ff4500',
  orchid:               '#da70d6',
  palegoldenrod:        '#eee8aa',
  palegreen:            '#98fb98',
  paleturquoise:        '#afeeee',
  palevioletred:        '#db7093',
  papayawhip:           '#ffefd5',
  peachpuff:            '#ffdab9',
  peru:                 '#cd853f',
  pink:                 '#ffc0cb',
  plum:                 '#dda0dd',
  powderblue:           '#b0e0e6',
  purple:               '#800080',
  rebeccapurple:        '#663399',
  red:                  '#ff0000',
  rosybrown:            '#bc8f8f',
  royalblue:            '#4169e1',
  saddlebrown:          '#8b4513',
  salmon:               '#fa8072',
  sandybrown:           '#f4a460',
  seagreen:             '#2e8b57',
  seashell:             '#fff5ee',
  sienna:               '#a0522d',
  silver:               '#c0c0c0',
  skyblue:              '#87ceeb',
  slateblue:            '#6a5acd',
  slategray:            '#708090',
  slategrey:            '#708090',
  snow:                 '#fffafa',
  springgreen:          '#00ff7f',
  steelblue:            '#4682b4',
  tan:                  '#d2b48c',
  teal:                 '#008080',
  thistle:              '#d8bfd8',
  tomato:               '#ff6347',
  turquoise:            '#40e0d0',
  violet:               '#ee82ee',
  wheat:                '#f5deb3',
  white:                '#ffffff',
  whitesmoke:           '#f5f5f5',
  yellow:               '#ffff00',
  yellowgreen:          '#9acd32',
  none:                 '#00000000',
}

Instance Method Summary collapse

Instance Method Details

#abs(value) ⇒ Numeric

Returns the absolute number of the value.

Parameters:

  • value (Numeric)

    number

Returns:

  • (Numeric)

    absolute number

See Also:



2563
2564
2565
# File 'lib/processing/graphics_context.rb', line 2563

def abs(value)
  value.abs
end

#acos(value) ⇒ Numeric

Returns the inverse of cos().

Parameters:

  • value (Numeric)

    value for calculation

Returns:

  • (Numeric)

    the arc cosine

See Also:



2934
2935
2936
# File 'lib/processing/graphics_context.rb', line 2934

def acos(value)
  Math.acos value
end

#alpha(color) ⇒ Numeric

Returns the red value of the color.

Parameters:

  • color (Numeric)

    color value

Returns:

  • (Numeric)

    the red value

See Also:



756
757
758
# File 'lib/processing/graphics_context.rb', line 756

def alpha(color)
  ((color >> 24) & 0xff) / 255.0 * @colorMaxes__[3]
end

#angleMode(mode = nil) ⇒ RADIANS, DEGREES

Sets angle mode.

Parameters:

Returns:

See Also:



849
850
851
852
853
854
855
856
857
858
859
860
# File 'lib/processing/graphics_context.rb', line 849

def angleMode(mode = nil)
  if mode != nil
    @angleMode__  = mode
    @toRad__, @toDeg__, @fromRad__, @fromDeg__ =
      case mode.downcase.to_sym
      when RADIANS then [1.0,      RAD2DEG__, 1.0,       DEG2RAD__]
      when DEGREES then [DEG2RAD__, 1.0,      RAD2DEG__, 1.0]
      else raise ArgumentError, "invalid angle mode: #{mode}"
      end
  end
  @angleMode__
end

#applyMatrix(array) ⇒ nil #applyMatrix(a, b, c, d, e, f) ⇒ nil #applyMatrix(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) ⇒ nil

Reset current transformation matrix with 2x3, or 4x4 matrix.

Parameters:

  • array (Array)

    6 or 16 numbers which define the matrix

  • a (Numeric)

    number which defines the matrix

  • b (Numeric)

    number which defines the matrix

  • c (Numeric)

    number which defines the matrix

  • d (Numeric)

    number which defines the matrix

  • e (Numeric)

    number which defines the matrix

  • f (Numeric)

    number which defines the matrix

  • g (Numeric)

    number which defines the matrix

  • h (Numeric)

    number which defines the matrix

  • i (Numeric)

    number which defines the matrix

  • j (Numeric)

    number which defines the matrix

  • k (Numeric)

    number which defines the matrix

  • l (Numeric)

    number which defines the matrix

  • m (Numeric)

    number which defines the matrix

  • n (Numeric)

    number which defines the matrix

  • o (Numeric)

    number which defines the matrix

  • p (Numeric)

    number which defines the matrix

Returns:

  • (nil)

    nil

Raises:

  • (ArgumentError)

See Also:



2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
# File 'lib/processing/graphics_context.rb', line 2349

def applyMatrix(*args)
  assertDrawing__
  args = args.first if args.first.kind_of?(Array)
  if args.size == 6
    a, b, c, d, e, f = args
    args = [
      a, b, 0, 0,
      c, d, 0, 0,
      0, 0, 1, 0,
      e, f, 0, 1
    ]
  end
  raise ArgumentError unless args.size == 16
  m = Rays::Matrix.new(*args)
  m.transpose! if @p5jsMode__
  @painter__.matrix *= m
  nil
end

#arc(a, b, c, d, start, stop) ⇒ nil Also known as: drawArc

Draws an arc.

The parameters a, b, c, and d are determined by ellipseMode().

Parameters:

  • a (Numeric)

    horizontal position of the shape, by default

  • b (Numeric)

    vertical position of the shape, by default

  • c (Numeric)

    width of the shape, by default

  • d (Numeric)

    height of the shape, by default

  • start (Numeric)

    angle to start the arc

  • stop (Numeric)

    angle to stop the arc

Returns:

  • (nil)

    nil

See Also:



1641
1642
1643
1644
1645
1646
1647
# File 'lib/processing/graphics_context.rb', line 1641

def arc(a, b, c, d, start, stop)
  assertDrawing__
  x, y, w, h = toXYWH__ @ellipseMode__, a, b, c, d
  from, to   = toDegrees__(-start), toDegrees__(-stop)
  @painter__.ellipse x, y, w, h, from: from, to: to
  nil
end

#asin(value) ⇒ Numeric

Returns the inverse of sin().

Parameters:

  • value (Numeric)

    value for calculation

Returns:

  • (Numeric)

    the arc sine

See Also:



2921
2922
2923
# File 'lib/processing/graphics_context.rb', line 2921

def asin(value)
  Math.asin value
end

#atan(value) ⇒ Numeric

Returns the inverse of tan().

Parameters:

  • value (Numeric)

    value for valculation

Returns:

  • (Numeric)

    the arc tangent

See Also:



2947
2948
2949
# File 'lib/processing/graphics_context.rb', line 2947

def atan(value)
  Math.atan value
end

#atan2(y, x) ⇒ Numeric

Returns the angle from a specified point.

Parameters:

  • y (Numeric)

    y of the point

  • x (Numeric)

    x of the point

Returns:

  • (Numeric)

    the angle in radians

See Also:



2961
2962
2963
# File 'lib/processing/graphics_context.rb', line 2961

def atan2(y, x)
  Math.atan2 y, x
end

#background(str) ⇒ nil #background(str, alpha) ⇒ nil #background(gray) ⇒ nil #background(gray, alpha) ⇒ nil #background(r, g, b) ⇒ nil #background(r, g, b, alpha) ⇒ nil

Clears screen.

Examples:

background(255)            # White background
background(0)              # Black background
background(255, 0, 0)      # Red background
background(255, 0, 0, 128) # Semi-transparent red background

Parameters:

  • str (String)

    color code like ‘#00AAFF’

  • gray (Integer)

    gray value (0..255)

  • r (Integer)

    red value (0..255)

  • g (Integer)

    green value (0..255)

  • b (Integer)

    blue value (0..255)

  • alpha (Integer)

    alpha value (0..255)

Returns:

  • (nil)

    nil

See Also:



1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
# File 'lib/processing/graphics_context.rb', line 1466

def background(*args)
  assertDrawing__
  rgba = toRGBA__(*args)
  if rgba[3] == 1
    @painter__.background(*rgba)
  else
    @painter__.push fill: rgba, stroke: :none, blend_mode: :replace do |_|
      @painter__.rect 0, 0, width, height
    end
  end
  nil
end

#beginContournil

Begins drawing a hole inside shape.

Examples:

beginShape
vertex 10, 10
vertex 10, 50
vertex 50, 50
vertex 90, 10
beginContour
vertex 20, 20
vertex 30, 20
vertex 30, 30
vertex 20, 30
endContour
endShape CLOSE

Returns:

  • (nil)

    nil

See Also:



1948
1949
1950
1951
# File 'lib/processing/graphics_context.rb', line 1948

def beginContour()
  (@drawingShape__ or raise "beginContour() must be called after beginShape()")
    .beginContour
end

#beginShape(type = nil) ⇒ nil

Begins drawing complex shapes.

Examples:

# Draws polygon
beginShape
vertex 10, 10
vertex 10, 50
vertex 50, 50
vertex 90, 10
endShape CLOSE

# Draws triangles
beginShape TRIANGLES
vertex 10, 10
vertex 10, 50
vertex 50, 50
endShape

Parameters:

Returns:

  • (nil)

    nil

See Also:



1902
1903
1904
1905
1906
# File 'lib/processing/graphics_context.rb', line 1902

def beginShape(type = nil)
  raise "beginShape() cannot be called twice" if @drawingShape__
  @drawingShape__ = createShape
  @drawingShape__.beginShape type
end

#bezier(x1, y1, cx1, cy1, cx2, cy2, x2, y2) ⇒ nil Also known as: drawBezier

Draws a Bezier spline curve.

Parameters:

  • x1 (Numeric)

    horizontal position of first point

  • y1 (Numeric)

    vertical position of first point

  • cx1 (Numeric)

    horizontal position of first control point

  • cy1 (Numeric)

    vertical position of first control point

  • cx2 (Numeric)

    horizontal position of second control point

  • cy2 (Numeric)

    vertical position of second control point

  • x2 (Numeric)

    horizontal position of second point

  • y2 (Numeric)

    vertical position of second point

Returns:

  • (nil)

    nil

See Also:



1756
1757
1758
1759
1760
1761
1762
# File 'lib/processing/graphics_context.rb', line 1756

def bezier(x1, y1, cx1, cy1, cx2, cy2, x2, y2)
  assertDrawing__
  @painter__.nsegment = @bezierDetail__
  @painter__.bezier x1, y1, cx1, cy1, cx2, cy2, x2, y2
  @painter__.nsegment = 0
  nil
end

#bezierDetail(detail) ⇒ nil

Sets the resolution at which Bezier’s curve is displayed. The default value is 20.

Parameters:

  • detail (Numeric)

    resolution of the curves

Returns:

  • (nil)

    nil

See Also:



1149
1150
1151
1152
1153
# File 'lib/processing/graphics_context.rb', line 1149

def bezierDetail(detail)
  detail = 1 if detail < 1
  @bezierDetail__ = detail
  nil
end

#bezierPoint(a, b, c, d, t) ⇒ Numeric

Evaluates the Bezier at point t for points a, b, c, d.

Parameters:

  • a (Numeric)

    coordinate of first point on the curve

  • b (Numeric)

    coordinate of first control point

  • c (Numeric)

    coordinate of second control point

  • d (Numeric)

    coordinate of second point on the curve

  • t (Numeric)

    value between 0.0 and 1.0

Returns:

  • (Numeric)

    interpolated value

See Also:



3026
3027
3028
3029
3030
3031
3032
# File 'lib/processing/graphics_context.rb', line 3026

def bezierPoint(a, b, c, d, t)
  tt = 1.0 - t
  tt ** 3.0 * a +
  tt ** 2.0 * b * 3.0 * t +
  t  ** 2.0 * c * 3.0 * tt +
  t  ** 3.0 * d
end

#bezierTangent(a, b, c, d, t) ⇒ Numeric

Calculates the tangent of a point on a Bezier curve.

Parameters:

  • a (Numeric)

    coordinate of first point on the curve

  • b (Numeric)

    coordinate of first control point

  • c (Numeric)

    coordinate of second control point

  • d (Numeric)

    coordinate of second point on the curve

  • t (Numeric)

    value between 0.0 and 1.0

Returns:

  • (Numeric)

    tangent value

See Also:



3047
3048
3049
3050
3051
3052
3053
3054
3055
# File 'lib/processing/graphics_context.rb', line 3047

def bezierTangent(a, b, c, d, t)
  tt = 1.0 - t
  3.0 * d * t  ** 2.0 -
  3.0 * c * t  ** 2.0 +
  6.0 * c * tt *  t   -
  6.0 * b * tt *  t   +
  3.0 * b * tt ** 2.0 -
  3.0 * a * tt ** 2.0
end

#bezierVertex(x2, y2, x3, y3, x4, y4) ⇒ nil

Append bezier vertex for shape polygon.

Parameters:

  • x (Numeric)

    x position of vertex

  • y (Numeric)

    y position of vertex

Returns:

  • (nil)

    nil

See Also:



2010
2011
2012
2013
# File 'lib/processing/graphics_context.rb', line 2010

def bezierVertex(x2, y2, x3, y3, x4, y4)
  (@drawingShape__ or raise "bezierVertex() must be called after beginShape()")
    .bezierVertex x2, y2, x3, y3, x4, y4
end

#blend(sx, sy, sw, sh, dx, dy, dw, dh, mode) ⇒ nil #blend(img, sx, sy, sw, sh, dx, dy, dw, dh, mode) ⇒ nil

Blends image.

Parameters:

  • img (Image) (defaults to: nil)

    image for blend source

  • sx (Numrtic)

    x position of source region

  • sy (Numrtic)

    y position of source region

  • sw (Numrtic)

    width of source region

  • sh (Numrtic)

    height of source region

  • dx (Numrtic)

    x position of destination region

  • dy (Numrtic)

    y position of destination region

  • dw (Numrtic)

    width of destination region

  • dh (Numrtic)

    height of destination region

  • mode (BLEND, ADD, SUBTRACT, LIGHTEST, DARKEST, EXCLUSION, MULTIPLY, SCREEN, REPLACE)

    blend mode

Returns:

  • (nil)

    nil

See Also:



2075
2076
2077
2078
2079
2080
# File 'lib/processing/graphics_context.rb', line 2075

def blend(img = nil, sx, sy, sw, sh, dx, dy, dw, dh, mode)
  assertDrawing__
  (img || self).drawImage__(
    @painter__, sx, sy, sw, sh, dx, dy, dw, dh,
    fill: getTint__, stroke: :none, blend_mode: mode)
end

#blendMode(mode = nil) ⇒ nil

Sets blend mode. Default is BLEND.



971
972
973
974
975
976
977
# File 'lib/processing/graphics_context.rb', line 971

def blendMode(mode = nil)
  if mode != nil
    @blendMode__          = mode
    @painter__.blend_mode = mode
  end
  @blendMode__
end

#blue(color) ⇒ Numeric

Returns the blue value of the color.

Parameters:

  • color (Numeric)

    color value

Returns:

  • (Numeric)

    the blue value

See Also:



743
744
745
# File 'lib/processing/graphics_context.rb', line 743

def blue(color)
  (color & 0xff) / 255.0 * @colorMaxes__[2]
end

#brightness(color) ⇒ Numeric

Returns the brightness value of the color.

Parameters:

  • color (Numeric)

    color value

Returns:

  • (Numeric)

    the brightness value

See Also:



797
798
799
800
# File 'lib/processing/graphics_context.rb', line 797

def brightness(color)
  _, _, b = color2raw__(color).to_hsv
  b * (@hsbColor__ ? @colorMaxes__[2] : 1)
end

#ceil(value) ⇒ Numeric

Returns the closest integer number greater than or equal to the value.

Parameters:

  • value (Numeric)

    number

Returns:

  • (Numeric)

    rounded up number

See Also:



2576
2577
2578
# File 'lib/processing/graphics_context.rb', line 2576

def ceil(value)
  value.ceil
end

#circle(x, y, extent) ⇒ nil Also known as: drawCircle

Draws a circle.

Examples:

circle(50, 60, 80)   # Draw circle at (50,60) with diameter 80
circle(100, 200, 60) # Draw circle at (100,200) with diameter 60

Parameters:

  • x (Numeric)

    horizontal position of the shape

  • y (Numeric)

    vertical position of the shape

  • extent (Numeric)

    width and height of the shape

Returns:

  • (nil)

    nil

See Also:



1619
1620
1621
# File 'lib/processing/graphics_context.rb', line 1619

def circle(x, y, extent)
  ellipse x, y, extent, extent
end

#clearObject



1479
1480
1481
1482
1483
# File 'lib/processing/graphics_context.rb', line 1479

def clear()
  assertDrawing__
  @painter__.background 0, 0
  nil
end

#clip(a, b, c, d) ⇒ nil

Limits the drawable rectangle.

The parameters a, b, c, and d are determined by rectMode().

Parameters:

  • a (Numeric)

    horizontal position of the drawable area, by default

  • b (Numeric)

    vertical position of the drawable area, by default

  • c (Numeric)

    width of the drawable area, by default

  • d (Numeric)

    height of the drawable area, by default

Returns:

  • (nil)

    nil

See Also:



1211
1212
1213
1214
1215
# File 'lib/processing/graphics_context.rb', line 1211

def clip(a, b, c, d)
  x, y, w, h = toXYWH__ @imageMode__, a, b, c, d
  @painter__.clip x, y, w, h
  nil
end

#color(gray) ⇒ Integer #color(gray, alpha) ⇒ Integer #color(v1, v2, v3) ⇒ Integer #color(v1, v2, v3, alpha) ⇒ Integer

Creates color value.

Parameters:

  • gray (Numeric)

    the value for gray

  • alpha (Numeric)

    the value for alpha

  • v1 (Numeric)

    the value for red or hue

  • v2 (Numeric)

    the value for green or saturation

  • v3 (Numeric)

    the value for blue or brightness

Returns:

  • (Integer)

    the rgba color value

See Also:



693
694
695
696
697
# File 'lib/processing/graphics_context.rb', line 693

def color(*args)
  toRGBA__(*args)
    .map {|n| (n * 255).to_i.clamp 0, 255}
    .then {|r, g, b, a| Image.toColor__ r, g, b, a}
end

#colorMode(mode) ⇒ RGB, HSB #colorMode(mode, max) ⇒ RGB, HSB #colorMode(mode, max1, max2, max3) ⇒ RGB, HSB #colorMode(mode, max1, max2, max3, maxA) ⇒ RGB, HSB

Sets color mode and max color values.

Parameters:

  • mode (RGB, HSB) (defaults to: nil)

    RGB or HSB

  • max (Numeric)

    max values for all color values

  • max1 (Numeric)

    max value for red or hue

  • max2 (Numeric)

    max value for green or saturation

  • max3 (Numeric)

    max value for blue or brightness

  • maxA (Numeric)

    max value for alpha

Returns:

See Also:



659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
# File 'lib/processing/graphics_context.rb', line 659

def colorMode(mode = nil, *maxes)
  if mode != nil
    mode = mode.downcase.to_sym
    raise ArgumentError, "invalid color mode: #{mode}" unless [RGB, HSB].include?(mode)
    raise ArgumentError unless [0, 1, 3, 4].include?(maxes.size)

    @colorMode__ = mode
    @hsbColor__  = mode == HSB
    case maxes.size
    when 1    then @colorMaxes__                 = [maxes.first.to_f] * 4
    when 3, 4 then @colorMaxes__[0...maxes.size] = maxes.map &:to_f
    end
  end
  @colorMode__
end

#constrain(value, min, max) ⇒ Numeric

Constrains the number between min..max.

Parameters:

  • value (Numeric)

    number to be constrained

  • min (Numeric)

    lower bound of the range

  • max (Numeric)

    upper bound of the range

Returns:

  • (Numeric)

    constrained number

See Also:



2843
2844
2845
# File 'lib/processing/graphics_context.rb', line 2843

def constrain(value, min, max)
  value < min ? min : (value > max ? max : value)
end

#copy(sx, sy, sw, sh, dx, dy, dw, dh) ⇒ nil #copy(img, sx, sy, sw, sh, dx, dy, dw, dh) ⇒ nil

Copies image.

Parameters:

  • img (Image) (defaults to: nil)

    image for copy source

  • sx (Numrtic)

    x position of source region

  • sy (Numrtic)

    y position of source region

  • sw (Numrtic)

    width of source region

  • sh (Numrtic)

    height of source region

  • dx (Numrtic)

    x position of destination region

  • dy (Numrtic)

    y position of destination region

  • dw (Numrtic)

    width of destination region

  • dh (Numrtic)

    height of destination region

Returns:

  • (nil)

    nil

See Also:



2050
2051
2052
# File 'lib/processing/graphics_context.rb', line 2050

def copy(img = nil, sx, sy, sw, sh, dx, dy, dw, dh)
  blend img, sx, sy, sw, sh, dx, dy, dw, dh, BLEND
end

#cos(angle) ⇒ Numeric

Returns the cosine of an angle.

Parameters:

  • angle (Numeric)

    angle in radians

Returns:

  • (Numeric)

    the cosine

See Also:



2895
2896
2897
# File 'lib/processing/graphics_context.rb', line 2895

def cos(angle)
  Math.cos angle
end

#createCapture(*args) ⇒ Capture

Creates a camera object as a video input device.

Returns:



3359
3360
3361
# File 'lib/processing/graphics_context.rb', line 3359

def createCapture(*args)
  Capture.new(*args)
end

#createFont(name, size, smooth: true) ⇒ Font

Creates a new font object.

Parameters:

  • name (String)

    font name

  • size (Numeric)

    font size (max 256)

  • smooth (Boolean) (defaults to: true)

    anti-aliased or pixel-perfect

Returns:

  • (Font)

    new font

See Also:



3209
3210
3211
3212
3213
# File 'lib/processing/graphics_context.rb', line 3209

def createFont(name, size, smooth: true)
  size ||= FONT_SIZE_DEFAULT__
  size   = FONT_SIZE_MAX__ if size > FONT_SIZE_MAX__
  Font.new Rays::Font.new(name, size, smooth)
end

#createGraphics(width, height, pixelDensity = 1) ⇒ Graphics

Creates a new off-screen graphics context object.

Parameters:

  • width (Numeric)

    width of graphics image

  • height (Numeric)

    height of graphics image

  • pixelDensity (Numeric) (defaults to: 1)

    pixel density of graphics image

Returns:

See Also:



3311
3312
3313
# File 'lib/processing/graphics_context.rb', line 3311

def createGraphics(width, height, pixelDensity = 1)
  Graphics.new width, height, pixelDensity
end

#createImage(w, h) ⇒ Image #createImage(w, h, format) ⇒ Image

Creates a new image object.

Parameters:

  • w (Numeric)

    width of new image

  • h (Numeric)

    height of new image

  • format (RGB, RGBA) (defaults to: RGBA)

    image format

Returns:

Raises:

  • (ArgumentError)

See Also:



3229
3230
3231
3232
3233
# File 'lib/processing/graphics_context.rb', line 3229

def createImage(w, h, format = RGBA)
  colorspace = {RGB => Rays::RGB, RGBA => Rays::RGBA}[format]
  raise ArgumentError, "Unknown image format" unless colorspace
  Image.new Rays::Image.new(w, h, colorspace).paint {background 0, 0}
end

#createShader(vertPath, fragPath) ⇒ Shader #createShader(vertSource, fragSource) ⇒ Shader

Creates a shader object.

Passing nil for a vertex shader parameter causes the following default vertex shader to be used. “‘ attribute vec3 position; attribute vec3 texCoord; attribute vec4 color; varying vec4 vertPosition; varying vec4 vertTexCoord; varying vec4 vertColor; uniform mat4 transform; uniform mat4 texMatrix; void main ()

vec4 pos__   = vec4(position, 1.0);
vertPosition = pos__;
vertTexCoord = texMatrix * vec4(texCoord, 1.0);
vertColor    = color;
gl_Position  = transform * pos__;

“‘

Parameters:

  • vertPath (String)

    vertex shader file path

  • fragPath (String)

    fragment shader file path

  • vertSource (String)

    vertex shader source

  • fragSource (String)

    fragment shader source

Returns:

See Also:



3349
3350
3351
3352
3353
# File 'lib/processing/graphics_context.rb', line 3349

def createShader(vert, frag)
  vert = File.read if vert && File.exist?(vert)
  frag = File.read if frag && File.exist?(frag)
  Shader.new vert, frag
end

#createShapeShape #createShape(LINE, x1, y1, x2, y2) ⇒ Shape #createShape(RECT, a, b, c, d) ⇒ Shape #createShape(ELLIPSE, a, b, c, d) ⇒ Shape #createShape(ARC, a, b, c, d, start, stop) ⇒ Shape #createShape(TRIANGLE, x1, y1, x2, y2, x3, y3) ⇒ Shape #createShape(QUAD, x1, y1, x2, y2, x3, y3, x4, y4) ⇒ Shape #createShape(GROUP) ⇒ Shape

Creates a new shape object.

Parameters:

Returns:

See Also:



3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
# File 'lib/processing/graphics_context.rb', line 3252

def createShape(kind = nil, *args)
  case kind
  when LINE     then createLineShape__(    *args)
  when RECT     then createRectShape__(    *args)
  when ELLIPSE  then createEllipseShape__( *args)
  when ARC      then createArcShape__(     *args)
  when TRIANGLE then createTriangleShape__(*args)
  when QUAD     then createQuadShape__(    *args)
  when GROUP    then Shape.new nil, [], context: self
  when nil      then Shape.new context: self
  else raise ArgumentError, "Unknown shape kind '#{kind}'"
  end
end

#createVectorVector #createVector(x, y) ⇒ Vector #createVector(x, y, z) ⇒ Vector

Creates a new vector object.

Parameters:

  • x (Numeric)

    x of new vector

  • y (Numeric)

    y of new vector

  • z (Numeric)

    z of new vector

Returns:

See Also:



3195
3196
3197
# File 'lib/processing/graphics_context.rb', line 3195

def createVector(*args)
  Vector.new(*args, context: self)
end

#curve(cx1, cy1, x1, y1, x2, y2, cx2, cy2) ⇒ nil Also known as: drawCurve

Draws a Catmull-Rom spline curve.

Parameters:

  • cx1 (Numeric)

    horizontal position of beginning control point

  • cy1 (Numeric)

    vertical position of beginning control point

  • x1 (Numeric)

    horizontal position of first point

  • y1 (Numeric)

    vertical position of first point

  • x2 (Numeric)

    horizontal position of second point

  • y2 (Numeric)

    vertical position of second point

  • cx2 (Numeric)

    horizontal position of ending control point

  • cy2 (Numeric)

    vertical position of ending control point

Returns:

  • (nil)

    nil

See Also:



1730
1731
1732
1733
1734
1735
1736
# File 'lib/processing/graphics_context.rb', line 1730

def curve(cx1, cy1, x1, y1, x2, y2, cx2, cy2)
  assertDrawing__
  @painter__.nsegment = @curveDetail__
  @painter__.curve cx1, cy1, x1, y1, x2, y2, cx2, cy2
  @painter__.nsegment = 0
  nil
end

#curveDetail(detail) ⇒ nil

Sets the resolution at which curves display. The default value is 20 while the minimum value is 3.

Parameters:

  • detail (Numeric)

    resolution of the curves

Returns:

  • (nil)

    nil

See Also:



1119
1120
1121
1122
1123
# File 'lib/processing/graphics_context.rb', line 1119

def curveDetail(detail)
  detail = 3 if detail < 3
  @curveDetail__ = detail
  nil
end

#curvePoint(a, b, c, d, t) ⇒ Numeric

Evaluates the curve at point t for points a, b, c, d.

Parameters:

  • a (Numeric)

    coordinate of first control point

  • b (Numeric)

    coordinate of first point on the curve

  • c (Numeric)

    coordinate of second point on the curve

  • d (Numeric)

    coordinate of second control point

  • t (Numeric)

    value between 0.0 and 1.0

Returns:

  • (Numeric)

    interpolated value

See Also:



2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
# File 'lib/processing/graphics_context.rb', line 2978

def curvePoint(a, b, c, d, t)
  s  = @curveTightness__
  t3 = t * t * t
  t2 = t * t
  f1 = ( s - 1.0) / 2.0 * t3 + ( 1.0 - s)       * t2 + (s - 1.0) / 2.0 * t
  f2 = ( s + 3.0) / 2.0 * t3 + (-5.0 - s) / 2.0 * t2 +  1.0
  f3 = (-3.0 - s) / 2.0 * t3 + ( s + 2.0)       * t2 + (1.0 - s) / 2.0 * t
  f4 = ( 1.0 - s) / 2.0 * t3 + ( s - 1.0) / 2.0 * t2
  a * f1 + b * f2 + c * f3 + d * f4
end

#curveTangent(a, b, c, d, t) ⇒ Numeric

Calculates the tangent of a point on a curve.

Parameters:

  • a (Numeric)

    coordinate of first control point

  • b (Numeric)

    coordinate of first point on the curve

  • c (Numeric)

    coordinate of second point on the curve

  • d (Numeric)

    coordinate of second control point

  • t (Numeric)

    value between 0.0 and 1.0

Returns:

  • (Numeric)

    tangent value

See Also:



3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
# File 'lib/processing/graphics_context.rb', line 3002

def curveTangent(a, b, c, d, t)
  s = @curveTightness__
  tt3 = t * t * 3.0
  t2  = t * 2.0
  f1  = ( s - 1.0) / 2.0 * tt3 + ( 1.0 - s)       * t2 + (s - 1.0) / 2.0
  f2  = ( s + 3.0) / 2.0 * tt3 + (-5.0 - s) / 2.0 * t2
  f3  = (-3.0 - s) / 2.0 * tt3 + ( s + 2.0)       * t2 + (1.0 - s) / 2.0
  f4  = ( 1.0 - s) / 2.0 * tt3 + ( s - 1.0) / 2.0 * t2
  a * f1 + b * f2 + c * f3 + d * f4
end

#curveTightness(tightness) ⇒ nil

Sets the quality of curve forms.

Parameters:

  • tightness (Numeric)

    determines how the curve fits to the vertex points

Returns:

  • (nil)

    nil

See Also:



1134
1135
1136
1137
# File 'lib/processing/graphics_context.rb', line 1134

def curveTightness(tightness)
  @curveTightness__ = tightness
  nil
end

#curveVertex(x, y) ⇒ nil

Append curve vertex for shape polygon.

Parameters:

  • x (Numeric)

    x position of vertex

  • y (Numeric)

    y position of vertex

Returns:

  • (nil)

    nil

See Also:



1995
1996
1997
1998
# File 'lib/processing/graphics_context.rb', line 1995

def curveVertex(x, y)
  (@drawingShape__ or raise "curveVertex() must be called after beginShape()")
    .curveVertex x, y
end

#degrees(radian) ⇒ Numeric

Converts radian to degree.

Parameters:

  • radian (Numeric)

    radian to convert

Returns:

  • (Numeric)

    degree

See Also:



2869
2870
2871
# File 'lib/processing/graphics_context.rb', line 2869

def degrees(radian)
  radian * RAD2DEG__
end

#dist(x1, y1, x2, y2) ⇒ Numeric #dist(x1, y1, z1, x2, y2, z2) ⇒ Numeric

Returns distance between 2 points.

Parameters:

  • x1 (Numeric)

    x of first point

  • y1 (Numeric)

    y of first point

  • z1 (Numeric)

    z of first point

  • x2 (Numeric)

    x of second point

  • y2 (Numeric)

    y of second point

  • z2 (Numeric)

    z of second point

Returns:

  • (Numeric)

    distance between 2 points

See Also:



2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
# File 'lib/processing/graphics_context.rb', line 2712

def dist(*args)
  case args.size
  when 4
    x1, y1, x2, y2 = *args
    xx, yy = x2 - x1, y2 - y1
    Math.sqrt xx * xx + yy * yy
  when 3
    x1, y1, z1, x2, y2, z2 = *args
    xx, yy, zz = x2 - x1, y2 - y1, z2 - z1
    Math.sqrt xx * xx + yy * yy + zz * zz
  else raise ArgumentError
  end
end

#ellipse(a, b, c) ⇒ nil #ellipse(a, b, c, d) ⇒ nil Also known as: drawEllipse

Draws an ellipse.

The parameters a, b, c, and d are determined by ellipseMode().

Examples:

ellipse(50, 50, 80, 80) # Draw circle at (50,50) with diameter 80
ellipse(50, 50, 80, 60) # Draw ellipse at (50,50) with width 80, height 60
ellipse(50, 50, 80)     # Draw circle at (50,50) with diameter 80

Parameters:

  • a (Numeric)

    horizontal position of the shape, by default

  • b (Numeric)

    vertical position of the shape, by default

  • c (Numeric)

    width of the shape, by default

  • d (Numeric) (defaults to: nil)

    height of the shape, by default

Returns:

  • (nil)

    nil

See Also:



1595
1596
1597
1598
1599
1600
# File 'lib/processing/graphics_context.rb', line 1595

def ellipse(a, b, c, d = nil)
  assertDrawing__
  x, y, w, h = toXYWH__ @ellipseMode__, a, b, c, (d || c)
  @painter__.ellipse x, y, w, h
  nil
end

#ellipseMode(mode) ⇒ nil

Sets ellipse mode. Default is CENTER.

CORNER -> ellipse(left, top, width, height) CORNERS -> ellipse(left, top, right, bottom) CENTER -> ellipse(centerX, centerY, width, height) RADIUS -> ellipse(centerX, centerY, radiusH, radiusV)



914
915
916
# File 'lib/processing/graphics_context.rb', line 914

def ellipseMode(mode)
  @ellipseMode__ = mode
end

#endContournil

Ends drawing a hole.



1960
1961
1962
1963
# File 'lib/processing/graphics_context.rb', line 1960

def endContour()
  (@drawingShape__ or raise "endContour() must be called after beginShape()")
    .endContour
end

#endShapenil #endShape(CLOSE) ⇒ nil

Ends drawing complex shapes.

Parameters:

  • mode (CLOSE) (defaults to: nil)

    Use CLOSE to create looped polygon

Returns:

  • (nil)

    nil

See Also:



1919
1920
1921
1922
1923
1924
1925
# File 'lib/processing/graphics_context.rb', line 1919

def endShape(mode = nil)
  s = @drawingShape__ or raise "endShape() must be called after beginShape()"
  s.endShape mode
  shape s
  @drawingShape__ = nil
  nil
end

#exp(n) ⇒ Numeric

Returns Euler’s number e raised to the power of value.

Parameters:

  • value (Numeric)

    number

Returns:

  • (Numeric)

    result number

See Also:



2628
2629
2630
# File 'lib/processing/graphics_context.rb', line 2628

def exp(n)
  Math.exp n
end

#fill(rgb) ⇒ nil #fill(rgb, alpha) ⇒ nil #fill(gray) ⇒ nil #fill(gray, alpha) ⇒ nil #fill(r, g, b) ⇒ nil #fill(r, g, b, alpha) ⇒ nil

Sets fill color.

Examples:

fill(255)            # White fill
fill(255, 0, 0)      # Red fill
fill(0, 255, 0, 128) # Semi-transparent green fill

Parameters:

  • rgb (String)

    color code like ‘#00AAFF’

  • gray (Integer)

    gray value (0..255)

  • r (Integer)

    red value (0..255)

  • g (Integer)

    green value (0..255)

  • b (Integer)

    blue value (0..255)

  • alpha (Integer)

    alpha value (0..255)

Returns:

  • (nil)

    nil

See Also:



1005
1006
1007
1008
# File 'lib/processing/graphics_context.rb', line 1005

def fill(*args)
  @painter__.fill(*toRGBA__(*args))
  nil
end

#filter(*args) ⇒ nil

Applies an image filter to screen.

overload filter(shader) overload filter(type) overload filter(type, param)

Parameters:

Returns:

  • (nil)

    nil

See Also:



1434
1435
1436
1437
# File 'lib/processing/graphics_context.rb', line 1434

def filter(*args)
  @filter__ = Shader.createFilter__(*args)
  nil
end

#floor(value) ⇒ Numeric

Returns the closest integer number less than or equal to the value.

Parameters:

  • value (Numeric)

    number

Returns:

  • (Numeric)

    rounded down number

See Also:



2589
2590
2591
# File 'lib/processing/graphics_context.rb', line 2589

def floor(value)
  value.floor
end

#green(color) ⇒ Numeric

Returns the green value of the color.

Parameters:

  • color (Numeric)

    color value

Returns:

  • (Numeric)

    the green value

See Also:



730
731
732
# File 'lib/processing/graphics_context.rb', line 730

def green(color)
  ((color >> 8) & 0xff) / 255.0 * @colorMaxes__[1]
end

#heightNumeric

Returns the height of the graphics object.



591
592
593
# File 'lib/processing/graphics_context.rb', line 591

def height()
  getInternal__.height
end

#hue(color) ⇒ Numeric

Returns the hue value of the color.

Parameters:

  • color (Numeric)

    color value

Returns:

  • (Numeric)

    the hue value

See Also:



769
770
771
772
# File 'lib/processing/graphics_context.rb', line 769

def hue(color)
  h, = color2raw__(color).to_hsv
  h * (@hsbColor__ ? @colorMaxes__[0] : 1)
end

#image(img, a, b) ⇒ nil #image(img, a, b, c, d) ⇒ nil Also known as: drawImage

Draws an image.

The parameters a, b, c, and d are determined by imageMode().

Examples:

image(img, 10, 20)              # Draw image at (10,20) with original size
image(img, 10, 20, 50, 80)      # Draw image at (10,20) with width 50, height 80
image(img, 0, 0, width, height) # Draw image to fill entire canvas

Parameters:

  • img (Image)

    image to draw

  • a (Numeric)

    horizontal position of the image, by default

  • b (Numeric)

    vertical position of the image, by default

  • c (Numeric) (defaults to: nil)

    width of the image, by default

  • d (Numeric) (defaults to: nil)

    height of the image, by default

Returns:

  • (nil)

    nil

See Also:



1835
1836
1837
1838
1839
1840
# File 'lib/processing/graphics_context.rb', line 1835

def image(img, a, b, c = nil, d = nil)
  assertDrawing__
  x, y, w, h = toXYWH__ @imageMode__, a, b, c || img.width, d || img.height
  img.drawImage__ @painter__, x, y, w, h, fill: getTint__, stroke: :none
  nil
end

#imageMode(mode) ⇒ nil

Sets image mode. Default is CORNER.

CORNER -> image(img, left, top, width, height) CORNERS -> image(img, left, top, right, bottom) CENTER -> image(img, centerX, centerY, width, height)



931
932
933
# File 'lib/processing/graphics_context.rb', line 931

def imageMode(mode)
  @imageMode__ = mode
end

#lerp(start, stop, amount) ⇒ Numeric

Returns the interpolated number between range start..stop.

Parameters:

  • start (Numeric)

    lower bound of the range

  • stop (Numeric)

    upper bound of the range

  • amount (Numeric)

    amount to interpolate

Returns:

  • (Numeric)

    interporated number

See Also:



2752
2753
2754
# File 'lib/processing/graphics_context.rb', line 2752

def lerp(start, stop, amount)
  start + (stop - start) * amount
end

#lerpColor(color1, color2, amount) ⇒ Integer

Returns the interpolated color between color1 and color2.

Parameters:

  • color1 (Integer)

    the 1st color for interpolation

  • color2 (Integer)

    the 2nd color for interpolation

  • amount (Numeric)

    amount to interpolate

Returns:

  • (Integer)

    interporated color

See Also:



2767
2768
2769
2770
2771
2772
2773
# File 'lib/processing/graphics_context.rb', line 2767

def lerpColor(color1, color2, amount)
  color(
    lerp(red(  color1), red(  color2), amount),
    lerp(green(color1), green(color2), amount),
    lerp(blue( color1), blue( color2), amount),
    lerp(alpha(color1), alpha(color2), amount))
end

#line(x1, y1, x2, y2) ⇒ nil Also known as: drawLine

Draws a line.

Examples:

line(10, 20, 50, 80)      # Draw line from (10,20) to (50,80)
line(0, 0, width, height) # Draw diagonal line from top-left to bottom-right

Parameters:

  • x1 (Numeric)

    horizontal position of first point

  • y1 (Numeric)

    vertical position of first point

  • x2 (Numeric)

    horizontal position of second point

  • y2 (Numeric)

    vertical position of second point

Returns:

  • (nil)

    nil

See Also:



1523
1524
1525
1526
1527
# File 'lib/processing/graphics_context.rb', line 1523

def line(x1, y1, x2, y2)
  assertDrawing__
  @painter__.line x1, y1, x2, y2
  nil
end

#loadFont(filename, size: nil, smooth: true) ⇒ Font

Loads font from file.

Parameters:

  • filename (String)

    file name to load font file

  • smooth (Boolean) (defaults to: true)

    anti-aliased or pixel-perfect

Returns:

  • (Font)

    loaded font object

See Also:



3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
# File 'lib/processing/graphics_context.rb', line 3373

def loadFont(filename, size: nil, smooth: true)
  ext = File.extname filename
  raise "unsupported font type -- '#{ext}'" unless ext =~ /^\.?(ttf|otf)$/i

  filename    = httpGet__ filename, ext if filename =~ %r|^https?://|
  font        = Rays::Font.load filename
  font.size   = size if size
  font.smooth = smooth
  Font.new font
end

#loadImage(filename, extension = nil) ⇒ Image

Loads image.

Parameters:

  • filename (String)

    file name to load image

  • extension (String) (defaults to: nil)

    type of image to load (ex. ‘png’)

Returns:

  • (Image)

    loaded image object

See Also:



3394
3395
3396
3397
3398
3399
3400
# File 'lib/processing/graphics_context.rb', line 3394

def loadImage(filename, extension = nil)
  ext = extension || File.extname(filename)
  raise "unsupported image type -- '#{ext}'" unless ext =~ /^\.?(png|jpg|gif)$/i

  filename = httpGet__ filename, ext if filename =~ %r|^https?://|
  Image.new Rays::Image.load filename
end

#loadPixelsnil

Loads all pixels to the ‘pixels’ array.



2089
2090
2091
# File 'lib/processing/graphics_context.rb', line 2089

def loadPixels()
  @pixels__ = getInternal__.pixels
end

#loadShader(fragPath) ⇒ Shader #loadShader(fragPath, vertPath) ⇒ Shader

Loads shader file.

Parameters:

  • fragPath (String)

    fragment shader file path

  • vertPath (String) (defaults to: nil)

    vertex shader file path

Returns:

  • (Shader)

    loaded shader object

See Also:



3441
3442
3443
# File 'lib/processing/graphics_context.rb', line 3441

def loadShader(fragPath, vertPath = nil)
  createShader vertPath, fragPath
end

#loadShape(filename) ⇒ Object



3424
3425
3426
# File 'lib/processing/graphics_context.rb', line 3424

def loadShape(filename)
  Processing::SVGLoader.new(self).load filename
end

#log(n) ⇒ Numeric

Returns the natural logarithm (the base-e logarithm) of a number.

Parameters:

  • value (Numeric)

    number (> 0.0)

Returns:

  • (Numeric)

    result number

See Also:



2615
2616
2617
# File 'lib/processing/graphics_context.rb', line 2615

def log(n)
  Math.log n
end

#mag(x, y) ⇒ Numeric #mag(x, y, z) ⇒ Numeric

Returns the magnitude (or length) of a vector.

Parameters:

  • x (Numeric)

    x of point

  • y (Numeric)

    y of point

  • z (Numeric)

    z of point

Returns:

  • (Numeric)

    magnitude

See Also:



2686
2687
2688
2689
2690
2691
2692
2693
# File 'lib/processing/graphics_context.rb', line 2686

def mag(*args)
  x, y, z = *args
  case args.size
  when 2 then Math.sqrt x * x + y * y
  when 3 then Math.sqrt x * x + y * y + z * z
  else raise ArgumentError
  end
end

#map(value, start1, stop1, start2, stop2) ⇒ Numeric

Maps a number from range start1..stop1 to range start2..stop2.

Parameters:

  • value (Numeric)

    number to be mapped

  • start1 (Numeric)

    lower bound of the range1

  • stop1 (Numeric)

    upper bound of the range1

  • start2 (Numeric)

    lower bound of the range2

  • stop2 (Numeric)

    upper bound of the range2

Returns:

  • (Numeric)

    mapped number

See Also:



2788
2789
2790
# File 'lib/processing/graphics_context.rb', line 2788

def map(value, start1, stop1, start2, stop2)
  lerp start2, stop2, norm(value, start1, stop1)
end

#max(a, b) ⇒ Numeric #max(a, b, c) ⇒ Numeric #max(array) ⇒ Numeric

Returns maximum value.

Parameters:

  • a (Numeric)

    value to compare

  • b (Numeric)

    value to compare

  • c (Numeric)

    value to compare

  • array (Numeric)

    values to compare

Returns:

  • (Numeric)

    maximum value

See Also:



2828
2829
2830
# File 'lib/processing/graphics_context.rb', line 2828

def max(*args)
  args.flatten.max
end

#min(a, b) ⇒ Numeric #min(a, b, c) ⇒ Numeric #min(array) ⇒ Numeric

Returns minimum value.

Parameters:

  • a (Numeric)

    value to compare

  • b (Numeric)

    value to compare

  • c (Numeric)

    value to compare

  • array (Numeric)

    values to compare

Returns:

  • (Numeric)

    minimum value

See Also:



2808
2809
2810
# File 'lib/processing/graphics_context.rb', line 2808

def min(*args)
  args.flatten.min
end

#noClipnil

Disables clipping.

Returns:

  • (nil)

    nil

See Also:



1223
1224
1225
1226
# File 'lib/processing/graphics_context.rb', line 1223

def noClip()
  @painter__.no_clip
  nil
end

#noFillnil

Disables filling.



1017
1018
1019
1020
# File 'lib/processing/graphics_context.rb', line 1017

def noFill()
  @painter__.fill nil
  nil
end

#noise(x) ⇒ Numeric #noise(x, y) ⇒ Numeric #noise(x, y, z) ⇒ Numeric

Returns the perlin noise value.

Parameters:

  • x (Numeric)

    horizontal point in noise space

  • y (Numeric) (defaults to: 0)

    vertical point in noise space

  • z (Numeric) (defaults to: 0)

    depth point in noise space

Returns:

  • (Numeric)

    noise value (0.0..1.0)

See Also:



3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
# File 'lib/processing/graphics_context.rb', line 3072

def noise(x, y = 0, z = 0)
  seed, falloff = @noiseSeed__, @noiseFallOff__
  amp           = 0.5
  @noiseOctaves__.times.reduce(0) do |sum|
    value = (Rays.perlin(x, y, z, seed) / 2.0 + 0.5) * amp
    x    *= 2
    y    *= 2
    z    *= 2
    amp  *= falloff
    sum + value
  end
end

#noiseDetail(lod, falloff = nil) ⇒ nil

Adjusts the character and level of detail produced by the Perlin noise function.

Parameters:

  • lod (Numeric)

    number of octaves to be used by the noise

  • falloff (Numeric) (defaults to: nil)

    falloff factor for each octave

Returns:

  • (nil)

    nil

See Also:



3108
3109
3110
3111
# File 'lib/processing/graphics_context.rb', line 3108

def noiseDetail(lod, falloff = nil)
  @noiseOctaves__ = lod     if lod     && lod > 0
  @noiseFallOff__ = falloff if falloff && falloff > 0
end

#noiseSeed(seed) ⇒ nil

Sets the seed value for noise()

Parameters:

  • seed (Numeric)

    seed value

Returns:

  • (nil)

    nil

See Also:



3094
3095
3096
# File 'lib/processing/graphics_context.rb', line 3094

def noiseSeed(seed)
  @noiseSeed__ = Random.new(seed).rand 0.0..1.0
end

#norm(value, start, stop) ⇒ Numeric

Normalize the value from range start..stop into 0..1.

Parameters:

  • value (Numeric)

    number to be normalized

  • start (Numeric)

    lower bound of the range

  • stop (Numeric)

    upper bound of the range

Returns:

  • (Numeric)

    normalized value between 0..1

See Also:



2737
2738
2739
# File 'lib/processing/graphics_context.rb', line 2737

def norm(value, start, stop)
  (value.to_f - start.to_f) / (stop.to_f - start.to_f)
end

#noStrokenil

Disables drawing stroke.



1060
1061
1062
1063
# File 'lib/processing/graphics_context.rb', line 1060

def noStroke()
  @painter__.stroke nil
  nil
end

#noTintnil

Resets tint color.



1188
1189
1190
# File 'lib/processing/graphics_context.rb', line 1188

def noTint()
  @tint__ = nil
end

#pixelDensityNumeric

Returns the pixel density of the graphics object.



622
623
624
# File 'lib/processing/graphics_context.rb', line 622

def pixelDensity()
  @painter__.pixel_density
end

#pixelHeightNumeric

Returns the height of the graphics object in pixels.

Returns:

  • (Numeric)

    height

See Also:



611
612
613
# File 'lib/processing/graphics_context.rb', line 611

def pixelHeight()
  height * pixelDensity
end

#pixelsArray

An array of all pixels. Call loadPixels() before accessing the array.



2121
2122
2123
# File 'lib/processing/graphics_context.rb', line 2121

def pixels()
  @pixels__
end

#pixelWidthNumeric

Returns the width of the graphics object in pixels.

Returns:

  • (Numeric)

    width

See Also:



601
602
603
# File 'lib/processing/graphics_context.rb', line 601

def pixelWidth()
  width * pixelDensity
end

#point(x, y) ⇒ nil Also known as: drawPoint

Draws a point.

Examples:

point(50, 50)   # Draw point at (50,50)
point(100, 200) # Draw point at (100,200)

Parameters:

  • x (Numeric)

    horizontal position

  • y (Numeric)

    vertical position

Returns:

  • (nil)

    nil

See Also:



1499
1500
1501
1502
1503
# File 'lib/processing/graphics_context.rb', line 1499

def point(x, y)
  assertDrawing__
  @painter__.point x, y
  nil
end

#popnil

Restore styles and transformations from stack.



2522
2523
2524
2525
# File 'lib/processing/graphics_context.rb', line 2522

def pop()
  popMatrix
  popStyle
end

#popMatrixnil

Pops the current transformation matrix from stack.

Returns:

  • (nil)

    nil

See Also:



2313
2314
2315
2316
2317
2318
# File 'lib/processing/graphics_context.rb', line 2313

def popMatrix()
  assertDrawing__
  raise "matrix stack underflow" if @matrixStack__.empty?
  @painter__.matrix = @matrixStack__.pop
  nil
end

#popStylenil

Restore style values from the style stack.

Returns:

  • (nil)

    nil

See Also:



2414
2415
2416
2417
2418
2419
# File 'lib/processing/graphics_context.rb', line 2414

def popStyle()
  assertDrawing__
  raise "style stack underflow" if @styleStack__.empty?
  restoreStyles__ @styleStack__.pop
  nil
end

#pow(value, exponent) ⇒ Numeric

Returns value raised to the power of exponent.

Parameters:

  • value (Numeric)

    base number

  • exponent (Numeric)

    exponent number

Returns:

  • (Numeric)

    value ** exponent

See Also:



2642
2643
2644
# File 'lib/processing/graphics_context.rb', line 2642

def pow(value, exponent)
  value ** exponent
end

#printMatrixnil

Prints matrix elements to console.

Returns:

  • (nil)

    nil

See Also:



2387
2388
2389
2390
2391
2392
# File 'lib/processing/graphics_context.rb', line 2387

def printMatrix()
  m = @painter__.matrix
  m.transpose! if @p5jsMode__
  print "%f %f %f %f\n%f %f %f %f\n%f %f %f %f\n%f %f %f %f\n" % m.to_a
  nil
end

#push(&block) ⇒ Object

Save current styles and transformations to stack.

Returns:

  • (Object)

    result of the expression at the end of the block

See Also:



2507
2508
2509
2510
2511
2512
2513
# File 'lib/processing/graphics_context.rb', line 2507

def push(&block)
  pushMatrix
  pushStyle
  block.call if block
ensure
  pop if block
end

#pushMatrix(&block) ⇒ Object

Pushes the current transformation matrix to stack.

Returns:

  • (Object)

    result of the expression at the end of the block

See Also:



2299
2300
2301
2302
2303
2304
2305
# File 'lib/processing/graphics_context.rb', line 2299

def pushMatrix(&block)
  assertDrawing__
  @matrixStack__.push @painter__.matrix
  block.call if block
ensure
  popMatrix if block
end

#pushStyle(&block) ⇒ Object

Save current style values to the style stack.

Returns:

  • (Object)

    result of the expression at the end of the block

See Also:



2400
2401
2402
2403
2404
2405
2406
# File 'lib/processing/graphics_context.rb', line 2400

def pushStyle(&block)
  assertDrawing__
  @styleStack__.push styles__
  block.call if block
ensure
  popStyle if block
end

#quad(x1, y1, x2, y2, x3, y3, x4, y4) ⇒ nil Also known as: drawQuad

Draws a quad.

Parameters:

  • x1 (Numeric)

    horizontal position of first point

  • y1 (Numeric)

    vertical position of first point

  • x2 (Numeric)

    horizontal position of second point

  • y2 (Numeric)

    vertical position of second point

  • x3 (Numeric)

    horizontal position of third point

  • y3 (Numeric)

    vertical position of third point

  • x4 (Numeric)

    horizontal position of fourth point

  • y4 (Numeric)

    vertical position of fourth point

Returns:

  • (nil)

    nil

See Also:



1706
1707
1708
1709
1710
# File 'lib/processing/graphics_context.rb', line 1706

def quad(x1, y1, x2, y2, x3, y3, x4, y4)
  assertDrawing__
  @painter__.line x1, y1, x2, y2, x3, y3, x4, y4, loop: true
  nil
end

#quadraticVertex(cx, cy, x3, y3) ⇒ nil

Append quadratic vertex for shape polygon.

Parameters:

  • x (Numeric)

    x position of vertex

  • y (Numeric)

    y position of vertex

Returns:

  • (nil)

    nil

See Also:



2025
2026
2027
2028
# File 'lib/processing/graphics_context.rb', line 2025

def quadraticVertex(cx, cy, x3, y3)
  (@drawingShape__ or raise "quadraticVertex() must be called after beginShape()")
    .quadraticVertex cx, cy, x3, y3
end

#radians(degree) ⇒ Numeric

Converts degree to radian.

Parameters:

  • degree (Numeric)

    degree to convert

Returns:

  • (Numeric)

    radian

See Also:



2856
2857
2858
# File 'lib/processing/graphics_context.rb', line 2856

def radians(degree)
  degree * DEG2RAD__
end

#random(high) ⇒ Float #random(low, high) ⇒ Float #random(choices) ⇒ Float

Returns a random number in range low…high

Parameters:

  • low (Numeric)

    lower limit

  • high (Numeric)

    upper limit

  • choices (Array)

    array to choose from

Returns:

  • (Float)

    random number

See Also:



3128
3129
3130
3131
3132
3133
3134
3135
3136
# File 'lib/processing/graphics_context.rb', line 3128

def random(*args)
  if args.first.kind_of? Array
    a = args.first
    a.empty? ? nil : a[@random__.rand a.size]
  else
    high, low = args.reverse
    @random__.rand (low || 0).to_f...(high || 1).to_f
  end
end

#randomGaussian(mean = 0, sd = 1) ⇒ Float

Returns a random number fitting a Gaussian, or normal, distribution.

Parameters:

  • mean (Numeric) (defaults to: 0)

    mean

  • sd (Numeric) (defaults to: 1)

    standard deviation

Returns:

  • (Float)

    random number

See Also:



3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
# File 'lib/processing/graphics_context.rb', line 3162

def randomGaussian(mean = 0, sd = 1)
  value =
    if @nextGaussian__
      x, @nextGaussian__ = @nextGaussian__, nil
      x
    else
      a, b, w = 0, 0, 1
      until w < 1
        a = random(2) - 1
        b = random(2) - 1
        w = a ** 2 + b ** 2
      end
      w = Math.sqrt(-2 * Math.log(w) / w)
      @randomGaussian__ = a * w
      b * w
    end
  value * sd + mean
end

#randomSeed(seed) ⇒ nil

Sets the seed value for random()

Parameters:

  • seed (Numeric)

    seed value

Returns:

  • (nil)

    nil

See Also:



3147
3148
3149
3150
# File 'lib/processing/graphics_context.rb', line 3147

def randomSeed(seed)
  @random__       = Random.new seed
  @nextGaussian__ = nil
end

#rect(a, b, c, d) ⇒ nil #rect(a, b, c, d, r) ⇒ nil #rect(a, b, c, d, tl, tr, br, bl) ⇒ nil Also known as: drawRect

Draws a rectangle.

The parameters a, b, c, and d are determined by rectMode().

Examples:

rect(10, 20, 30, 40)             # Draw rectangle at (10,20) with width 30, height 40
rect(10, 20, 30, 40, 5)          # Draw rectangle with rounded corners (radius 5)
rect(10, 20, 30, 40, 5, 3, 7, 2) # Draw rectangle with different corner radii

Parameters:

  • a (Numeric)

    horizontal position of the shape, by default

  • b (Numeric)

    vertical position of the shape, by default

  • c (Numeric)

    width of the shape, by default

  • d (Numeric)

    height of the shape, by default

  • r (Numeric)

    radius for all corners

  • tl (Numeric)

    radius for top-left corner

  • tr (Numeric)

    radius for top-right corner

  • br (Numeric)

    radius for bottom-right corner

  • bl (Numeric)

    radius for bottom-left corner

Returns:

  • (nil)

    nil

See Also:



1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
# File 'lib/processing/graphics_context.rb', line 1559

def rect(a, b, c, d, *args)
  assertDrawing__
  x, y, w, h = toXYWH__ @rectMode__, a, b, c, d
  case args.size
  when 0 then @painter__.rect x, y, w, h
  when 1 then @painter__.rect x, y, w, h, round: args[0]
  when 4 then @painter__.rect x, y, w, h, lt: args[0], rt: args[1], rb: args[2], lb: args[3]
  else raise ArgumentError # ToDo: refine error message
  end
  nil
end

#rectMode(mode) ⇒ nil

Sets rect mode. Default is CORNER.

CORNER -> rect(left, top, width, height) CORNERS -> rect(left, top, right, bottom) CENTER -> rect(centerX, centerY, width, height) RADIUS -> rect(centerX, centerY, radiusH, radiusV)



896
897
898
# File 'lib/processing/graphics_context.rb', line 896

def rectMode(mode)
  @rectMode__ = mode
end

#red(color) ⇒ Numeric

Returns the red value of the color.

Parameters:

  • color (Numeric)

    color value

Returns:

  • (Numeric)

    the red value

See Also:



717
718
719
# File 'lib/processing/graphics_context.rb', line 717

def red(color)
  ((color >> 16) & 0xff) / 255.0 * @colorMaxes__[0]
end

#renderMode(mode = nil) ⇒ PROCESSING, P5JS

Sets render mode.

Parameters:

  • mode (PROCESSING, P5JS) (defaults to: nil)

    compatible to Processing or p5.js

Returns:



632
633
634
635
636
637
638
# File 'lib/processing/graphics_context.rb', line 632

def renderMode(mode = nil)
  if mode
    @renderMode__ = mode
    @p5jsMode__   = mode == P5JS
  end
  @renderMode__
end

#requestImage(filename, extension = nil) ⇒ Image

Loads image on a new thread. When the image is loading, its width and height will be 0. If an error occurs while loading the image, its width and height wil be -1.

Parameters:

  • filename (String)

    file name to load image

  • extension (String) (defaults to: nil)

    type of image to load (ex. ‘png’)

Returns:

  • (Image)

    loading image object

See Also:



3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
# File 'lib/processing/graphics_context.rb', line 3413

def requestImage(filename, extension = nil)
  img = Image.new nil
  Thread.new filename, extension do |fn, ext|
    loaded = loadImage(fn, ext) or raise
    img.setInternal__ loaded.getInternal__
  rescue
    img.setInternal__ nil, true
  end
  img
end

#resetMatrixnil

Reset current transformation matrix with identity matrix.



2375
2376
2377
2378
2379
# File 'lib/processing/graphics_context.rb', line 2375

def resetMatrix()
  assertDrawing__
  @painter__.matrix = 1
  nil
end

#resetShadernil

Resets shader.



1414
1415
1416
1417
# File 'lib/processing/graphics_context.rb', line 1414

def resetShader()
  @painter__.no_shader
  nil
end

#rotate(angle) ⇒ nil

Applies rotation matrix to current transformation matrix.

Examples:

rotate(PI/4)                     # Rotate 45 degrees (PI/4 radians) in RADIANS mode
angleMode(DEGREES); rotate(45)   # Rotate 45 degrees in DEGREES mode
angleMode(RADIANS); rotate(PI/2) # Rotate 90 degrees in RADIANS mode

Parameters:

  • angle (Numeric)

    angle for rotation

Returns:

  • (nil)

    nil

See Also:



2204
2205
2206
2207
2208
# File 'lib/processing/graphics_context.rb', line 2204

def rotate(angle)
  assertDrawing__
  @painter__.rotate toDegrees__ angle
  nil
end

#rotateX(angle) ⇒ nil

Applies rotation around the x-axis.

Parameters:

  • angle (Numeric)

    angle for rotation

Returns:

  • (nil)

    nil

See Also:



2219
2220
2221
2222
2223
# File 'lib/processing/graphics_context.rb', line 2219

def rotateX(angle)
  assertDrawing__
  @painter__.rotate toDegrees__(angle), 1, 0, 0
  nil
end

#rotateY(angle) ⇒ nil

Applies rotation around the y-axis.

Parameters:

  • angle (Numeric)

    angle for rotation

Returns:

  • (nil)

    nil

See Also:



2234
2235
2236
2237
2238
# File 'lib/processing/graphics_context.rb', line 2234

def rotateY(angle)
  assertDrawing__
  @painter__.rotate toDegrees__(angle), 0, 1, 0
  nil
end

#rotateZ(angle) ⇒ nil

Applies rotation around the z-axis.

Parameters:

  • angle (Numeric)

    angle for rotation

Returns:

  • (nil)

    nil

See Also:



2249
2250
2251
2252
2253
# File 'lib/processing/graphics_context.rb', line 2249

def rotateZ(angle)
  assertDrawing__
  @painter__.rotate toDegrees__(angle), 0, 0, 1
  nil
end

#round(value) ⇒ Numeric

Returns the closest integer number.

Parameters:

  • value (Numeric)

    number

Returns:

  • (Numeric)

    rounded number

See Also:



2602
2603
2604
# File 'lib/processing/graphics_context.rb', line 2602

def round(value)
  value.round
end

#saturation(color) ⇒ Numeric

Returns the saturation value of the color.

Parameters:

  • color (Numeric)

    color value

Returns:

  • (Numeric)

    the saturation value

See Also:



783
784
785
786
# File 'lib/processing/graphics_context.rb', line 783

def saturation(color)
  _, s, = color2raw__(color).to_hsv
  s * (@hsbColor__ ? @colorMaxes__[1] : 1)
end

#save(filename) ⇒ nil

Saves screen image to file.

Parameters:

  • filename (String)

    file name to save image

Returns:

  • (nil)

    nil

See Also:



2134
2135
2136
2137
# File 'lib/processing/graphics_context.rb', line 2134

def save(filename)
  getInternal__.save filename
  nil
end

#scale(s) ⇒ nil #scale(x, y) ⇒ nil #scale(x, y, z) ⇒ nil

Applies scale matrix to current transformation matrix.

Examples:

scale(2)    # Scale uniformly by 2x
scale(2, 3) # Scale by 2x horizontally, 3x vertically
scale(0.5)  # Scale down by half

Parameters:

  • s (Numeric)

    horizontal and vertical scale

  • x (Numeric)

    horizontal scale

  • y (Numeric) (defaults to: nil)

    vertical scale

  • z (Numeric) (defaults to: 1)

    depth scale

Returns:

  • (nil)

    nil

See Also:



2184
2185
2186
2187
2188
# File 'lib/processing/graphics_context.rb', line 2184

def scale(x, y = nil, z = 1)
  assertDrawing__
  @painter__.scale x, (y || x), z
  nil
end

#shader(shader) ⇒ nil

Sets shader.

Parameters:

  • shader (Shader)

    a shader to apply

Returns:

  • (nil)

    nil

See Also:



1402
1403
1404
1405
# File 'lib/processing/graphics_context.rb', line 1402

def shader(shader)
  @painter__.shader shader&.getInternal__
  nil
end

#shape(img, a, b) ⇒ nil #shape(img, a, b, c, d) ⇒ nil Also known as: drawShape

Draws a shape.

The parameters a, b, c, and d are determined by shapeMode().

Parameters:

  • shp (Shape)

    shape to draw

  • a (Numeric) (defaults to: 0)

    horizontal position of the shape, by default

  • b (Numeric) (defaults to: 0)

    vertical position of the shape, by default

  • c (Numeric) (defaults to: nil)

    width of the shape, by default

  • d (Numeric) (defaults to: nil)

    height of the shape, by default

Returns:

  • (nil)

    nil

See Also:



1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
# File 'lib/processing/graphics_context.rb', line 1861

def shape(shp, a = 0, b = 0, c = nil, d = nil)
  assertDrawing__
  return nil unless shp.isVisible

  drawWithTexture__ do |_|
    if c || d || @shapeMode__ != CORNER
      x, y, w, h = toXYWH__ @shapeMode__, a, b, c || shp.width, d || shp.height
      shp.draw__ @painter__, x, y, w, h
    else
      shp.draw__ @painter__, a, b
    end
  end
  nil
end

#shapeMode(mode) ⇒ nil

Sets shape mode. Default is CORNER.

CORNER -> shape(shp, left, top, width, height) CORNERS -> shape(shp, left, top, right, bottom) CENTER -> shape(shp, centerX, centerY, width, height)

Parameters:

Returns:

  • (nil)

    nil

See Also:



947
948
949
# File 'lib/processing/graphics_context.rb', line 947

def shapeMode(mode)
  @shapeMode__ = mode
end

#shearX(angle) ⇒ nil

Applies shear around the x-axis.

Parameters:

  • angle (Numeric)

    angle for shearing

Returns:

  • (nil)

    nil

See Also:



2264
2265
2266
2267
2268
2269
2270
2271
2272
# File 'lib/processing/graphics_context.rb', line 2264

def shearX(angle)
  t = Math.tan toRadians__(angle)
  @painter__.matrix *= Rays::Matrix.new(
    1, t, 0, 0,
    0, 1, 0, 0,
    0, 0, 1, 0,
    0, 0, 0, 1)
  nil
end

#shearY(angle) ⇒ nil

Applies shear around the y-axis.

Parameters:

  • angle (Numeric)

    angle for shearing

Returns:

  • (nil)

    nil

See Also:



2283
2284
2285
2286
2287
2288
2289
2290
2291
# File 'lib/processing/graphics_context.rb', line 2283

def shearY(angle)
  t = Math.tan toRadians__(angle)
  @painter__.matrix *= Rays::Matrix.new(
    1, 0, 0, 0,
    t, 1, 0, 0,
    0, 0, 1, 0,
    0, 0, 0, 1)
  nil
end

#sin(angle) ⇒ Numeric

Returns the sine of an angle.

Parameters:

  • angle (Numeric)

    angle in radians

Returns:

  • (Numeric)

    the sine

See Also:



2882
2883
2884
# File 'lib/processing/graphics_context.rb', line 2882

def sin(angle)
  Math.sin angle
end

#sq(value) ⇒ Numeric

Returns squared value.

Parameters:

  • value (Numeric)

    number

Returns:

  • (Numeric)

    squared value

See Also:



2655
2656
2657
# File 'lib/processing/graphics_context.rb', line 2655

def sq(value)
  value * value
end

#sqrt(value) ⇒ Numeric

Returns squared value.

Parameters:

  • value (Numeric)

    number

Returns:

  • (Numeric)

    squared value

See Also:



2668
2669
2670
# File 'lib/processing/graphics_context.rb', line 2668

def sqrt(value)
  Math.sqrt value
end

#square(x, y, extent) ⇒ nil Also known as: drawSquare

Draws a square.

Parameters:

  • x (Numeric)

    horizontal position of the shape

  • y (Numeric)

    vertical position of the shape

  • extent (Numeric)

    width and height of the shape

Returns:

  • (nil)

    nil

See Also:



1662
1663
1664
# File 'lib/processing/graphics_context.rb', line 1662

def square(x, y, extent)
  rect x, y, extent, extent
end

#stroke(rgb) ⇒ nil #stroke(rgb, alpha) ⇒ nil #stroke(gray) ⇒ nil #stroke(gray, alpha) ⇒ nil #stroke(r, g, b) ⇒ nil #stroke(r, g, b, alpha) ⇒ nil

Sets stroke color.

Examples:

stroke(0)              # Black stroke
stroke(255, 0, 0)      # Red stroke
stroke(0, 0, 255, 128) # Semi-transparent blue stroke

Parameters:

  • rgb (String)

    color code like ‘#00AAFF’

  • gray (Integer)

    gray value (0..255)

  • r (Integer)

    red value (0..255)

  • g (Integer)

    green value (0..255)

  • b (Integer)

    blue value (0..255)

  • alpha (Integer)

    alpha value (0..255)

Returns:

  • (nil)

    nil

See Also:



1048
1049
1050
1051
# File 'lib/processing/graphics_context.rb', line 1048

def stroke(*args)
  @painter__.stroke(*toRGBA__(*args))
  nil
end

#strokeCap(cap) ⇒ nil

Sets stroke cap mode. The default cap if ROUND.



1089
1090
1091
1092
# File 'lib/processing/graphics_context.rb', line 1089

def strokeCap(cap)
  @painter__.stroke_cap cap
  nil
end

#strokeJoin(join) ⇒ nil

Sets stroke join mode. The default join is MITER.



1104
1105
1106
1107
# File 'lib/processing/graphics_context.rb', line 1104

def strokeJoin(join)
  @painter__.stroke_join join
  nil
end

#strokeWeight(weight) ⇒ nil

Sets stroke weight.

Parameters:

  • weight (Numeric)

    width of stroke

Returns:

  • (nil)

    nil

See Also:



1074
1075
1076
1077
# File 'lib/processing/graphics_context.rb', line 1074

def strokeWeight(weight)
  @painter__.stroke_width weight
  nil
end

#tan(angle) ⇒ Numeric

Returns the ratio of the sine and cosine of an angle.

Parameters:

  • angle (Numeric)

    angle in radians

Returns:

  • (Numeric)

    the tangent

See Also:



2908
2909
2910
# File 'lib/processing/graphics_context.rb', line 2908

def tan(angle)
  Math.tan angle
end

#text(str) ⇒ nil #text(str, x, y) ⇒ nil #text(str, a, b, c, d) ⇒ nil Also known as: drawText

Draws a text.

The parameters a, b, c, and d are determined by rectMode().

Parameters:

  • str (String)

    text to draw

  • x (Numeric)

    horizontal position of the text

  • y (Numeric)

    vertical position of the text

  • a (Numeric)

    horizontal position of the text, by default

  • b (Numeric)

    vertical position of the text, by default

  • c (Numeric)

    width of the text, by default

  • d (Numeric)

    height of the text, by default

Returns:

  • (nil)

    nil

See Also:



1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
# File 'lib/processing/graphics_context.rb', line 1787

def text(str, x, y, x2 = nil, y2 = nil)
  assertDrawing__
  font = @painter__.font
  if x2
    raise ArgumentError, "missing y2 parameter" unless y2
    x, y, w, h = toXYWH__ @rectMode__, x, y, x2, y2
    case @textAlignH__
    when RIGHT  then x +=  w - font.width(str)
    when CENTER then x += (w - font.width(str)) / 2.0
    end
    case @textAlignV__
    when BOTTOM then y +=  h - font.ascent
    when CENTER then y += (h - font.ascent) / 2.0
    else
    end
  else
    y -= font.ascent
  end
  x, y = x.round, y.round unless font.smooth
  @painter__.text str, x, y
  nil
end

#textAlign(horizontal, vertical = BASELINE) ⇒ nil

Sets the alignment for drawing text.

Parameters:

Returns:

  • (nil)

    nil

See Also:



1319
1320
1321
1322
1323
# File 'lib/processing/graphics_context.rb', line 1319

def textAlign(horizontal, vertical = BASELINE)
  @textAlignH__ = horizontal
  @textAlignV__ = vertical
  nil
end

#textAscentNumeric

Returns ascent of the current font at its current size.



1294
1295
1296
# File 'lib/processing/graphics_context.rb', line 1294

def textAscent()
  @painter__.font.ascent
end

#textDescentNumeric

Returns descent of the current font at its current size.



1305
1306
1307
# File 'lib/processing/graphics_context.rb', line 1305

def textDescent()
  @painter__.font.descent
end

#textFontFont #textFont(font) ⇒ Font #textFont(name) ⇒ Font #textFont(font, size) ⇒ Font #textFont(name, size) ⇒ Font

Sets text font. (Passing a font name as the first parameter is deprecated)

Parameters:

  • font (Font) (defaults to: nil)

    font

  • name (String)

    font name

  • size (Numeric) (defaults to: nil)

    font size (max 256)

Returns:

  • (Font)

    current font

See Also:



1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
# File 'lib/processing/graphics_context.rb', line 1246

def textFont(font = nil, size = nil)
  if font != nil || size != nil
    size = FONT_SIZE_MAX__ if size && size > FONT_SIZE_MAX__
    if font.nil? || font.kind_of?(String)
      font = createFont font, size
    elsif size
      font.setSize__ size
    end
    @painter__.font = font.getInternal__
    @textFont__     = font
  end
  @textFont__
end

#textLeadingNumeric #textLeading(leading) ⇒ Numeric

Sets the spacing between lines of text in units of pixels.

Parameters:

  • leading (Numeric) (defaults to: nil)

    the size in pixels for spacing between lines

Returns:

  • (Numeric)

    current spacing

See Also:



1337
1338
1339
1340
# File 'lib/processing/graphics_context.rb', line 1337

def textLeading(leading = nil)
  @painter__.line_height = leading if leading
  @painter__.line_height
end

#textSize(size) ⇒ nil

Sets text size.

Parameters:

  • size (Numeric)

    font size (max 256)

Returns:

  • (nil)

    nil

See Also:



1269
1270
1271
1272
# File 'lib/processing/graphics_context.rb', line 1269

def textSize(size)
  textFont @textFont__, size
  nil
end

#texture(image) ⇒ nil

Sets texture.

Parameters:

  • image (Image)

    texture image

Returns:

  • (nil)

    nil

See Also:



1351
1352
1353
1354
# File 'lib/processing/graphics_context.rb', line 1351

def texture(image)
  @painter__.texture image&.getInternal__
  nil
end

#textureMode(mode) ⇒ nil

Sets the coordinate space for texture mapping.

Parameters:

  • mode (IMAGE, NORMAL)

    image coordinate, or normalized coordinate

Returns:

  • (nil)

    nil

See Also:



1374
1375
1376
1377
# File 'lib/processing/graphics_context.rb', line 1374

def textureMode(mode)
  @painter__.texcoord_mode = mode
  nil
end

#textureWrap(wrap) ⇒ nil

Sets the texture wrapping mode.

Parameters:

  • wrap (CLAMP, REPEAT)

    how texutres behave when go outside of the range

Returns:

  • (nil)

    nil

See Also:



1388
1389
1390
1391
# File 'lib/processing/graphics_context.rb', line 1388

def textureWrap(wrap)
  @painter__.texcoord_wrap = wrap
  nil
end

#textWidth(str) ⇒ Numeric

Returns the width of the text.

Parameters:

  • str (String)

    text string

Returns:

  • (Numeric)

    width of the text

See Also:



1283
1284
1285
# File 'lib/processing/graphics_context.rb', line 1283

def textWidth(str)
  @painter__.font.width str
end

#tint(rgb) ⇒ nil #tint(rgb, alpha) ⇒ nil #tint(gray) ⇒ nil #tint(gray, alpha) ⇒ nil #tint(r, g, b) ⇒ nil #tint(r, g, b, alpha) ⇒ nil

Sets fill color for drawing images.

Parameters:

  • rgb (String)

    color code like ‘#00AAFF’

  • gray (Integer)

    gray value (0..255)

  • r (Integer)

    red value (0..255)

  • g (Integer)

    green value (0..255)

  • b (Integer)

    blue value (0..255)

  • alpha (Integer)

    alpha value (0..255)

Returns:

  • (nil)

    nil

See Also:



1176
1177
1178
1179
# File 'lib/processing/graphics_context.rb', line 1176

def tint(*args)
  @tint__ = args
  nil
end

#translate(x, y) ⇒ nil #translate(x, y, z) ⇒ nil

Applies translation matrix to current transformation matrix.

Examples:

translate(50, 100)           # Move coordinate system by (50, 100)
translate(width/2, height/2) # Move origin to center of canvas

Parameters:

  • x (Numeric)

    left/right translation

  • y (Numeric)

    up/down translation

  • z (Numeric) (defaults to: 0)

    forward/backward translation

Returns:

  • (nil)

    nil

See Also:



2157
2158
2159
2160
2161
# File 'lib/processing/graphics_context.rb', line 2157

def translate(x, y, z = 0)
  assertDrawing__
  @painter__.translate x, y, z
  nil
end

#triangle(x1, y1, x2, y2, x3, y3) ⇒ nil Also known as: drawTriangle

Draws a triangle.

Parameters:

  • x1 (Numeric)

    horizontal position of first point

  • y1 (Numeric)

    vertical position of first point

  • x2 (Numeric)

    horizontal position of second point

  • y2 (Numeric)

    vertical position of second point

  • x3 (Numeric)

    horizontal position of third point

  • y3 (Numeric)

    vertical position of third point

Returns:

  • (nil)

    nil

See Also:



1682
1683
1684
1685
1686
# File 'lib/processing/graphics_context.rb', line 1682

def triangle(x1, y1, x2, y2, x3, y3)
  assertDrawing__
  @painter__.line x1, y1, x2, y2, x3, y3, loop: true
  nil
end

#updatePixels(&block) ⇒ nil

Update the image pixels with the ‘pixels’ array.



2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
# File 'lib/processing/graphics_context.rb', line 2100

def updatePixels(&block)
  return if !block && !@pixels__
  if block
    loadPixels
    block.call pixels
  end
  getInternal__.tap do |img|
    img.pixels = @pixels__
    img.paint {} # update texture and set modifiied
  end
  @pixels__ = nil
end

#vertex(x, y) ⇒ nil #vertex(x, y, u, v) ⇒ nil

Append vertex for shape polygon.

Parameters:

  • x (Numeric)

    x position of vertex

  • y (Numeric)

    y position of vertex

  • u (Numeric) (defaults to: nil)

    u texture coordinate of vertex

  • v (Numeric) (defaults to: nil)

    v texture coordinate of vertex

Returns:

  • (nil)

    nil

See Also:



1980
1981
1982
1983
# File 'lib/processing/graphics_context.rb', line 1980

def vertex(x, y, u = nil, v = nil)
  (@drawingShape__ or raise "vertex() must be called after beginShape()")
    .vertex x, y, u, v
end

#widthNumeric

Returns the width of the graphics object.



580
581
582
# File 'lib/processing/graphics_context.rb', line 580

def width()
  getInternal__.width
end