Skip to content

脚本循环

项目流程

一、初始化

  1. 选择lua语言脚本根据,初始化两个全局变量用于保存当前循环所在行列。
lua
--设置用来保存当前所在行列的全局变量
SetVariable("Column",0)
SetVariable("Loop",0)
  1. 使用加载点云工具,加载需要处理的点云图。

二、预处理

拟合平面

  1. 使用3D区域工具,选择拟合平面的区域。

  2. 使用3D平面工具,绑定上一步算子输出的变量区域作为输入区域,拟合平面并将其设置为零平面。

三、脚本循环测量Pin针高度

  1. 使用3D裁切工具,裁切出待测量的Pin针区域。

  2. 使用3D变换工具,旋转Pin针区域。

  3. 使用3D斑点工具,框选需要的Pin针获取每个Pin针的位置信息。

  1. 选择标记工具,设置名字为loopColumn并将其作为行循环跳转点。

  2. 选择lua语言脚本工具,绑定3D斑点工具输出的Pin针中心位置信息命名为bolb。将当前列数设为Loop=0,获得当前行数,得到该行起始点坐标并将其保存到StartColumn中。

lua
--将列号设为零,从新的一行的第一个开始。
SetIntVariable("Loop",0)
--得到当前的行号
Column = GetVariable("Column")
--得到当前行起始点的坐标
x = blob[Column+1].X
y = blob[Column+1].Y
z = blob[Column+1].Z
--将起始点坐标赋值给"StartColumn"
SetPoint3D("StartColumn",x,y,z)
  1. 选择标记工具,设置名字为loopPin并将其作为列循环跳转点。

  2. 选择lua语言脚本工具,box起始坐标终点坐标为0,绑定第五步lua脚本工具输出的行起始点坐标赋值给cs_x,cs_y,cs_z,得到当前列数,通过两个Pin之间的间距进行阵列,再将盒子的数据推送到算子输出变量。

lua
pcb_pinsx1 = 0
pcb_pinsy1 = 0
pcb_pinsz1 = 0
pcb_pinex1 = 0
pcb_piney1 = 0
pcb_pinez1 = 0

Loop = GetVariable("Loop")

-- 2.5,0.5 可根据现场器件图纸自由切换,此处数据无实际参考意义
pcb_pinsx1 = cs_x + Loop * 2.5 - 0.5
pcb_pinex1 = cs_x + Loop * 2.5 + 0.5
pcb_pinsy1 = cs_y - 0.8
pcb_piney1 = cs_y + 0.8
pcb_pinsz1 = cs_z - 0.1
pcb_pinez1 = cs_z + 0.6


--将盒子的位置信息推送到寄存器中,用来进行高度测量
SetBox("box1",pcb_pinsx1, pcb_pinsy1, pcb_pinsz1, pcb_pinex1, pcb_piney1, pcb_pinez1)
DrawBox(0, "green", pcb_pinsx1, pcb_pinsy1, pcb_pinsz1, pcb_pinex1, pcb_piney1, pcb_pinez1)
  1. 选择3D高度工具,绑定上一步lua脚本工具的输出变量(box)作为待测区域,测量高度。

  2. 选择lua语言脚本工具,进行行列数判断,当列数小于3时,跳转到loopPin标记处,当列数等于3时,跳转到loopColumn标记处,当行数等于5时,跳转到End标记处。

lua

-- 循环判断
Loop = GetVariable("Loop") + 1
if Loop == 3 then
    Column = GetVariable("Column") + 1
    SetIntVariable("Column", Column)
    if Column < 5 then
    -- 循环五行
        Jump("loopColumn")
    else
        Jump("End")
    end
elseif Loop < 3 then
    -- 行内循环
    Jump("loopPin")
end

SetIntVariable('Loop',Loop)
  1. 选择标记工具,设置名字为End并将其作为循环终止跳转点。

AI-Vision,让3D测量更简单