TI-Nspire & Lua / スクリプティングのヒント / 自作の描画函数も出来合いの描画函数と同じように実行できるようにする

参考: http://adriweb.free.fr/t3/2013/Powerpoint_Advanced_TI-Nspire_Lua_Programming.pptx, p.25

--[[普通の方法
function drawCircle(centerX, centerY, radius, gc) -- 中心座標で円を描くための自作函数
   local diameter = radius + radius
   gc:drawArc(centerX - radius, centerY - radius, diameter, diameter, 0, 360)
end
function fillCircle(centerX, centerY, radius, gc) -- 中心座標で円を塗りつぶすための自作函数
   local diameter = radius + radius
   gc:fillArc(centerX - radius, centerY - radius, diameter, diameter, 0, 360)
end

function on.paint(gc) -- 出来合いの描画函数と実行方法が揃わない。
   drawCircle(10,10,10,gc)
   fillCircle(50,50,10,gc)
   gc:drawRect(20,20,20,20)
   gc:fillRect(120,120,20,20)
end
--]]

---[[特殊な方法
function drawCircle(gc, centerX, centerY, radius) -- 中心座標で円を描くための自作函数
   local diameter = radius + radius
   gc:drawArc(centerX - radius, centerY - radius, diameter, diameter, 0, 360)
end
function fillCircle(gc, centerX, centerY, radius) -- 中心座標で円を塗りつぶすための自作函数
   local diameter = radius + radius
   gc:fillArc(centerX - radius, centerY - radius, diameter, diameter, 0, 360)
end

platform.withGC(getmetatable)["drawCircle"] = drawCircle
platform.withGC(getmetatable)["fillCircle"] = fillCircle

function on.paint(gc) -- 出来合いの描画函数と同じように実行できる。
   gc:drawCircle(10,10,10)
   gc:fillCircle(50,50,10)
   gc:drawRect(20,20,20,20)
   gc:fillRect(120,120,20,20)
end
--]]

--[[だから自作描画函数は最初から次のように定義しておけば見づらくとも手間が省ける。
platform.withGC(getmetatable)["drawCircle"] = function(gc, centerX, centerY, radius)
                                                 local diameter = radius + radius
                                                 gc:drawArc(centerX - radius, centerY - radius, diameter, diameter, 0, 360)
                                              end
platform.withGC(getmetatable)["fillCircle"] = function(gc, centerX, centerY, radius)
                                                 local diameter = radius + radius
                                                 gc:fillArc(centerX - radius, centerY - radius, diameter, diameter, 0, 360)
                                              end
--]]

f:id:ti-nspire:20170224120718p:plain:h315