ver1.30の新機能について

近日公開予定のver1.30から、ブラシ処理のプログラム制御が可能になります。Lua言語を使ったスクリプト処理なので、開発環境を用意しなくても(メモ帳で編集するだけで)比較的簡単にオリジナルブラシの開発ができます。以下、スクリプトのサンプルとブラシ画像です (あくまで現時点での仕様に基づいたスクリプトです)。「これはなかなか面白いんじゃない?」とワクワクしながら開発しています。お楽しみに!

散布ブラシ

function main( x, y, p )

  local w = bs_width()
  if w < 5 then
    w = 5
  end

  if not firstDraw then
    local distance = bs_distance( lastDrawX - x, lastDrawY - y )
    if distance < w then
      return 0
    end
  end

  local i
  for i = 0,10 do
    local r,g,b = bs_forebg( math.random() )
    local dx = x + bs_grand( 0, 0.5 ) * w * 2
    local dy = y + bs_grand( 0, 0.5 ) * w * 2
    local rnd = 0.3 + math.random()*0.7

    bs_ellipse( dx,dy, rnd*w/2, rnd*w/2, 0, r,g,b, 255 )
  end

  lastDrawX = x
  lastDrawY = y
  firstDraw = false

  return 1
end

lastDrawX = 0
lastDrawY = 0
firstDraw = true

ブラシの進行方向を指す三角形

function main( x, y, p )

  local w = bs_width()
  if w < 5 then
    w = 5
  end

  if not firstDraw then
    local distance = bs_distance( lastDrawX - x, lastDrawY - y )
    if distance < w then
      return 0
    end
  end

  local dx,dy = bs_dir()
  local nx,ny = bs_normal()

  bs_polygon( x + nx * w/3, y + ny * w/3 )
  bs_polygon( x - nx * w/3, y - ny * w/3 )
  bs_polygon( x + dx * w, y + dy * w )

  local r,g,b = bs_forebg( count/255 )
  bs_fill( r,g,b, 255 )

  count = (count + 16) % 255

  lastDrawX = x
  lastDrawY = y
  firstDraw = false

  return 1
end

count = 0
lastDrawX = 0
lastDrawY = 0
firstDraw = true

図形ブラシ (ハート型)

function main( x, y, p )

  local w = bs_width() * 3
  if w < 5 then
    w = 5
  end

  if not firstDraw then
    local distance = bs_distance( lastDrawX - x, lastDrawY - y )
    if distance < w*1.5 then
      return 0
    end
  end

  bs_bezier_begin( 0, 0 )
  bs_bezier_c( -1, -1, -0.5, -2, 0, -1.3 )
  bs_bezier_c( 0.5, -2, 1, -1, 0, 0 )
  bs_bezier_move( 0, 1.0 )
  bs_bezier_mul( w, w*0.7 )
  bs_bezier_rotate( math.random() * 2 * 3.14159 )
  bs_bezier_move( x, y )

  local r,g,b = bs_forebg( 0.75 + 0.25*math.random() )
  bs_fill( r,g,b, 255 )

  lastDrawX = x
  lastDrawY = y
  firstDraw = false

  return 1
end

lastDrawX = 0
lastDrawY = 0
firstDraw = true

一番シンプルなスクリプト

function main( x, y, p )

  local w = bs_width()
  local r,g,b = bs_fore()
  bs_rect( x,y, w,w, r,g,b, 255 )

  return 1
end