找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 2496|回复: 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

0

主题

75

帖子

31

积分

二级会员(20)

Rank: 2Rank: 2

积分
31
2#
发表于 2016-5-6 09:27 | 只看该作者
謝謝分享

14

主题

143

帖子

-1万

积分

未知游客(0)

积分
-11958
3#
发表于 2016-5-17 11:39 | 只看该作者
谢谢分享

93

主题

645

帖子

3395

积分

五级会员(50)

Rank: 5

积分
3395
4#
发表于 2016-5-18 17:36 | 只看该作者
谢谢分享~~~~

点评

这个你使用起来了吗?  详情 回复 发表于 2017-9-12 08:55

0

主题

86

帖子

275

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
275
5#
发表于 2016-7-7 16:03 | 只看该作者
謝謝分享

6

主题

316

帖子

3060

积分

五级会员(50)

Rank: 5

积分
3060
6#
发表于 2016-7-11 10:11 | 只看该作者
感謝分享

0

主题

6

帖子

101

积分

二级会员(20)

Rank: 2Rank: 2

积分
101
7#
发表于 2016-9-28 11:39 | 只看该作者
16.6没有任何输出。。。
需要已安装EDA365 tool么?

64

主题

613

帖子

2459

积分

四级会员(40)

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

积分
2459
8#
发表于 2016-11-9 09:01 | 只看该作者
谢谢分享

0

主题

178

帖子

1535

积分

四级会员(40)

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

积分
1535
9#
发表于 2016-11-9 09:18 | 只看该作者
感謝分享

102

主题

377

帖子

1158

积分

四级会员(40)

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

积分
1158
10#
发表于 2016-11-15 20:59 | 只看该作者
我没贡献值了么??

10

主题

379

帖子

4169

积分

五级会员(50)

Rank: 5

积分
4169
11#
发表于 2016-11-16 03:07 | 只看该作者
谢谢分享

64

主题

613

帖子

2459

积分

四级会员(40)

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

积分
2459
12#
发表于 2016-11-22 18:07 | 只看该作者
谢谢分享

9

主题

191

帖子

1106

积分

四级会员(40)

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

积分
1106
13#
发表于 2016-11-23 08:34 | 只看该作者
看不懂

点评

能解释一下吗?  详情 回复 发表于 2016-11-23 08:34

9

主题

191

帖子

1106

积分

四级会员(40)

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

积分
1106
14#
发表于 2016-11-23 08:34 | 只看该作者

能解释一下吗?

29

主题

2646

帖子

2805

积分

四级会员(40)

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

积分
2805
15#
发表于 2017-4-21 14:11 | 只看该作者
不错!!!!!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-10-18 14:28 , Processed in 0.078062 second(s), 41 queries , Gzip On.

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

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

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