王开鑫55 发表于 2018-1-16 17:43:22

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

本帖最后由 王开鑫55 于 2018-1-16 17:49 编辑

;封装的中心点镜像,不在中心不在原地
axlCmdRegister("Original_mirror" 'Original_mirror )
defun(Original_mirror ()
let(()   
    mirror_form()   
    formm = axlFormCreate((gensym) "./mirror.form" nil 'pform_Action_drlh t nil)   
    axlFormDisplay(formm)
    ;deleteFile("./mirror.form")   
);end let
);end defun


(defun mirror_form ()
(prog ()
      pform = outfile("./mirror.form" "w")
      fprintf(pform "FILE_TYPE=FORM_DEFN VERSION=2\n")
      fprintf(pform "FORM toolwindow\n")
      fprintf(pform "FIXED\n")
      fprintf(pform "PORT 15 8\n")
                                        ;PORT w h
      fprintf(pform "HEADER \"www\"\n")
      fprintf(pform "TILE\n")

      fprintf(pform "TEXT \"Mirror\"\n")
      fprintf(pform "TLOC 0 0\n")
      fprintf(pform "ENDTEXT\n")

      fprintf(pform "FIELD mirror\n")
      fprintf(pform "FLOC 1 2\n") ;FLOC x y
      fprintf(pform "MENUBUTTON \"mirror\" 10 3\n")
      fprintf(pform "ENDFIELD\n")
      
      fprintf(pform "FIELD done\n")
      fprintf(pform "FLOC 1 6\n")
      fprintf(pform "MENUBUTTON \"Done\" 10 3\n")
      fprintf(pform "ENDFIELD\n")
      
      fprintf(pform "ENDTILE\n")
      fprintf(pform "ENDFORM\n")
      close(pform)      
      ))
(defun pform_Action_drlh (formm)
(case formm->curField
    ("done"
   axlFormClose(formm)
   axlCancelEnterFun()
   deleteFile("./mirror.form")
   axlMsgPut("Done")
   nil
   )

    ("mirror"
   mirror()
   t
   )

    );end case
);end defun

(defun mirror ()
      axlVisibleLayer("pin/top" t)
      axlVisibleLayer("PACKAGE GEOMETRY/SILKSCREEN_TOP" t)
      axlVisibleLayer("pin/bottom" t)
      axlVisibleLayer("PACKAGE GEOMETRY/SILKSCREEN_BOTTOM" t)
      axlClearSelSet()            
      axlSetFindFilter(?enabled '(noall symbols) ?onButtons '(noall symbols))               
      allsymbols = axlGetSelSet(axlSelect(?prompt "Select symbols by pick or box."))
      axlClearSelSet()
      foreach(sym allsymbols                              
         sym_mirror=axlTransformObject(sym,?move '(0.0,0.0) , ?mirror t, ?allOrNone t)                                                            
               );end foreach               
      axlVisibleUpdate(t)
)


PS:以下两点情况不能使用:
fix元件不能mirror.
建立封装时元件中心点不在元件中心的,mirror后不在原来位置。
支持点选,框选
养成良好的习惯,画封装时原点放在中心位置。有兴趣的可以进行代码扩展,函数:axlDBGetSymbolBodyExtent

砍死你个小日本 发表于 2018-1-17 15:02:36

辛苦了 ,支持原创

nanshao8860 发表于 2018-1-17 19:34:48

谢谢分享

jordanli22 发表于 2020-2-1 09:40:25

env 里面寫一句話就可以用快捷鍵做到了哦。

YZDZ 发表于 2020-2-1 11:02:49

:lol:lol:lol:lol:lol:lol

YZDZ 发表于 2020-2-1 11:03:35

jordanli22 发表于 2020-2-1 09:40
env 里面寫一句話就可以用快捷鍵做到了哦。

求大哥赐教

YZDZ 发表于 2020-2-6 09:43:42

:lol:lol:lol:lol:lol:lol:lol

王开鑫55 发表于 2020-7-29 15:18:44

jordanli22 发表于 2020-2-1 09:40
env 里面寫一句話就可以用快捷鍵做到了哦。

那句话呀,请留言呀

wzh6328 发表于 2021-4-9 14:53:08

学习学习,谢谢分享

Joyi 发表于 2022-2-7 19:30:10

学习学习,谢谢分享
页: [1] 2
查看完整版本: 原地(封装中心点在中心)mirror元件-源码