EDA365电子工程师网

标题: 已解决。字体设置skill,英制单位正常,公制单位出错 [打印本页]

作者: yihafewu    时间: 2017-11-21 17:02
标题: 已解决。字体设置skill,英制单位正常,公制单位出错
本帖最后由 yihafewu 于 2017-11-22 08:25 编辑

这是我在本论坛里搜罗的一个字体设置skill,我习惯mm为单位,不知道是否要改skill的内容?
axlCmdRegister("quick_textset" 'quicktext)
defun( quicktext ()
let( (curdsnunit)
                  curdsnunit = axlGetParam("paramDesign")->units
                   case(curdsnunit
                ("mils"  du = 1)
                    ("millimeters" du = 0.0254 )
                        ;(u can add other units)
                      )
old_visList = axlVisibleGet()
setTextSize()
axlVisibleSet(old_visList)
))
defun( setTextSize ()
      let(()
          ;1,GET 字体
          Text_need = '("1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16")
          foreach(text_block Text_need
                    p = axlGetParam(strcat("paramTextBlock:" text_block))
                    block_pl = atoi(text_block) ;change string to num   (1.0/du)
                    p->width = (20 + 5*block_pl)*(1.0/du)
                     p->height = (25 + 5*block_pl)*(1.0/du)
                     p->lineSpace = 25*(1.0/du)
                    p->photoWidth = 6*(1.0/du)
                    p->charSpace = 5*(1.0/du)
                    axlSetParam(p)        
                    )
          ;set the textblock size
          axlVisibleDesign(nil)
          axlVisibleLayer("REF DES/SILKSCREEN_TOP" t)
          axlVisibleLayer("REF DES/SILKSCREEN_BOTTOM" t)
          ;if u need other text ,please add below:
          ;axlVisibleLayer("REF DES/assembly_TOP" t)
          axlClearSelSet()
          axlSetFindFilter( ?enabled (list "noall" "text" "clinesegs") , ?onButtons (list "text"))
          allrefs = axlGetSelSet(axlAddSelectAll())
          foreach(i allrefs   
                  axlDBChangeText(i nil 2)
                  )
          ;change the resdes
          axlVisibleDesign(nil)
          axlVisibleLayer("PACKAGE GEOMETRY/SILKSCREEN_TOP" t)
          axlVisibleLayer("BOARD GEOMETRY/SILKSCREEN_TOP" t)
          axlVisibleLayer("PACKAGE GEOMETRY/SILKSCREEN_BOTTOM" t)
          axlVisibleLayer("BOARD GEOMETRY/SILKSCREEN_BOTTOM" t)
          axlClearSelSet()
          axlSetFindFilter( ?enabled (list "noall" "text" "clinesegs") , ?onButtons (list "text"))
          alloth_text = axlGetSelSet(axlAddSelectAll())
          foreach(i alloth_text
          axlDBChangeText(i nil 1))
          ;change all other text
          ))


作者: yihafewu    时间: 2017-11-22 08:26
找到原因,只需将1.0/du改为du/1.0即可。
作者: bingshuihuo    时间: 2017-11-22 09:40
咋使用   上个例子
作者: bingshuihuo    时间: 2017-11-22 09:43
axlCmdRegister("quick_textset" 'quicktext)
defun( quicktext ()
let( (curdsnunit)
                  curdsnunit = axlGetParam("paramDesign")->units
                   case(curdsnunit
                ("mils"  du = 1)
                    ("millimeters" du = 0.0254 )
                        ;(u can add other units)
                      )
old_visList = axlVisibleGet()
setTextSize()
axlVisibleSet(old_visList)
))
defun( setTextSize ()
      let(()
          ;1,GET 字体
          Text_need = '("1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16")
          foreach(text_block Text_need
                    p = axlGetParam(strcat("paramTextBlock:" text_block))
                    block_pl = atoi(text_block) ;change string to num   (du/1.0)
                    p->width = (20 + 5*block_pl)*(du/1.0)
                     p->height = (25 + 5*block_pl)*(du/1.0)
                     p->lineSpace = 25*(du/1.0)
                    p->photoWidth = 6*(du/1.0)
                    p->charSpace = 5*(du/1.0)
                    axlSetParam(p)        
                    )
          ;set the textblock size
          axlVisibleDesign(nil)
          axlVisibleLayer("REF DES/SILKSCREEN_TOP" t)
          axlVisibleLayer("REF DES/SILKSCREEN_BOTTOM" t)
          ;if u need other text ,please add below:
          ;axlVisibleLayer("REF DES/assembly_TOP" t)
          axlClearSelSet()
          axlSetFindFilter( ?enabled (list "noall" "text" "clinesegs") , ?onButtons (list "text"))
          allrefs = axlGetSelSet(axlAddSelectAll())
          foreach(i allrefs   
                  axlDBChangeText(i nil 2)
                  )
          ;change the resdes
          axlVisibleDesign(nil)
          axlVisibleLayer("PACKAGE GEOMETRY/SILKSCREEN_TOP" t)
          axlVisibleLayer("BOARD GEOMETRY/SILKSCREEN_TOP" t)
          axlVisibleLayer("PACKAGE GEOMETRY/SILKSCREEN_BOTTOM" t)
          axlVisibleLayer("BOARD GEOMETRY/SILKSCREEN_BOTTOM" t)
          axlClearSelSet()
          axlSetFindFilter( ?enabled (list "noall" "text" "clinesegs") , ?onButtons (list "text"))
          alloth_text = axlGetSelSet(axlAddSelectAll())
          foreach(i alloth_text
          axlDBChangeText(i nil 1))
          ;change all other text
          ))
作者: bingshuihuo    时间: 2017-11-22 09:44
替换完成了  还是不行啊

作者: yihafewu    时间: 2017-11-22 13:20
bingshuihuo 发表于 2017-11-22 09:44
替换完成了  还是不行啊

你试试

作者: yihafewu    时间: 2017-11-22 16:11
bingshuihuo 发表于 2017-11-22 09:44
替换完成了  还是不行啊

我是通过EDA365Skill的plugin,加载本skill文件,使用的。图中是我自定义的一个名字。
如果没有装EDA365Skill,可以把本skill文件拷贝到pcbenv文件夹下,然后再pcbenv文件夹下的allegro.ilinit文件里添加一句:
load("quick_textset.il")
在ALLEGRO命令行里执行skill load("allegro.ilinit") 所有加载的skill即刻生效,当然也可以重新打开ALLEGRO。
然后再ALLEGRO命令行里执行quick_textset即可。





欢迎光临 EDA365电子工程师网 (https://bbs.elecnest.cn/) Powered by Discuz! X3.2