Cadence Skill 论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 615|回复: 2

[原创] 原地(封装中心点在中心)mirror元件-源码

[复制链接]
发表于 2018-1-16 17:43:22 | 显示全部楼层 |阅读模式
本帖最后由 王开鑫55 于 2018-1-16 17:49 编辑
  1. ;封装的中心点镜像,不在中心不在原地
  2. axlCmdRegister("Original_mirror" 'Original_mirror )
  3. defun(Original_mirror ()
  4. let(()   
  5.     mirror_form()   
  6.     formm = axlFormCreate((gensym) "./mirror.form" nil 'pform_Action_drlh t nil)   
  7.     axlFormDisplay(formm)
  8.     ;deleteFile("./mirror.form")   
  9. );end let
  10. );end defun


  11. (defun mirror_form ()
  12.   (prog ()
  13.         pform = outfile("./mirror.form" "w")
  14.         fprintf(pform "FILE_TYPE=FORM_DEFN VERSION=2\n")
  15.         fprintf(pform "FORM toolwindow\n")
  16.         fprintf(pform "FIXED\n")
  17.         fprintf(pform "PORT 15 8\n")
  18.                                         ;PORT w h
  19.         fprintf(pform "HEADER \"www\"\n")
  20.         fprintf(pform "TILE\n")

  21.         fprintf(pform "TEXT \"Mirror\"\n")
  22.         fprintf(pform "TLOC 0 0\n")
  23.         fprintf(pform "ENDTEXT\n")

  24.         fprintf(pform "FIELD mirror\n")
  25.         fprintf(pform "FLOC 1 2\n") ;FLOC x y
  26.         fprintf(pform "MENUBUTTON \"mirror\" 10 3\n")
  27.         fprintf(pform "ENDFIELD\n")
  28.       
  29.         fprintf(pform "FIELD done\n")
  30.         fprintf(pform "FLOC 1 6\n")
  31.         fprintf(pform "MENUBUTTON \"Done\" 10 3\n")
  32.         fprintf(pform "ENDFIELD\n")
  33.         
  34.         fprintf(pform "ENDTILE\n")
  35.         fprintf(pform "ENDFORM\n")
  36.         close(pform)        
  37.         ))
  38. (defun pform_Action_drlh (formm)
  39.   (case formm->curField
  40.     ("done"
  41.      axlFormClose(formm)
  42.      axlCancelEnterFun()
  43.      deleteFile("./mirror.form")
  44.      axlMsgPut("Done")
  45.      nil
  46.      )

  47.     ("mirror"
  48.      mirror()
  49.      t
  50.      )
  51.   
  52.     );end case
  53.   );end defun

  54. (defun mirror ()
  55.         axlVisibleLayer("pin/top" t)
  56.         axlVisibleLayer("PACKAGE GEOMETRY/SILKSCREEN_TOP" t)
  57.         axlVisibleLayer("pin/bottom" t)
  58.         axlVisibleLayer("PACKAGE GEOMETRY/SILKSCREEN_BOTTOM" t)
  59.         axlClearSelSet()            
  60.         axlSetFindFilter(?enabled '(noall symbols) ?onButtons '(noall symbols))               
  61.         allsymbols = axlGetSelSet(axlSelect(?prompt "Select symbols by pick or box."))
  62.         axlClearSelSet()
  63.         foreach(sym allsymbols                                
  64.            sym_mirror=axlTransformObject(sym,?move '(0.0,0.0) , ?mirror t, ?allOrNone t)                                                              
  65.                );end foreach               
  66.         axlVisibleUpdate(t)
  67. )


复制代码
PS:以下两点情况不能使用:
fix元件不能mirror.
建立封装时元件中心点不在元件中心的,mirror后不在原来位置。

支持点选,框选
养成良好的习惯,画封装时原点放在中心位置。有兴趣的可以进行代码扩展,函数:axlDBGetSymbolBodyExtent
发表于 2018-1-17 15:02:36 | 显示全部楼层
辛苦了 ,支持原创
发表于 2018-1-17 19:34:48 | 显示全部楼层
谢谢分享  
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|网站地图|Cadence Skill 论坛 ( 蜀ICP备13024417号

GMT+8, 2018-10-18 20:03 , Processed in 0.250319 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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