找回密码
 注册
关于网站域名变更的通知
12
返回列表 发新帖
楼主: xw_superstar
打印 上一主题 下一主题

allegro 快捷键换层时只显示当前层隐藏其他层

[复制链接]
  • TA的每日心情
    慵懒
    2025-8-25 15:23
  • 签到天数: 85 天

    [LV.6]常住居民II

    16#
    发表于 2022-2-17 16:07 | 只看该作者
    复制代码到记事本,保存为任意名.il,在%HOME\\pcbenv\allegro.ilinit中load "文件名.il",在env中funckey t laytop。
    % O! F) O9 p& Q& J
    1. ;;v1.0 初稿
      / a0 [0 C& G! B. y
    2. axlCmdRegister("laytop" 'dbSetTopLayer ?cmdType "general")* ~# [* r8 b5 h* f1 v/ j
    3. axlCmdRegister("laybtm" 'dbSetBtmLayer ?cmdType "general")
      4 Z* m0 ?2 x/ K' R! }) o
    4. ;;---------------------------------------------------------. Q" B; `) w5 ?' R0 W: I2 g% @9 _, \
    5. ;;set_layer_visible.il
      : B! |. {. I' J
    6. ;;指令:laytop 和 laybtm
      " u9 T' d; G7 N( d8 ~# O
    7. ;;功能:只显示TOP层或者BOTTOM层/ Q4 c8 c2 O5 j( }$ [: ~& J: s
    8. ;;描述:v1.04 n- c6 L, Z/ v% ?  A# U3 J2 D! x
    9. ;;  可自行修改代码中的CLASS/SUBCLASS9 ^# a4 A; G0 h7 b7 \( A2 v( J1 ^9 O
    10. ;;  15.2未测试, T  {7 n- y+ U" g, n1 \9 o
    11. ;;---------------------------------------------------------               
      ' u5 `* W1 M. B' D; ], S3 S3 [+ v$ n
    12.                 . c* g0 t. `: G  K: I9 e
    13. procedure(dbSetTopLayer()6 f  P1 ?: Y  A0 t: ~
    14. (let ()
      4 k1 j/ n& r: x; `! ]+ E: [) _
    15.         ;;清空所有层% \& k1 w' N' q& J) T" j0 _: e
    16.         axlVisibleDesign(nil)
      . J& {$ h% [4 F' Q$ X
    17. 4 D: f0 f% ?5 h" s2 G
    18.         ;;设置层可见
      * _3 Y  l. l# o: \9 J5 s: _% ~
    19.         axlVisibleLayer("via class/soldermask_top" t)
      1 N# e- `* E4 _. P
    20.         axlVisibleLayer("pin/top" t)( b) K) ]. e, m
    21.         axlVisibleLayer("via class/top" t)! ^5 a, Y8 r$ X" w. G5 s7 c1 v
    22.         axlVisibleLayer("drc error class/top" t). y, h' o) a8 B) M4 i5 T% X5 O
    23.         axlVisibleLayer("etch/top" t)5 E& ]/ W4 S9 R( i* O
    24.         ;;设置层可见
      0 ^+ F! V5 G2 g
    25.         axlVisibleLayer("board geometry/soldermask_top" t)
      ' }( G) q: X8 Y8 `5 K3 W9 T% V
    26.         axlVisibleLayer("board geometry/silkscreen_top" t)
      3 B/ I+ S/ q7 F$ e
    27.         axlVisibleLayer("board geometry/outline" t)% S5 C( V5 ^0 |7 T/ n
    28.         axlVisibleLayer("board geometry/design_outline" t)
      / Q9 {8 j3 y" l: T  x& ^
    29.         axlVisibleLayer("package geometry/silkscreen_top" t)
      9 P0 [) F9 E0 y
    30.         axlVisibleLayer("package geometry/soldermask_top" t)  y4 I3 H) q' y9 g
    31.         ;;生效
      : O1 Y2 d" h6 |2 X  W: M% l
    32.         axlVisibleUpdate(nil)
      ( ~5 p' n: f5 P; s5 e
    33. ))
      0 i8 j$ f- D" C; s

    34. 2 v, m% j0 D: G5 b5 R5 h7 N' {
    35. procedure(dbSetBtmLayer()- Y/ g  ^6 o, j/ u; n$ Z+ ~
    36. (let ()
      ! z' u% ?. A. \0 n
    37.         ;;清空所有层" R2 I5 L8 [0 r9 o6 ?9 x% e& }4 F% `
    38.         axlVisibleDesign(nil)3 N& C' z  J2 I$ p
    39. 1 o0 b4 m$ j8 w) Z, G, r% s9 w
    40.         ;;设置层可见2 `' z' C" x8 m
    41.         axlVisibleLayer("via class/soldermask_bottom" t)7 e' H: }8 |1 M# q& ]. R, z' U
    42.         axlVisibleLayer("pin/bottom" t)7 s* Y4 g7 i. G( e# @1 Q9 |; Q3 S
    43.         axlVisibleLayer("via class/bottom" t)
      / l/ n8 x( {3 M( ?; d5 c
    44.         axlVisibleLayer("drc error class/bottom" t)
      2 n+ p/ ^' J  ?6 a4 H3 T
    45.         axlVisibleLayer("etch/bottom" t)
      + Q, u  o0 j9 ^/ N( a3 h; L0 ?
    46.         ;;设置层可见
      $ |+ N: B( r% k: b* Q! e! H
    47.         axlVisibleLayer("board geometry/soldermask_bottom" t)6 l8 i& Y: j3 j3 J8 @7 @* y' V
    48.         axlVisibleLayer("board geometry/silkscreen_bottom" t)
      2 W4 ]: b( O) D7 v' z
    49.         axlVisibleLayer("board geometry/outline" t). I  D" ?6 p, z  I) k
    50.         axlVisibleLayer("board geometry/design_outline" t)
      8 F0 [) ?# u4 \' L2 I! R
    51.         axlVisibleLayer("package geometry/silkscreen_bottom" t)
      % M; c( d1 i# \5 t! w" g
    52.         axlVisibleLayer("package geometry/soldermask_bottom" t)7 U. X# j6 Q) F! Q
    53.         ;;生效8 M2 ~9 ^$ J) q0 D
    54.         axlVisibleUpdate(nil)
      9 o- [7 H  d( y# I
    55. ))
    复制代码
  • TA的每日心情
    慵懒
    2025-8-25 15:23
  • 签到天数: 85 天

    [LV.6]常住居民II

    17#
    发表于 2022-2-17 16:09 | 只看该作者
    切换层+ k- O$ n% N% c

    # {1 X6 K! y: I9 b, E
    1. ;;v1.2 添加注释+ t7 l8 b# ~! U. N4 ?
    2. ;;v1.1 整理结构( K; n  S5 B9 U& J2 Z
    3. ;;v1.0 初稿
      0 O+ k: P% S/ k: w% w* w
    4. axlCmdRegister("nextlayer" 'dbNextLayer)8 r0 [/ A* p% A( p7 q/ i; d  f% D
    5. axlCmdRegister("lastlayer" 'dbLastLayer)* l* Q: Q) @, X. C8 i  N$ F
    6. ;;---------------------------------------------------------* r" B7 t! I9 f% j( h3 E
    7. ;;change_layer.il
      5 x5 ?2 S2 a  m" \" t
    8. ;;指令:nextlayer 和 lastlayer; D+ p; }' o7 C. m2 b' p5 H
    9. ;;功能:从第一层开始,让所有的非地层轮流显示。
      + _& l0 e4 c0 E+ x* N( r% P/ m9 l
    10. ;;描述:v1.2
      0 U# r  Z1 b1 s# w  r1 e% [9 t
    11. ;;  系统默认的+和-是用来轮循当前激活层(Active Class and Subclass),可以改成这个。
      ( T" ?- l  Q! y; Q/ t" F7 u
    12. ;;  该命令不改变当前激活层,而是改变可见层。
      7 s9 G. E! ~  `1 V
    13. ;;  15.2未测试
      . Z/ ]* G4 c7 [3 V) W( V
    14. ;;---------------------------------------------------------2 D% T' y6 B2 x
    15. 3 o! B: V, f- y+ }  B, ~
    16. temp_curLayer = nil        ;全局变量,2 D0 z) f( l. n2 R: l

    17. $ {9 `9 j1 l) f; s: B" N/ d. _3 v
    18. procedure(dbNextLayer()
      ' J. l, ^$ _' H5 P( D
    19. (let ()9 i$ q: E' A; \) Z/ X6 i2 V
    20.         _dbSetLayerVisible("Next"). l. Y1 C2 E' ?
    21. ))' a* V$ ?6 _5 q9 T) g5 u9 L( D/ \6 I

    22. / C  C- A" G; @! k: c
    23. procedure(dbLastLayer()
      " i' K: j! z( ~* o
    24. (let (); @; i8 Z7 Q7 [* D4 g& u5 O4 Y/ c
    25.         _dbSetLayerVisible("Last")/ y/ j: r9 X: n7 m- n1 ?4 B0 L
    26. ))* ]- r. d# T- ^) ?  A
    27. ) c  u' J2 q2 O
    28. ;;设置层显示
      ; _1 S% s! `- G# Z* v0 H& o
    29. procedure(_dbSetLayerVisible(direction)
      ; J$ L# c* A, V' X
    30. (let (item allLayers itemClass)
      9 z: g# B4 T" F: G- B. D, M
    31. * t. c9 l3 v- N# b; V1 Q  A/ t
    32.         foreach(item axlSubclasses("etch")        ;获取etch class下的的所有subclass的字符串
      1 A  K+ b% T- Z8 o' N% F
    33.                 unless(index(item "GND")        ;把字符串不含GND的层先收集起来( k! |, F) Z$ u; Q) c. R8 T
    34.                         allLayers = cons(item allLayers)        ;收集# U0 `; p( `% Q7 E* X& f
    35.                 )- i1 I; [8 K9 U! X  O2 j$ O+ s
    36.         )+ I7 }7 d  p# @/ c: S8 E* l7 \8 u! Z
    37.         allLayers = reverse(allLayers)        ;因为cons是在list开头增加,所有颠倒一下2 A. n- ?) u) N3 \, N5 O

    38. + Z4 B; v( d( U8 r8 R5 i
    39.         when(allLayers
      ( E" K7 ?4 S$ T) d" q
    40.                 temp_curLayer = _dbSearchLayer(allLayers direction)        ;获取下一个要显示的层
      / Z8 r9 \8 @; d* K* P
    41.                 axlVisibleDesign(nil)        ;关闭所有层显示% ]$ m! @! C) Q. ?; h5 _
    42.                 foreach(itemClass '("pin" "via class" "drc error class" "etch")9 A8 H( c6 ?8 P! b/ b- ~" ]! {
    43.                         axlVisibleLayer(strcat(itemClass "/" temp_curLayer) t)        ;打开这些层
      * d; X1 P( B/ Y! a4 j( E
    44.                 )  L/ L$ T  W% D+ x4 i+ h
    45.                 axlVisibleUpdate(nil)        ;刷新层显示4 m! z4 F1 H# r# j( L* P
    46.         )$ S" |8 O+ u! }. `# v
    47. ))9 C  G  n  u2 E/ w
    48. ; v7 q/ L: v, W0 X/ e7 \
    49. ;;寻找下一个要显示的层/ T# c) U) [, `; G5 T  V2 T/ ~# U
    50. procedure(_dbSearchLayer(allLayers direction)# u$ d0 c4 q+ q6 _9 y! ^% I
    51. (let (curIndex nextIndex), \- [& e0 H0 O# q% n
    52.        
      - P* d3 B: F4 e. d0 w) D+ r* l
    53.         if(temp_curLayer then) u1 r0 R+ l/ l" i
    54.                 curIndex = lindex(allLayers temp_curLayer)        ;计算当前层在所有层中的序号& r% n5 N4 o* Z3 F
    55.                 if(direction == "Next" then                ;如果是NEXT,序号就+1& I8 O" ?4 r& ]2 `' z
    56.                         nextIndex = curIndex + 1; U* w. o5 s7 ~5 _
    57.                         when(nextIndex > length(allLayers)        ;当序号超出list的长度,自动恢复到list开头& r) I+ {; ]6 K: w  q! ?, |$ k
    58.                                 nextIndex = 1
      6 l/ R, u! V/ j3 A
    59.                         )
      - g: a: g% x& c# x; l
    60.                 else8 t( C4 A" ?/ i: R9 A  P) R* M$ l
    61.                         nextIndex = curIndex - 1        ;如果是LAST,序号就-1* Z( ~' r7 V: M: q. `
    62.                         when(nextIndex < 1* u; {( L2 m9 j% U; r, F( s
    63.                                 nextIndex = length(allLayers)        ;当序号小于1,自动恢复到list尾
      ( v" t# K4 S" u
    64.                         )
      % z. ~$ z8 h% u
    65.                 )
      0 B6 ?. M3 n% h0 P, }* H# ^& Z
    66.                 temp_curLayer = nthelem(nextIndex allLayers)        ;根据序号,计算下一个层的层名8 d2 P, G" F( A1 L1 h
    67.         else  \, D( f% `7 [* |
    68.                 temp_curLayer = car(allLayers)        ;如果第一次运行,就显示第一层: l8 |4 }- s7 t+ _
    69.         )
      " e  U- u1 h) _; D9 s! T4 C
    70.         temp_curLayer                ;运行的最后一行表示返回值。这一行写不写都行,if和else里面最后一行本来就返回temp_curLayer了。# h' `6 Z9 y) W$ h
    71. ))$ u* E  P  K+ z. m0 L( s  z
    72. . X' i. W& ^# a4 C1 ]( f
    73.   t) l/ W+ c; Y) s  p
    74.        
    复制代码
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-9-14 13:44 , Processed in 0.109375 second(s), 20 queries , Gzip On.

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

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

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