TA的每日心情 | 慵懒 2025-8-25 15:23 |
---|
签到天数: 85 天 [LV.6]常住居民II
|
切换层+ k- O$ n% N% c
# {1 X6 K! y: I9 b, E- ;;v1.2 添加注释+ t7 l8 b# ~! U. N4 ?
- ;;v1.1 整理结构( K; n S5 B9 U& J2 Z
- ;;v1.0 初稿
0 O+ k: P% S/ k: w% w* w - axlCmdRegister("nextlayer" 'dbNextLayer)8 r0 [/ A* p% A( p7 q/ i; d f% D
- axlCmdRegister("lastlayer" 'dbLastLayer)* l* Q: Q) @, X. C8 i N$ F
- ;;---------------------------------------------------------* r" B7 t! I9 f% j( h3 E
- ;;change_layer.il
5 x5 ?2 S2 a m" \" t - ;;指令:nextlayer 和 lastlayer; D+ p; }' o7 C. m2 b' p5 H
- ;;功能:从第一层开始,让所有的非地层轮流显示。
+ _& l0 e4 c0 E+ x* N( r% P/ m9 l - ;;描述:v1.2
0 U# r Z1 b1 s# w r1 e% [9 t - ;; 系统默认的+和-是用来轮循当前激活层(Active Class and Subclass),可以改成这个。
( T" ?- l Q! y; Q/ t" F7 u - ;; 该命令不改变当前激活层,而是改变可见层。
7 s9 G. E! ~ `1 V - ;; 15.2未测试
. Z/ ]* G4 c7 [3 V) W( V - ;;---------------------------------------------------------2 D% T' y6 B2 x
- 3 o! B: V, f- y+ } B, ~
- temp_curLayer = nil ;全局变量,2 D0 z) f( l. n2 R: l
$ {9 `9 j1 l) f; s: B" N/ d. _3 v- procedure(dbNextLayer()
' J. l, ^$ _' H5 P( D - (let ()9 i$ q: E' A; \) Z/ X6 i2 V
- _dbSetLayerVisible("Next"). l. Y1 C2 E' ?
- ))' a* V$ ?6 _5 q9 T) g5 u9 L( D/ \6 I
/ C C- A" G; @! k: c- procedure(dbLastLayer()
" i' K: j! z( ~* o - (let (); @; i8 Z7 Q7 [* D4 g& u5 O4 Y/ c
- _dbSetLayerVisible("Last")/ y/ j: r9 X: n7 m- n1 ?4 B0 L
- ))* ]- r. d# T- ^) ? A
- ) c u' J2 q2 O
- ;;设置层显示
; _1 S% s! `- G# Z* v0 H& o - procedure(_dbSetLayerVisible(direction)
; J$ L# c* A, V' X - (let (item allLayers itemClass)
9 z: g# B4 T" F: G- B. D, M - * t. c9 l3 v- N# b; V1 Q A/ t
- foreach(item axlSubclasses("etch") ;获取etch class下的的所有subclass的字符串
1 A K+ b% T- Z8 o' N% F - unless(index(item "GND") ;把字符串不含GND的层先收集起来( k! |, F) Z$ u; Q) c. R8 T
- allLayers = cons(item allLayers) ;收集# U0 `; p( `% Q7 E* X& f
- )- i1 I; [8 K9 U! X O2 j$ O+ s
- )+ I7 }7 d p# @/ c: S8 E* l7 \8 u! Z
- allLayers = reverse(allLayers) ;因为cons是在list开头增加,所有颠倒一下2 A. n- ?) u) N3 \, N5 O
+ Z4 B; v( d( U8 r8 R5 i- when(allLayers
( E" K7 ?4 S$ T) d" q - temp_curLayer = _dbSearchLayer(allLayers direction) ;获取下一个要显示的层
/ Z8 r9 \8 @; d* K* P - axlVisibleDesign(nil) ;关闭所有层显示% ]$ m! @! C) Q. ?; h5 _
- foreach(itemClass '("pin" "via class" "drc error class" "etch")9 A8 H( c6 ?8 P! b/ b- ~" ]! {
- axlVisibleLayer(strcat(itemClass "/" temp_curLayer) t) ;打开这些层
* d; X1 P( B/ Y! a4 j( E - ) L/ L$ T W% D+ x4 i+ h
- axlVisibleUpdate(nil) ;刷新层显示4 m! z4 F1 H# r# j( L* P
- )$ S" |8 O+ u! }. `# v
- ))9 C G n u2 E/ w
- ; v7 q/ L: v, W0 X/ e7 \
- ;;寻找下一个要显示的层/ T# c) U) [, `; G5 T V2 T/ ~# U
- procedure(_dbSearchLayer(allLayers direction)# u$ d0 c4 q+ q6 _9 y! ^% I
- (let (curIndex nextIndex), \- [& e0 H0 O# q% n
-
- P* d3 B: F4 e. d0 w) D+ r* l - if(temp_curLayer then) u1 r0 R+ l/ l" i
- curIndex = lindex(allLayers temp_curLayer) ;计算当前层在所有层中的序号& r% n5 N4 o* Z3 F
- if(direction == "Next" then ;如果是NEXT,序号就+1& I8 O" ?4 r& ]2 `' z
- nextIndex = curIndex + 1; U* w. o5 s7 ~5 _
- when(nextIndex > length(allLayers) ;当序号超出list的长度,自动恢复到list开头& r) I+ {; ]6 K: w q! ?, |$ k
- nextIndex = 1
6 l/ R, u! V/ j3 A - )
- g: a: g% x& c# x; l - else8 t( C4 A" ?/ i: R9 A P) R* M$ l
- nextIndex = curIndex - 1 ;如果是LAST,序号就-1* Z( ~' r7 V: M: q. `
- when(nextIndex < 1* u; {( L2 m9 j% U; r, F( s
- nextIndex = length(allLayers) ;当序号小于1,自动恢复到list尾
( v" t# K4 S" u - )
% z. ~$ z8 h% u - )
0 B6 ?. M3 n% h0 P, }* H# ^& Z - temp_curLayer = nthelem(nextIndex allLayers) ;根据序号,计算下一个层的层名8 d2 P, G" F( A1 L1 h
- else \, D( f% `7 [* |
- temp_curLayer = car(allLayers) ;如果第一次运行,就显示第一层: l8 |4 }- s7 t+ _
- )
" e U- u1 h) _; D9 s! T4 C - temp_curLayer ;运行的最后一行表示返回值。这一行写不写都行,if和else里面最后一行本来就返回temp_curLayer了。# h' `6 Z9 y) W$ h
- ))$ u* E P K+ z. m0 L( s z
- . X' i. W& ^# a4 C1 ]( f
- t) l/ W+ c; Y) s p
-
复制代码 |
|