找回密码
 注册
关于网站域名变更的通知
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。
    ' ~* v2 H' [( N7 q
    1. ;;v1.0 初稿! V& q! Y+ V0 T, X! A
    2. axlCmdRegister("laytop" 'dbSetTopLayer ?cmdType "general")+ d0 r0 R# M2 w  z  B/ X
    3. axlCmdRegister("laybtm" 'dbSetBtmLayer ?cmdType "general")
      9 v8 x' w& t* V. C
    4. ;;---------------------------------------------------------! @2 ^4 d/ h0 Y' z6 l6 d7 D
    5. ;;set_layer_visible.il; X+ ?4 o4 I) s# w: t# z/ d% _
    6. ;;指令:laytop 和 laybtm0 n0 c1 m& U5 a1 e
    7. ;;功能:只显示TOP层或者BOTTOM层
      2 L* D0 f' O' o5 N  ?
    8. ;;描述:v1.0- a4 n' P3 y& Q/ x
    9. ;;  可自行修改代码中的CLASS/SUBCLASS+ _- ?# }* e& T. ^' T6 D- v2 o, F" V
    10. ;;  15.2未测试
      0 C; }( H+ [7 s9 p$ @
    11. ;;---------------------------------------------------------                . R" l. B9 f7 I$ P% x- c
    12.                 % {  r: V* ?' y% g* x% y
    13. procedure(dbSetTopLayer()
      0 {8 A5 h8 a7 R1 y' U
    14. (let ()
      5 [( S* d  Y" t7 A
    15.         ;;清空所有层8 u& M3 |1 N% f6 C! G+ P
    16.         axlVisibleDesign(nil)
      % O& j8 O3 B9 F( v

    17. 2 n, J7 s* M* j6 N
    18.         ;;设置层可见
      - K1 m4 t% J  x; P# T6 \0 K5 D. R
    19.         axlVisibleLayer("via class/soldermask_top" t)
      6 @1 S2 {/ E7 p! `: `0 X* i
    20.         axlVisibleLayer("pin/top" t)
        f3 M4 ]. H" o# v& M( I* r
    21.         axlVisibleLayer("via class/top" t)4 k7 t- X# ~+ w+ E7 B' s
    22.         axlVisibleLayer("drc error class/top" t)3 j& @7 O, f6 m# a9 d
    23.         axlVisibleLayer("etch/top" t)1 C# U: o6 p/ y7 Q& g  O: i. h9 D
    24.         ;;设置层可见
      8 Y- Y5 {8 a2 _6 v
    25.         axlVisibleLayer("board geometry/soldermask_top" t)  M" G' Q8 X7 g4 x" x
    26.         axlVisibleLayer("board geometry/silkscreen_top" t)9 z  V! V+ G- N  B* H" g
    27.         axlVisibleLayer("board geometry/outline" t)
      + ]2 |& ^( m$ x# D5 M
    28.         axlVisibleLayer("board geometry/design_outline" t)
      2 G* D9 G1 d6 g4 h
    29.         axlVisibleLayer("package geometry/silkscreen_top" t)% B/ D' e& j8 a8 R, r: \
    30.         axlVisibleLayer("package geometry/soldermask_top" t)
      * T, C* _( T$ @( N: M
    31.         ;;生效
      ! ?; H$ h  W1 p/ G3 I6 p: H' V
    32.         axlVisibleUpdate(nil)
      # c. R6 ~. y! ~) n
    33. ))2 I; U6 m' L' d1 d/ P2 v  x
    34. * H* z! Q6 x. f( L
    35. procedure(dbSetBtmLayer()9 H+ J6 O5 K+ ?' f- Q' ]
    36. (let ()
      - N* |) y0 l! s. O& h/ H: u% ?
    37.         ;;清空所有层8 _4 O3 H, n) J
    38.         axlVisibleDesign(nil)
      ! s5 A) t9 M; [0 ~7 F0 J& a* Y
    39. * S" Q/ a8 k  ]$ b6 y% r% X
    40.         ;;设置层可见
      " n& z; e  A! Z0 v/ p8 h  N( d
    41.         axlVisibleLayer("via class/soldermask_bottom" t)
      : w" j. G6 A) m" y3 I& d1 D
    42.         axlVisibleLayer("pin/bottom" t)
      + W# R$ S) s3 y2 Y) X
    43.         axlVisibleLayer("via class/bottom" t)0 E2 B% n7 _  w1 |
    44.         axlVisibleLayer("drc error class/bottom" t)$ F- [$ r2 k0 _
    45.         axlVisibleLayer("etch/bottom" t)
        {! J+ V0 U* s3 S2 H8 s& j
    46.         ;;设置层可见
      ) T0 T- k$ `2 Q% p/ N' S7 a. V, v" L
    47.         axlVisibleLayer("board geometry/soldermask_bottom" t): I" F: J& Y( o7 I8 x
    48.         axlVisibleLayer("board geometry/silkscreen_bottom" t)* D4 o% C! o" Z% [3 ~
    49.         axlVisibleLayer("board geometry/outline" t)
      4 s9 s( N! B: W+ v9 @: M+ r
    50.         axlVisibleLayer("board geometry/design_outline" t)# s) s' l  @8 R* G' n
    51.         axlVisibleLayer("package geometry/silkscreen_bottom" t)
      ; L2 p7 r, b! @
    52.         axlVisibleLayer("package geometry/soldermask_bottom" t)
      # J1 W2 J5 x3 r4 \4 O
    53.         ;;生效
      # U: f& m4 r% w  p
    54.         axlVisibleUpdate(nil)
      4 f# C9 Q  E( U; m
    55. ))
    复制代码
  • TA的每日心情
    慵懒
    2025-8-25 15:23
  • 签到天数: 85 天

    [LV.6]常住居民II

    17#
    发表于 2022-2-17 16:09 | 只看该作者
    切换层
    : Q% L7 D, b& O' T
    $ a8 O' J+ Z6 {; _, B
    1. ;;v1.2 添加注释: E( }! q4 A8 x* y1 o# V- C. A+ e& A
    2. ;;v1.1 整理结构* U% v/ X4 C  N+ @4 n2 W
    3. ;;v1.0 初稿
      ; P! }5 f0 h: u5 `! o7 v5 N' a
    4. axlCmdRegister("nextlayer" 'dbNextLayer)
      . }7 H8 c2 G# I  f8 b
    5. axlCmdRegister("lastlayer" 'dbLastLayer)  M. V: n6 C- c; Y; H
    6. ;;---------------------------------------------------------
      5 V* h$ b! ^; I! y" o* D
    7. ;;change_layer.il
      ' C5 {! @1 V! p' L- C& N4 L
    8. ;;指令:nextlayer 和 lastlayer0 q+ z# q4 _1 A( P
    9. ;;功能:从第一层开始,让所有的非地层轮流显示。0 b9 U; `" s0 n" |3 e! |
    10. ;;描述:v1.2% H/ g: ^7 g: `& |! u% s& P% h
    11. ;;  系统默认的+和-是用来轮循当前激活层(Active Class and Subclass),可以改成这个。
      * `8 e7 V7 \& F# R! W
    12. ;;  该命令不改变当前激活层,而是改变可见层。
      3 Q+ I  _% L. P1 S
    13. ;;  15.2未测试/ z! R* ~/ H; ?' D
    14. ;;---------------------------------------------------------- l) F% a2 x. t( Y$ S7 J3 k
    15. 4 d& Y9 O+ A! v1 }5 D; f
    16. temp_curLayer = nil        ;全局变量,
      + u2 ^+ N' r2 B( f* Q4 s
    17. 6 w; V2 `" B! z0 V7 {
    18. procedure(dbNextLayer()
      ; R! S0 _: }  k; }: [
    19. (let ()4 v$ \& u: }, J: ~# i
    20.         _dbSetLayerVisible("Next")
      # Q$ V5 m5 {& S5 V
    21. ))
      , u2 P& o  D, T7 J8 S6 s
    22. 3 ^7 ^3 o* Q/ x
    23. procedure(dbLastLayer()
      2 x6 _: `6 q; y3 h6 y. ]% n- r
    24. (let ()0 p% P( Q, Z8 g( \; H" f+ Y! m3 e) Y
    25.         _dbSetLayerVisible("Last")% `* H1 {9 j: R( j: L4 d  Y
    26. ))' f% m+ s# S+ p! q# @9 ^% S
    27. / B" W; h; L$ D' G6 Q8 d$ T* g& C
    28. ;;设置层显示' V/ \+ u9 R& a: D. }3 v
    29. procedure(_dbSetLayerVisible(direction)
      8 f2 @5 `# N- ?, h& J9 `
    30. (let (item allLayers itemClass)  y  J2 ~: u1 `, a0 j

    31. : ]1 \9 v  N. [0 T5 s4 j7 l, r
    32.         foreach(item axlSubclasses("etch")        ;获取etch class下的的所有subclass的字符串/ B8 q8 R  G8 s$ r3 Y
    33.                 unless(index(item "GND")        ;把字符串不含GND的层先收集起来
      % d0 I3 Z" m* t5 z' k! D+ G
    34.                         allLayers = cons(item allLayers)        ;收集* l6 B7 \5 x$ f6 g- ]
    35.                 )% S& o. Y' m% J6 C/ ?. |& g5 d
    36.         )
      $ v& L) w6 M4 ]  T  U& V
    37.         allLayers = reverse(allLayers)        ;因为cons是在list开头增加,所有颠倒一下
      ! e6 v* h' W5 f9 W" i* R; [4 C
    38. 4 {( ?( p$ [) @
    39.         when(allLayers
      / U: k7 Y! f0 Z: e  r  M
    40.                 temp_curLayer = _dbSearchLayer(allLayers direction)        ;获取下一个要显示的层2 Y- k( q* y! c5 o# j
    41.                 axlVisibleDesign(nil)        ;关闭所有层显示8 N, z0 f& S2 x0 @) c7 G
    42.                 foreach(itemClass '("pin" "via class" "drc error class" "etch")
      ; o" ~- e6 X. P- }8 x- v
    43.                         axlVisibleLayer(strcat(itemClass "/" temp_curLayer) t)        ;打开这些层
      6 N: }2 {" G) J/ p
    44.                 )
      8 c3 q# s5 A& x- N5 Z/ G
    45.                 axlVisibleUpdate(nil)        ;刷新层显示4 l, \" w6 K9 i# q4 R) |- S9 [
    46.         )  W& d3 n1 M4 F& q( g. a
    47. ))
      ' P1 Z& W" H* b5 `, f# @

    48. + h# V1 K+ G$ G4 H
    49. ;;寻找下一个要显示的层
      5 v  f: B4 L( r
    50. procedure(_dbSearchLayer(allLayers direction)2 X$ Z0 O9 t! I
    51. (let (curIndex nextIndex)/ U7 A* z! [, P3 B* ]  x4 y. h
    52.        
      ' y& h; P8 d5 v& k
    53.         if(temp_curLayer then
      - r& c0 b- k7 Q) z
    54.                 curIndex = lindex(allLayers temp_curLayer)        ;计算当前层在所有层中的序号% m- b% H% X' M3 W$ j
    55.                 if(direction == "Next" then                ;如果是NEXT,序号就+11 \- ?4 D: c- G+ X- c
    56.                         nextIndex = curIndex + 1$ ]1 Z9 _- S0 G+ S3 I. g
    57.                         when(nextIndex > length(allLayers)        ;当序号超出list的长度,自动恢复到list开头) q% j- Y; ]7 {6 f4 |! w
    58.                                 nextIndex = 1$ `" f% q, K+ q5 |7 I
    59.                         )
      7 s+ [! e) B! F% n4 X- b! _
    60.                 else! t- _) k) D$ X7 L
    61.                         nextIndex = curIndex - 1        ;如果是LAST,序号就-1
      / A- A. e& @8 N6 e; W# |5 A5 Q7 q
    62.                         when(nextIndex < 1
      5 K1 t9 z) o2 x9 a# B1 w. a: Y
    63.                                 nextIndex = length(allLayers)        ;当序号小于1,自动恢复到list尾8 u% ?2 H$ u0 E1 R1 d( h
    64.                         ). p0 |8 T- z" `0 N. h1 ?
    65.                 )% R+ s2 y- u1 H; o8 p% r
    66.                 temp_curLayer = nthelem(nextIndex allLayers)        ;根据序号,计算下一个层的层名
      7 e  F$ [% L5 n5 X5 H/ C
    67.         else
      * J5 `+ A' {' j
    68.                 temp_curLayer = car(allLayers)        ;如果第一次运行,就显示第一层# i8 \! [/ d$ X8 H* V* P
    69.         )8 y0 [8 v6 J/ r9 R0 k7 f8 o
    70.         temp_curLayer                ;运行的最后一行表示返回值。这一行写不写都行,if和else里面最后一行本来就返回temp_curLayer了。
      ( N1 ?; O7 z+ I& r
    71. ))
      1 a3 v" o/ E2 V" Y
    72. , E+ ]+ ?% Q$ p/ q+ P

    73. 3 N+ w; s# I1 S9 x* I( q; m
    74.        
    复制代码
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-9-13 15:47 , Processed in 0.125000 second(s), 19 queries , Gzip On.

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

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

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