用Python编写Genesis2000&InCAM&InCAMPro的Hooks
- 以添加字符信息指令前置钩子为例(add_text.pre)
1.需求分析
- 众所周知Frontline的CAM软件Genesis2000/InCAM/InCAM默认的脚本编写语言是C shell,相较于Pyhton等高级语言编写脚本还是显得有点老旧落后不方便,这很显然不符合本人追逐引领潮流的风格.
- 需求的本质就是替换软件的脚本执行语言,并不存在技术上的难点,只要软件本身没有限制,理论上是支持任何编程语言的,所以我们要做的比较少,只需要配置软件的Python语言环境再将代码转化为python代码即可.
2.实现逻辑
需求有了,我们看看具体的实施逻辑
- 首先,我们需要配置软件的脚本语言环境;
- 其次,我们需要获取软件的指令参数文件并解析;
- 再次,我们需要结合COM指令提取需要的参数;
- 最后,我们根据具体的业务需求编写钩子脚本的代码逻辑
3.业务场景
- 用户在编辑资料时添加字符信息是有正反面次区分的,会出现用户粗心大意将正字加反反正加正的情况,我们要实现的就是让用户无法出错,话不多说,先看实现后的效果
4.软件脚本语言环境配置
5.代码实现
#!/usr/bin/env py3k
# File Name: add_text.pre
# 系统包
import sys
import re
import os
# 自定义包
sys.path.append('/incam/server/site_data/scripts/py3_package')
from GuiClasses import MainGui, QApplication
import MainClasses
# 开发日志
_header = {
'脚本名称': '字符添加防呆程式',
'开发人员': 'Twei Tang',
'开发时间': '2024年7月18日',
'版本信息': 'A.1.0',
'联系方式': (
'邮箱地址<>',
'微信号码<358143105>',
'手机号码<13627441202>'
),
'开发信息': (
'line_hooks脚本程式'
),
'修改信息': (
'历史版本(A.1.0),首次开发测试,暂无版本变更信息'
),
'沟通记录': (
'无'
)
}
if __name__ == "__main__":
app = QApplication(sys.argv)
Gui = MainGui()
Do = MainClasses.Main()
JobName = os.environ.get("JOB")
# 获取软件抛出的参数文件
with open(sys.argv[1], "r") as f:
lines_list = f.readlines()
# 解析参数文件并序列化参数
lnPARAM = ()
lnVAL = ()
for i in lines_list:
tmp_i = re.sub(' +', ' ', i)
tmp_f = tmp_i.strip("\n")
tmp_list = tmp_f.split(" = ")[1].replace(" ", ",").replace(",)", ")")
if "lnPARAM" in i:
lnPARAM = eval(tmp_list)
elif "lnVAL" in i:
lnVAL = eval(tmp_list)
# 指定检测层别序列
MyMatrix = Do.ask_matrix_info(JobName)
Check_Lays_List = (MyMatrix["外层层别"] +
MyMatrix["防焊层别"] +
MyMatrix["二次防焊层别"] +
MyMatrix["二次文字层别"] +
MyMatrix["文字层别"])
# 获取当前工作层别
Do.COM("get_work_layer")
WorkLay = Do.COMANS.split()
# 获取当前影响层别序列
Do.COM("get_affect_layer")
WorkLay += Do.COMANS.split()
WorkLay = list(set(WorkLay))
# 解析当前添加字符指令参数并检测参数属性,发现异常提示用户并拦截指令
tmp_top = []
tmp_bot = []
for i in WorkLay:
if i in Check_Lays_List:
if MyMatrix[i]["面次"] == "top":
tmp_top.append(i)
if lnVAL[10] == "yes":
Do.COM("skip_current_command")
Gui.errorbox(mess="加反了美国总统也救不了你!", icon="/jk.jpg")
sys.exit()
elif MyMatrix[i]["面次"] == "bottom":
tmp_bot.append(i)
if lnVAL[10] == "no":
Do.COM("skip_current_command")
Gui.errorbox(mess="加反了美国总统也救不了你!", icon="/jk.jpg")
sys.exit()
if len(tmp_top) > 0 and len(tmp_bot) > 0:
Do.COM("skip_current_command")
Gui.errorbox(mess="添加层面此不一致你还一起加!", icon="/jk.jpg")
sys.exit()
sys.exit()
# 软件添加字符信息COM指令
# add_text,type=canned_text,polarity=positive,attributes=yes,x=126.7165225,y=234.29228,text="\$\$"WW"\$\$"YY,
# fontname=canned_67,height=5.08,style=exact_size,width=exact_size,mirror=no,angle=0,direction=cw,bar_type=upc39,
# bar_char_set=ascii,bar128_code=b,matrix=minimal,qr_matrix=minimal,bar_checksum=no,bar_background=yes,
# bar_add_string=yes,bar_add_string_pos=top,bar_marks=yes,bar_width=0.2032,bar_height=5.08,bar_text_line=0,
# x_size=1.8288,x_space=0,y_size=2.1336,w_factor=0.83333331,ver=1,datum_point=bottom_left,adjust_to_selected=no,
# delete_selected=no