微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > PCB设计问答 > Genesis学习交流 > 把层排序 script

把层排序 script

时间:10-02 整理:3721RD 点击:

各位朋友大家好,我有个job里的层是,f,fc,fcc,fccc,但顺序是乱的,我要把他按照第1层f,第2层fc,....第4层fccc来排序,我写的程序如下:

DO_INFO -t step -e $JOB/$STEP
set i = 1
while ( $i <= $#gLAYERS_LIST )
 set a = "$gLAYERS_LIST[$i]"
 if ( $a == "f" ) then
  COM open_entity,job=$JOB,type=matrix,name=matrix,iconic=no
  COM matrix_move_row,job=$JOB,matrix=matrix,row=$i,ins_row=1
  COM matrix_refresh,job=$JOB,matrix=matrix
  COM matrix_page_close,job=$JOB,matrix=matrix
 endif

if ( $a == "fc" ) then
  COM open_entity,job=$JOB,type=matrix,name=matrix,iconic=no
  COM matrix_move_row,job=$JOB,matrix=matrix,row=$i,ins_row=2
  COM matrix_refresh,job=$JOB,matrix=matrix
  COM matrix_page_close,job=$JOB,matrix=matrix
 endif

if ( $a == "fcc" ) then
  COM open_entity,job=$JOB,type=matrix,name=matrix,iconic=no
  COM matrix_move_row,job=$JOB,matrix=matrix,row=$i,ins_row=3
  COM matrix_refresh,job=$JOB,matrix=matrix
  COM matrix_page_close,job=$JOB,matrix=matrix
 endif

if ( $a == "fccc" ) then
  COM open_entity,job=$JOB,type=matrix,name=matrix,iconic=no
  COM matrix_move_row,job=$JOB,matrix=matrix,row=$i,ins_row=4
  COM matrix_refresh,job=$JOB,matrix=matrix
  COM matrix_page_close,job=$JOB,matrix=matrix
 endif
@ i++
end

运行时,有时候是正确的,有时候是错误的,请问问题出在什么地方,哪位高手能指点一下啊,不胜感激!

没时间看你的程序了,我把我的排序和定义程序节选了一部分,你自己研究吧!

......

gui_out win 200 200
gui_out BG $black
gui_out FG $white
gui_out LABEL "Sort & Identify Script"
gui_out BG $blue
gui_out FG $black
gui_out "RADIO  mod ' ' H 1 $red"
gui_out 02_Layer
gui_out 04_Layer
gui_out 06_Layer
gui_out 08_Layer
gui_out END
gui_out "RADIO quit_flag Quit: H 1 $red"
gui_out No
gui_out Yes
gui_out END
gui_out CLABEL "< GO ON >" 
dogui
if ($quit_flag == 2) then
    exit 0
endif

set j=`echo "1" | bc`
switch ($mod)
case 1
 set slayername=("1d" "1p" "1s" "1m" "1a" "2a" "2m" "2s" "2p")
 set slayertype=("drill" "solder_paste" "silk_screen" "solder_mask" "signal" "signal" "solder_mask" "silk_screen" "solder_paste")
 set m=`echo "1" | bc`
 foreach n($slayername)
  DO_INFO -t matrix -e $JOB/matrix
  set i=`echo "1" | bc`
  while($i <= $gNUM_LAYERS)
   if ( $gROWname[$i] == $slayername[$m] ) then
    COM matrix_move_row,job=$JOB,matrix=matrix,row=$gROWrow[$i],ins_row=$j
    COM matrix_refresh,job=$JOB,matrix=matrix
    COM matrix_layer_context,job=$JOB,matrix=matrix,layer=$slayername[$m],context=board
    COM matrix_layer_type,job=$JOB,matrix=matrix,layer=$slayername[$m],type=$slayertype[$m]
    set j=`echo "$j + 1" | bc`
   endif
  set i=`echo "$i + 1" | bc` 
  end
 set m=`echo "$m + 1" | bc`
 end
breaksw

....

谢谢了啊

看不懂```

不用这么复杂.......

层的排序只要更改Genesis自带的程式就可以了,

它不但可以更改层的排序,且可以更改层的属性定性.

如有需要,可以来我的空间看看.

QQ:740834530

#  Genesis internal format
genesis * * * * * drl
-> drl board drill positive bottom 0
genesis * * * * * cmp
-> cmp board signal positive top 0
genesis * * * * * l[1-9]n
-> l[1-9]n board power_ground negative none \2
genesis * * * * * l[1-9]p
-> l[1-9]p board signal positive none \2
genesis * * * * * sld
-> sld board signal positive bottom 0
genesis * * * * * cre
-> cre board solder_mask positive top 0
genesis * * * * * sre
-> sre board solder_mask positive bottom 0
genesis * * * * * csi
-> csi board silk_screen positive top 0
genesis * * * * * ssi
-> ssi board silk_screen positive bottom 0

这是因为你的层顺序已经变更,但是你“$”后的变量未做更新造成的,你应在每个if后DO_INFO一次

要换个思路才好啊

dd

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top