EDA365电子工程师网

标题: [分享源代码]draw drill hole/将hole空可以输出至dxf [打印本页]

作者: iuven    时间: 2016-5-4 15:04
标题: [分享源代码]draw drill hole/将hole空可以输出至dxf
本帖最后由 紫菁 于 2017-11-3 14:30 编辑

EDA365 Skill 工具箱有这个工具,但是有问题,所以没事自己重写了一下;
主要是为了出dxf时将hole空能够输出到dxf文件,直接上代码:执行前========>
[attach]112349[/attach]

执行后=======>
[attach]112350[/attach]



  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;draw drill holes as shape to BOARD GEOMETRY/DrillHole
  3. ;;
  4. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


  5. axlCmdRegister( "drlh" `drill_hole_by)
  6. num = 0
  7. cnt = 0
  8. pi = 3.141592
  9. (defun drill_hole_by ()
  10.         saveVis = axlVisibleGet()
  11.         axlVisibleDesign(nil)
  12.         ; set desired layers visible via one or more calls to
  13.         axlVisibleLayer("pin/top" t)
  14.         creat_layer_drlh()
  15.         ;;turn_on_layer( layer)
  16.         formname = "./drlhole.form"
  17.         biuld_form_drlh(formname)
  18. )

  19. (defun creat_layer_drlh ()

  20.   ; ########################################################
  21.   ; Check for the existence of "BOARD GEOMETRY/DrillHole" layer
  22.   ; ########################################################

  23. if(axlIsLayer("BOARD GEOMETRY/Drillhole") == nil then
  24.         axlUIConfirm("You must have a\"BOARD GEOMETRY/DrillHole\" subclass defined")
  25.         axlLayerCreateNonConductor("BOARD GEOMETRY/Drillhole")
  26.         else
  27.         axlMsgPut("---Dirll holes to :BOARD GEOMETRY/Drillhole")
  28.         );end if
  29. ); end creat_layer_drlh


  30. (defun biuld_form_drlh (formname)
  31.   (prog ()
  32.         pform = outfile(formname "w")
  33.         fprintf(pform "FILE_TYPE=FORM_DEFN VERSION=2\n")
  34.         fprintf(pform "FORM toolwindow\n")
  35.         fprintf(pform "FIXED\n")
  36.         fprintf(pform "PORT 20 10\n")
  37.                                         ;PORT w h
  38.         fprintf(pform "HEADER \"byao\"\n")
  39.         fprintf(pform "TILE\n")

  40.         fprintf(pform "TEXT \"Drill Hole to Shape V1.0\"\n")
  41.         fprintf(pform "OPTIONS UNDERLINE BOLD\n")
  42.         fprintf(pform "TLOC 0 0\n")
  43.         fprintf(pform "ENDTEXT\n")

  44.         fprintf(pform "FIELD drawhole\n")
  45.         fprintf(pform "FLOC 1 2\n") ;FLOC x y
  46.         fprintf(pform "MENUBUTTON \"Drawhole\" 10 3\n")
  47.         fprintf(pform "ENDFIELD\n")

  48.         fprintf(pform "FIELD clearshape\n")
  49.         fprintf(pform "FLOC 1 5\n")
  50.         fprintf(pform "MENUBUTTON \"ClearShape\" 10 3\n")
  51.         fprintf(pform "ENDFIELD\n")

  52.         fprintf(pform "FIELD done\n")
  53.         fprintf(pform "FLOC 1 8\n")
  54.         fprintf(pform "MENUBUTTON \"Done\" 10 3\n")
  55.         fprintf(pform "ENDFIELD\n")



  56.         fprintf(pform "FLEXMODE EdgeGravityOne\n")
  57.         fprintf(pform "FLEX drawhole 0 0 1 1\n")
  58.         fprintf(pform "FLEX clearshape 0 1 0 0\n")
  59.         fprintf(pform "FLEX done 0 1 0 0\n")


  60.         fprintf(pform "ENDTILE\n")
  61.         fprintf(pform "ENDFORM\n")
  62.         close(pform)

  63.         form=axlFormCreate( (gensym) "drlhole.form"
  64.                                 `(e inner) `pform_Action_drlh t)
  65.         axlFormDisplay(form)
  66.         ))

  67. (defun pform_Action_drlh (form)

  68.   axlDBRefreshId(axlDBGetDesign())
  69.   (case form->curField

  70.     ("done"
  71.      axlFormClose(form)
  72.      axlCancelEnterFun()
  73.      deleteFile(formname)
  74.      axlMsgPut("Done")
  75.      nil
  76.      )

  77.     ("drawhole"
  78.      axlMsgPut("Draw Holes........" )
  79.      draw_hole_drlh()
  80.      t
  81.      )

  82.     ("clearshape"
  83.      clear_shape()
  84.      t
  85.      )

  86.     );end case
  87.   );end defun




  88. (defun unselect_object_drlh ()
  89.         (let (allsel)
  90.         axlSetFindFilter(?enabled '(noall shapes pins vias text) ?onButtons '(noall shapes pins vias text))
  91.         ; axlSetFindFilter(?enabled '(all) ?onButtons '(all))
  92.         allsel = axlGetSelSet(axlAddSelectAll())
  93.         axlClearSelSet()

  94.         axlSetFindFilter(?enabled '(noall symbols) ?onButtons '(noall symbols))
  95.         allsel = axlGetSelSet(axlAddSelectAll())
  96.         axlClearSelSet()
  97.         )
  98. )


  99. (defun draw_circle (x y dia)
  100.         mycirpath = axlPathStartCircle((list x:y dia/2),0)
  101.         axlDBCreateCloseShape( axlDBCreateOpenShape( mycirpath, t,"BOARD GEOMETRY/Drillhole", nil))
  102. )

  103. (defun draw_oval_slot (x y w h r) ;;w=dia
  104.         ;;x'=x*cos(r)-y*sin(r);y'=y*cos(r)+x*sin(r)
  105.         ll = ((x+((-w/2)*cos(pi*r/180)-(-(h-w)/2)*sin(pi*r/180))) : (y+(-(w/2)*sin(pi*r/180)+(-(h-w)/2)*cos(pi*r/180)))) ;;low left
  106.         ul = ((x+((-w/2)*cos(pi*r/180)-((h-w)/2)*sin(pi*r/180)))  : (y+((-w/2)*sin(pi*r/180)+((h-w)/2)*cos(pi*r/180))))
  107.         ur = ((x+((w/2)*cos(pi*r/180)-((h-w)/2)*sin(pi*r/180)))   : (y+((w/2)*sin(pi*r/180)+((h-w)/2)*cos(pi*r/180))))
  108.         lr = ((x+((w/2)*cos(pi*r/180)-(-(h-w)/2)*sin(pi*r/180)))  : (y+((w/2)*sin(pi*r/180)+(-(h-w)/2)*cos(pi*r/180))))

  109.         mypath = axlPathStart( list(ll) )
  110.         mypath = axlPathLine( mypath, 0.0, ul )
  111.         mypath = axlPathArcAngle(mypath, 0.0, ur, t, 180)
  112.         mypath = axlPathLine( mypath, 0.0, lr)
  113.         mypath = axlPathArcAngle(mypath, 0.0, ll , t, 180)
  114.         myshape = axlDBCreateOpenShape( mypath, t,"board geometry/drillhole", nil)
  115.         axlDBCreateCloseShape( myshape)
  116. )

  117. (defun draw_rect_slot (x y w h r)
  118.         ;;x'=x*cos(r)-y*sin(r);y'=y*cos(r)+x*sin(r)
  119.         ll = ((x+((-w/2)*cos(pi*r/180)-(-h/2)*sin(pi*r/180))) : (y+(-(w/2)*sin(pi*r/180)+(-h/2)*cos(pi*r/180)))) ;;low left
  120.         ul = ((x+((-w/2)*cos(pi*r/180)-(h/2)*sin(pi*r/180)))  : (y+((-w/2)*sin(pi*r/180)+(h/2)*cos(pi*r/180))))
  121.         ur = ((x+((w/2)*cos(pi*r/180)-(h/2)*sin(pi*r/180)))   : (y+((w/2)*sin(pi*r/180)+(h/2)*cos(pi*r/180))))
  122.         lr = ((x+((w/2)*cos(pi*r/180)-(-h/2)*sin(pi*r/180)))  : (y+((w/2)*sin(pi*r/180)+(-h/2)*cos(pi*r/180))))
  123.         mypath = axlPathStart( list(ll) )
  124.         mypath = axlPathLine( mypath, 0.0, ul )
  125.         mypath = axlPathLine( mypath, 0.0, ur )
  126.         mypath = axlPathLine( mypath, 0.0, lr )
  127.         mypath = axlPathLine( mypath, 0.0, ll )
  128.         myshape = axlDBCreateOpenShape( mypath, t,"board geometry/drillhole", nil)
  129.         axlDBCreateCloseShape( myshape)
  130.         )

  131. (defun draw_hole_drlh ()
  132.         clear_shape()
  133.         unselect_object_drlh()
  134.         axlSetFindFilter(?enabled '(noall pins) ?onButtons '(noall pins))
  135.         allpins = axlGetSelSet(axlAddSelectAll())
  136.         foreach(item allpins
  137.                 if(item->isThrough then
  138.                         padstack_ = item->definition
  139.                         cnt++
  140.                         case(padstack_->holeType
  141.                                 ("circle_drill"
  142.                                 x = nthelem(1 item->xy)
  143.                                 y = nthelem(2 item->xy)
  144.                                 x_offset = nthelem(1 padstack_->drillOffset)
  145.                                 y_offset = nthelem(2 padstack_->drillOffset)
  146.                                 r = item->rotation
  147.                                 dia = padstack_->drillDiameter
  148.                                 draw_circle((x+(x_offset*cos(pi*r/180)-y_offset*sin(pi*r/180)))  (y+(x_offset*sin(pi*r/180)+y_offset*cos(pi*r/180))) dia)
  149.                                 t
  150.                                 )
  151.                                 ("oval_slot"
  152.                                 x = nthelem(1 item->xy)
  153.                                 y = nthelem(2 item->xy)
  154.                                 x_offset = nthelem(1 padstack_->drillOffset)
  155.                                 y_offset = nthelem(2 padstack_->drillOffset)
  156.                                 w = padstack_->drillSizeWidth
  157.                                 h = padstack_->drillSizeHeight
  158.                                 r = item->rotation
  159.                                 draw_oval_slot((x+(x_offset*cos(pi*r/180)-y_offset*sin(pi*r/180)))  (y+(x_offset*sin(pi*r/180)+y_offset*cos(pi*r/180))) w h r)
  160.                                 t
  161.                                 )
  162.                                 ("rectangle_slot"
  163.                                 x = nthelem(1 item->xy)
  164.                                 y = nthelem(2 item->xy)
  165.                                 x_offset = nthelem(1 padstack_->drillOffset)
  166.                                 y_offset = nthelem(2 padstack_->drillOffset)
  167.                                 w = padstack_->drillSizeWidth
  168.                                 h = padstack_->drillSizeHeight
  169.                                 r = item->rotation
  170.                                 draw_rect_slot((x+(x_offset*cos(pi*r/180)-y_offset*sin(pi*r/180)))  (y+(x_offset*sin(pi*r/180)+y_offset*cos(pi*r/180))) w h r)
  171.                                 t
  172.                                 )
  173.                                 (t
  174.                                 x = nthelem(1 item->xy)
  175.                                 y = nthelem(2 item->xy)
  176.                                 printf("Wanning:%f %f %s\n" x y padstack_->holeType)
  177.                                 )
  178.                         );case
  179.                 );end if
  180.         );end foreach

  181.         unselect_object_drlh()

  182.         ; restore visiblility
  183.         axlVisibleSet(saveVis)
  184.         axlVisibleLayer("BOARD GEOMETRY/Drillhole" t)
  185.         ; note no need to make a call to axlVisibileUpdate because
  186.         ; the visisbility changes are a wash

  187.         axlVisibleUpdate(t)

  188.         axlMsgPut("---Total of throughhole : %d" cnt)
  189.         cnt=0
  190. )

  191. (defun clear_shape ()
  192.         unselect_object_drlh()
  193.         saveVisx = axlVisibleGet()
  194.         axlVisibleDesign(nil)
  195.         ; set desired layers visible via one or more calls to
  196.         axlVisibleLayer("BOARD GEOMETRY/Drillhole" t)
  197.         ; set find filter for objects to find
  198.         axlSetFindFilter(?enabled '(noall shapes) ?onButtons '(noall shapes))
  199.         axlAddSelectAll()
  200.         axlDeleteObject(axlGetSelSet())

  201.         ; restore visiblility
  202.         axlVisibleSet(saveVisx)

  203. )
复制代码



作者: vivianwu0320    时间: 2016-5-6 09:27
謝謝分享
作者: wuyuhe    时间: 2016-5-17 11:39
谢谢分享
作者: GSO_library    时间: 2016-5-18 17:36
谢谢分享~~~~
作者: wu55    时间: 2016-7-7 16:03
謝謝分享
作者: koncc    时间: 2016-7-11 10:11
感謝分享
作者: Apis    时间: 2016-9-28 11:39
16.6没有任何输出。。。
需要已安装EDA365 tool么?
作者: hy20060614    时间: 2016-11-9 09:01
谢谢分享
作者: wancai9550    时间: 2016-11-9 09:18
感謝分享
作者: 361553894    时间: 2016-11-15 20:59
我没贡献值了么??
作者: mentorkk    时间: 2016-11-16 03:07
谢谢分享
作者: hy20060614    时间: 2016-11-22 18:07
谢谢分享
作者: lisheng1255    时间: 2016-11-23 08:34
看不懂

作者: lisheng1255    时间: 2016-11-23 08:34
lisheng1255 发表于 2016-11-23 08:34
看不懂

能解释一下吗?
作者: bingshuihuo    时间: 2017-4-21 14:11
不错!!!!!!!!
作者: 2209915744    时间: 2017-5-2 18:19
无法查看 怎么回事
作者: bruce777    时间: 2017-5-22 14:41
可以說明一下如何使用嗎?
作者: bruce777    时间: 2017-5-22 14:42
可以說明一下如何使用嗎?  
作者: koncc    时间: 2017-5-23 09:07
感謝分享
作者: weigz    时间: 2017-5-27 11:07
谢谢分享
作者: amy4616    时间: 2017-6-1 09:59
如何使用??
作者: bruce777    时间: 2017-6-5 17:02
感謝版大無私分享  !!!!!!!!!!!!!!!
作者: wcjcn    时间: 2017-6-7 19:23
直接放代码的,楼主慷慨呀
作者: bingshuihuo    时间: 2017-6-8 08:35
谢谢分享
作者: cw883561    时间: 2017-9-6 14:15

感謝分享
作者: 66249259    时间: 2017-9-10 14:42
感謝分享
作者: bingshuihuo    时间: 2017-9-12 08:55
GSO_library 发表于 2016-5-18 17:36
谢谢分享~~~~

这个你使用起来了吗?

作者: huxz911    时间: 2017-9-12 09:28
谢谢分享!
作者: hyper311    时间: 2017-9-12 09:39
我运行会报错E- (SPMHDB-69): Incomplete arc segment data. E- (SPMHDB-187): SHAPE boundary may not cross itself. E- (SPMHDB-69): Incomplete arc segment data.
作者: 紫菁    时间: 2017-9-12 09:53
感谢分享
作者: hyper311    时间: 2017-9-12 10:23
hyper311 发表于 2017-9-12 09:39
我运行会报错E- (SPMHDB-69): Incomplete arc segment data. E- (SPMHDB-187): SHAPE boundary may not cro ...

Incomplete arc segment data.
这个错误是,焊盘中存在直径为0的过孔
E- (SPMHDB-187)这个错误我再看看

作者: szhot    时间: 2017-9-13 10:37

作者: bingshuihuo    时间: 2017-9-13 13:55
谁使用起来了   给我们讲一下怎么使用啊
作者: bingshuihuo    时间: 2017-11-3 13:51
amy4616 发表于 2017-6-1 09:59
如何使用??

这个怎么加载?
作者: iuven    时间: 2017-11-20 15:16
bingshuihuo 发表于 2017-11-3 13:51
这个怎么加载?


在allegro.ilinit文件中增加:
load("drill_hole_by.il" )

然后执行drlh

作者: bingshuihuo    时间: 2017-11-20 16:35
谢谢你啊 我试试
作者: Efect    时间: 2017-11-20 16:36
好东西,多谢楼主分享
作者: fenghaili    时间: 2017-11-23 10:33
用来一下,挺好用的。。
作者: 小秋2013    时间: 2017-12-6 14:44
试试
作者: zc333    时间: 2017-12-17 20:00
一个字牛B
作者: Pink    时间: 2018-1-4 14:18
太厲害了

作者: jordanli22    时间: 2018-1-5 10:26
请问:“EDA365 Skill 工具箱有这个工具,但是有问题”   eda365的有什么问题??
作者: 這侽孓譙悴丶    时间: 2018-1-5 10:40
jordanli22 发表于 2018-1-5 10:26
请问:“EDA365 Skill 工具箱有这个工具,但是有问题”   eda365的有什么问题??

应该没什么问题吧,论坛的那个是先生成钻孔尺寸的shape,然后你再自己手动去出dxf即可!

作者: zame    时间: 2018-1-7 10:05
謝謝分享
作者: zhouwo    时间: 2018-1-7 15:41

谢谢分享
作者: 黑白宝宝    时间: 2018-1-12 10:36
谢谢
作者: abtc1130    时间: 2018-1-12 15:16
一直没找到什么好办法,谢谢


作者: 王开鑫55    时间: 2018-1-12 15:17
为啥加载运行后,form窗口打开立马又关掉了
作者: yihafewu    时间: 2018-1-12 16:18
看看
作者: 王开鑫55    时间: 2018-1-12 16:36
发现 椭圆孔  slot x:66.929  y:47.244  offset都是0 ,无法创建:lol:lol,有bug呀。
作者: tangfeng    时间: 2018-1-22 22:37
多谢分享

作者: weiprop    时间: 2018-1-30 00:39
感謝分享
作者: 85654202    时间: 2018-1-30 20:48
牛X呀
作者: GSO_library    时间: 2018-1-31 14:10
好东西
作者: 85654202    时间: 2018-2-2 22:14
对隋圆形的焊盘,起不到作用呀
作者: xh450321    时间: 2018-2-11 13:16
谢谢分享
作者: 這侽孓譙悴丶    时间: 2018-2-11 16:35
85654202 发表于 2018-2-2 22:14
对隋圆形的焊盘,起不到作用呀

可以的!

作者: huzf    时间: 2018-2-22 16:25
看看
作者: Ling    时间: 2018-2-22 17:48

谢谢分享
作者: appleli    时间: 2018-2-25 12:01
谢谢
作者: fruitpig345    时间: 2018-3-5 10:07
請教樓主 執行後出現  下面error 是甚麼原因
Command > drlh
---Dirll holes to :BOARD GEOMETRY/Drillhole
Draw Holes........
E- *Error* fprintf/sprintf: format spec. incompatible with data - nil
作者: michelle_wu21    时间: 2018-3-5 14:19
謝謝分享
作者: qy317222    时间: 2018-3-6 09:48
谢谢分享

作者: li262925    时间: 2018-3-8 14:00
学习了
作者: Jerry1019    时间: 2018-3-8 14:41
謝謝分享
作者: Jerry1019    时间: 2018-3-8 15:04
我執行,有時候錯誤E- *Error* minus: can't handle (- nil)
作者: linlin8925    时间: 2018-4-25 15:04
多谢楼主

作者: shaojohn    时间: 2018-5-3 16:28
xuexiyixia

作者: eagle31    时间: 2018-5-4 10:51
感謝分享
作者: wangmn    时间: 2018-5-16 14:49
看看
作者: fschao    时间: 2018-5-17 16:40
谢谢分享!!!路过了
作者: fschao    时间: 2018-5-17 16:40
谢谢分享
作者: yangjinxing521    时间: 2018-5-18 09:38
可以用吧一要
作者: s59710210    时间: 2018-5-18 14:26
谢谢分享
作者: q336795    时间: 2018-5-21 16:55
感謝分享~多多學習
作者: attaboy    时间: 2018-5-24 10:29
感谢分享
作者: ecoren    时间: 2018-5-26 19:01
这个挺方便

作者: ann_wz    时间: 2018-5-27 15:16
好东西
作者: J蓝虹    时间: 2018-5-28 09:47
这个比较厉害,谢谢分享
作者: zhouwo    时间: 2018-6-2 10:00
[分享源代码]draw drill hole/将hole空可以输出至dxf [修改]

作者: shokwu    时间: 2018-6-2 10:42
謝謝分享

作者: 橡皮擦先生    时间: 2018-6-4 11:52
看下,学习学习
作者: ghfghyb    时间: 2018-6-5 15:06
收到,谢谢!!
作者: 橡皮擦先生    时间: 2018-6-5 16:08
看一下谢谢看一下


作者: astrodyne    时间: 2018-7-5 07:13
ddddddddddddddddddd

作者: defir    时间: 2018-7-6 21:30
赞!!分享源码的都是大牛




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