EDA365电子论坛网

标题: 一个改变钻孔表模式的程序 [打印本页]

作者: 式试1813    时间: 2025-5-12 16:59
标题: 一个改变钻孔表模式的程序
本帖最后由 式试1813 于 2025-5-15 09:21 编辑
  1. ;NCmode钻孔模式form构建  
  2. procedure(NCmode()
  3.      formfile = outfile("./nc.form")
  4.         (fprintf formfile "FILE_TYPE=FORM_DEFN VERSION=2\n")
  5.         (fprintf formfile "FORM\n")
  6.         (fprintf formfile "FIXED\n")
  7.         (fprintf formfile "PORT 32 46 \n")
  8.         (fprintf formfile "HEADER \"One Click Output Tools\"\n") (fprintf formfile "\n")
  9.         (fprintf formfile "TILE\n")
  10.         (fprintf formfile "TEXT  \"Click to execute\"blue_a\n")
  11.         (fprintf formfile "TLOC 4 1\n")
  12.         (fprintf formfile "ENDTEXT \n")

  13.         (fprintf formfile "TEXT  \"Only 1:\"red_a\n")
  14.         (fprintf formfile "TLOC 1 4\n")
  15.         (fprintf formfile "ENDTEXT \n")

  16.         (fprintf formfile "FIELD nc_mode1\n")
  17.         (fprintf formfile "FLOC 9 4\n")
  18.         (fprintf formfile "CHECKLIST \"NC1\" \"1\"\n")
  19.         (fprintf formfile "ENDFIELD\n")

  20.         (fprintf formfile "FIELD nc_mode2\n")
  21.         (fprintf formfile "FLOC 17 4\n")
  22.         (fprintf formfile "CHECKLIST \"NC2\" \"1\"\n")
  23.         (fprintf formfile "ENDFIELD\n")

  24.         (fprintf formfile "\n")
  25.         (fprintf formfile "ENDTILE\n") ;结束TILE
  26.         (fprintf formfile "\n")
  27.         (fprintf formfile "ENDFORM\n")  ;结束FORM
  28.        
  29.         close(formfile)
  30.         setform = axlFormCreate((gensym) "nc.form" '("C" "inner") 'func1 t)
  31.         axlFormDisplay(setform)
  32.         axlFormColorize(setform "blue_a" 'text 'blue)
  33.         axlFormColorize(setform "red_a" 'text 'red)
  34.         deleteFile("nc.form")
  35. )
  36. ;form功能构建
  37. procedure( (func1 dummy)
  38. prog(nil
  39.     case( (getq setform curField)
  40. /*       
  41.                   ("nc_mode1" NCmode_Init())
  42.                   ("nc_mode2" NCmode_Init())
  43.                   
  44. */
  45.            ("nc_mode1"
  46.        when(setform->curValue ;这样用when后就不会出现bug
  47.          NCmode_Init()
  48.             ))
  49.      ("nc_mode2"
  50.        when(setform->curValue ;这样用when后就不会出现bug
  51.          NCmode_Init()
  52.             ))

  53.        
  54.           )
  55.                   )
  56.                   )
  57. ;按钮或选项功能函数
  58. defun( NCmode_Init ()
  59. let((command1 command2)
  60. if(axlFormGetField(setform "nc_mode1")
  61. then
  62. sprintf(command1 "setwindow pcb;generaledit;ncdrill legend;
  63.                         setwindow form.nc_drilllegend;FORM nc_drilllegend layer_pair_legends YES;
  64.                         FORM nc_drilllegend done; setwindow pcb")
  65. axlShellPost(command1)
  66. axlShell("Done")
  67.   else
  68. sprintf(command2 "setwindow pcb;generaledit;ncdrill legend;
  69.                         setwindow form.nc_drilllegend;FORM nc_drilllegend by_layer_legends YES;
  70.                         FORM nc_drilllegend done; setwindow pcb")
  71. axlShellPost(command2)
  72. axlShell("Done")
  73. )
  74. )
  75. )
复制代码



作者: 式试1813    时间: 2025-5-12 17:00
初次进入form,两个都未选择,就可以选择模式一或者模式二。一旦选择一次,选择另一个就会软件bug住了
作者: db-_-    时间: 2025-5-12 18:29
本帖最后由 db-_- 于 2025-5-12 18:31 编辑

涉及到脚本的SKILL,最top的函数axlCmdRegister时最好选择?cmdType为general
作者: LiuTao166462139    时间: 2025-5-13 08:40
学习了!!!
作者: 式试1813    时间: 2025-5-13 10:13
db-_- 发表于 2025-5-12 18:29
涉及到脚本的SKILL,最top的函数axlCmdRegister时最好选择?cmdType为general

但是我这个是这么设置的。。。

作者: db-_-    时间: 2025-5-13 18:25
可能你还少了一个点击坐标放下来的操作吧。
作者: 式试1813    时间: 2025-5-14 09:08
db-_- 发表于 2025-5-13 18:25
可能你还少了一个点击坐标放下来的操作吧。

钻孔表是手动放的,我感觉这个bug是最开始模式一和模式二都是nil,所以不执行。选择其中一个,那么有个模式会变为t。但是再选择另一个的时候,前面选择的那个模式虽然会变成nil,但是在切换的瞬间,其实都是t,所以就卡住了
作者: db-_-    时间: 2025-5-14 09:31
你可以放个全码,帮你看看。
作者: 式试1813    时间: 2025-5-14 11:22
db-_- 发表于 2025-5-14 09:31
你可以放个全码,帮你看看。

已贴到1L了,帮忙看看,谢谢

作者: db-_-    时间: 2025-5-14 14:05
改好了。
  1.                 ("nc_mode1"
  2.                     when(setform->curValue
  3.                         NCmode_Init()
  4.                     )
  5.                 )
  6.                 ("nc_mode2"
  7.                     when(setform->curValue
  8.                         NCmode_Init()
  9.                     )
  10.                 )
复制代码

作者: 式试1813    时间: 2025-5-14 16:28
db-_- 发表于 2025-5-14 14:05
改好了。

感谢,真的可以





欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2