用Python编写Genesis2000&InCAM&InCAMPro的Hooks

用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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一阵寒风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值