找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 2508|回复: 85
打印 上一主题 下一主题

[分享源代码]draw drill hole/将hole空可以输出至dxf

  [复制链接]

9

主题

46

帖子

1036

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1036
跳转到指定楼层
1#
发表于 2016-5-4 15:04 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 紫菁 于 2017-11-3 14:30 编辑

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


执行后=======>




  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. )
复制代码


游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 3威望 +24 收起 理由
ginooolu + 2 赞一个!
deargds + 20 赞一个!
XYX365 + 2 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏13 支持!支持!2 反对!反对!

7

主题

396

帖子

1314

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1314
推荐
发表于 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)这个错误我再看看

34

主题

1321

帖子

7126

积分

六级会员(60)

Rank: 6Rank: 6

积分
7126
推荐
发表于 2018-1-5 10:40 | 只看该作者
jordanli22 发表于 2018-1-5 10:26
请问:“EDA365 Skill 工具箱有这个工具,但是有问题”   eda365的有什么问题??

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

0

主题

110

帖子

383

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
383
推荐
发表于 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

5

主题

109

帖子

1925

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1925
86#
发表于 2018-7-6 21:30 | 只看该作者
赞!!分享源码的都是大牛

0

主题

255

帖子

527

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
527
85#
发表于 2018-7-5 07:13 | 只看该作者
ddddddddddddddddddd

7

主题

126

帖子

592

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
592
84#
发表于 2018-6-5 16:08 | 只看该作者
看一下谢谢看一下

47

主题

266

帖子

2730

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
2730
83#
发表于 2018-6-5 15:06 | 只看该作者
收到,谢谢!!
争风吃醋是女人最大的弱点  争强好胜是所有男人的死穴

7

主题

126

帖子

592

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
592
82#
发表于 2018-6-4 11:52 | 只看该作者
看下,学习学习

19

主题

203

帖子

2702

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
2702
81#
发表于 2018-6-2 10:42 | 只看该作者
謝謝分享

2

主题

97

帖子

764

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
764
80#
发表于 2018-6-2 10:00 | 只看该作者
[分享源代码]draw drill hole/将hole空可以输出至dxf [修改]

7

主题

225

帖子

1107

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1107
79#
发表于 2018-5-28 09:47 | 只看该作者
这个比较厉害,谢谢分享

91

主题

478

帖子

1945

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1945
78#
发表于 2018-5-27 15:16 | 只看该作者
好东西

3

主题

99

帖子

459

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
459
77#
发表于 2018-5-26 19:01 | 只看该作者
这个挺方便

1

主题

73

帖子

414

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
414
76#
发表于 2018-5-24 10:29 | 只看该作者
感谢分享

0

主题

77

帖子

894

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
894
75#
发表于 2018-5-21 16:55 | 只看该作者
感謝分享~多多學習

8

主题

436

帖子

727

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
727
74#
发表于 2018-5-18 14:26 | 只看该作者
谢谢分享

45

主题

1888

帖子

8369

积分

六级会员(60)

Rank: 6Rank: 6

积分
8369
73#
发表于 2018-5-18 09:38 | 只看该作者
可以用吧一要
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-11-22 16:08 , Processed in 0.073320 second(s), 37 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表