PCB论坛网

 找回密码
 注册
查看: 3441|回复: 25

有学习脚本的朋友请进

[复制链接]
发表于 2007-5-20 10:19:00 | 显示全部楼层 |阅读模式

各位客户:

                    欢迎光临。会脚本,有脚本学习资料的朋友,帮帮兄弟门。老是把脚本当作RMB来交易太没有意思了,好东西大家一起分享,乐趣是最宝贵的。其他的兄弟意下如何。赞成的也不用鼓掌,不喜欢看的兄弟也不要砸鸡蛋。哈哈。

回复

使用道具 举报

发表于 2007-5-20 22:28:00 | 显示全部楼层

#File name : Copy layers
#Purpose: Copy layers from cad or net to cam,in order to compare cam to cad or net.
#Written by: wjw
#Date: 6/10/2005

source $GENESIS_DIR/sys/scripts/common.csh
DO_INFO -t matrix -e $JOB/matrix -d ROW
DO_INFO -t step -e $JOB/$STEP -d SR_LIMITS
DO_INFO -t step -e $JOB/$STEP -d PROF_LIMITS
DO_INFO -t step -e $JOB/$STEP -d SR


# Define correct temp. dir. depending on env. vars.
if ($?GENESIS_TMP) then
 set TMP = $GENESIS_TMP
else if ($?GENESIS_DIR) then
 set TMP = $GENESIS_DIR/tmp
else
 set TMP = /genesis/tmp
endif

# Set up gui data and response files
set GUI_DATA = $TMP/gui_data.$$
set GUI_RESP = $TMP/gui_resp.$$

# Set varible to use to point to drill size selection program and table (typically $GENESIS_DIR/sys/hooks).
set DTM_PATH = `echo "$GENESIS_DIR/sys/hooks"`

# Set control variable to select use of external drill table.
set NO_DRILL_TABLE = `echo "no"`
# Set control variable to select use of correct metric return.
set PROPER_METRIC = `echo "no"`

# Detect current operating system.
set CURR_OS = `uname -s`

# If current operating system is NT, set alias to call awk95 as "awk".
if ($CURR_OS == "WINDOWS_NT") then
 alias awk '$GENESIS_DIR/e${GENESIS_VER}/nt/bin/awk95'
endif


 
again:
 
set aquamarine = 409980
set pink = 997580
set tan = 827155
set gold = 998400
set light_blue = 688590
set grey = 757575
set yellow = 999900
set black = 000000
set white = 999999
#Define GUI window
 
again:
echo  WIN 300 200  >> $GUI_DATA
echo  FONT cbi18 >> $GUI_DATA
echo  FG $black  >> $GUI_DATA
echo  BG $white  >> $GUI_DATA
echo  FORM  >> $GUI_DATA
echo  LABEL "Copy or compare">> $GUI_DATA
echo  ENDFORM  >> $GUI_DATA
echo  BG 008800  >> $GUI_DATA
 

echo  FORM >> $GUI_DATA
echo RADIO radio Copy H 1 890000 >> $GUI_DATA
echo Compare cad >> $GUI_DATA
echo cad to cam >> $GUI_DATA
echo net to cam >> $GUI_DATA
echo Delete >> $GUI_DATA

echo Exit >> $GUI_DATA
echo END >> $GUI_DATA
echo ENDFORM >> $GUI_DATA
 
echo  BG 964650  >> $GUI_DATA
echo  CLABEL Softbridge Continue! >> $GUI_DATA
 
gui $GUI_DATA > $GUI_RESP
source $GUI_RESP; \rm $GUI_RESP; \rm $GUI_DATA


if ( $radio == 1 ) then
 ###限定在cad中运行
       if ($step == cad) then
       else
       PAUSE Error The current step is not CAD ,please run the scrip in CAD step!
       exit
       endif

   COM open_entity,job=$job,type=step,name=cad,iconic=no
   AUX set_group,group=$COMANS

set first_board_layer = 0
set second_layer = 0
set rout_layer = 0
set matrix_counter = 1
set current_layer = 0
set max_layer = 0
set max_layer = $#gROWcontext
         ###判断最高层
          while ( $matrix_counter <= $#gROWcontext )
            if ( $gROWname[$matrix_counter] == "rout" ) then
            set rout_layer = $matrix_counter
             @ rout_layer--
            endif
            if ( $gROWname[$matrix_counter] == "" ) then
            set max_layer = $matrix_counter
             @ max_layer--
            goto next
            endif
          @ matrix_counter++
          end
next:
##判断第一层
set matrix_counter = 0
while ( $matrix_counter <= $#gROWcontext )
      if ($gROWcontext[$matrix_counter] == "board") then
      set first_board_layer = $matrix_counter
      if ($first_board_layer > 2 ) then
      goto continue
      else
      PAUSE Error Please reading the origin file in cad step!
      exit
      endif
      endif
   @ matrix_counter++
end

continue:

#将非board属性的层排到最后

set matrix_counter = $first_board_layer
while ( $matrix_counter <= $rout_layer )
      if ($gROWcontext[$matrix_counter] == "misc") then
         COM display_layer,name=$gROWname[$matrix_counter],display=yes,number=1
         COM work_layer,name=$gROWname[$matrix_counter]
      COM sel_move_other,target_layer=$gROWname[$matrix_counter]_tmp,invert=no,dx=0,dy=0,size=0
      COM delete_layer,layer=$gROWname[$matrix_counter]
      COM rename_layer,name=$gROWname[$matrix_counter]_tmp,new_name=$gROWname[$matrix_counter]
      endif
   @ matrix_counter++
end

next2:
set matrix_counter = 1
while ( $matrix_counter <= $first_board_layer )
set second_layer = `echo "scale=0;$matrix_counter + $first_board_layer - 1 "|bc`
if ($second_layer > $max_layer ) then
      PAUSE Error Please delete the additional layer ,then compare again!
      exit
endif
   @ matrix_counter++
end

###层比较
     
set matrix_counter = 1
while ( $matrix_counter < $first_board_layer )
         set second_layer = `echo "scale=0;$matrix_counter + $first_board_layer - 1 "|bc`
         COM display_layer,name=$gROWname[$second_layer],display=yes,number=1
         COM work_layer,name=$gROWname[$second_layer]
COM filter_area_strt
COM filter_area_end,layer=,filter_name=popup,operation=select,area_type=none,inside_area=no,intersect_area=no,lines_only=no,ovals_only=no,min_len=0,max_len=0,min_angle=0,max_angle=0
COM filter_reset,filter_name=popup
  COM get_select_count
  if ($COMANS == 0) then
              goto next1
              else
              COM clear_highlight
              COM sel_clear_feat
              COM compare_layers,layer1=$gROWname[$matrix_counter],job2=$job,step2=cad,layer2=$gROWname[$second_layer],layer2_ext=,tol=0.5,area=global,ignore_attr=,map_layer=$gROWname[$second_layer]_diff,map_layer_res=200
              COM display_layer,name=$gROWname[$second_layer]_diff,display=yes,number=1
              COM work_layer,name=$gROWname[$second_layer]_diff
              COM filter_set,filter_name=popup,update_popup=no,include_syms=r0
              COM filter_area_strt
              COM filter_area_end,layer=,filter_name=popup,operation=select,area_type=none,inside_area=no,intersect_area=no,lines_only=no,ovals_only=no,min_len=0,max_len=0,min_angle=0,max_angle=0
              COM filter_reset,filter_name=popup
              COM get_select_count
  if ($COMANS == 0) then
              COM delete_layer,layer=$gROWname[$second_layer]_diff
                        endif
              COM clear_highlight
              COM sel_clear_feat
              endif
next1:
   @ matrix_counter++
end

endif

if ( $radio == 2 ) then
          
if ($step == cam) then
       else
PAUSE Error The current step is not CAM ,please run the scrip in CAM step!
exit
endif

set matrix_counter = 0
 
while ( $matrix_counter <= $#gROWcontext )
       if ( ( $gROWlayer_type[$matrix_counter] == "signal" || $gROWlayer_type[$matrix_counter] == "silk_screen" || $gROWlayer_type[$matrix_counter] == "solder_mask" || $gROWlayer_type[$matrix_counter] == "drill" || $gROWlayer_type[$matrix_counter] == "power_ground" ) && $gROWcontext[$matrix_counter] == "board" && $gROWname[$matrix_counter] != cs1 && $gROWname[$matrix_counter] != ss1  ) then
           COM copy_layer,source_job=$JOB,source_step=cad,source_layer=$gROWname[$matrix_counter],dest=layer_name,dest_layer=$gROWname[$matrix_counter]_cad,mode=replace,invert=no
       endif

   @ matrix_counter++
end


endif
if ( $radio == 3 ) then
if ($step == cam) then
       else
PAUSE Error The current step is not CAM ,please run the scrip in CAM step!
exit
endif

set matrix_counter = 0
 
while ( $matrix_counter <= $#gROWcontext )
       if ( ( $gROWlayer_type[$matrix_counter] == "signal" || $gROWlayer_type[$matrix_counter] == "silk_screen" || $gROWlayer_type[$matrix_counter] == "solder_mask" || $gROWlayer_type[$matrix_counter] == "drill" || $gROWlayer_type[$matrix_counter] == "power_ground" ) && $gROWcontext[$matrix_counter] == "board" && $gROWname[$matrix_counter] != cs1 && $gROWname[$matrix_counter] != ss1  ) then
           COM copy_layer,source_job=$JOB,source_step=net,source_layer=$gROWname[$matrix_counter],dest=layer_name,dest_layer=$gROWname[$matrix_counter]_net,mode=replace,invert=no
       endif

   @ matrix_counter++
end
endif
if ( $radio == 4 ) then
DO_INFO -t matrix -e $JOB/matrix
foreach LAYER ($gROWname)
 set TST = `echo "$LAYER" | grep -c _cad`
 if ($TST != 0) then
  COM delete_layer,layer=$LAYER
 endif
end

DO_INFO -t matrix -e $JOB/matrix
foreach LAYER ($gROWname)
 set TST = `echo "$LAYER" | grep -c _net`
 if ($TST != 0) then
  COM delete_layer,layer=$LAYER
 endif
end

DO_INFO -t matrix -e $JOB/matrix
foreach LAYER ($gROWname)
 set TST = `echo "$LAYER" | grep -c _diff`
 if ($TST != 0) then
  COM delete_layer,layer=$LAYER
 endif
end

endif

if ( $radio == 5 ) then

exit
endif


回复 支持 反对

使用道具 举报

发表于 2007-5-21 11:43:00 | 显示全部楼层

是的,我同意你的说话!

回复 支持 反对

使用道具 举报

发表于 2007-5-25 11:55:00 | 显示全部楼层
同意,请问想学的话该从何下手
回复 支持 反对

使用道具 举报

发表于 2007-6-30 21:30:00 | 显示全部楼层
dddddd.我顶!
回复 支持 反对

使用道具 举报

发表于 2007-7-1 14:03:00 | 显示全部楼层

我也同意思,可这年代,能有几个会这样想呢?人都是很现实,都是在为了钱而活着。哎:悲哀!

回复 支持 反对

使用道具 举报

发表于 2007-7-1 22:36:00 | 显示全部楼层

cs_cs   你的QQ多少是

  有时间跟你学习学习

回复 支持 反对

使用道具 举报

发表于 2007-7-2 09:26:00 | 显示全部楼层
我真的费了很多力气来学这个,可是,不知道从什么地方入手,麻烦大的很
回复 支持 反对

使用道具 举报

发表于 2007-7-6 20:02:00 | 显示全部楼层
要从哪个地方开始入手学啊.
回复 支持 反对

使用道具 举报

发表于 2007-7-15 09:43:00 | 显示全部楼层

说的好啊

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|手机版|PCB设计论坛|EDA论坛|PCB论坛网 ( 沪ICP备05006956号-1 )

GMT+8, 2024-9-27 15:21 , Processed in 0.138665 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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