Canvas画图(canvas)

功能

根据脚本实时渲染图形,图形内容需通过脚本显示。脚本支持使用cvs模块进行图形绘制操作,提供了丰富的图形API,如:cvs.init():初始化画布、cvs.translate():坐标变换、 cvs.set_color():设置颜色、 cvs.set_line_width():设置线宽、 cvs.begin_path():开始路径绘制、 cvs.arc():绘制弧线/圆形、 cvs.move_to():移动绘制点。写作canvas("c.lua", (20, 50, 400, 400), id="face")

该控件需联合调用槽函数("face", "update", page="page1")控件动作使用,用于更新渲染图形,其中lua脚本中可以访问cnc的数据和canvas api

参数

控件参数

  • 脚本内容: 脚本内容格式为lua脚本,写法script="xxx.lua"(如果是lua文件)
  • 位置大小: 控件所在位置及所占空间大小,此参数类型为元组,写作 (a, b, c, d) 其中a/b/c/d都应该是正整形值分别表示控件的 起始行/起始列/所占行数/所占列数,其中c/d可以省略,省略时值均为1。
  • id: 控件的ID名称,可用于更新渲染图形
  • is_file: 脚本内容是否为文件,默认为True。设置为True时,脚本内容格式为文件路径。
  • visible: 控件显示状态,表达式:当该表达式值不为0时该控件可以显示,等于0时控件不显示。若不设置该参数,则默认显示。此参数为字符串类型,写作visible="#100"

更新图形

当图形需要跟随系统变量变化时需要使用控件动作调用槽函数更新图形内容。 page形参和panel形参只选择一个就行。

写作调用槽函数("face", "update", page="page1"),第1位参数为控件id。第2位参数为槽功能,目前只支持更新update。第3位参数为canvas控件所在页面(page)的id名称。

  • widget: canvas控件的id名称,用于指定哪个控件进行更新渲染图形。
  • slot: 槽函数功能,目前只支持更新update
  • page: canvas控件所在页面(page)的id名称
  • panel: canvas控件所在m面板(panel)的id名称

示例

canvas画图

add_periodic_task([调用槽函数("face", "update", page="page1")], 1)   # 使用周期任务更新在“page1”页面下的“face”控件

with page(456, 800, id="page1", text=(白色, f20x10, 居中), bg_color=(24, 24, 24)):

    canvas('''local cvs = require("cvs")
    cvs.init()
    cvs.translate(_var{no=500} or 0, _var{no=501} or 0)
    
    cvs.set_color(cvs.fill_style, 0.2, 0.2, 0.2)
    cvs.set_line_width(2)
    
    cvs.set_color(cvs.stroke_style, 0, 1, 0)
    
    cvs.begin_path()
    
    cvs.arc(75, 75, 50, 0, math.pi * 2)
    
    cvs.move_to(110, 75)
    cvs.arc(75, 75, 35, 0, math.pi)
    
    cvs.move_to(65, 65);
    cvs.arc(60, 65, 5, 0, math.pi * 2)
    
    cvs.move_to(95, 65);
    cvs.arc(90, 65, 5, 0, math.pi * 2)
    
    cvs.stroke()''', (20, 50, 400, 400), id="face", is_file=False)

    menu("第一页", "page1")