#!/usr/local/ActiveTcl/bin/wish # the next line restarts using wish\ exec wish "$0" "$@" if {![info exists vTcl(sourcing)]} { # Provoke name search catch {package require bogus-package-name} set packageNames [package names] package require BWidget switch $tcl_platform(platform) { windows { } default { option add *ScrolledWindow.size 14 } } package require Tk switch $tcl_platform(platform) { windows { option add *Button.padY 0 } default { option add *Scrollbar.width 10 option add *Scrollbar.highlightThickness 0 option add *Scrollbar.elementBorderWidth 2 option add *Scrollbar.borderWidth 2 } } # Needs Itcl package require Itcl # Needs Itk package require Itk # Needs Iwidgets package require Iwidgets switch $tcl_platform(platform) { windows { option add *Pushbutton.padY 0 } default { option add *Scrolledhtml.sbWidth 10 option add *Scrolledtext.sbWidth 10 option add *Scrolledlistbox.sbWidth 10 option add *Scrolledframe.sbWidth 10 option add *Hierarchy.sbWidth 10 option add *Pushbutton.padY 2 } } } ############################################################################# # Visual Tcl v1.60 Project # ################################# # VTCL LIBRARY PROCEDURES # if {![info exists vTcl(sourcing)]} { ############################################################################# ## Library Procedure: Window proc ::Window {args} { ## This procedure may be used free of restrictions. ## Exception added by Christian Gavin on 08/08/02. ## Other packages and widget toolkits have different licensing requirements. ## Please read their license agreements for details. global vTcl foreach {cmd name newname} [lrange $args 0 2] {} set rest [lrange $args 3 end] if {$name == "" || $cmd == ""} { return } if {$newname == ""} { set newname $name } if {$name == "."} { wm withdraw $name; return } set exists [winfo exists $newname] switch $cmd { show { if {$exists} { wm deiconify $newname } elseif {[info procs vTclWindow$name] != ""} { eval "vTclWindow$name $newname $rest" } if {[winfo exists $newname] && [wm state $newname] == "normal"} { vTcl:FireEvent $newname <> } } hide { if {$exists} { wm withdraw $newname vTcl:FireEvent $newname <> return} } iconify { if $exists {wm iconify $newname; return} } destroy { if $exists {destroy $newname; return} } } } ############################################################################# ## Library Procedure: vTcl:DefineAlias proc ::vTcl:DefineAlias {target alias widgetProc top_or_alias cmdalias} { ## This procedure may be used free of restrictions. ## Exception added by Christian Gavin on 08/08/02. ## Other packages and widget toolkits have different licensing requirements. ## Please read their license agreements for details. global widget set widget($alias) $target set widget(rev,$target) $alias if {$cmdalias} { interp alias {} $alias {} $widgetProc $target } if {$top_or_alias != ""} { set widget($top_or_alias,$alias) $target if {$cmdalias} { interp alias {} $top_or_alias.$alias {} $widgetProc $target } } } ############################################################################# ## Library Procedure: vTcl:DoCmdOption proc ::vTcl:DoCmdOption {target cmd} { ## This procedure may be used free of restrictions. ## Exception added by Christian Gavin on 08/08/02. ## Other packages and widget toolkits have different licensing requirements. ## Please read their license agreements for details. ## menus are considered toplevel windows set parent $target while {[winfo class $parent] == "Menu"} { set parent [winfo parent $parent] } regsub -all {\%widget} $cmd $target cmd regsub -all {\%top} $cmd [winfo toplevel $parent] cmd uplevel #0 [list eval $cmd] } ############################################################################# ## Library Procedure: vTcl:FireEvent proc ::vTcl:FireEvent {target event {params {}}} { ## This procedure may be used free of restrictions. ## Exception added by Christian Gavin on 08/08/02. ## Other packages and widget toolkits have different licensing requirements. ## Please read their license agreements for details. ## The window may have disappeared if {![winfo exists $target]} return ## Process each binding tag, looking for the event foreach bindtag [bindtags $target] { set tag_events [bind $bindtag] set stop_processing 0 foreach tag_event $tag_events { if {$tag_event == $event} { set bind_code [bind $bindtag $tag_event] foreach rep "\{%W $target\} $params" { regsub -all [lindex $rep 0] $bind_code [lindex $rep 1] bind_code } set result [catch {uplevel #0 $bind_code} errortext] if {$result == 3} { ## break exception, stop processing set stop_processing 1 } elseif {$result != 0} { bgerror $errortext } break } } if {$stop_processing} {break} } } ############################################################################# ## Library Procedure: vTcl:Toplevel:WidgetProc proc ::vTcl:Toplevel:WidgetProc {w args} { ## This procedure may be used free of restrictions. ## Exception added by Christian Gavin on 08/08/02. ## Other packages and widget toolkits have different licensing requirements. ## Please read their license agreements for details. if {[llength $args] == 0} { ## If no arguments, returns the path the alias points to return $w } set command [lindex $args 0] set args [lrange $args 1 end] switch -- [string tolower $command] { "setvar" { foreach {varname value} $args {} if {$value == ""} { return [set ::${w}::${varname}] } else { return [set ::${w}::${varname} $value] } } "hide" - "show" { Window [string tolower $command] $w } "showmodal" { ## modal dialog ends when window is destroyed Window show $w; raise $w grab $w; tkwait window $w; grab release $w } "startmodal" { ## ends when endmodal called Window show $w; raise $w set ::${w}::_modal 1 grab $w; tkwait variable ::${w}::_modal; grab release $w } "endmodal" { ## ends modal dialog started with startmodal, argument is var name set ::${w}::_modal 0 Window hide $w } default { uplevel $w $command $args } } } ############################################################################# ## Library Procedure: vTcl:WidgetProc proc ::vTcl:WidgetProc {w args} { ## This procedure may be used free of restrictions. ## Exception added by Christian Gavin on 08/08/02. ## Other packages and widget toolkits have different licensing requirements. ## Please read their license agreements for details. if {[llength $args] == 0} { ## If no arguments, returns the path the alias points to return $w } set command [lindex $args 0] set args [lrange $args 1 end] uplevel $w $command $args } ############################################################################# ## Library Procedure: vTcl:toplevel proc ::vTcl:toplevel {args} { ## This procedure may be used free of restrictions. ## Exception added by Christian Gavin on 08/08/02. ## Other packages and widget toolkits have different licensing requirements. ## Please read their license agreements for details. uplevel #0 eval toplevel $args set target [lindex $args 0] namespace eval ::$target {set _modal 0} } } if {[info exists vTcl(sourcing)]} { proc vTcl:project:info {} { set base .nano_pnl namespace eval ::widgets::$base { set set,origin 1 set set,size 1 set runvisible 1 } set site_4_0 [$base.not74 getframe page3] set site_4_0 $site_4_0 set site_4_1 [$base.not74 getframe page1] set site_4_0 $site_4_1 set site_4_2 [$base.not74 getframe page4] set site_4_0 $site_4_2 set site_4_3 [$base.not74 getframe page2] set site_4_0 $site_4_3 set base .odb_steps namespace eval ::widgets::$base { set set,origin 1 set set,size 1 set runvisible 0 } namespace eval ::widgets_bindings { set tagslist _TopLevel } namespace eval ::vTcl::modules::main { set procs { init main pcs_info apply_attr set_pnl_type nano_pth nano_sbl nano_mbl nano_stg vent_dot vent_brick dot_line in_dot_line cornor_rectangle trim_line trim_sbl tg_guide bonding_guide vent_out add_rectangle laser_drl_break trim_pth trim_stg nano_stk auto_old auto_guide nano_auto nano_auto_old_b0 nano_auto_old_b1 nano_auto_old_b2 resize_guide_drill trim_text cleanup_map outer_layers_trim nano_m_tg nano_m_tg_b0 nano_m_tg_b1 nano_m_tg_b2 nano_g_tg nano_g_tg_b0 nano_g_tg_b1 nano_g_tg_b2 cal_distance } set compounds { } set projectType single } } } ################################# # USER DEFINED PROCEDURES # ############################################################################# ## Procedure: main proc ::main {argc argv} { global widget env nano_script package require math::bignum package require math::bigfloat DO_INFO -t matrix -e $env(JOB)/matrix -d COL set nano_script(steps_list) "" foreach step_name $gCOLstep_name { lappend nano_script(steps_list) $step_name } set nano_script(pnl_step) $env(STEP) set nano_script(pcs_size_x) "0" set nano_script(pcs_size_y) "0" set nano_script(pnl_size_x) "-" set nano_script(pnl_size_y) "-" set nano_script(step_num_x) "0" set nano_script(step_num_y) "0" set nano_script(step_margin_x) "0" set nano_script(step_margin_y) "0" set nano_script(in_scale_x) "100.000" set nano_script(in_scale_y) "100.000" set nano_script(in_tg_x) "0" set nano_script(in_tg_y) "0" set nano_script(b1_tg_x) "0" set nano_script(b1_tg_y) "0" set nano_script(b2_tg_x) "0" set nano_script(b2_tg_y) "0" set nano_script(b3_tg_x) "0" set nano_script(b3_tg_y) "0" set nano_script(trim1_x) "2.0" set nano_script(trim1_y) "2.0" set nano_script(trim2_x) "2.0" set nano_script(trim2_y) "2.0" set nano_script(trim3_x) "2.0" set nano_script(trim3_y) "2.0" set nano_script(trim4_x) "2.0" set nano_script(trim4_y) "2.0" set nano_script(rcc_trim1_x) "0.0" set nano_script(rcc_trim1_y) "0.0" set nano_script(rcc_trim2_x) "0.0" set nano_script(rcc_trim2_y) "0.0" set nano_script(user) "user" set nano_script(model_name) "model name" set nano_script(customer) "customer code" set nano_script(spec_no) "spec no." set nano_script(film_no) "film no." set nano_script(surface) "2" .nano_pnl.cpd91 disable 0 pcs_info set_pnl_type wm attributes .nano_pnl -topmost 1 } ############################################################################# ## Procedure: pcs_info proc ::pcs_info {} { global widget env nano_script COMANS COM get_user_name set nano_script(user) $COMANS DO_INFO -t step -e $env(JOB)/$nano_script(pnl_step),units=mm set nano_script(pnl_min_x) $gPROF_LIMITSxmin set nano_script(pnl_max_x) $gPROF_LIMITSxmax set nano_script(pnl_min_y) $gPROF_LIMITSymin set nano_script(pnl_max_y) $gPROF_LIMITSymax set nano_script(pnl_size_x) [format %.1f [expr $nano_script(pnl_max_x) - $nano_script(pnl_min_x)]] set nano_script(pnl_center_x) [format %.6f [expr $nano_script(pnl_max_x) - ($nano_script(pnl_size_x) / 2.0000)]] set nano_script(pnl_size_y) [format %.1f [expr $nano_script(pnl_max_y) - $nano_script(pnl_min_y)]] set nano_script(pnl_center_y) [format %.6f [expr $nano_script(pnl_max_y) - ($nano_script(pnl_size_y) / 2.0000)]] set nano_script(trim1_x) [format %.1f [expr $nano_script(pnl_size_x) - 6.00]] set nano_script(trim1_y) [format %.1f [expr $nano_script(pnl_size_y) - 6.00]] set nano_script(trim2_x) [format %.1f [expr 0.0]] set nano_script(trim2_y) [format %.1f [expr 0.0]] set nano_script(trim3_x) [format %.1f [expr 0.0]] set nano_script(trim3_y) [format %.1f [expr 0.0]] set nano_script(trim4_x) [format %.1f [expr 0.0]] set nano_script(trim4_y) [format %.1f [expr 0.0]] set nano_script(in_tg_x) "110.000" set nano_script(in_tg_y) [format %.3f [expr $nano_script(pnl_size_y) - 10.00]] set nano_script(b1_tg_x) "100.000" set nano_script(b1_tg_y) [format %.3f [expr $nano_script(pnl_size_y) - 25.00]] set nano_script(b2_tg_x) "90.000" set nano_script(b2_tg_y) [format %.3f [expr $nano_script(pnl_size_y) - 40.00]] set nano_script(b3_tg_x) "80.000" set nano_script(b3_tg_y) [format %.3f [expr $nano_script(pnl_size_y) - 55.00]] set nano_script(num_sr) [lindex $gNUM_SR 0] set nano_script(num_repeats) [lindex $gNUM_REPEATS 0] set nano_script(pcb_area_min_x) [format %.2f $gSR_LIMITSxmin] set nano_script(pcb_area_min_y) [format %.2f $gSR_LIMITSymin] set nano_script(pcb_area_max_x) [format %.2f $gSR_LIMITSxmax] set nano_script(pcb_area_max_y) [format %.2f $gSR_LIMITSymax] if {$nano_script(num_sr) > 0} { set nano_script(pcs_step) [lindex $gSRstep 0] set nano_script(SRxa) [format %.2f [lindex $gSRxa 0]] set nano_script(SRya) [format %.2f [lindex $gSRya 0]] set nano_script(SRdx) [format %.2f [lindex $gSRdx 0]] set nano_script(SRdy) [format %.2f [lindex $gSRdy 0]] set nano_script(SRnx) [lindex $gSRnx 0] set nano_script(SRny) [lindex $gSRny 0] set nano_script(SRangle) [lindex $gSRangle 0] set nano_script(SRmirror) [lindex $gSRmirror 0] DO_INFO -t step -e $env(JOB)/$nano_script(pcs_step) -d PROF_LIMITS,units=mm set nano_script(pcs_min_x) $gPROF_LIMITSxmin set nano_script(pcs_max_x) $gPROF_LIMITSxmax set nano_script(pcs_min_y) $gPROF_LIMITSymin set nano_script(pcs_max_y) $gPROF_LIMITSymax set nano_script(pcs_size_x) [format %.2f [expr $nano_script(pcs_max_x) - $nano_script(pcs_min_x)]] set nano_script(pcs_center_x) [format %.6f [expr $nano_script(pcs_max_x) - ($nano_script(pcs_size_x) / 2.0000)]] set nano_script(pcs_size_y) [format %.2f [expr $nano_script(pcs_max_y) - $nano_script(pcs_min_y)]] set nano_script(pcs_center_y) [format %.6f [expr $nano_script(pcs_max_y) - ($nano_script(pcs_size_y) / 2.0000)]] if {$nano_script(SRangle) == "90" || $nano_script(SRangle) == "270"} { set nano_script(step_margin_x) [format %.2f [expr $nano_script(SRdx) - $nano_script(pcs_size_y)]] set nano_script(step_margin_y) [format %.2f [expr $nano_script(SRdy) - $nano_script(pcs_size_x)]] } if {$nano_script(SRangle) == "0" || $nano_script(SRangle) == "180"} { set nano_script(step_margin_x) [format %.2f [expr $nano_script(SRdx) - $nano_script(pcs_size_x)]] set nano_script(step_margin_y) [format %.2f [expr $nano_script(SRdy) - $nano_script(pcs_size_y)]] } } DO_INFO -t step -e $env(JOB)/$nano_script(pnl_step) -d ATTR set I 0 foreach attr $gATTRname { if {$attr eq "model_name"} { if {[lindex $gATTRval $I] != ""} { set nano_script(model_name) [lindex $gATTRval $I] } } if {$attr eq "cust_code"} { if {[lindex $gATTRval $I] != ""} { set nano_script(customer) [lindex $gATTRval $I] } } if {$attr eq "spec_no"} { if {[lindex $gATTRval $I] != ""} { set nano_script(spec_no) [lindex $gATTRval $I] } } if {$attr eq "film_no"} { if {[lindex $gATTRval $I] != ""} { set nano_script(film_no) [lindex $gATTRval $I] } } incr I } set nano_script(work_date) [clock format [clock seconds] -format {%Y.%m.%d}] DO_INFO -t matrix -e $env(JOB)/matrix set LCT 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $LCT] == "board"} { if {[regexp {^l[0-9]t} $LAYER]} { DO_INFO -t layer -e $env(JOB)/$nano_script(pnl_step)/$LAYER -d ATTR set CT 0 foreach SCALE $gATTRname { if {[lindex $gATTRname $CT] == ".out_x_scale"} { set nano_script(in_scale_x) [format %.3f [expr [lindex $gATTRval $CT] * 100.000]] } if {[lindex $gATTRname $CT] == ".out_y_scale"} { set nano_script(in_scale_y) [format %.3f [expr [lindex $gATTRval $CT] * 100.000]] } incr CT } } } incr LCT } } ############################################################################# ## Procedure: apply_attr proc ::apply_attr {} { global widget env nano_script set nano_script(panel_wiz) "nano_" append nano_script(panel_wiz) [string tolower $nano_script(pnl_type)] ########################################################### #model info ############################################### ########################################################### COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=model_name,value=$nano_script(model_name),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=film_no,value=$nano_script(film_no),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=spec_no,value=$nano_script(spec_no),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=work_date,value=$nano_script(work_date),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=cust_code,value=$nano_script(customer),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=buried_drl,value=$nano_script(buried_no),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=board_type,value=$nano_script(pnl_type),units=mm set nano_script(pnl_text1) "\[" append nano_script(pnl_text1) $nano_script(customer) "\]" " \(" $nano_script(model_name) "\)" $nano_script(spec_no) set nano_script(pnl_text2) " " append nano_script(pnl_text2) $nano_script(work_date) " NANO " $nano_script(user) " " "\[" $nano_script(film_no) "\]" COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=pnl_text1,value=$nano_script(pnl_text1),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=pnl_text2,value=$nano_script(pnl_text2),units=mm ########################################################### #Layer Name / Mirror / Polarity / Scale ################### ########################################################### set I 0 DO_INFO -t matrix -e $env(JOB)/matrix if {$nano_script(num_layers) > 2} { set nano_script(in_scale_x) [format %.3f $nano_script(in_scale_x)] set nano_script(in_scale_y) [format %.3f $nano_script(in_scale_y)] set nano_script(attr_scale_x) [format %.6f [expr $nano_script(in_scale_x) / 100.00]] set nano_script(attr_scale_y) [format %.6f [expr $nano_script(in_scale_y) / 100.00]] } set LAY_NO 1 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { set nano_script(scale_text_x) "X\=100.00" set nano_script(scale_text_y) "Y\=100.00" set nano_script(layer_scale_text) $nano_script(scale_text_x) append nano_script(layer_scale_text) " " $nano_script(scale_text_y) " " $nano_script(work_date) " " $nano_script(user) COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=sc_text_x,value=$nano_script(scale_text_x),units=mm COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=sc_text_y,value=$nano_script(scale_text_y),units=mm COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=lyr_sc_text,value=$nano_script(layer_scale_text),units=mm if {$LAYER == "cslk" } { set layer_name "COMP SILK" COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=layer_name,value=$layer_name,units=mm } if {$LAYER == "csm" } { set layer_name "COMP MASK" COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.out_mirror,value=yes,units=mm COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=layer_name,value=$layer_name,units=mm } if {[lindex $gROWlayer_type $I] == "signal" || [lindex $gROWlayer_type $I] == "mixed" || [lindex $gROWlayer_type $I] == "power_ground" } { set IN_LAY "" append IN_LAY LAYER " " $LAY_NO COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.out_polarity,value=negative,units=mm COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=layer_name,value=$IN_LAY,units=mm if {$LAYER == "cs" } { set layer_name "COMP SIDE" COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=layer_name,value=$layer_name,units=mm COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.out_mirror,value=yes,units=mm } if {$LAYER == "ss" } { set layer_name "SOLD SIDE" COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=layer_name,value=$layer_name,units=mm } if {[regexp {l[0-9]*t} $LAYER]} { set nano_script(scale_text_x) "X\=" append nano_script(scale_text_x) "100.00" "\%" set nano_script(scale_text_y) "Y\=" append nano_script(scale_text_y) "100.00" "\%" COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.out_mirror,value=yes,units=mm COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=sc_text_x,value=$nano_script(scale_text_x),units=mm COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=sc_text_y,value=$nano_script(scale_text_y),units=mm } if {[regexp {l[0-9]*b} $LAYER]} { set nano_script(scale_text_x) "X\=" append nano_script(scale_text_x) "100.00" "\%" set nano_script(scale_text_y) "Y\=" append nano_script(scale_text_y) "100.00" "\%" COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.out_mirror,value=no,units=mm COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=sc_text_x,value=$nano_script(scale_text_x),units=mm COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=sc_text_y,value=$nano_script(scale_text_y),units=mm } if {[regexp {l[0-9]*t$} $LAYER]} { set nano_script(scale_text_x) "X\=" append nano_script(scale_text_x) $nano_script(in_scale_x) "\%" set nano_script(scale_text_y) "Y\=" append nano_script(scale_text_y) $nano_script(in_scale_y) "\%" set nano_script(tg_dist_text) "TG " append nano_script(tg_dist_text) [format %.4f $nano_script(in_tg_y)] COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.out_x_scale,value=$nano_script(attr_scale_x),units=mm COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.out_y_scale,value=$nano_script(attr_scale_y),units=mm COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=sc_text_x,value=$nano_script(scale_text_x),units=mm COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=sc_text_y,value=$nano_script(scale_text_y),units=mm COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.out_mirror,value=yes,units=mm COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=tg_dist_text,value=$nano_script(tg_dist_text),units=mm } if {[regexp {l[0-9]*b$} $LAYER]} { set nano_script(scale_text_x) "X\=" append nano_script(scale_text_x) $nano_script(in_scale_x) "\%" set nano_script(scale_text_y) "Y\=" append nano_script(scale_text_y) $nano_script(in_scale_y) "\%" set nano_script(tg_dist_text) "TG " append nano_script(tg_dist_text) [format %.4f $nano_script(in_tg_y)] set nano_script(layer_scale_text) COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.out_x_scale,value=$nano_script(attr_scale_x),units=mm COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.out_y_scale,value=$nano_script(attr_scale_y),units=mm COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=sc_text_x,value=$nano_script(scale_text_x),units=mm COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=sc_text_y,value=$nano_script(scale_text_y),units=mm COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.out_mirror,value=no,units=mm COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=tg_dist_text,value=$nano_script(tg_dist_text),units=mm } if {[regexp {l[0-9]*t1$} $LAYER] || [regexp {l[0-9]*b1$} $LAYER]} { set nano_script(tg_dist_text) "TG " append nano_script(tg_dist_text) [format %.4f $nano_script(b1_tg_y)] COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=tg_dist_text,value=$nano_script(tg_dist_text),units=mm } if {[regexp {l[0-9]*t2$} $LAYER] || [regexp {l[0-9]*b2$} $LAYER]} { set nano_script(tg_dist_text) "TG " append nano_script(tg_dist_text) [format %.4f $nano_script(b2_tg_y)] COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=tg_dist_text,value=$nano_script(tg_dist_text),units=mm } if {[regexp {l[0-9]*t3$} $LAYER] || [regexp {l[0-9]*b3$} $LAYER]} { set nano_script(tg_dist_text) "TG " append nano_script(tg_dist_text) [format %.4f $nano_script(b3_tg_y)] COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=tg_dist_text,value=$nano_script(tg_dist_text),units=mm } incr LAY_NO } if {$LAYER == "ssm" } { set layer_name "SOLD MASK" COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=layer_name,value=$layer_name,units=mm } if {$LAYER == "sslk" } { set layer_name "SOLD SILK" COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.out_mirror,value=yes,units=mm COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=layer_name,value=$layer_name,units=mm } if {[string match -nocase *dd $LAYER]== 1 } { set layer_name "POINT" COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=layer_name,value=$layer_name,units=mm } if {[string match -nocase *drl $LAYER] == 1 } { regsub -all {drl} $LAYER {DRILL} layer_name COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=layer_name,value=$layer_name,units=mm } if {[string match -nocase *win $LAYER] == 1 } { regsub -all {win} $LAYER {WINDOW} layer_name COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=layer_name,value=$layer_name,units=mm } if {$LAYER == $nano_script(out_drl_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=outer_drl } if {$LAYER == $nano_script(out_lyr_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=outline } if {$LAYER == $nano_script(out_map_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=outer_map } if {$nano_script(pnl_type) != "PTH"} { if {$LAYER == $nano_script(b1_drl_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=b1_drl } if {$LAYER == $nano_script(b2_drl_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=b2_drl } if {$LAYER == $nano_script(b3_drl_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=b3_drl } if {$LAYER == $nano_script(b4_drl_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=b4_drl } if {$LAYER == $nano_script(b1_map_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=b1_map } if {$LAYER == $nano_script(b2_map_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=b2_map } if {$LAYER == $nano_script(b3_map_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=b3_map } if {$LAYER == $nano_script(b4_map_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=b4_map } } } incr I } ########################################################### #Trim / TG Dist ################### ########################################################### set nano_script(trim1_text) $nano_script(trim1_x) append nano_script(trim1_text) " X " $nano_script(trim1_y) set nano_script(trim2_text) $nano_script(trim2_x) append nano_script(trim2_text) " X " $nano_script(trim2_y) set nano_script(trim3_text) $nano_script(trim3_x) append nano_script(trim3_text) " X " $nano_script(trim3_y) set nano_script(trim4_text) $nano_script(trim4_x) append nano_script(trim4_text) " X " $nano_script(trim4_y) set nano_script(rcc_trim1_text) $nano_script(rcc_trim1_x) append nano_script(rcc_trim1_text) " X " $nano_script(rcc_trim1_y) set nano_script(rcc_trim2_text) $nano_script(rcc_trim2_x) append nano_script(rcc_trim2_text) " X " $nano_script(rcc_trim2_y) set nano_script(final_trim_x) $nano_script(trim1_x) set nano_script(final_trim_y) $nano_script(trim1_y) if {$nano_script(buried_no) < 1} { set nano_script(final_trim_x) $nano_script(trim1_x) set nano_script(final_trim_y) $nano_script(trim1_y) } if {$nano_script(buried_no) == 1} { set nano_script(final_trim_x) $nano_script(trim2_x) set nano_script(final_trim_y) $nano_script(trim2_y) } if {$nano_script(buried_no) == 2} { set nano_script(final_trim_x) $nano_script(trim3_x) set nano_script(final_trim_y) $nano_script(trim3_y) } if {$nano_script(buried_no) == 3} { set nano_script(final_trim_x) $nano_script(trim4_x) set nano_script(final_trim_y) $nano_script(trim4_y) } if {$nano_script(rcc_trim1_x) > 0 || $nano_script(rcc_trim1_y) > 0} { set nano_script(final_trim_x) $nano_script(rcc_trim1_x) set nano_script(final_trim_y) $nano_script(rcc_trim1_y) } COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=pcb_size_x,value=$nano_script(pcs_size_x),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=pcb_size_y,value=$nano_script(pcs_size_y),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=pnl_size_x,value=$nano_script(pnl_size_x),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=pnl_size_y,value=$nano_script(pnl_size_y),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=pnl_margin_x,value=$nano_script(pcb_area_min_x),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=pnl_margin_y,value=$nano_script(pcb_area_min_y),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=trim1_size_x,value=$nano_script(trim1_x),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=trim1_size_y,value=$nano_script(trim1_y),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=trim2_size_x,value=$nano_script(trim2_x),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=trim2_size_y,value=$nano_script(trim2_y),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=trim3_size_x,value=$nano_script(trim3_x),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=trim3_size_y,value=$nano_script(trim3_y),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=trim4_size_x,value=$nano_script(trim4_x),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=trim4_size_y,value=$nano_script(trim4_y),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=rcc_trim1_x,value=$nano_script(rcc_trim1_x),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=rcc_trim1_y,value=$nano_script(rcc_trim1_y),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=rcc_trim2_x,value=$nano_script(rcc_trim2_x),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=rcc_trim2_y,value=$nano_script(rcc_trim2_y),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=trim1_text,value=$nano_script(trim1_text),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=trim2_text,value=$nano_script(trim2_text),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=trim3_text,value=$nano_script(trim3_text),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=trim4_text,value=$nano_script(trim4_text),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=rcc_trim1_text,value=$nano_script(rcc_trim1_text),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=rcc_trim2_text,value=$nano_script(rcc_trim2_text),units=mm set nano_script(active_top) [format %.2f [expr ($nano_script(pnl_size_y) - $nano_script(final_trim_y)) / 2.0]] set nano_script(active_left) [format %.2f [expr ($nano_script(pnl_size_x) - $nano_script(final_trim_x)) / 2.0]] COM sr_active,top=$nano_script(active_top),bottom=$nano_script(active_top),left=$nano_script(active_left),right=$nano_script(active_left) set nano_script(final_trim_text) $nano_script(final_trim_x) append nano_script(final_trim_text) " X " $nano_script(final_trim_y) COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=f_trim_size_x,value=$nano_script(final_trim_x),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=f_trim_size_y,value=$nano_script(final_trim_y),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=f_trim_text,value=$nano_script(final_trim_text),units=mm set nano_script(in_tg_text) $nano_script(in_tg_x) append nano_script(in_tg_text) " X " $nano_script(in_tg_y) set nano_script(b1_tg_text) $nano_script(b1_tg_x) append nano_script(b1_tg_text) " X " $nano_script(b1_tg_y) set nano_script(b2_tg_text) $nano_script(b2_tg_x) append nano_script(b2_tg_text) " X " $nano_script(b2_tg_y) set nano_script(b3_tg_text) $nano_script(b3_tg_x) append nano_script(b3_tg_text) " X " $nano_script(b3_tg_y) COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=tg1_dist_x,value=$nano_script(in_tg_x),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=tg1_dist_y,value=$nano_script(in_tg_y),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=tg2_dist_x,value=$nano_script(b1_tg_x),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=tg2_dist_y,value=$nano_script(b1_tg_y),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=tg3_dist_x,value=$nano_script(b2_tg_x),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=tg3_dist_y,value=$nano_script(b2_tg_y),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=tg4_dist_x,value=$nano_script(b3_tg_x),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=tg4_dist_y,value=$nano_script(b3_tg_y),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=target_dist1,value=$nano_script(in_tg_text),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=target_dist2,value=$nano_script(b1_tg_text),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=target_dist3,value=$nano_script(b2_tg_text),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=target_dist4,value=$nano_script(b3_tg_text),units=mm } ############################################################################# ## Procedure: set_pnl_type proc ::set_pnl_type {} { global widget env nano_script DO_INFO -t matrix -e $env(JOB)/matrix -d ROW set I 0 set NO 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[lindex $gROWlayer_type $I] eq "signal" || [lindex $gROWlayer_type $I] eq "mixed" || [lindex $gROWlayer_type $I] eq "power_ground" } { incr NO set layer_name layer$NO set nano_script($layer_name) $LAYER } } incr I } set nano_script(num_layers) $NO set nano_script(pnl_type) "PTH" if {$nano_script(num_layers) < 3} { set nano_script(trim1_x) [format %.1f [expr $nano_script(pnl_size_x)]] set nano_script(trim1_y) [format %.1f [expr $nano_script(pnl_size_y)]] } .nano_pnl.cpd91 delete 0 10 .nano_pnl.cpd91 insert 1 {PTH} .nano_pnl.cpd91 insert 2 {SBL} .nano_pnl.cpd91 insert 3 {MBL} .nano_pnl.cpd91 insert 4 {STG} .nano_pnl.cpd91 insert 5 {STK} set nano_script(out_lyr_name) out set nano_script(out_drl_name) 1-$nano_script(num_layers)\drl set nano_script(out_map_name) 1-$nano_script(num_layers)\dd set nano_script(buried_no) 0 if {$nano_script(num_layers) > 2} { set nano_script(in_top_lay) "" set nano_script(in_btm_lay) "" set nano_script(in_lyr_no) 0 set nano_script(b1_top_lay) "" set nano_script(b2_top_lay) "" set nano_script(b3_top_lay) "" set nano_script(b4_top_lay) "" set nano_script(b1_btm_lay) "" set nano_script(b2_btm_lay) "" set nano_script(b3_btm_lay) "" set nano_script(b4_btm_lay) "" set nano_script(b1_top_no) 0 set nano_script(b2_top_no) 0 set nano_script(b3_top_no) 0 set nano_script(b4_top_no) 0 set nano_script(b1_btm_no) 0 set nano_script(b2_btm_no) 0 set nano_script(b3_btm_no) 0 set nano_script(b4_btm_no) 0 set nano_script(core_no) 0 DO_INFO -t matrix -e $env(JOB)/matrix -d ROW,units=mm foreach LAYER $gROWname { if {[regexp {l[0-9]*t1$} $LAYER]} { set nano_script(b1_top_lay) $LAYER set nano_script(b1_top_no) [string trimleft $LAYER l] set name_length [string length $nano_script(b1_top_no)] set nano_script(b1_top_no) [string range $nano_script(b1_top_no) 0 [expr $name_length - 3]] COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=b1_top } if {[regexp {l[0-9]*t2$} $LAYER]} { set nano_script(b2_top_lay) $LAYER set nano_script(b2_top_no) [string trimleft $LAYER l] set name_length [string length $nano_script(b2_top_no)] set nano_script(b2_top_no) [string range $nano_script(b2_top_no) 0 [expr $name_length - 3]] COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=b2_top } if {[regexp {l[0-9]*t3$} $LAYER]} { set nano_script(b3_top_lay) $LAYER set nano_script(b3_top_no) [string trimleft $LAYER l] set name_length [string length $nano_script(b3_top_no)] set nano_script(b3_top_no) [string range $nano_script(b3_top_no) 0 [expr $name_length - 3]] COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=b3_top } if {[regexp {l[0-9]*t4$} $LAYER]} { set nano_script(b4_top_lay) $LAYER set nano_script(b4_top_no) [string trimleft $LAYER l] set name_length [string length $nano_script(b4_top_no)] set nano_script(b4_top_no) [string range $nano_script(b4_top_no) 0 [expr $name_length - 3]] COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=b4_top } if {[regexp {l[0-9]*b1$} $LAYER]} { set nano_script(b1_btm_lay) $LAYER set nano_script(buried_no) 1 set nano_script(b1_btm_no) [string trimleft $LAYER l] set name_length [string length $nano_script(b1_btm_no)] set nano_script(b1_btm_no) [string range $nano_script(b1_btm_no) 0 [expr $name_length - 3]] COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=b1_btm } if {[regexp {l[0-9]*b2$} $LAYER]} { set nano_script(b2_btm_lay) $LAYER set nano_script(buried_no) 2 set nano_script(b2_btm_no) [string trimleft $LAYER l] set name_length [string length $nano_script(b2_btm_no)] set nano_script(b2_btm_no) [string range $nano_script(b2_btm_no) 0 [expr $name_length - 3]] COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=b2_btm } if {[regexp {l[0-9]*b3$} $LAYER]} { set nano_script(b3_btm_lay) $LAYER set nano_script(buried_no) 3 set nano_script(b3_btm_no) [string trimleft $LAYER l] set name_length [string length $nano_script(b3_btm_no)] set nano_script(b3_btm_no) [string range $nano_script(b3_btm_no) 0 [expr $name_length - 3]] COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=b3_btm } if {[regexp {l[0-9]*b4$} $LAYER]} { set nano_script(b4_btm_lay) $LAYER set nano_script(buried_no) 4 set nano_script(b4_btm_no) [string trimleft $LAYER l] set name_length [string length $nano_script(b4_btm_no)] set nano_script(b4_btm_no) [string range $nano_script(b4_btm_no) 0 [expr $name_length - 3]] COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=b4_btm } if {[regexp {l[0-9]*t$} $LAYER]} { lappend nano_script(in_top_lay) $LAYER incr nano_script(in_lyr_no) COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=in_top } if {[regexp {l[0-9]*b$} $LAYER]} { lappend nano_script(in_btm_lay) $LAYER incr nano_script(in_lyr_no) incr nano_script(core_no) COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=in_btm } } set nano_script(b1_drl_name) $nano_script(b1_top_no)\-$nano_script(b1_btm_no)\drl set nano_script(b1_map_name) $nano_script(b1_top_no)\-$nano_script(b1_btm_no)\dd set nano_script(b2_drl_name) $nano_script(b2_top_no)\-$nano_script(b2_btm_no)\drl set nano_script(b2_map_name) $nano_script(b2_top_no)\-$nano_script(b2_btm_no)\dd set nano_script(b3_drl_name) $nano_script(b3_top_no)\-$nano_script(b3_btm_no)\drl set nano_script(b3_map_name) $nano_script(b3_top_no)\-$nano_script(b3_btm_no)\dd set nano_script(b4_drl_name) $nano_script(b4_top_no)\-$nano_script(b4_btm_no)\drl set nano_script(b4_map_name) $nano_script(b4_top_no)\-$nano_script(b4_btm_no)\dd set nano_script(t1_no) [format %.0f [expr 1.0 + 1.0]] set nano_script(b1_no) [format %.0f [expr $nano_script(num_layers) - 1.0]] set nano_script(t2_no) [format %.0f [expr 1.0 + 2.0]] set nano_script(b2_no) [format %.0f [expr $nano_script(num_layers) - 2.0]] set nano_script(t3_no) [format %.0f [expr 1.0 + 3.0]] set nano_script(b3_no) [format %.0f [expr $nano_script(num_layers) - 3.0]] set nano_script(t4_no) [format %.0f [expr 1.0 + 4.0]] set nano_script(b4_no) [format %.0f [expr $nano_script(num_layers) - 4.0]] DO_INFO -t layer -e $env(JOB)/$env(STEP)/1-2drl -d exists if {$gEXISTS == "yes"} { set nano_script(pnl_type) "SBL" .nano_pnl.cpd91 delete 0 10 .nano_pnl.cpd91 insert 1 {SBL} .nano_pnl.cpd91 insert 2 {PTH} .nano_pnl.cpd91 insert 3 {MBL} .nano_pnl.cpd91 insert 4 {STG} .nano_pnl.cpd91 insert 5 {STK} } DO_INFO -t layer -e $env(JOB)/$env(STEP)/2-3drl -d exists if {$gEXISTS == "yes" && $nano_script(num_layers) > 5} { set nano_script(pnl_type) "STG" .nano_pnl.cpd91 delete 0 10 .nano_pnl.cpd91 insert 1 {STG} .nano_pnl.cpd91 insert 2 {PTH} .nano_pnl.cpd91 insert 3 {SBL} .nano_pnl.cpd91 insert 4 {MBL} .nano_pnl.cpd91 insert 5 {STK} } DO_INFO -t layer -e $env(JOB)/$env(STEP)/1-2-3drl -d exists if {$gEXISTS == "yes"} { set nano_script(pnl_type) "STK" .nano_pnl.cpd91 delete 0 10 .nano_pnl.cpd91 insert 1 {STK} .nano_pnl.cpd91 insert 2 {PTH} .nano_pnl.cpd91 insert 3 {SBL} .nano_pnl.cpd91 insert 4 {MBL} .nano_pnl.cpd91 insert 5 {STG} } DO_INFO -t layer -e $env(JOB)/$env(STEP)/1-3drl -d exists if {$gEXISTS == "yes"} { set nano_script(pnl_type) "MBL" .nano_pnl.cpd91 delete 0 10 .nano_pnl.cpd91 insert 1 {MBL} .nano_pnl.cpd91 insert 2 {PTH} .nano_pnl.cpd91 insert 3 {SBL} .nano_pnl.cpd91 insert 4 {STG} .nano_pnl.cpd91 insert 5 {STK} } } } ############################################################################# ## Procedure: nano_pth proc ::nano_pth {} { global widget env nano_script COMANS if {$nano_script(panelize) == "1"} { nano_pnl hide if {$nano_script(num_layers) > 2} { vent_dot in_dot_line trim_pth if {$nano_script(core_no) > 1} { bonding_guide } tg_guide nano_m_tg } else { set nano_script(active_top) [format %.2f [expr 0.00]] set nano_script(active_left) [format %.2f [expr 0.00]] COM sr_active,top=$nano_script(active_top),bottom=$nano_script(active_top),left=$nano_script(active_left),right=$nano_script(active_left) set nano_script(final_trim_text) $nano_script(final_trim_x) append nano_script(final_trim_text) " X " $nano_script(final_trim_y) COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=f_trim_size_x,value=$nano_script(final_trim_x),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=f_trim_size_y,value=$nano_script(final_trim_y),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=f_trim_text,value=$nano_script(final_trim_text),units=mm COM affected_layer,name=out,mode=all,affected=no COM clear_layers DO_INFO -t matrix -e $env(JOB)/matrix set trim_x1 "0.0000" set trim_y1 "0.0000" set trim_x2 [format %.6f $nano_script(pnl_size_x)] set trim_y2 [format %.6f $nano_script(pnl_size_y)] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } if {$LAYER == "cs" || $LAYER == "ss" || $LAYER == "csm" || $LAYER == "ssm" || $LAYER == "cslk" || $LAYER == "sslk"} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers } trim_text vent_out if {$nano_script(num_layers) > 2} { outer_layers_trim } nano_auto COM open_auto_panelize,job=$env(JOB),panel=,pcb=,scheme= COM autopan_place_objects,job=$env(JOB),panel=$env(STEP),pcb=$nano_script(pcs_step),scheme=nano_pth COM close_auto_panelize laser_drl_break resize_guide_drill cleanup_map } exit } ############################################################################# ## Procedure: nano_sbl proc ::nano_sbl {} { global widget env nano_script set nano_script(sbl_t1_drl_name) 1-2drl set nano_script(sbl_t1_map_name) 1-2dd set nano_script(sbl_t1_win_name) 1-2win set nano_script(sbl_b1_drl_name) $nano_script(b1_no)\-$nano_script(num_layers)\drl set nano_script(sbl_b1_map_name) $nano_script(b1_no)\-$nano_script(num_layers)\dd set nano_script(sbl_b1_win_name) $nano_script(b1_no)\-$nano_script(num_layers)\win set nano_script(sbl_t1_layer) $nano_script(layer2) set nano_script(sbl_b1_layer) $nano_script(layer$nano_script(b1_no)) set nano_script(active_top) [format %.2f [expr ($nano_script(pnl_size_y) - $nano_script(final_trim_y))]] set nano_script(active_left) [format %.2f [expr ($nano_script(pnl_size_x) - $nano_script(final_trim_x))]] COM sr_active,top=$nano_script(active_top),bottom=$nano_script(active_top),left=$nano_script(active_left),right=$nano_script(active_left) set nano_script(final_trim_text) $nano_script(final_trim_x) append nano_script(final_trim_text) " X " $nano_script(final_trim_y) set I 0 DO_INFO -t matrix -e $env(JOB)/matrix set LAY_NO 1 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(sbl_t1_drl_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=sbl_t1_drl } if {$LAYER == $nano_script(sbl_t1_map_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=sbl_t1_map } if {$LAYER == $nano_script(sbl_t1_win_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=sbl_t1_win COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.out_mirror,value=yes } if {$LAYER == $nano_script(sbl_b1_drl_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=sbl_b1_drl } if {$LAYER == $nano_script(sbl_b1_map_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=sbl_b1_map } if {$LAYER == $nano_script(sbl_b1_win_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=sbl_b1_win } if {$LAYER == $nano_script(sbl_t1_layer)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=etec_comment1,value=sbl_t1_lay } if {$LAYER == $nano_script(sbl_b1_layer)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=etec_comment1,value=sbl_b1_lay } } } if {$nano_script(panelize) == "1"} { nano_pnl hide vent_dot vent_brick in_dot_line trim_sbl vent_out if {$nano_script(core_no) > 1} { bonding_guide } tg_guide nano_m_tg outer_layers_trim nano_auto COM open_auto_panelize,job=$env(JOB),panel=,pcb=,scheme= COM autopan_place_objects,job=$env(JOB),panel=$env(STEP),pcb=$nano_script(pcs_step),scheme=nano_sbl COM close_auto_panelize nano_g_tg laser_drl_break resize_guide_drill cleanup_map } exit } ############################################################################# ## Procedure: nano_mbl proc ::nano_mbl {} { global widget env nano_script set nano_script(mbl_t1_drl_name) 1-3drl set nano_script(mbl_t1_map_name) 1-3dd set nano_script(mbl_t1_win_name) 1-3win set nano_script(mbl_b1_drl_name) $nano_script(b2_no)\-$nano_script(num_layers)\drl set nano_script(mbl_b1_map_name) $nano_script(b2_no)\-$nano_script(num_layers)\dd set nano_script(mbl_b1_win_name) $nano_script(b2_no)\-$nano_script(num_layers)\win set nano_script(mbl_t1_layer) $nano_script(layer2) set nano_script(mbl_b1_layer) $nano_script(layer$nano_script(b1_no)) set nano_script(mbl_t2_layer) $nano_script(layer3) set nano_script(mbl_b2_layer) $nano_script(layer$nano_script(b2_no)) set I 0 DO_INFO -t matrix -e $env(JOB)/matrix set LAY_NO 1 foreach LAYER $gROWname { if {$LAYER == $nano_script(mbl_t1_drl_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=mbl_t1_drl } if {$LAYER == $nano_script(mbl_t1_map_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=mbl_t1_map } if {$LAYER == $nano_script(mbl_t1_win_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=mbl_t1_win COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.out_mirror,value=yes,units=mm } if {$LAYER == $nano_script(mbl_b1_drl_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=mbl_b1_drl } if {$LAYER == $nano_script(mbl_b1_map_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=mbl_b1_map } if {$LAYER == $nano_script(mbl_b1_win_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=mbl_b1_win } if {$LAYER == $nano_script(mbl_t2_layer)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=etec_comment1,value=mbl_t2_lay } if {$LAYER == $nano_script(mbl_b2_layer)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=etec_comment1,value=mbl_b2_lay } if {$LAYER == $nano_script(mbl_t1_layer)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=etec_comment1,value=mbl_t1_lay } if {$LAYER == $nano_script(mbl_b1_layer)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=etec_comment1,value=mbl_b1_lay } } if {$nano_script(panelize) == "1"} { nano_pnl hide vent_dot vent_brick in_dot_line trim_sbl vent_out if {$nano_script(core_no) > 1} { bonding_guide } tg_guide nano_m_tg outer_layers_trim nano_auto COM open_auto_panelize,job=$env(JOB),panel=,pcb=,scheme= COM autopan_place_objects,job=$env(JOB),panel=$env(STEP),pcb=$nano_script(pcs_step),scheme=nano_mbl COM close_auto_panelize nano_g_tg laser_drl_break resize_guide_drill cleanup_map } exit } ############################################################################# ## Procedure: nano_stg proc ::nano_stg {} { global widget env nano_script set nano_script(stg_t1_drl_name) 1-2drl set nano_script(stg_t1_map_name) 1-2dd set nano_script(stg_t1_win_name) 1-2win set nano_script(stg_b1_drl_name) $nano_script(b1_no)\-$nano_script(num_layers)\drl set nano_script(stg_b1_map_name) $nano_script(b1_no)\-$nano_script(num_layers)\dd set nano_script(stg_b1_win_name) $nano_script(b1_no)\-$nano_script(num_layers)\win set nano_script(stg_t2_drl_name) 2-3drl set nano_script(stg_t2_map_name) 2-3dd set nano_script(stg_t2_win_name) 2-3win set nano_script(stg_b2_drl_name) $nano_script(b2_no)\-$nano_script(b1_no)\drl set nano_script(stg_b2_map_name) $nano_script(b2_no)\-$nano_script(b1_no)\dd set nano_script(stg_b2_win_name) $nano_script(b2_no)\-$nano_script(b1_no)\win set nano_script(stg_t1_layer) $nano_script(layer2) set nano_script(stg_b1_layer) $nano_script(layer$nano_script(b1_no)) set nano_script(stg_t2_layer) $nano_script(layer3) set nano_script(stg_b2_layer) $nano_script(layer$nano_script(b2_no)) set I 0 DO_INFO -t matrix -e $env(JOB)/matrix set LAY_NO 1 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(stg_t1_drl_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stg_t1_drl } if {$LAYER == $nano_script(stg_t1_map_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stg_t1_map } if {$LAYER == $nano_script(stg_t1_win_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stg_t1_win COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.out_mirror,value=yes,units=mm } if {$LAYER == $nano_script(stg_b1_drl_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stg_b1_drl } if {$LAYER == $nano_script(stg_b1_map_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stg_b1_map } if {$LAYER == $nano_script(stg_b1_win_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stg_b1_win } if {$LAYER == $nano_script(stg_t2_drl_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stg_t2_drl } if {$LAYER == $nano_script(stg_t2_map_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stg_t2_map } if {$LAYER == $nano_script(stg_t2_win_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stg_t2_win COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.out_mirror,value=yes,units=mm } if {$LAYER == $nano_script(stg_b2_drl_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stg_b2_drl } if {$LAYER == $nano_script(stg_b2_map_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stg_b2_map } if {$LAYER == $nano_script(stg_b2_win_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stg_b2_win } if {$LAYER == $nano_script(stg_t1_layer)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=etec_comment1,value=stg_t1_lay } if {$LAYER == $nano_script(stg_b1_layer)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=etec_comment1,value=stg_b1_lay } if {$LAYER == $nano_script(stg_t2_layer)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=etec_comment1,value=stg_t2_lay } if {$LAYER == $nano_script(stg_b2_layer)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=etec_comment1,value=stg_b2_lay } } } if {$nano_script(panelize) == "1"} { nano_pnl hide vent_dot vent_brick in_dot_line trim_stg vent_out if {$nano_script(core_no) > 1} { bonding_guide } tg_guide nano_m_tg outer_layers_trim nano_auto COM open_auto_panelize,job=$env(JOB),panel=,pcb=,scheme= COM autopan_place_objects,job=$env(JOB),panel=$env(STEP),pcb=$nano_script(pcs_step),scheme=nano_stg COM close_auto_panelize nano_g_tg laser_drl_break resize_guide_drill cleanup_map } exit } ############################################################################# ## Procedure: vent_dot proc ::vent_dot {} { global widget env nano_script COMANS DO_INFO -t matrix -e $env(JOB)/matrix COM fill_params,type=pattern,origin_type=limits,solid_type=surface,min_brush=254,use_arcs=yes,symbol=nano_dot_in_t,dx=4.0,dy=4.0,break_partial=yes,cut_prims=no,outline_draw=no,outline_width=0,outline_invert=no COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { COM sr_fill,polarity=positive,step_margin_x=0,step_margin_y=0,step_max_dist_x=2540,step_max_dist_y=2540,sr_margin_x=3,sr_margin_y=3,sr_max_dist_x=0,sr_max_dist_y=0,nest_sr=no,consider_feat=no,consider_drill=no,consider_rout=no,dest=affected_layers,attributes=no COM affected_layer,name=out,mode=all,affected=no COM clear_layers } COM fill_params,type=pattern,origin_type=limits,solid_type=surface,min_brush=254,use_arcs=yes,symbol=nano_dot_in_b,dx=4.0,dy=4.0,break_partial=yes,cut_prims=no,outline_draw=no,outline_width=0,outline_invert=no COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*b$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { COM sr_fill,polarity=positive,step_margin_x=0,step_margin_y=0,step_max_dist_x=2540,step_max_dist_y=2540,sr_margin_x=3,sr_margin_y=3,sr_max_dist_x=0,sr_max_dist_y=0,nest_sr=no,consider_feat=no,consider_drill=no,consider_rout=no,dest=affected_layers,attributes=no } COM affected_layer,name=out,mode=all,affected=no COM clear_layers } ############################################################################# ## Procedure: vent_brick proc ::vent_brick {} { global widget env nano_script COMANS DO_INFO -t matrix -e $env(JOB)/matrix COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t1$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } if {[regexp {l[0-9]*b1$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set t1_x [format %.6f [expr ($nano_script(pnl_size_x) - $nano_script(trim1_x)) / 2.0 + 1.0]] set t1_y [format %.6f [expr ($nano_script(pnl_size_y) - $nano_script(trim1_y)) / 2.0 + 1.0]] set t2_x [expr $nano_script(pcb_area_min_x) - 3.0] set t2_y [expr $nano_script(pcb_area_min_y) - 3.0] if {$nano_script(num_layers) == 4} { set t1_x "1.0" set t1_y "1.0" } COM fill_params,type=pattern,origin_type=limits,solid_type=surface,min_brush=254,use_arcs=yes,symbol=nano_brick_h,dx=5.5,dy=5,break_partial=yes,cut_prims=yes,outline_draw=no,outline_width=0,outline_invert=no COM sr_fill,polarity=positive,step_margin_x=$t1_x,step_margin_y=$t1_y,step_max_dist_x=$t2_x,step_max_dist_y=$t2_y,sr_margin_x=3,sr_margin_y=3,sr_max_dist_x=0,sr_max_dist_y=0,nest_sr=no,consider_feat=no,consider_drill=no,consider_rout=no,dest=affected_layers,attributes=no COM filter_set,filter_name=popup,update_popup=no,include_syms=s2000 COM filter_set,filter_name=popup,update_popup=no,polarity=positive COM filter_set,filter_name=popup,update_popup=no,feat_types=line COM filter_area_strt set nano_script(tmp_x1) [expr $nano_script(pnl_min_x) - 10.0] set nano_script(tmp_y1) [expr $nano_script(pcb_area_min_y) - 0.00] set nano_script(tmp_x2) [expr $nano_script(pnl_max_x) + 10.0] set nano_script(tmp_y2) [expr $nano_script(pcb_area_max_y) + 0.00] COM filter_area_xy,x=$nano_script(tmp_x1),y=$nano_script(tmp_y2) COM filter_area_xy,x=$nano_script(tmp_x2),y=$nano_script(tmp_y1) COM filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=no,lines_only=no,ovals_only=no,min_len=0,max_len=0,min_angle=0,max_angle=0 COM sel_delete COM filter_reset,filter_name=popup COM filter_set,filter_name=popup,update_popup=no,polarity=positive COM filter_set,filter_name=popup,update_popup=no,feat_types=surface COM filter_area_strt COM filter_area_xy,x=$nano_script(tmp_x1),y=$nano_script(tmp_y2) COM filter_area_xy,x=$nano_script(tmp_x2),y=$nano_script(tmp_y1) COM filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=no,lines_only=no,ovals_only=no,min_len=0,max_len=0,min_angle=0,max_angle=0 COM sel_delete COM filter_reset,filter_name=popup COM sel_delete_atr,attributes=.pattern_fill set nano_script(tmp_y1) [expr $nano_script(pcb_area_min_y) - 0.00] COM fill_params,type=pattern,origin_type=limits,solid_type=surface,min_brush=254,use_arcs=yes,symbol=nano_brick_v,dx=5,dy=5.5,break_partial=yes,cut_prims=yes,outline_draw=no,outline_width=0,outline_invert=no COM zoom_home COM sr_fill,polarity=positive,step_margin_x=$t1_x,step_margin_y=$nano_script(tmp_y1),step_max_dist_x=$t2_x,step_max_dist_y=$t2_y,sr_margin_x=3,sr_margin_y=3,sr_max_dist_x=0,sr_max_dist_y=0,nest_sr=no,consider_feat=yes,feat_margin=0.5,consider_drill=no,consider_rout=no,dest=affected_layers,attributes=no COM affected_layer,name=out,mode=all,affected=no COM clear_layers } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t2$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } if {[regexp {l[0-9]*b2$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set t1_x [format %.6f [expr ($nano_script(pnl_size_x) - $nano_script(trim2_x)) / 2.0 + 1.0]] set t1_y [format %.6f [expr ($nano_script(pnl_size_y) - $nano_script(trim2_y)) / 2.0 + 1.0]] set t2_x [expr $nano_script(pcb_area_min_x) - 3.0] set t2_y [expr $nano_script(pcb_area_min_y) - 3.0] COM fill_params,type=pattern,origin_type=limits,solid_type=surface,min_brush=254,use_arcs=yes,symbol=nano_brick_h,dx=5.5,dy=5,break_partial=yes,cut_prims=yes,outline_draw=no,outline_width=0,outline_invert=no COM sr_fill,polarity=positive,step_margin_x=$t1_x,step_margin_y=$t1_y,step_max_dist_x=$t2_x,step_max_dist_y=$t2_y,sr_margin_x=3,sr_margin_y=3,sr_max_dist_x=0,sr_max_dist_y=0,nest_sr=no,consider_feat=no,consider_drill=no,consider_rout=no,dest=affected_layers,attributes=no COM filter_set,filter_name=popup,update_popup=no,include_syms=s2000 COM filter_set,filter_name=popup,update_popup=no,polarity=positive COM filter_set,filter_name=popup,update_popup=no,feat_types=line COM filter_area_strt set nano_script(tmp_x1) [expr $nano_script(pnl_min_x) - 10.0] set nano_script(tmp_y1) [expr $nano_script(pcb_area_min_y) - 0.00] set nano_script(tmp_x2) [expr $nano_script(pnl_max_x) + 10.0] set nano_script(tmp_y2) [expr $nano_script(pcb_area_max_y) + 0.00] COM filter_area_xy,x=$nano_script(tmp_x1),y=$nano_script(tmp_y2) COM filter_area_xy,x=$nano_script(tmp_x2),y=$nano_script(tmp_y1) COM filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=no,lines_only=no,ovals_only=no,min_len=0,max_len=0,min_angle=0,max_angle=0 COM sel_delete COM filter_reset,filter_name=popup COM filter_set,filter_name=popup,update_popup=no,polarity=positive COM filter_set,filter_name=popup,update_popup=no,feat_types=surface COM filter_area_strt COM filter_area_xy,x=$nano_script(tmp_x1),y=$nano_script(tmp_y2) COM filter_area_xy,x=$nano_script(tmp_x2),y=$nano_script(tmp_y1) COM filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=no,lines_only=no,ovals_only=no,min_len=0,max_len=0,min_angle=0,max_angle=0 COM sel_delete COM filter_reset,filter_name=popup COM sel_delete_atr,attributes=.pattern_fill set nano_script(tmp_y1) [expr $nano_script(pcb_area_min_y) - 0.00] COM fill_params,type=pattern,origin_type=limits,solid_type=surface,min_brush=254,use_arcs=yes,symbol=nano_brick_v,dx=5,dy=5.5,break_partial=yes,cut_prims=yes,outline_draw=no,outline_width=0,outline_invert=no COM zoom_home COM sr_fill,polarity=positive,step_margin_x=$t1_x,step_margin_y=$nano_script(tmp_y1),step_max_dist_x=$t2_x,step_max_dist_y=$t2_y,sr_margin_x=3,sr_margin_y=3,sr_max_dist_x=0,sr_max_dist_y=0,nest_sr=no,consider_feat=yes,feat_margin=0.5,consider_drill=no,consider_rout=no,dest=affected_layers,attributes=no COM affected_layer,name=out,mode=all,affected=no COM clear_layers } } ############################################################################# ## Procedure: dot_line proc ::dot_line {sym x1 y1 x2 y2 axis dist} { global widget env nano_script set center_x [format %.4f [expr ($x1 + $x2) / 2.0]] set center_y [format %.4f [expr ($y1 + $y2) / 2.0]] set dist_x [format %.4f [expr $x2 - $x1]] set dist_y [format %.4f [expr $y2 - $y1]] if {$axis == "c"} { if {$x1 == $x2} { COM add_pad,attributes=no,x=$x1,y=$center_y,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 set loc_y1 [expr $center_y + $dist] set loc_y2 [expr $center_y - $dist] set loc_y3 [expr $y2 - ($dist * 2.0)] set loc_y4 [expr $y1 + ($dist * 2.0)] while {$loc_y1 < $loc_y3} { COM add_pad,attributes=no,x=$x1,y=$loc_y1,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 set loc_y1 [expr $loc_y1 + $dist] } while {$loc_y2 > $loc_y4} { COM add_pad,attributes=no,x=$x1,y=$loc_y2,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 set loc_y2 [expr $loc_y2 - $dist] } } if {$y1 == $y2} { COM add_pad,attributes=no,x=$center_x,y=$y1,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 set loc_x1 [expr $center_x + $dist] set loc_x2 [expr $center_x - $dist] set loc_x3 [expr $x2 - ($dist * 2.0)] set loc_x4 [expr $x1 + ($dist * 2.0)] while {$loc_x1 < $loc_x3} { COM add_pad,attributes=no,x=$loc_x1,y=$y1,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 set loc_x1 [expr $loc_x1 + $dist] } while {$loc_x2 > $loc_x4} { COM add_pad,attributes=no,x=$loc_x2,y=$y1,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 set loc_x2 [expr $loc_x2 - $dist] } } } if {$axis == "e"} { if {$x1 == $x2} { #COM add_pad,attributes=no,x=$x1,y=$center_y,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 set loc_y1 [expr $center_y + ($dist / 2.0)] set loc_y2 [expr $center_y - ($dist / 2.0)] set loc_y3 [expr $y2 - ($dist * 2.0)] set loc_y4 [expr $y1 + ($dist * 2.0)] while {$loc_y1 < $loc_y3} { COM add_pad,attributes=no,x=$x1,y=$loc_y1,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 set loc_y1 [expr $loc_y1 + $dist] } while {$loc_y2 > $loc_y4} { COM add_pad,attributes=no,x=$x1,y=$loc_y2,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 set loc_y2 [expr $loc_y2 - $dist] } } if {$y1 == $y2} { #COM add_pad,attributes=no,x=$center_x,y=$y1,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 set loc_x1 [expr $center_x + ($dist / 2.0)] set loc_x2 [expr $center_x - ($dist / 2.0)] set loc_x3 [expr $x2 - ($dist * 2.0)] set loc_x4 [expr $x1 + ($dist * 2.0)] while {$loc_x1 < $loc_x3} { COM add_pad,attributes=no,x=$loc_x1,y=$y1,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 set loc_x1 [expr $loc_x1 + $dist] } while {$loc_x2 > $loc_x4} { COM add_pad,attributes=no,x=$loc_x2,y=$y1,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 set loc_x2 [expr $loc_x2 - $dist] } } } } ############################################################################# ## Procedure: in_dot_line proc ::in_dot_line {} { global widget env nano_script COMANS PAUSE DO_INFO -t step -e $env(JOB)/$env(STEP) -d REPEAT,units=mm set nano_script(rpt_xmin) $gREPEATxmin set nano_script(rpt_xmax) $gREPEATxmax set nano_script(rpt_ymin) $gREPEATymin set nano_script(rpt_ymax) $gREPEATymax set nano_script(pcs_steps) $gREPEATstep set I 0 foreach attr $gREPEATstep { incr I } set nano_script(steps_no) $I DO_INFO -t matrix -e $env(JOB)/matrix COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]t$} $LAYER] || [regexp {l[0-9]b$} $LAYER] || [regexp {l[0-9]t1$} $LAYER] || [regexp {l[0-9]b1$} $LAYER] || [regexp {l[0-9]t2$} $LAYER] || [regexp {l[0-9]b2$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set I 0 foreach attr $gREPEATstep { set x1 [format %.6f [expr [lindex $nano_script(rpt_xmin) $I] - ($nano_script(step_margin_x) / 2.0)]] set x2 [format %.6f [expr [lindex $nano_script(rpt_xmax) $I] + ($nano_script(step_margin_x) / 2.0)]] set y1 [format %.6f [expr [lindex $nano_script(rpt_ymin) $I] - ($nano_script(step_margin_y) / 2.0)]] set y2 [format %.6f [expr [lindex $nano_script(rpt_ymax) $I] + ($nano_script(step_margin_y) / 2.0)]] set length "5.0" cornor_rectangle s0 s1000 $x1 $y1 $x2 $y2 $length incr I } } set x1 [expr $nano_script(pcb_area_min_x) - $nano_script(step_margin_x)] set x2 [expr $nano_script(pcb_area_max_x) + $nano_script(step_margin_x)] set x3 [expr $nano_script(pcb_area_min_x) + $nano_script(step_margin_x)] set x4 [expr $nano_script(pcb_area_max_x) - $nano_script(step_margin_x)] set y1 [expr $nano_script(pcb_area_min_y) - $nano_script(step_margin_y)] set y2 [expr $nano_script(pcb_area_max_y) + $nano_script(step_margin_y)] set y3 [expr $nano_script(pcb_area_min_y) + $nano_script(step_margin_y)] set y4 [expr $nano_script(pcb_area_max_y) - $nano_script(step_margin_y)] COM filter_set,filter_name=popup,update_popup=no,feat_types=line COM filter_set,filter_name=popup,update_popup=no,polarity=positive\;negative COM filter_set,filter_name=popup,update_popup=no,include_syms=s0\;s1000 COM filter_area_strt COM filter_area_xy,x=$x1,y=$y1 COM filter_area_xy,x=$x2,y=$y3 COM filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=yes,lines_only=no,ovals_only=no,min_len=0,max_len=0,min_angle=0,max_angle=0 COM filter_area_strt COM filter_area_xy,x=$x1,y=$y2 COM filter_area_xy,x=$x2,y=$y4 COM filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,inside_area=yes,intersect_area=yes,lines_only=no,ovals_only=no,min_len=0,max_len=0,min_angle=0,max_angle=0 COM sel_delete COM filter_reset,filter_name=popup COM affected_layer,name=out,mode=all,affected=no COM clear_layers set LCT 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $LCT] == "board"} { DO_INFO -t layer -e $env(JOB)/$nano_script(pnl_step)/$LAYER -d ATTR set CT 0 foreach ATTR $gATTRname { if {$ATTR == "layer_name"} { if {[regexp {LAYER*} [lindex $gATTRval $CT]]} { set layer_name [lindex $gATTRval $CT] regsub -all { } $layer_name "" layer_name set sig_layer_no [string trimleft $layer_name "LAYER"] set lyr_even_odd [expr {fmod($sig_layer_no,2)}] if {$lyr_even_odd > 0} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } } incr CT } } incr LCT } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set I 0 foreach attr $gREPEATstep { set x1 [format %.6f [expr [lindex $nano_script(rpt_xmin) $I] - ($nano_script(step_margin_x) / 2.0)]] set x2 [format %.6f [expr [lindex $nano_script(rpt_xmax) $I] + ($nano_script(step_margin_x) / 2.0)]] set y1 [format %.6f [expr [lindex $nano_script(rpt_ymin) $I] - ($nano_script(step_margin_y) / 2.0)]] set y2 [format %.6f [expr [lindex $nano_script(rpt_ymax) $I] + ($nano_script(step_margin_y) / 2.0)]] set dist "3.0" dot_line r1500 $x1 $y1 $x2 $y1 "c" $dist dot_line r1500 $x1 $y1 $x1 $y2 "c" $dist dot_line r1500 $x1 $y2 $x2 $y2 "c" $dist dot_line r1500 $x2 $y1 $x2 $y2 "c" $dist incr I } } COM filter_set,filter_name=popup,update_popup=no,feat_types=pad COM filter_set,filter_name=popup,update_popup=no,polarity=positive COM filter_set,filter_name=popup,update_popup=no,include_syms=r1500 COM sel_options,clear_mode=clear_after,display_mode=all_layers,area_inout=outside,area_select=select,select_mode=standard,area_touching_mode=exclude COM filter_area_strt COM filter_area_xy,x=$nano_script(pcb_area_min_x),y=$nano_script(pcb_area_max_y) COM filter_area_xy,x=$nano_script(pcb_area_max_x),y=$nano_script(pcb_area_min_y) COM filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,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 sel_delete COM sel_options,clear_mode=clear_after,display_mode=all_layers,area_inout=inside,area_select=select,select_mode=standard,area_touching_mode=exclude COM filter_reset,filter_name=popup COM affected_layer,name=out,mode=all,affected=no COM clear_layers set LCT 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $LCT] == "board"} { DO_INFO -t layer -e $env(JOB)/$nano_script(pnl_step)/$LAYER -d ATTR set CT 0 foreach SCALE $gATTRname { if {[lindex $gATTRname $CT] == "layer_name"} { if {[regexp {LAYER*} [lindex $gATTRval $CT]]} { set layer_name [lindex $gATTRval $CT] regsub -all { } $layer_name "" layer_name set sig_layer_no [string trimleft $layer_name "LAYER"] set lyr_even_odd [expr {fmod($sig_layer_no,2)}] if {$lyr_even_odd == 0} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } } incr CT } } incr LCT } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set I 0 foreach attr $gREPEATstep { set x1 [format %.6f [expr [lindex $nano_script(rpt_xmin) $I] - ($nano_script(step_margin_x) / 2.0)]] set x2 [format %.6f [expr [lindex $nano_script(rpt_xmax) $I] + ($nano_script(step_margin_x) / 2.0)]] set y1 [format %.6f [expr [lindex $nano_script(rpt_ymin) $I] - ($nano_script(step_margin_y) / 2.0)]] set y2 [format %.6f [expr [lindex $nano_script(rpt_ymax) $I] + ($nano_script(step_margin_y) / 2.0)]] set dist "3.0" dot_line r1500 $x1 $y1 $x2 $y1 "e" $dist dot_line r1500 $x1 $y1 $x1 $y2 "e" $dist dot_line r1500 $x1 $y2 $x2 $y2 "e" $dist dot_line r1500 $x2 $y1 $x2 $y2 "e" $dist incr I } } COM filter_set,filter_name=popup,update_popup=no,feat_types=pad COM filter_set,filter_name=popup,update_popup=no,polarity=positive COM filter_set,filter_name=popup,update_popup=no,include_syms=r1500 COM sel_options,clear_mode=clear_after,display_mode=all_layers,area_inout=outside,area_select=select,select_mode=standard,area_touching_mode=exclude COM filter_area_strt COM filter_area_xy,x=$nano_script(pcb_area_min_x),y=$nano_script(pcb_area_max_y) COM filter_area_xy,x=$nano_script(pcb_area_max_x),y=$nano_script(pcb_area_min_y) COM filter_area_end,layer=,filter_name=popup,operation=select,area_type=rectangle,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 sel_delete COM sel_options,clear_mode=clear_after,display_mode=all_layers,area_inout=inside,area_select=select,select_mode=standard,area_touching_mode=exclude COM filter_reset,filter_name=popup COM affected_layer,name=out,mode=all,affected=no COM clear_layers } ############################################################################# ## Procedure: cornor_rectangle proc ::cornor_rectangle {sym1 sym2 x1 y1 x2 y2 length} { global widget env nano_script ######################################### ############## negative line ############ ############## ########################## if {$sym1 != "r0" && $sym1 != "s0"} { set line_x1 [format %.6f [expr $x1]] set line_y1 [format %.6f [expr $y1]] set line_x2 [format %.6f [expr $x1 + $length]] set line_y2 [format %.6f [expr $y1]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y2,symbol=$sym1,polarity=negative set line_x1 [format %.6f [expr $x1]] set line_y1 [format %.6f [expr $y1]] set line_x2 [format %.6f [expr $x1]] set line_y2 [format %.6f [expr $y1 + $length]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y2,symbol=$sym1,polarity=negative set line_x1 [format %.6f [expr $x2]] set line_y1 [format %.6f [expr $y1]] set line_x2 [format %.6f [expr $x2 - $length]] set line_y2 [format %.6f [expr $y1]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y2,symbol=$sym1,polarity=negative set line_x1 [format %.6f [expr $x2]] set line_y1 [format %.6f [expr $y1]] set line_x2 [format %.6f [expr $x2]] set line_y2 [format %.6f [expr $y1 + $length]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y2,symbol=$sym1,polarity=negative set line_x1 [format %.6f [expr $x1]] set line_y1 [format %.6f [expr $y2]] set line_x2 [format %.6f [expr $x1 + $length]] set line_y2 [format %.6f [expr $y2]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y2,symbol=$sym1,polarity=negative set line_x1 [format %.6f [expr $x1]] set line_y1 [format %.6f [expr $y2]] set line_x2 [format %.6f [expr $x1]] set line_y2 [format %.6f [expr $y2 - $length]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y2,symbol=$sym1,polarity=negative set line_x1 [format %.6f [expr $x2]] set line_y1 [format %.6f [expr $y2]] set line_x2 [format %.6f [expr $x2 - $length]] set line_y2 [format %.6f [expr $y2]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y2,symbol=$sym1,polarity=negative set line_x1 [format %.6f [expr $x2]] set line_y1 [format %.6f [expr $y2]] set line_x2 [format %.6f [expr $x2]] set line_y2 [format %.6f [expr $y2 - $length]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y2,symbol=$sym1,polarity=negative } ######################################### ############## positive line ############ ############## ########################## if {$sym2 != "r0" && $sym2 != "s0"} { set line_x1 [format %.6f [expr $x1]] set line_y1 [format %.6f [expr $y1]] set line_x2 [format %.6f [expr $x1 + $length]] set line_y2 [format %.6f [expr $y1]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y2,symbol=$sym2,polarity=positive set line_x1 [format %.6f [expr $x1]] set line_y1 [format %.6f [expr $y1]] set line_x2 [format %.6f [expr $x1]] set line_y2 [format %.6f [expr $y1 + $length]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y2,symbol=$sym2,polarity=positive set line_x1 [format %.6f [expr $x2]] set line_y1 [format %.6f [expr $y1]] set line_x2 [format %.6f [expr $x2 - $length]] set line_y2 [format %.6f [expr $y1]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y2,symbol=$sym2,polarity=positive set line_x1 [format %.6f [expr $x2]] set line_y1 [format %.6f [expr $y1]] set line_x2 [format %.6f [expr $x2]] set line_y2 [format %.6f [expr $y1 + $length]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y2,symbol=$sym2,polarity=positive set line_x1 [format %.6f [expr $x1]] set line_y1 [format %.6f [expr $y2]] set line_x2 [format %.6f [expr $x1 + $length]] set line_y2 [format %.6f [expr $y2]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y2,symbol=$sym2,polarity=positive set line_x1 [format %.6f [expr $x1]] set line_y1 [format %.6f [expr $y2]] set line_x2 [format %.6f [expr $x1]] set line_y2 [format %.6f [expr $y2 - $length]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y2,symbol=$sym2,polarity=positive set line_x1 [format %.6f [expr $x2]] set line_y1 [format %.6f [expr $y2]] set line_x2 [format %.6f [expr $x2 - $length]] set line_y2 [format %.6f [expr $y2]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y2,symbol=$sym2,polarity=positive set line_x1 [format %.6f [expr $x2]] set line_y1 [format %.6f [expr $y2]] set line_x2 [format %.6f [expr $x2]] set line_y2 [format %.6f [expr $y2 - $length]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y2,symbol=$sym2,polarity=positive } } ############################################################################# ## Procedure: trim_line proc ::trim_line {} { global widget env nano_script DO_INFO -t matrix -e $env(JOB)/matrix ####################################### ########### Buried1 trim ############## ####################################### COM affected_layer,name=out,mode=all,affected=no COM clear_layers set trim_x1 [format %.6f [expr ($nano_script(pnl_size_x) - $nano_script(trim1_x)) / 2.000]] set trim_y1 [format %.6f [expr ($nano_script(pnl_size_y) - $nano_script(trim1_y)) / 2.000]] set trim_x2 [format %.6f [expr $nano_script(pnl_size_x) - $nano_script(trim_x1)]] set trim_y2 [format %.6f [expr $nano_script(pnl_size_y) - $nano_script(trim_y1)]] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t1$} $LAYER] || [regexp {l[0-9]*t$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } if {[regexp {l[0-9]*b1$} $LAYER] || [regexp {l[0-9]*b$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } set sym "r1000" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r500" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol COM affected_layer,name=out,mode=all,affected=no COM clear_layers } ############################################################################# ## Procedure: trim_sbl proc ::trim_sbl {} { global widget env nano_script COMANS DO_INFO -t matrix -e $env(JOB)/matrix COM affected_layer,name=out,mode=all,affected=no COM clear_layers set trim_x1 "0.0000" set trim_y1 "0.0000" set trim_x2 [format %.6f $nano_script(pnl_size_x)] set trim_y2 [format %.6f $nano_script(pnl_size_y)] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set x_ref $nano_script(trim1_x) set y_ref $nano_script(trim1_y) set trim_x1 [format %.6f [expr ($nano_script(pnl_size_x) - $x_ref) / 2.000]] set trim_y1 [format %.6f [expr ($nano_script(pnl_size_y) - $y_ref) / 2.000]] set trim_x2 [format %.6f [expr $nano_script(pnl_size_x) - $trim_x1]] set trim_y2 [format %.6f [expr $nano_script(pnl_size_y) - $trim_y1]] ####################################### ########### Buried1 trim ############## ####################################### COM affected_layer,name=out,mode=all,affected=no COM clear_layers if {$nano_script(buried_no) == 0} { set x_ref $nano_script(trim1_x) set y_ref $nano_script(trim1_y) set trim_x1 [format %.6f [expr ($nano_script(pnl_size_x) - $x_ref) / 2.000]] set trim_y1 [format %.6f [expr ($nano_script(pnl_size_y) - $y_ref) / 2.000]] set trim_x2 [format %.6f [expr $nano_script(pnl_size_x) - $trim_x1]] set trim_y2 [format %.6f [expr $nano_script(pnl_size_y) - $trim_y1]] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == "cs" || $LAYER == "ss"} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers if {$nano_script(rcc_trim1_x) > 0 || $nano_script(rcc_trim1_y) > 0} { set nano_script(final_trim_x) $nano_script(rcc_trim1_x) set nano_script(final_trim_y) $nano_script(rcc_trim1_y) set trim_x1 [format %.6f [expr ($nano_script(pnl_size_x) - $nano_script(final_trim_x)) / 2.0]] set trim_y1 [format %.6f [expr ($nano_script(pnl_size_y) - $nano_script(final_trim_y)) / 2.0]] set trim_x2 [format %.6f [expr $nano_script(pnl_size_x) - $trim_x1]] set trim_y2 [format %.6f [expr $nano_script(pnl_size_y) - $trim_y1]] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == "cs" || $LAYER == "ss"} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers } else { set nano_script(final_trim_x) $nano_script(trim1_x) set nano_script(final_trim_y) $nano_script(trim1_y) } set nano_script(active_top) [format %.2f [expr ($nano_script(pnl_size_y) - $nano_script(final_trim_y)) / 2.0]] set nano_script(active_left) [format %.2f [expr ($nano_script(pnl_size_x) - $nano_script(final_trim_x)) / 2.0]] } if {$nano_script(buried_no) == 1 && $nano_script(num_layers) > 4} { set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t1$} $LAYER] || [regexp {l[0-9]*b1$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set trim_x1 [format %.6f [expr ($nano_script(pnl_size_x) - $nano_script(trim2_x)) / 2.00]] set trim_y1 [format %.6f [expr ($nano_script(pnl_size_y) - $nano_script(trim2_y)) / 2.00]] set trim_x2 [format %.6f [expr $nano_script(pnl_size_x) - $trim_x1]] set trim_y2 [format %.6f [expr $nano_script(pnl_size_y) - $trim_y1]] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers if {$nano_script(rcc_trim1_x) > 0 || $nano_script(rcc_trim1_y) > 0} { set nano_script(final_trim_x) $nano_script(rcc_trim1_x) set nano_script(final_trim_y) $nano_script(rcc_trim1_y) set trim_x1 [format %.6f [expr ($nano_script(pnl_size_x) - $nano_script(final_trim_x)) / 2.0]] set trim_y1 [format %.6f [expr ($nano_script(pnl_size_y) - $nano_script(final_trim_y)) / 2.0]] set trim_x2 [format %.6f [expr $nano_script(pnl_size_x) - $trim_x1]] set trim_y2 [format %.6f [expr $nano_script(pnl_size_y) - $trim_y1]] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == "cs" || $LAYER == "ss"} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers } else { set nano_script(final_trim_x) $nano_script(trim2_x) set nano_script(final_trim_y) $nano_script(trim2_y) } set nano_script(active_top) [format %.2f [expr ($nano_script(pnl_size_y) - $nano_script(final_trim_y)) / 2.0]] set nano_script(active_left) [format %.2f [expr ($nano_script(pnl_size_x) - $nano_script(final_trim_x)) / 2.0]] } if {$nano_script(buried_no) == 1 && $nano_script(num_layers) == 4} { set trim_x1 [format %.6f [expr ($nano_script(pnl_size_x) - $nano_script(trim1_x)) / 2.00]] set trim_y1 [format %.6f [expr ($nano_script(pnl_size_y) - $nano_script(trim1_y)) / 2.00]] set trim_x2 [format %.6f [expr $nano_script(pnl_size_x) - $trim_x1]] set trim_y2 [format %.6f [expr $nano_script(pnl_size_y) - $trim_y1]] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == "cs" || $LAYER == "ss"} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers if {$nano_script(rcc_trim1_x) > 0 || $nano_script(rcc_trim1_y) > 0} { set nano_script(final_trim_x) $nano_script(rcc_trim1_x) set nano_script(final_trim_y) $nano_script(rcc_trim1_y) set trim_x1 [format %.6f [expr ($nano_script(pnl_size_x) - $nano_script(final_trim_x)) / 2.0]] set trim_y1 [format %.6f [expr ($nano_script(pnl_size_y) - $nano_script(final_trim_y)) / 2.0]] set trim_x2 [format %.6f [expr $nano_script(pnl_size_x) - $trim_x1]] set trim_y2 [format %.6f [expr $nano_script(pnl_size_y) - $trim_y1]] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == "cs" || $LAYER == "ss"} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers } else { set nano_script(final_trim_x) $nano_script(trim1_x) set nano_script(final_trim_y) $nano_script(trim1_y) } set nano_script(active_top) [format %.2f [expr ($nano_script(pnl_size_y) - $nano_script(final_trim_y)) / 2.0]] set nano_script(active_left) [format %.2f [expr ($nano_script(pnl_size_x) - $nano_script(final_trim_x)) / 2.0]] } if {$nano_script(buried_no) == 2} { set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t$} $LAYER] || [regexp {l[0-9]*b$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set trim_x1 [format %.6f [expr ($nano_script(pnl_size_x) - $nano_script(trim2_x)) / 2.00]] set trim_y1 [format %.6f [expr ($nano_script(pnl_size_y) - $nano_script(trim2_y)) / 2.00]] set trim_x2 [format %.6f [expr $nano_script(pnl_size_x) - $trim_x1]] set trim_y2 [format %.6f [expr $nano_script(pnl_size_y) - $trim_y1]] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t2$} $LAYER] || [regexp {l[0-9]*b2$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set trim_x1 [format %.6f [expr ($nano_script(pnl_size_x) - $nano_script(trim3_x)) / 2.00]] set trim_y1 [format %.6f [expr ($nano_script(pnl_size_y) - $nano_script(trim3_y)) / 2.00]] set trim_x2 [format %.6f [expr $nano_script(pnl_size_x) - $trim_x1]] set trim_y2 [format %.6f [expr $nano_script(pnl_size_y) - $trim_y1]] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == "cs" || $LAYER == "ss"} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers if {$nano_script(rcc_trim1_x) > 0 || $nano_script(rcc_trim1_y) > 0} { set nano_script(final_trim_x) $nano_script(rcc_trim1_x) set nano_script(final_trim_y) $nano_script(rcc_trim1_y) set trim_x1 [format %.6f [expr ($nano_script(pnl_size_x) - $nano_script(final_trim_x)) / 2.0]] set trim_y1 [format %.6f [expr ($nano_script(pnl_size_y) - $nano_script(final_trim_y)) / 2.0]] set trim_x2 [format %.6f [expr $nano_script(pnl_size_x) - $trim_x1]] set trim_y2 [format %.6f [expr $nano_script(pnl_size_y) - $trim_y1]] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == "cs" || $LAYER == "ss" || $LAYER == "csm" || $LAYER == "ssm" || $LAYER == "cslk" || $LAYER == "sslk"} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers } else { set nano_script(final_trim_x) $nano_script(trim3_x) set nano_script(final_trim_y) $nano_script(trim3_y) } set nano_script(active_top) [format %.2f [expr ($nano_script(pnl_size_y) - $nano_script(final_trim_y)) / 2.0]] set nano_script(active_left) [format %.2f [expr ($nano_script(pnl_size_x) - $nano_script(final_trim_x)) / 2.0]] } COM sr_active,top=$nano_script(active_top),bottom=$nano_script(active_top),left=$nano_script(active_left),right=$nano_script(active_left) set nano_script(final_trim_text) $nano_script(final_trim_x) append nano_script(final_trim_text) " X " $nano_script(final_trim_y) COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=f_trim_size_x,value=$nano_script(final_trim_x),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=f_trim_size_y,value=$nano_script(final_trim_y),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=f_trim_text,value=$nano_script(final_trim_text),units=mm trim_text } ############################################################################# ## Procedure: tg_guide proc ::tg_guide {} { global widget env nano_script COMANS PAUSE DO_INFO -t matrix -e $env(JOB)/matrix set b_y1 [format %.6f [expr $nano_script(active_top) + 3.5]] set b_x1 [format %.6f [expr $nano_script(active_left) + 3.5]] set b_y2 [format %.6f [expr $nano_script(pnl_size_y) - $nano_script(active_top) - 3.5]] set b_x2 [format %.6f [expr $nano_script(pnl_size_x) - $nano_script(active_left) - 3.5]] set x1 [format %.6f [expr $nano_script(pnl_center_x)]] set x2 [format %.6f [expr $nano_script(pnl_center_x) + $nano_script(in_tg_x)]] set y1 [format %.6f [expr $nano_script(pnl_center_y) - ($nano_script(in_tg_y) / 2.0)]] set y2 [format %.6f [expr $nano_script(pnl_center_y) + ($nano_script(in_tg_y) / 2.0)]] set x3 [format %.6f [expr $nano_script(pnl_center_x) - 10.0]] COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t$} $LAYER] || [regexp {l[0-9]*b$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } set target1_layer "" set target2_layer "" if {$nano_script(buried_no) == 0} { set target1_layer $nano_script(out_drl_name) set target2_layer $nano_script(out_map_name) } if {$nano_script(buried_no) == 1} { if {$nano_script(num_layers) > 4} { set target1_layer $nano_script(b1_drl_name) set target2_layer $nano_script(b1_map_name) } } if {$nano_script(buried_no) == 2} { set target1_layer $nano_script(b1_drl_name) set target2_layer $nano_script(b1_map_name) } if {$nano_script(buried_no) == 3} { set target1_layer $nano_script(b1_drl_name) set target2_layer $nano_script(b1_map_name) } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { COM add_pad,attributes=no,x=$x1,y=$y1,symbol=nano_tg_p1,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x2,y=$y1,symbol=nano_tg_p2,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x1,y=$y2,symbol=nano_tg_p2,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 if {$nano_script(core_no) > 1} { COM add_pad,attributes=no,x=$x3,y=$b_y1,symbol=nano_bonding_p,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x3,y=$b_y2,symbol=nano_bonding_p,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $target2_layer} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { COM add_pad,attributes=no,x=$x1,y=$y1,symbol=nano_tg_p1,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x2,y=$y1,symbol=nano_tg_p2,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x1,y=$y2,symbol=nano_tg_p2,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $target1_layer} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { COM add_pad,attributes=no,x=$x1,y=$y1,symbol=r3150,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x2,y=$y1,symbol=r3150,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x1,y=$y2,symbol=r3150,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t1$} $LAYER] || [regexp {l[0-9]*b1$} $LAYER] || [regexp {l[0-9]*t2$} $LAYER] || [regexp {l[0-9]*b2$} $LAYER] || $LAYER == "cs" || $LAYER == "ss"} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { COM add_pad,attributes=no,x=$x1,y=$y1,symbol=s7500,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x2,y=$y1,symbol=s7500,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x1,y=$y2,symbol=s7500,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 if {$nano_script(core_no) > 1} { COM add_pad,attributes=no,x=$x3,y=$b_y1,symbol=s7500,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x3,y=$b_y2,symbol=s7500,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set x1 [format %.6f [expr $nano_script(pnl_center_x)]] set x2 [format %.6f [expr $nano_script(pnl_center_x) + $nano_script(b1_tg_x)]] set y1 [format %.6f [expr $nano_script(pnl_center_y) - ($nano_script(b1_tg_y) / 2.0)]] set y2 [format %.6f [expr $nano_script(pnl_center_y) + ($nano_script(b1_tg_y) / 2.0)]] COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t1$} $LAYER] || [regexp {l[0-9]*b1$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } set target1_layer "" set target2_layer "" if {$nano_script(buried_no) == 1} { set target1_layer $nano_script(out_drl_name) set target2_layer $nano_script(out_map_name) } if {$nano_script(buried_no) == 2} { set target1_layer $nano_script(b2_drl_name) set target2_layer $nano_script(b2_map_name) } if {$nano_script(buried_no) == 3} { set target1_layer $nano_script(b2_drl_name) set target2_layer $nano_script(b2_map_name) } set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $target2_layer} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } if {$nano_script(buried_no) > 0} { COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { COM add_pad,attributes=no,x=$x1,y=$y1,symbol=nano_tg_p1,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x2,y=$y1,symbol=nano_tg_p2,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x1,y=$y2,symbol=nano_tg_p2,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $target1_layer} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { COM add_pad,attributes=no,x=$x1,y=$y1,symbol=r3150,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x2,y=$y1,symbol=r3150,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x1,y=$y2,symbol=r3150,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t$} $LAYER] || [regexp {l[0-9]*b$} $LAYER] || [regexp {l[0-9]*t2$} $LAYER] || [regexp {l[0-9]*b2$} $LAYER] || $LAYER == "cs" || $LAYER == "ss"} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } if {$nano_script(buried_no) > 0} { COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { COM add_pad,attributes=no,x=$x1,y=$y1,symbol=s7500,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x2,y=$y1,symbol=s7500,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x1,y=$y2,symbol=s7500,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set x1 [format %.6f [expr $nano_script(pnl_center_x)]] set x2 [format %.6f [expr $nano_script(pnl_center_x) + $nano_script(b2_tg_x)]] set y1 [format %.6f [expr $nano_script(pnl_center_y) - ($nano_script(b2_tg_y) / 2.0)]] set y2 [format %.6f [expr $nano_script(pnl_center_y) + ($nano_script(b2_tg_y) / 2.0)]] COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t2$} $LAYER] || [regexp {l[0-9]*b2$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } set target1_layer "" set target2_layer "" if {$nano_script(buried_no) == 2} { set target1_layer $nano_script(out_drl_name) set target2_layer $nano_script(out_map_name) } if {$nano_script(buried_no) == 3} { set target1_layer $nano_script(b3_drl_name) set target2_layer $nano_script(b3_map_name) } set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $target2_layer} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { COM add_pad,attributes=no,x=$x1,y=$y1,symbol=nano_tg_p1,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x2,y=$y1,symbol=nano_tg_p2,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x1,y=$y2,symbol=nano_tg_p2,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $target1_layer} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { COM add_pad,attributes=no,x=$x1,y=$y1,symbol=r3150,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x2,y=$y1,symbol=r3150,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x1,y=$y2,symbol=r3150,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t$} $LAYER] || [regexp {l[0-9]*b$} $LAYER] || [regexp {l[0-9]*t1$} $LAYER] || [regexp {l[0-9]*b1$} $LAYER] || $LAYER == "cs" || $LAYER == "ss"} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } if {$nano_script(buried_no) > 1} { COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { COM add_pad,attributes=no,x=$x1,y=$y1,symbol=s7500,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x2,y=$y1,symbol=s7500,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$x1,y=$y2,symbol=s7500,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } } COM affected_layer,name=out,mode=all,affected=no COM clear_layers } ############################################################################# ## Procedure: bonding_guide proc ::bonding_guide {} { global widget env nano_script COMANS DO_INFO -t matrix -e $env(JOB)/matrix set b_y1 [format %.6f [expr $nano_script(active_top) + 3.5]] set b_x1 [format %.6f [expr $nano_script(active_left) + 3.5]] set b_y2 [format %.6f [expr $nano_script(pnl_size_y) - $nano_script(active_top) - 3.5]] set b_x2 [format %.6f [expr $nano_script(pnl_size_x) - $nano_script(active_left) - 3.5]] set nano_script(bond_x1) [format %.3f [expr $nano_script(pcb_area_min_x) - 5.000]] set nano_script(bond_x2) [format %.3f [expr $nano_script(pcb_area_max_x) + 5.000]] set nano_script(bond_x3) [format %.3f [expr $nano_script(pnl_min_x) + 5.000]] set nano_script(bond_x4) [format %.3f [expr $nano_script(pnl_max_x) - 5.000]] set nano_script(bond_y1) [format %.3f [expr $nano_script(pnl_center_y) + 4.775]] set nano_script(bond_y2) [format %.3f [expr $nano_script(bond_y1) + 65.000]] set nano_script(bond_y3) [format %.3f [expr $nano_script(bond_y2) + 70.000]] set nano_script(bond_y4) [format %.3f [expr $nano_script(bond_y3) + 70.000]] set nano_script(bond_y5) [format %.3f [expr $nano_script(bond_y4) + 70.000]] set nano_script(bond_y6) [format %.3f [expr $nano_script(bond_y1) - 65.000]] set nano_script(bond_y7) [format %.3f [expr $nano_script(bond_y6) - 70.000]] set nano_script(bond_y8) [format %.3f [expr $nano_script(bond_y7) - 70.000]] set nano_script(bond_y9) [format %.3f [expr $nano_script(bond_y8) - 70.000]] COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t$} $LAYER] || [regexp {l[0-9]*b$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set target_sym "rect11000x25000" COM add_pad,attributes=no,x=$b_x1,y=$nano_script(pnl_center_y),symbol=nano_bonding_p,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$b_x2,y=$nano_script(bond_y1),symbol=nano_bonding_p,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$nano_script(bond_x3),y=$nano_script(bond_y2),symbol=$target_sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$nano_script(bond_x4),y=$nano_script(bond_y2),symbol=$target_sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$nano_script(bond_x3),y=$nano_script(bond_y6),symbol=$target_sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$nano_script(bond_x4),y=$nano_script(bond_y6),symbol=$target_sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 if {$nano_script(pnl_size_y) > 300} { COM add_pad,attributes=no,x=$nano_script(bond_x3),y=$nano_script(bond_y3),symbol=$target_sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$nano_script(bond_x4),y=$nano_script(bond_y3),symbol=$target_sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$nano_script(bond_x3),y=$nano_script(bond_y7),symbol=$target_sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$nano_script(bond_x4),y=$nano_script(bond_y7),symbol=$target_sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } if {$nano_script(pnl_size_y) > 440} { COM add_pad,attributes=no,x=$nano_script(bond_x3),y=$nano_script(bond_y4),symbol=$target_sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$nano_script(bond_x4),y=$nano_script(bond_y4),symbol=$target_sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$nano_script(bond_x3),y=$nano_script(bond_y8),symbol=$target_sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$nano_script(bond_x4),y=$nano_script(bond_y8),symbol=$target_sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } if {$nano_script(pnl_size_y) > 580} { COM add_pad,attributes=no,x=$nano_script(bond_x3),y=$nano_script(bond_y5),symbol=$target_sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$nano_script(bond_x4),y=$nano_script(bond_y5),symbol=$target_sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$nano_script(bond_x3),y=$nano_script(bond_y9),symbol=$target_sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$nano_script(bond_x4),y=$nano_script(bond_y9),symbol=$target_sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } } COM affected_layer,name=out,mode=all,affected=no COM clear_layers } ############################################################################# ## Procedure: vent_out proc ::vent_out {} { global widget env nano_script COMANS DO_INFO -t matrix -e $env(JOB)/matrix COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == "cs" || $LAYER == "ss"} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { if {$nano_script(surface) == "1"} { set t1_x [format %.6f [expr $nano_script(active_left) + 3.0]] set t1_y [format %.6f [expr $nano_script(active_top) + 3.0]] set t2_x [expr $nano_script(pcb_area_min_x) - 3.0] set t2_y [expr $nano_script(pcb_area_min_y) - 3.0] COM fill_params,type=solid,origin_type=limits,solid_type=surface,min_brush=254,use_arcs=yes,symbol=nano_brick_h,dx=5.5,dy=5,break_partial=yes,cut_prims=yes,outline_draw=no,outline_width=0,outline_invert=no COM sr_fill,polarity=positive,step_margin_x=$t1_x,step_margin_y=$t1_y,step_max_dist_x=$t2_x,step_max_dist_y=$t2_y,sr_margin_x=3,sr_margin_y=3,sr_max_dist_x=0,sr_max_dist_y=0,nest_sr=no,consider_feat=no,consider_drill=no,consider_rout=no,dest=affected_layers,attributes=no } if {$nano_script(surface) == "2"} { set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == "csm" || $LAYER == "ssm"} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } set x1 [format %.6f [expr $nano_script(pcb_area_min_x) - 4.0]] set y1 [format %.6f [expr $nano_script(pcb_area_min_y) - 4.0]] set x2 [format %.6f [expr $nano_script(pcb_area_max_x) + 4.0]] set y2 [format %.6f [expr $nano_script(pcb_area_max_y) + 4.0]] add_rectangle "s2000" $x1 $y1 $x2 $y2 "positive" } } COM affected_layer,name=out,mode=all,affected=no COM clear_layers } ############################################################################# ## Procedure: add_rectangle proc ::add_rectangle {sym x1 y1 x2 y2 pol} { global widget env nano_script set line_x1 [format %.6f [expr $x1]] set line_y1 [format %.6f [expr $y1]] set line_x2 [format %.6f [expr $x1]] set line_y2 [format %.6f [expr $y2]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y2,symbol=$sym,polarity=$pol set line_x1 [format %.6f [expr $x1]] set line_y1 [format %.6f [expr $y2]] set line_x2 [format %.6f [expr $x2]] set line_y2 [format %.6f [expr $y2]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y2,symbol=$sym,polarity=$pol set line_x1 [format %.6f [expr $x2]] set line_y1 [format %.6f [expr $y2]] set line_x2 [format %.6f [expr $x2]] set line_y2 [format %.6f [expr $y1]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y2,symbol=$sym,polarity=$pol set line_x1 [format %.6f [expr $x2]] set line_y1 [format %.6f [expr $y1]] set line_x2 [format %.6f [expr $x1]] set line_y2 [format %.6f [expr $y1]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y2,symbol=$sym,polarity=$pol } ############################################################################# ## Procedure: laser_drl_break proc ::laser_drl_break {} { global widget env nano_script COM affected_filter,filter=(type=drill&context=board&side=top|bottom|inner|none) COM sel_break COM affected_filter,filter=(type=&context=board&side=top|bottom|inner|none) } ############################################################################# ## Procedure: trim_pth proc ::trim_pth {} { global widget env nano_script COMANS PAUSE DO_INFO -t matrix -e $env(JOB)/matrix ####################################### ########### Buried1 trim ############## ####################################### COM affected_layer,name=out,mode=all,affected=no COM clear_layers set trim_x1 "0.0000" set trim_y1 "0.0000" set trim_x2 [format %.6f $nano_script(pnl_size_x)] set trim_y2 [format %.6f $nano_script(pnl_size_y)] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set trim_x1 "0.0000" set trim_y1 "0.0000" set trim_x2 [format %.6f $nano_script(pnl_size_x)] set trim_y2 [format %.6f $nano_script(pnl_size_y)] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set trim_x1 [format %.6f [expr ($nano_script(pnl_size_x) - $nano_script(trim1_x)) / 2.00]] set trim_y1 [format %.6f [expr ($nano_script(pnl_size_y) - $nano_script(trim1_y)) / 2.00]] set trim_x2 [format %.6f [expr $nano_script(pnl_size_x) - $trim_x1]] set trim_y2 [format %.6f [expr $nano_script(pnl_size_y) - $trim_y1]] set nano_script(final_trim_x) $nano_script(trim1_x) set nano_script(final_trim_y) $nano_script(trim1_y) set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == "cs" || $LAYER == "ss" || $LAYER == "csm" || $LAYER == "ssm" || $LAYER == "cslk" || $LAYER == "sslk"} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set nano_script(active_top) [format %.2f [expr ($nano_script(pnl_size_y) - $nano_script(final_trim_y)) / 2.0]] set nano_script(active_left) [format %.2f [expr ($nano_script(pnl_size_x) - $nano_script(final_trim_x)) / 2.0]] COM sr_active,top=$nano_script(active_top),bottom=$nano_script(active_top),left=$nano_script(active_left),right=$nano_script(active_left) set nano_script(final_trim_text) $nano_script(final_trim_x) append nano_script(final_trim_text) " X " $nano_script(final_trim_y) COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=f_trim_size_x,value=$nano_script(final_trim_x),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=f_trim_size_y,value=$nano_script(final_trim_y),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=f_trim_text,value=$nano_script(final_trim_text),units=mm } ############################################################################# ## Procedure: trim_stg proc ::trim_stg {} { global widget env nano_script COMANS DO_INFO -t matrix -e $env(JOB)/matrix COM affected_layer,name=out,mode=all,affected=no COM clear_layers set trim_x1 "0.0000" set trim_y1 "0.0000" set trim_x2 [format %.6f $nano_script(pnl_size_x)] set trim_y2 [format %.6f $nano_script(pnl_size_y)] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set trim_x1 "0.0000" set trim_y1 "0.0000" set trim_x2 [format %.6f $nano_script(pnl_size_x)] set trim_y2 [format %.6f $nano_script(pnl_size_y)] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } ####################################### ########### Buried1 trim ############## ####################################### COM affected_layer,name=out,mode=all,affected=no COM clear_layers set trim_x1 [format %.6f [expr ($nano_script(pnl_size_x) - $nano_script(trim1_x)) / 2.00]] set trim_y1 [format %.6f [expr ($nano_script(pnl_size_y) - $nano_script(trim1_y)) / 2.00]] set trim_x2 [format %.6f [expr $nano_script(pnl_size_x) - $trim_x1]] set trim_y2 [format %.6f [expr $nano_script(pnl_size_y) - $trim_y1]] set nano_script(final_trim_x) $nano_script(trim1_x) set nano_script(final_trim_y) $nano_script(trim1_y) if {$nano_script(buried_no) == 1} { set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t1$} $LAYER] || [regexp {l[0-9]*b1$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers if {$nano_script(rcc_trim2_x) > 0 || $nano_script(rcc_trim2_y) > 0} { set trim_x1 [format %.6f [expr ($nano_script(pnl_size_x) - $nano_script(rcc_trim2_x)) / 2.0]] set trim_y1 [format %.6f [expr ($nano_script(pnl_size_y) - $nano_script(rcc_trim2_y)) / 2.0]] set trim_x2 [format %.6f [expr $nano_script(pnl_size_x) - $trim_x1]] set trim_y2 [format %.6f [expr $nano_script(pnl_size_y) - $trim_y1]] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t1$} $LAYER] || [regexp {l[0-9]*b1$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers } set trim_x1 [format %.6f [expr ($nano_script(pnl_size_x) - $nano_script(trim2_x)) / 2.00]] set trim_y1 [format %.6f [expr ($nano_script(pnl_size_y) - $nano_script(trim2_y)) / 2.00]] set trim_x2 [format %.6f [expr $nano_script(pnl_size_x) - $trim_x1]] set trim_y2 [format %.6f [expr $nano_script(pnl_size_y) - $trim_y1]] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == "cs" || $LAYER == "ss"} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers if {$nano_script(rcc_trim1_x) > 0 || $nano_script(rcc_trim1_y) > 0} { set nano_script(final_trim_x) $nano_script(rcc_trim1_x) set nano_script(final_trim_y) $nano_script(rcc_trim1_y) set trim_x1 [format %.6f [expr ($nano_script(pnl_size_x) - $nano_script(final_trim_x)) / 2.0]] set trim_y1 [format %.6f [expr ($nano_script(pnl_size_y) - $nano_script(final_trim_y)) / 2.0]] set trim_x2 [format %.6f [expr $nano_script(pnl_size_x) - $trim_x1]] set trim_y2 [format %.6f [expr $nano_script(pnl_size_y) - $trim_y1]] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == "cs" || $LAYER == "ss"} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } } else { set nano_script(final_trim_x) $nano_script(trim2_x) set nano_script(final_trim_y) $nano_script(trim2_y) } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set nano_script(active_top) [format %.2f [expr ($nano_script(pnl_size_y) - $nano_script(final_trim_y)) / 2.0]] set nano_script(active_left) [format %.2f [expr ($nano_script(pnl_size_x) - $nano_script(final_trim_x)) / 2.0]] } if {$nano_script(buried_no) == 2} { set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t1$} $LAYER] || [regexp {l[0-9]*b1$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set trim_x1 [format %.6f [expr ($nano_script(pnl_size_x) - $nano_script(trim2_x)) / 2.00]] set trim_y1 [format %.6f [expr ($nano_script(pnl_size_y) - $nano_script(trim2_y)) / 2.00]] set trim_x2 [format %.6f [expr $nano_script(pnl_size_x) - $trim_x1]] set trim_y2 [format %.6f [expr $nano_script(pnl_size_y) - $trim_y1]] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t2$} $LAYER] || [regexp {l[0-9]*b2$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers if {$nano_script(rcc_trim2_x) > 0 || $nano_script(rcc_trim2_y) > 0} { set trim_x1 [format %.6f [expr ($nano_script(pnl_size_x) - $nano_script(rcc_trim2_x)) / 2.0]] set trim_y1 [format %.6f [expr ($nano_script(pnl_size_y) - $nano_script(rcc_trim2_y)) / 2.0]] set trim_x2 [format %.6f [expr $nano_script(pnl_size_x) - $trim_x2]] set trim_y2 [format %.6f [expr $nano_script(pnl_size_y) - $trim_y2]] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t2$} $LAYER] || [regexp {l[0-9]*b2$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers } set trim_x1 [format %.6f [expr ($nano_script(pnl_size_x) - $nano_script(trim3_x)) / 2.00]] set trim_y1 [format %.6f [expr ($nano_script(pnl_size_y) - $nano_script(trim3_y)) / 2.00]] set trim_x2 [format %.6f [expr $nano_script(pnl_size_x) - $trim_x1]] set trim_y2 [format %.6f [expr $nano_script(pnl_size_y) - $trim_y1]] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == "cs" || $LAYER == "ss"} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } COM affected_layer,name=out,mode=all,affected=no COM clear_layers if {$nano_script(rcc_trim1_x) > 0 || $nano_script(rcc_trim1_y) > 0} { set nano_script(final_trim_x) $nano_script(rcc_trim1_x) set nano_script(final_trim_y) $nano_script(rcc_trim1_y) set trim_x1 [format %.6f [expr ($nano_script(pnl_size_x) - $nano_script(final_trim_x)) / 2.0]] set trim_y1 [format %.6f [expr ($nano_script(pnl_size_y) - $nano_script(final_trim_y)) / 2.0]] set trim_x2 [format %.6f [expr $nano_script(pnl_size_x) - $trim_x1]] set trim_y2 [format %.6f [expr $nano_script(pnl_size_y) - $trim_y1]] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == "cs" || $LAYER == "ss" || $LAYER == "csm" || $LAYER == "ssm" || $LAYER == "cslk" || $LAYER == "sslk"} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } } else { set nano_script(final_trim_x) $nano_script(trim3_x) set nano_script(final_trim_y) $nano_script(trim3_y) } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set nano_script(active_top) [format %.2f [expr ($nano_script(pnl_size_y) - $nano_script(final_trim_y)) / 2.0]] set nano_script(active_left) [format %.2f [expr ($nano_script(pnl_size_x) - $nano_script(final_trim_x)) / 2.0]] } COM sr_active,top=$nano_script(active_top),bottom=$nano_script(active_top),left=$nano_script(active_left),right=$nano_script(active_left) set nano_script(final_trim_text) $nano_script(final_trim_x) append nano_script(final_trim_text) " X " $nano_script(final_trim_y) COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=f_trim_size_x,value=$nano_script(final_trim_x),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=f_trim_size_y,value=$nano_script(final_trim_y),units=mm COM set_attribute,type=step,job=$env(JOB),name1=$env(STEP),name2=,name3=,attribute=f_trim_text,value=$nano_script(final_trim_text),units=mm trim_text } ############################################################################# ## Procedure: nano_stk proc ::nano_stk {} { global widget env nano_script set nano_script(stk_t1_drl_name) 1-2-3drl set nano_script(stk_t1_map_name) 1-2-3dd set nano_script(stk_t1_win_name) 1-2-3win set nano_script(stk_b1_drl_name) $nano_script(b2_no)\-$nano_script(b1_no)\-$nano_script(num_layers)\drl set nano_script(stk_b1_map_name) $nano_script(b2_no)\-$nano_script(b1_no)\-$nano_script(num_layers)\dd set nano_script(stk_b1_win_name) $nano_script(b2_no)\-$nano_script(b1_no)\-$nano_script(num_layers)\win set nano_script(stk_t2_drl_name) 2-3drl set nano_script(stk_t2_map_name) 2-3dd set nano_script(stk_t2_win_name) 2-3win set nano_script(stk_b2_drl_name) $nano_script(b2_no)\-$nano_script(b1_no)\drl set nano_script(stk_b2_map_name) $nano_script(b2_no)\-$nano_script(b1_no)\dd set nano_script(stk_b2_win_name) $nano_script(b2_no)\-$nano_script(b1_no)\win set nano_script(stk_t1_layer) $nano_script(layer2) set nano_script(stk_b1_layer) $nano_script(layer$nano_script(b1_no)) set nano_script(stk_t2_layer) $nano_script(layer3) set nano_script(stk_b2_layer) $nano_script(layer$nano_script(b2_no)) set I 0 DO_INFO -t matrix -e $env(JOB)/matrix set LAY_NO 1 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(stk_t1_drl_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stk_t1_drl } if {$LAYER == $nano_script(stk_t1_map_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stk_t1_map } if {$LAYER == $nano_script(stk_t1_win_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stk_t1_win COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.out_mirror,value=yes,units=mm } if {$LAYER == $nano_script(stk_b1_drl_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stk_b1_drl } if {$LAYER == $nano_script(stk_b1_map_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stk_b1_map } if {$LAYER == $nano_script(stk_b1_win_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stk_b1_win } if {$LAYER == $nano_script(stk_t2_drl_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stk_t2_drl } if {$LAYER == $nano_script(stk_t2_map_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stk_t2_map } if {$LAYER == $nano_script(stk_t2_win_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stk_t2_win COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.out_mirror,value=yes,units=mm } if {$LAYER == $nano_script(stk_b2_drl_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stk_b2_drl } if {$LAYER == $nano_script(stk_b2_map_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stk_b2_map } if {$LAYER == $nano_script(stk_b2_win_name)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=.comment,value=stk_b2_win } if {$LAYER == $nano_script(stk_t1_layer)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=etec_comment1,value=stk_t1_lay } if {$LAYER == $nano_script(stk_b1_layer)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=etec_comment1,value=stk_b1_lay } if {$LAYER == $nano_script(stk_t2_layer)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=etec_comment1,value=stk_t2_lay } if {$LAYER == $nano_script(stk_b2_layer)} { COM set_attribute,type=layer,job=$env(JOB),name1=$env(STEP),name2=$LAYER,name3=,attribute=etec_comment1,value=stk_b2_lay } } } if {$nano_script(panelize) == "1"} { nano_pnl hide vent_dot vent_brick in_dot_line trim_stg vent_out if {$nano_script(core_no) > 1} { bonding_guide } tg_guide nano_m_tg outer_layers_trim nano_auto COM open_auto_panelize,job=$env(JOB),panel=,pcb=,scheme= COM autopan_place_objects,job=$env(JOB),panel=$env(STEP),pcb=$nano_script(pcs_step),scheme=nano_stk COM close_auto_panelize nano_g_tg laser_drl_break resize_guide_drill cleanup_map } exit } ############################################################################# ## Procedure: nano_auto proc ::nano_auto {} { global widget env nano_script COMANS set auto_top_lay pt_mask_area DO_INFO -t layer -e $env(JOB)/$env(STEP)/$auto_top_lay -d exists if {$gEXISTS == "no"} { COM create_layer,layer=$auto_top_lay,context=board,type=document,polarity=positive,ins_layer= } COM truncate_layer,layer=$auto_top_lay if {$nano_script(buried_no) == 0} { nano_auto_old_b0 } if {$nano_script(buried_no) == 1} { nano_auto_old_b1 } if {$nano_script(buried_no) == 2} { nano_auto_old_b2 } } ############################################################################# ## Procedure: nano_auto_old_b0 proc ::nano_auto_old_b0 {} { global widget env nano_script COMANS DO_INFO -t matrix -e $env(JOB)/matrix ####################################### ########### buried drl = 0 ############## ####################################### COM affected_layer,name=out,mode=all,affected=no COM clear_layers if {$nano_script(buried_no) == 0} { if {$nano_script(rcc_trim1_x) > 0 || $nano_script(rcc_trim1_y) > 0} { set x_ref $nano_script(rcc_trim1_x) set y_ref $nano_script(rcc_trim1_y) } else { set x_ref $nano_script(trim1_x) set y_ref $nano_script(trim1_y) } set auto_x0 [format %.6f [expr $nano_script(pnl_center_x) ]] set auto_y0 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00)]] set auto_x1 [format %.6f [expr (($nano_script(pnl_size_x) - $x_ref) / 2.00) + 4.5]] set auto_y1 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 38.0]] set auto_y1_1 [format %.6f [expr $nano_script(pnl_size_y) - (($nano_script(pnl_size_y) - $y_ref) / 2.00) - 50.0]] set auto_x2 [format %.6f [expr (($nano_script(pnl_size_x) - $x_ref) / 2.00) + $x_ref - 4.5]] set auto_y2 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 38.0]] set auto_y2_1 [format %.6f [expr $nano_script(pnl_size_y) - (($nano_script(pnl_size_y) - $y_ref) / 2.00) - 35.0]] set auto_y3 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 4.5]] set auto_y4 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 8.5]] set auto_y5 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 249.5]] set auto_y6 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 253.5]] foreach LAYER $gROWname { if {$LAYER == $nano_script(out_drl_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set symbol "r3000" COM cur_atr_reset #COM cur_atr_set,attribute=.out_scale COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 set symbol "r2000" COM add_pad,attributes=no,x=$auto_x2,y=$auto_y3,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y4,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y5,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y6,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers DO_INFO -t layer -e $env(JOB)/$env(STEP)/cs -d exists if {$gEXISTS == "yes"} { COM affected_layer,name=cs,mode=single,affected=yes COM cur_atr_reset #COM cur_atr_set,attribute=.out_scale set symbol "old_auto_top_b1" COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM affected_layer,name=out,mode=all,affected=no COM clear_layers } DO_INFO -t layer -e $env(JOB)/$env(STEP)/ss -d exists if {$gEXISTS == "yes"} { COM affected_layer,name=ss,mode=single,affected=yes COM cur_atr_reset #COM cur_atr_set,attribute=.out_scale set symbol "old_auto_bot_b1" COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM affected_layer,name=out,mode=all,affected=no COM clear_layers } } } ############################################################################# ## Procedure: nano_auto_old_b1 proc ::nano_auto_old_b1 {} { global widget env nano_script COMANS DO_INFO -t matrix -e $env(JOB)/matrix ####################################### ########### buried drl = 1 ############## ####################################### COM affected_layer,name=out,mode=all,affected=no COM clear_layers if {$nano_script(buried_no) == 1} { if {$nano_script(rcc_trim1_x) > 0 || $nano_script(rcc_trim1_y) > 0} { set x_ref $nano_script(rcc_trim1_x) set y_ref $nano_script(rcc_trim1_y) if {$nano_script(rcc_trim2_x) > 0 || $nano_script(rcc_trim2_y) > 0} { set x_ref $nano_script(rcc_trim2_x) set y_ref $nano_script(rcc_trim2_y) } } else { set x_ref $nano_script(trim2_x) set y_ref $nano_script(trim2_y) if {$nano_script(num_layers) == 4} { set x_ref $nano_script(trim1_x) set y_ref $nano_script(trim1_y) } } set auto_x0 [format %.6f [expr $nano_script(pnl_center_x) ]] set auto_y0 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00)]] set auto_x1 [format %.6f [expr (($nano_script(pnl_size_x) - $x_ref) / 2.00) + 4.5]] set auto_y1 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 38.0]] set auto_y1_1 [format %.6f [expr $nano_script(pnl_size_y) - (($nano_script(pnl_size_y) - $y_ref) / 2.00) - 50.0]] set auto_x2 [format %.6f [expr (($nano_script(pnl_size_x) - $x_ref) / 2.00) + $x_ref - 4.5]] set auto_y2 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 38.0]] set auto_y2_1 [format %.6f [expr $nano_script(pnl_size_y) - (($nano_script(pnl_size_y) - $y_ref) / 2.00) - 35.0]] set auto_y3 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 4.5]] set auto_y4 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 8.5]] set auto_y5 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 249.5]] set auto_y6 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 253.5]] foreach LAYER $gROWname { if {$LAYER == $nano_script(out_drl_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set symbol "r3000" COM cur_atr_reset #COM cur_atr_set,attribute=.out_scale COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 set symbol "r2000" COM add_pad,attributes=no,x=$auto_x2,y=$auto_y3,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y4,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y5,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y6,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers DO_INFO -t layer -e $env(JOB)/$env(STEP)/cs -d exists if {$gEXISTS == "yes"} { COM affected_layer,name=cs,mode=single,affected=yes COM cur_atr_reset #COM cur_atr_set,attribute=.out_scale set symbol "old_auto_top_b1" COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM affected_layer,name=out,mode=all,affected=no COM clear_layers } DO_INFO -t layer -e $env(JOB)/$env(STEP)/ss -d exists if {$gEXISTS == "yes"} { COM affected_layer,name=ss,mode=single,affected=yes COM cur_atr_reset #COM cur_atr_set,attribute=.out_scale set symbol "old_auto_bot_b1" COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM affected_layer,name=out,mode=all,affected=no COM clear_layers } ########### buried layer ##################### if {$nano_script(rcc_trim1_x) > 0 || $nano_script(rcc_trim1_y) > 0} { set x_ref $nano_script(rcc_trim1_x) set y_ref $nano_script(rcc_trim1_y) } else { set x_ref $nano_script(trim1_x) set y_ref $nano_script(trim1_y) } set auto_x0 [format %.6f [expr $nano_script(pnl_center_x) ]] set auto_y0 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00)]] set auto_x1 [format %.6f [expr (($nano_script(pnl_size_x) - $x_ref) / 2.00) + 4.5]] set auto_y1 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 38.0]] set auto_y1_1 [format %.6f [expr $nano_script(pnl_size_y) - (($nano_script(pnl_size_y) - $y_ref) / 2.00) - 50.0]] set auto_x2 [format %.6f [expr (($nano_script(pnl_size_x) - $x_ref) / 2.00) + $x_ref - 4.5]] set auto_y2 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 38.0]] set auto_y2_1 [format %.6f [expr $nano_script(pnl_size_y) - (($nano_script(pnl_size_y) - $y_ref) / 2.00) - 35.0]] set auto_y3 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 4.5]] set auto_y4 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 8.5]] set auto_y5 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 249.5]] set auto_y6 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 253.5]] foreach LAYER $gROWname { if {$LAYER == $nano_script(b1_drl_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } if {$LAYER == $nano_script(b1_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set symbol "r3000" COM cur_atr_reset #COM cur_atr_set,attribute=.out_scale COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 set symbol "r2000" COM add_pad,attributes=no,x=$auto_x2,y=$auto_y3,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y4,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y5,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y6,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set auto_top_lay $nano_script(b1_top_lay) set auto_btm_lay $nano_script(b1_btm_lay) DO_INFO -t layer -e $env(JOB)/$env(STEP)/$auto_top_lay -d exists if {$gEXISTS == "yes"} { COM affected_layer,name=$auto_top_lay,mode=single,affected=yes COM cur_atr_reset #COM cur_atr_set,attribute=.out_scale set symbol "old_auto_top_b1" COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } DO_INFO -t layer -e $env(JOB)/$env(STEP)/$auto_btm_lay -d exists if {$gEXISTS == "yes"} { COM affected_layer,name=out,mode=all,affected=no COM clear_layers COM affected_layer,name=$auto_btm_lay,mode=single,affected=yes COM cur_atr_reset #COM cur_atr_set,attribute=.out_scale set symbol "old_auto_bot_b1" COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM affected_layer,name=out,mode=all,affected=no COM clear_layers } } } ############################################################################# ## Procedure: nano_auto_old_b2 proc ::nano_auto_old_b2 {} { global widget env nano_script COMANS DO_INFO -t matrix -e $env(JOB)/matrix ####################################### ########### buried drl = 1 ############## ####################################### COM affected_layer,name=out,mode=all,affected=no COM clear_layers if {$nano_script(buried_no) == 2} { if {$nano_script(rcc_trim1_x) > 0 || $nano_script(rcc_trim1_y) > 0} { set x_ref $nano_script(rcc_trim1_x) set y_ref $nano_script(rcc_trim1_y) if {$nano_script(rcc_trim2_x) > 0 || $nano_script(rcc_trim2_y) > 0} { set x_ref $nano_script(rcc_trim2_x) set y_ref $nano_script(rcc_trim2_y) } } else { set x_ref $nano_script(trim3_x) set y_ref $nano_script(trim3_y) } set auto_x0 [format %.6f [expr $nano_script(pnl_center_x) ]] set auto_y0 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00)]] set auto_x1 [format %.6f [expr (($nano_script(pnl_size_x) - $x_ref) / 2.00) + 4.5]] set auto_y1 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 38.0]] set auto_y1_1 [format %.6f [expr $nano_script(pnl_size_y) - (($nano_script(pnl_size_y) - $y_ref) / 2.00) - 50.0]] set auto_x2 [format %.6f [expr (($nano_script(pnl_size_x) - $x_ref) / 2.00) + $x_ref - 4.5]] set auto_y2 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 38.0]] set auto_y2_1 [format %.6f [expr $nano_script(pnl_size_y) - (($nano_script(pnl_size_y) - $y_ref) / 2.00) - 35.0]] set auto_y3 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 4.5]] set auto_y4 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 8.5]] set auto_y5 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 249.5]] set auto_y6 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 253.5]] foreach LAYER $gROWname { if {$LAYER == $nano_script(out_drl_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set symbol "r3000" COM cur_atr_reset #COM cur_atr_set,attribute=.out_scale COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 set symbol "r2000" COM add_pad,attributes=no,x=$auto_x2,y=$auto_y3,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y4,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y5,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y6,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set auto_top_lay "cs" set auto_btm_lay "ss" DO_INFO -t layer -e $env(JOB)/$env(STEP)/$auto_top_lay -d exists if {$gEXISTS == "yes"} { COM affected_layer,name=$auto_top_lay,mode=single,affected=yes COM cur_atr_reset #COM cur_atr_set,attribute=.out_scale set symbol "old_auto_top_b1" COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } DO_INFO -t layer -e $env(JOB)/$env(STEP)/$auto_btm_lay -d exists if {$gEXISTS == "yes"} { COM affected_layer,name=out,mode=all,affected=no COM clear_layers COM affected_layer,name=$auto_btm_lay,mode=single,affected=yes COM cur_atr_reset #COM cur_atr_set,attribute=.out_scale set symbol "old_auto_bot_b1" COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM affected_layer,name=out,mode=all,affected=no COM clear_layers } ########### buried2 layer ##################### if {$nano_script(rcc_trim1_x) > 0 || $nano_script(rcc_trim1_y) > 0} { set x_ref $nano_script(rcc_trim1_x) set y_ref $nano_script(rcc_trim1_y) } else { set x_ref $nano_script(trim2_x) set y_ref $nano_script(trim2_y) } set auto_x0 [format %.6f [expr $nano_script(pnl_center_x) ]] set auto_y0 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00)]] set auto_x1 [format %.6f [expr (($nano_script(pnl_size_x) - $x_ref) / 2.00) + 4.5]] set auto_y1 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 38.0]] set auto_y1_1 [format %.6f [expr $nano_script(pnl_size_y) - (($nano_script(pnl_size_y) - $y_ref) / 2.00) - 50.0]] set auto_x2 [format %.6f [expr (($nano_script(pnl_size_x) - $x_ref) / 2.00) + $x_ref - 4.5]] set auto_y2 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 38.0]] set auto_y2_1 [format %.6f [expr $nano_script(pnl_size_y) - (($nano_script(pnl_size_y) - $y_ref) / 2.00) - 35.0]] set auto_y3 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 4.5]] set auto_y4 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 8.5]] set auto_y5 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 249.5]] set auto_y6 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 253.5]] foreach LAYER $gROWname { if {$LAYER == $nano_script(b2_drl_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } if {$LAYER == $nano_script(b2_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set symbol "r3000" COM cur_atr_reset #COM cur_atr_set,attribute=.out_scale COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 set symbol "r2000" COM add_pad,attributes=no,x=$auto_x2,y=$auto_y3,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y4,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y5,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y6,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set auto_top_lay $nano_script(b2_top_lay) set auto_btm_lay $nano_script(b2_btm_lay) DO_INFO -t layer -e $env(JOB)/$env(STEP)/$auto_top_lay -d exists if {$gEXISTS == "yes"} { COM affected_layer,name=$auto_top_lay,mode=single,affected=yes COM cur_atr_reset #COM cur_atr_set,attribute=.out_scale set symbol "old_auto_top_b1" COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } DO_INFO -t layer -e $env(JOB)/$env(STEP)/$auto_btm_lay -d exists if {$gEXISTS == "yes"} { COM affected_layer,name=out,mode=all,affected=no COM clear_layers COM affected_layer,name=$auto_btm_lay,mode=single,affected=yes COM cur_atr_reset #COM cur_atr_set,attribute=.out_scale set symbol "old_auto_bot_b1" COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM affected_layer,name=out,mode=all,affected=no COM clear_layers } ########### buried1 layer ##################### set x_ref $nano_script(trim1_x) set y_ref $nano_script(trim1_y) set auto_x0 [format %.6f [expr $nano_script(pnl_center_x) ]] set auto_y0 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00)]] set auto_x1 [format %.6f [expr (($nano_script(pnl_size_x) - $x_ref) / 2.00) + 4.5]] set auto_y1 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 38.0]] set auto_y1_1 [format %.6f [expr $nano_script(pnl_size_y) - (($nano_script(pnl_size_y) - $y_ref) / 2.00) - 50.0]] set auto_x2 [format %.6f [expr (($nano_script(pnl_size_x) - $x_ref) / 2.00) + $x_ref - 4.5]] set auto_y2 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 38.0]] set auto_y2_1 [format %.6f [expr $nano_script(pnl_size_y) - (($nano_script(pnl_size_y) - $y_ref) / 2.00) - 35.0]] set auto_y3 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 4.5]] set auto_y4 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 8.5]] set auto_y5 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 249.5]] set auto_y6 [format %.6f [expr (($nano_script(pnl_size_y) - $y_ref) / 2.00) + 253.5]] foreach LAYER $gROWname { if {$LAYER == $nano_script(b1_drl_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } if {$LAYER == $nano_script(b1_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set symbol "r3000" COM cur_atr_reset #COM cur_atr_set,attribute=.out_scale COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 set symbol "r2000" COM add_pad,attributes=no,x=$auto_x2,y=$auto_y3,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y4,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y5,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y6,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set auto_top_lay $nano_script(b1_top_lay) set auto_btm_lay $nano_script(b1_btm_lay) DO_INFO -t layer -e $env(JOB)/$env(STEP)/$auto_top_lay -d exists if {$gEXISTS == "yes"} { COM affected_layer,name=$auto_top_lay,mode=single,affected=yes COM cur_atr_reset #COM cur_atr_set,attribute=.out_scale set symbol "old_auto_top_b1" COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } DO_INFO -t layer -e $env(JOB)/$env(STEP)/$auto_btm_lay -d exists if {$gEXISTS == "yes"} { COM affected_layer,name=out,mode=all,affected=no COM clear_layers COM affected_layer,name=$auto_btm_lay,mode=single,affected=yes COM cur_atr_reset #COM cur_atr_set,attribute=.out_scale set symbol "old_auto_bot_b1" COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x1,y=$auto_y1_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$auto_x2,y=$auto_y2_1,symbol=$symbol,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM affected_layer,name=out,mode=all,affected=no COM clear_layers } } } ############################################################################# ## Procedure: resize_guide_drill proc ::resize_guide_drill {} { global widget nano_script env COMMANS set symbols "r1000\;r2000\;r3000\;r3150\;r3200" COM affected_filter,filter=(type=drill&context=board&side=top|bottom|inner|none) COM filter_set,filter_name=popup,update_popup=no,feat_types=pad COM filter_set,filter_name=popup,update_popup=no,include_syms=$symbols 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 sel_resize,size=5,corner_ctl=no COM filter_reset,filter_name=popup COM sel_delete_atr,attributes=.pnl_place COM affected_filter,filter=(type=&context=board&side=top|bottom|inner|none) } ############################################################################# ## Procedure: trim_text proc ::trim_text {} { global widget env nano_script COMANS DO_INFO -t matrix -e $env(JOB)/matrix if {$nano_script(num_layers) < 3} { COM affected_layer,name=out,mode=all,affected=no COM clear_layers set trim_x1 "0.0000" set trim_y1 "0.0000" set trim_x2 [format %.6f $nano_script(pnl_size_x)] set trim_y2 [format %.6f $nano_script(pnl_size_y)] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {$LAYER == $nano_script(out_map_name)} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "r500" set pol "negative" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol set sym "r200" set pol "positive" add_rectangle $sym $trim_x1 $trim_y1 $trim_x2 $trim_y2 $pol } } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set target_layer $nano_script(out_map_name) set text_x [format %.2f [expr $nano_script(pnl_center_x) + 5.0]] set text_y [expr $nano_script(pnl_size_y) + 0.5] set text_contents "PANEL SIZE" append text_contents " " $nano_script(pnl_size_x) "X" $nano_script(pnl_size_y) COM affected_layer,name=$target_layer,mode=single,affected=yes COM add_text,attributes=no,type=string,x=$text_x,y=$text_y,text=$text_contents,x_size=1,y_size=1.2,w_factor=0.492125988,polarity=positive,angle=0,mirror=no,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 COM affected_layer,name=out,mode=all,affected=no COM clear_layers if {$nano_script(buried_no) == 0} { if {$nano_script(trim1_x) != $nano_script(pnl_size_x) || $nano_script(trim1_y) != $nano_script(pnl_size_y)} { set target_layer $nano_script(out_map_name) set text_x [expr $nano_script(pnl_center_x) + 5.0] set text_y [expr $nano_script(pnl_center_y) + ($nano_script(trim1_y) / 2.0) + 0.5] set text_contents 1-$nano_script(num_layers)\TRIM append text_contents " " $nano_script(trim1_x) "X" $nano_script(trim1_y) COM affected_layer,name=$target_layer,mode=single,affected=yes COM add_text,attributes=no,type=string,x=$text_x,y=$text_y,text=$text_contents,x_size=1,y_size=1.2,w_factor=0.492125988,polarity=positive,angle=0,mirror=no,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 COM affected_layer,name=out,mode=all,affected=no COM clear_layers if {$nano_script(rcc_trim1_x) > 0 || $nano_script(rcc_trim1_y) > 0} { set target_layer $nano_script(out_map_name) set text_x [expr $nano_script(pnl_center_x) + 5.0] set text_y [expr $nano_script(pnl_center_y) + ($nano_script(rcc_trim1_y) / 2.0) + 0.5] set text_contents "RCC TRIM" append text_contents " " $nano_script(rcc_trim1_x) "X" $nano_script(rcc_trim1_y) COM affected_layer,name=$target_layer,mode=single,affected=yes COM add_text,attributes=no,type=string,x=$text_x,y=$text_y,text=$text_contents,x_size=1,y_size=1.2,w_factor=0.492125988,polarity=positive,angle=0,mirror=no,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 COM affected_layer,name=out,mode=all,affected=no COM clear_layers } } } if {$nano_script(buried_no) == 1} { if {$nano_script(trim2_x) > 0 || $nano_script(trim2_y) > 0} { if {$nano_script(num_layers) > 4} { set target_layer $nano_script(out_map_name) set text_x [expr $nano_script(pnl_center_x) + 5.0] set text_y [expr $nano_script(pnl_center_y) + ($nano_script(trim2_y) / 2.0) + 0.5] set text_contents 1-$nano_script(num_layers)\TRIM append text_contents " " $nano_script(trim2_x) "X" $nano_script(trim2_y) COM affected_layer,name=$target_layer,mode=single,affected=yes COM add_text,attributes=no,type=string,x=$text_x,y=$text_y,text=$text_contents,x_size=1,y_size=1.2,w_factor=0.492125988,polarity=positive,angle=0,mirror=no,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 COM affected_layer,name=out,mode=all,affected=no COM clear_layers } } if {$nano_script(trim1_x) > 0 || $nano_script(trim1_y) > 0} { set target_layer $nano_script(out_map_name) set text_x [expr $nano_script(pnl_center_x) + 5.0] set text_y [expr $nano_script(pnl_center_y) + ($nano_script(trim1_y) / 2.0) + 0.5] set text_contents 2-$nano_script(b1_no)\TRIM #if {$nano_script(num_layers) > 4} { # set text_contents 2-$nano_script(b1_no)\TRIM #} append text_contents " " $nano_script(trim1_x) "X" $nano_script(trim1_y) COM affected_layer,name=$target_layer,mode=single,affected=yes COM add_text,attributes=no,type=string,x=$text_x,y=$text_y,text=$text_contents,x_size=1,y_size=1.2,w_factor=0.492125988,polarity=positive,angle=0,mirror=no,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 COM affected_layer,name=out,mode=all,affected=no COM clear_layers } if {$nano_script(rcc_trim2_x) > 0 || $nano_script(rcc_trim2_y) > 0} { set target_layer $nano_script(out_map_name) set text_x [expr $nano_script(pnl_center_x) + 5.0] set text_y [expr $nano_script(pnl_center_y) + ($nano_script(rcc_trim2_y) / 2.0) + 0.5] set text_contents "RCC TRIM" append text_contents " " $nano_script(rcc_trim2_x) "X" $nano_script(rcc_trim2_y) COM affected_layer,name=$target_layer,mode=single,affected=yes COM add_text,attributes=no,type=string,x=$text_x,y=$text_y,text=$text_contents,x_size=1,y_size=1.2,w_factor=0.492125988,polarity=positive,angle=0,mirror=no,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 COM affected_layer,name=out,mode=all,affected=no COM clear_layers } if {$nano_script(rcc_trim1_x) > 0 || $nano_script(rcc_trim1_y) > 0} { set target_layer $nano_script(out_map_name) set text_x [expr $nano_script(pnl_center_x) + 5.0] set text_y [expr $nano_script(pnl_center_y) + ($nano_script(rcc_trim1_y) / 2.0) + 0.5] set text_contents "RCC TRIM" append text_contents " " $nano_script(rcc_trim1_x) "X" $nano_script(rcc_trim1_y) COM affected_layer,name=$target_layer,mode=single,affected=yes COM add_text,attributes=no,type=string,x=$text_x,y=$text_y,text=$text_contents,x_size=1,y_size=1.2,w_factor=0.492125988,polarity=positive,angle=0,mirror=no,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 COM affected_layer,name=out,mode=all,affected=no COM clear_layers } } if {$nano_script(buried_no) == 2} { if {$nano_script(trim3_x) > 0 || $nano_script(trim3_y) > 0} { set target_layer $nano_script(out_map_name) set text_x [expr $nano_script(pnl_center_x) + 5.0] set text_y [expr $nano_script(pnl_center_y) + ($nano_script(trim3_y) / 2.0) + 0.5] set text_contents 1-$nano_script(num_layers)\TRIM append text_contents " " $nano_script(trim3_x) "X" $nano_script(trim3_y) COM affected_layer,name=$target_layer,mode=single,affected=yes COM add_text,attributes=no,type=string,x=$text_x,y=$text_y,text=$text_contents,x_size=1,y_size=1.2,w_factor=0.492125988,polarity=positive,angle=0,mirror=no,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 COM affected_layer,name=out,mode=all,affected=no COM clear_layers } if {$nano_script(trim2_x) > 0 || $nano_script(trim2_y) > 0} { set target_layer $nano_script(out_map_name) set text_x [expr $nano_script(pnl_center_x) + 5.0] set text_y [expr $nano_script(pnl_center_y) + ($nano_script(trim2_y) / 2.0) + 0.5] set text_contents 2-$nano_script(b1_no)\TRIM append text_contents " " $nano_script(trim2_x) "X" $nano_script(trim2_y) COM affected_layer,name=$target_layer,mode=single,affected=yes COM add_text,attributes=no,type=string,x=$text_x,y=$text_y,text=$text_contents,x_size=1,y_size=1.2,w_factor=0.492125988,polarity=positive,angle=0,mirror=no,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 COM affected_layer,name=out,mode=all,affected=no COM clear_layers } if {$nano_script(trim1_x) > 0 || $nano_script(trim1_y) > 0} { set target_layer $nano_script(out_map_name) set text_x [expr $nano_script(pnl_center_x) + 5.0] set text_y [expr $nano_script(pnl_center_y) + ($nano_script(trim1_y) / 2.0) + 0.5] set text_contents 3-$nano_script(b2_no)\TRIM append text_contents " " $nano_script(trim1_x) "X" $nano_script(trim1_y) COM affected_layer,name=$target_layer,mode=single,affected=yes COM add_text,attributes=no,type=string,x=$text_x,y=$text_y,text=$text_contents,x_size=1,y_size=1.2,w_factor=0.492125988,polarity=positive,angle=0,mirror=no,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 COM affected_layer,name=out,mode=all,affected=no COM clear_layers } if {$nano_script(rcc_trim2_x) > 0 || $nano_script(rcc_trim2_y) > 0} { set target_layer $nano_script(out_map_name) set text_x [expr $nano_script(pnl_center_x) + 5.0] set text_y [expr $nano_script(pnl_center_y) + ($nano_script(rcc_trim2_y) / 2.0) + 0.5] set text_contents "RCC TRIM" append text_contents " " $nano_script(rcc_trim2_x) "X" $nano_script(rcc_trim2_y) COM affected_layer,name=$target_layer,mode=single,affected=yes COM add_text,attributes=no,type=string,x=$text_x,y=$text_y,text=$text_contents,x_size=1,y_size=1.2,w_factor=0.492125988,polarity=positive,angle=0,mirror=no,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 COM affected_layer,name=out,mode=all,affected=no COM clear_layers } if {$nano_script(rcc_trim1_x) > 0 || $nano_script(rcc_trim1_y) > 0} { set target_layer $nano_script(out_map_name) set text_x [expr $nano_script(pnl_center_x) + 5.0] set text_y [expr $nano_script(pnl_center_y) + ($nano_script(rcc_trim1_y) / 2.0) + 0.5] set text_contents "RCC TRIM" append text_contents " " $nano_script(rcc_trim1_x) "X" $nano_script(rcc_trim1_y) COM affected_layer,name=$target_layer,mode=single,affected=yes COM add_text,attributes=no,type=string,x=$text_x,y=$text_y,text=$text_contents,x_size=1,y_size=1.2,w_factor=0.492125988,polarity=positive,angle=0,mirror=no,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 COM affected_layer,name=out,mode=all,affected=no COM clear_layers } } } ############################################################################# ## Procedure: cleanup_map proc ::cleanup_map {} { global widget env widget nano_script COMANS COM affected_layer,name=out,mode=all,affected=no COM clear_layers COM affected_layer,name=$nano_script(out_map_name),mode=single,affected=yes set types "line\;pad\;surface\;arc" COM filter_set,filter_name=popup,update_popup=no,feat_types=pad 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 sel_break COM filter_reset,filter_name=popup COM filter_set,filter_name=popup,update_popup=no,polarity=negative 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 sel_delete COM filter_reset,filter_name=popup COM affected_layer,name=out,mode=all,affected=no COM clear_layers } ############################################################################# ## Procedure: outer_layers_trim proc ::outer_layers_trim {} { global widget env nano_script COMANS DO_INFO -t matrix -e $env(JOB)/matrix COM affected_layer,name=out,mode=all,affected=no COM clear_layers set trim_x1 [format %.6f [expr ($nano_script(pnl_size_x) - $nano_script(final_trim_x)) / 2.0]] set trim_y1 [format %.6f [expr ($nano_script(pnl_size_y) - $nano_script(final_trim_y)) / 2.0]] set trim_x2 [format %.6f [expr $nano_script(pnl_size_x) - $trim_x1]] set trim_y2 [format %.6f [expr $nano_script(pnl_size_y) - $trim_y1]] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {cs*} $LAYER] || [regexp {ss*} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set length "5.0" cornor_rectangle r1000 r500 $trim_x1 $trim_y1 $trim_x2 $trim_y2 $length } COM affected_layer,name=out,mode=all,affected=no COM clear_layers } ############################################################################# ## Procedure: nano_m_tg proc ::nano_m_tg {} { global widget env nano_script COMANS if {$nano_script(buried_no) == 0} { nano_m_tg_b0 } if {$nano_script(buried_no) == 1} { nano_m_tg_b0 nano_m_tg_b1 } if {$nano_script(buried_no) == 2} { nano_m_tg_b0 nano_m_tg_b1 nano_m_tg_b2 } } ############################################################################# ## Procedure: nano_m_tg_b0 proc ::nano_m_tg_b0 {} { global widget env nano_script COMANS DO_INFO -t matrix -e $env(JOB)/matrix ####################################### ########### buried drl = 0 ############## ####################################### COM affected_layer,name=out,mode=all,affected=no COM clear_layers #if {$nano_script(buried_no) == 0} { set x_ref $nano_script(trim1_x) set y_ref $nano_script(trim1_y) set m_tg_x1 [format %.6f [expr (($nano_script(pnl_size_x) - $x_ref) / 2.00) + 4.5]] set m_tg_x2 [format %.6f [expr $nano_script(pnl_size_x) - (($nano_script(pnl_size_x) - $x_ref) / 2.00) - 4.5]] set m_tg_y1 [format %.6f [expr $nano_script(pnl_center_y) - 25.0]] set m_tg_y2 [format %.6f [expr $nano_script(pnl_min_y) + 75.0]] set m_tg_y3 [format %.6f [expr $nano_script(pnl_max_y) - 75.0]] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t$} $LAYER] || [regexp {l[0-9]*b$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "nano_m_tg_p" COM add_pad,attributes=no,x=$m_tg_x1,y=$m_tg_y1,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x1,y=$m_tg_y2,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x1,y=$m_tg_y3,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x2,y=$m_tg_y1,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x2,y=$m_tg_y2,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x2,y=$m_tg_y3,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers #} } ############################################################################# ## Procedure: nano_m_tg_b1 proc ::nano_m_tg_b1 {} { global widget env nano_script COMANS DO_INFO -t matrix -e $env(JOB)/matrix ####################################### ########### buried drl = 1 ############## ####################################### COM affected_layer,name=out,mode=all,affected=no COM clear_layers #if {$nano_script(buried_no) == 1} { set x_ref $nano_script(trim2_x) set y_ref $nano_script(trim2_y) if {$nano_script(num_layers) == 4} { set x_ref $nano_script(trim1_x) set y_ref $nano_script(trim1_y) } set m_tg_x1 [format %.6f [expr (($nano_script(pnl_size_x) - $x_ref) / 2.00) + 4.5]] set m_tg_x2 [format %.6f [expr $nano_script(pnl_size_x) - (($nano_script(pnl_size_x) - $x_ref) / 2.00) - 4.5]] set m_tg_y1 [format %.6f [expr $nano_script(pnl_center_y) - 35.0]] set m_tg_y2 [format %.6f [expr $nano_script(pnl_min_y) + 85.0]] set m_tg_y3 [format %.6f [expr $nano_script(pnl_max_y) - 85.0]] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t$} $LAYER] || [regexp {l[0-9]*b$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "s7500" COM add_pad,attributes=no,x=$m_tg_x1,y=$m_tg_y1,symbol=$sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x1,y=$m_tg_y2,symbol=$sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x1,y=$m_tg_y3,symbol=$sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x2,y=$m_tg_y1,symbol=$sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x2,y=$m_tg_y2,symbol=$sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x2,y=$m_tg_y3,symbol=$sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t1$} $LAYER] || [regexp {l[0-9]*b1$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "nano_m_tg_p" COM add_pad,attributes=no,x=$m_tg_x1,y=$m_tg_y1,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x1,y=$m_tg_y2,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x1,y=$m_tg_y3,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x2,y=$m_tg_y1,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x2,y=$m_tg_y2,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x2,y=$m_tg_y3,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers #} } ############################################################################# ## Procedure: nano_m_tg_b2 proc ::nano_m_tg_b2 {} { global widget env nano_script COMANS DO_INFO -t matrix -e $env(JOB)/matrix ####################################### ########### buried drl = 1 ############## ####################################### COM affected_layer,name=out,mode=all,affected=no COM clear_layers #if {$nano_script(buried_no) == 2} { set x_ref $nano_script(trim3_x) set y_ref $nano_script(trim3_y) set m_tg_x1 [format %.6f [expr (($nano_script(pnl_size_x) - $x_ref) / 2.00) + 4.5]] set m_tg_x2 [format %.6f [expr $nano_script(pnl_size_x) - (($nano_script(pnl_size_x) - $x_ref) / 2.00) - 4.5]] set m_tg_y1 [format %.6f [expr $nano_script(pnl_center_y) - 45.0]] set m_tg_y2 [format %.6f [expr $nano_script(pnl_min_y) + 95.0]] set m_tg_y3 [format %.6f [expr $nano_script(pnl_max_y) - 95.0]] set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t$} $LAYER] || [regexp {l[0-9]*b$} $LAYER] || [regexp {l[0-9]*t1$} $LAYER] || [regexp {l[0-9]*b1$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "s7500" COM add_pad,attributes=no,x=$m_tg_x1,y=$m_tg_y1,symbol=$sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x1,y=$m_tg_y2,symbol=$sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x1,y=$m_tg_y3,symbol=$sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x2,y=$m_tg_y1,symbol=$sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x2,y=$m_tg_y2,symbol=$sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x2,y=$m_tg_y3,symbol=$sym,polarity=negative,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t2$} $LAYER] || [regexp {l[0-9]*b2$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { set sym "nano_m_tg_p" COM add_pad,attributes=no,x=$m_tg_x1,y=$m_tg_y1,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x1,y=$m_tg_y2,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x1,y=$m_tg_y3,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x2,y=$m_tg_y1,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x2,y=$m_tg_y2,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 COM add_pad,attributes=no,x=$m_tg_x2,y=$m_tg_y3,symbol=$sym,polarity=positive,angle=0,mirror=no,nx=1,ny=1,dx=0,dy=0,xscale=1,yscale=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers #} } ############################################################################# ## Procedure: nano_g_tg proc ::nano_g_tg {} { global widget env nano_script COMANS if {$nano_script(buried_no) == 0} { nano_g_tg_b0 } if {$nano_script(buried_no) == 1} { nano_g_tg_b0 nano_g_tg_b1 } if {$nano_script(buried_no) == 2} { nano_g_tg_b0 nano_g_tg_b1 nano_g_tg_b2 } } ############################################################################# ## Procedure: nano_g_tg_b0 proc ::nano_g_tg_b0 {} { global widget env nano_script COMANS DO_INFO -t matrix -e $env(JOB)/matrix ####################################### ########### buried drl = 0 ############## ####################################### COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { cal_distance set text1 "G1-G3 \: " append text1 $nano_script(dist1) set text2 "G2-G4 \: " append text2 $nano_script(dist2) set sym "s6000" set line_x1 [format %.6f [expr $nano_script(pnl_center_x) + 20.0]] set line_x2 [format %.6f [expr $nano_script(pnl_center_x) + 45.0]] set line_y1 [format %.6f [expr $nano_script(pcb_area_min_y) - 6.0]] set line_y2 [format %.6f [expr $nano_script(pcb_area_min_y) - 5.5]] set line_y3 [format %.6f [expr $nano_script(pcb_area_min_y) - 8.0]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y1,symbol=$sym,polarity=negative COM add_text,attributes=no,type=string,x=$line_x1,y=$line_y2,text=$text1,x_size=1.8,y_size=2,w_factor=0.656167984,polarity=positive,angle=0,mirror=no,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 COM add_text,attributes=no,type=string,x=$line_x1,y=$line_y3,text=$text2,x_size=1.8,y_size=2,w_factor=0.656167984,polarity=positive,angle=0,mirror=no,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*b$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { cal_distance set text1 "G1-G3 \: " append text1 $nano_script(dist1) set text2 "G2-G4 \: " append text2 $nano_script(dist2) set sym "s6000" set line_x1 [format %.6f [expr $nano_script(pnl_center_x) + 20.0]] set line_x2 [format %.6f [expr $nano_script(pnl_center_x) + 45.0]] set line_y1 [format %.6f [expr $nano_script(pcb_area_min_y) - 6.0]] set line_y2 [format %.6f [expr $nano_script(pcb_area_min_y) - 5.5]] set line_y3 [format %.6f [expr $nano_script(pcb_area_min_y) - 8.0]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y1,symbol=$sym,polarity=negative COM add_text,attributes=no,type=string,x=$line_x2,y=$line_y2,text=$text1,x_size=1.8,y_size=2,w_factor=0.656167984,polarity=positive,angle=0,mirror=yes,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 COM add_text,attributes=no,type=string,x=$line_x2,y=$line_y3,text=$text2,x_size=1.8,y_size=2,w_factor=0.656167984,polarity=positive,angle=0,mirror=yes,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers } ############################################################################# ## Procedure: nano_g_tg_b1 proc ::nano_g_tg_b1 {} { global widget env nano_script COMANS DO_INFO -t matrix -e $env(JOB)/matrix ####################################### ########### buried drl = 0 ############## ####################################### COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t1$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { cal_distance set text1 "G1-G3 \: " append text1 $nano_script(dist1) set text2 "G2-G4 \: " append text2 $nano_script(dist2) set sym "s6000" set line_x1 [format %.6f [expr $nano_script(pnl_center_x) + 20.0]] set line_x2 [format %.6f [expr $nano_script(pnl_center_x) + 45.0]] set line_y1 [format %.6f [expr $nano_script(pcb_area_min_y) - 6.0]] set line_y2 [format %.6f [expr $nano_script(pcb_area_min_y) - 5.5]] set line_y3 [format %.6f [expr $nano_script(pcb_area_min_y) - 8.0]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y1,symbol=$sym,polarity=negative COM add_text,attributes=no,type=string,x=$line_x1,y=$line_y2,text=$text1,x_size=1.8,y_size=2,w_factor=0.656167984,polarity=positive,angle=0,mirror=no,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 COM add_text,attributes=no,type=string,x=$line_x1,y=$line_y3,text=$text2,x_size=1.8,y_size=2,w_factor=0.656167984,polarity=positive,angle=0,mirror=no,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*b1$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { cal_distance set text1 "G1-G3 \: " append text1 $nano_script(dist1) set text2 "G2-G4 \: " append text2 $nano_script(dist2) set sym "s6000" set line_x1 [format %.6f [expr $nano_script(pnl_center_x) + 20.0]] set line_x2 [format %.6f [expr $nano_script(pnl_center_x) + 45.0]] set line_y1 [format %.6f [expr $nano_script(pcb_area_min_y) - 6.0]] set line_y2 [format %.6f [expr $nano_script(pcb_area_min_y) - 5.5]] set line_y3 [format %.6f [expr $nano_script(pcb_area_min_y) - 8.0]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y1,symbol=$sym,polarity=negative COM add_text,attributes=no,type=string,x=$line_x2,y=$line_y2,text=$text1,x_size=1.8,y_size=2,w_factor=0.656167984,polarity=positive,angle=0,mirror=yes,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 COM add_text,attributes=no,type=string,x=$line_x2,y=$line_y3,text=$text2,x_size=1.8,y_size=2,w_factor=0.656167984,polarity=positive,angle=0,mirror=yes,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers } ############################################################################# ## Procedure: nano_g_tg_b2 proc ::nano_g_tg_b2 {} { global widget env nano_script COMANS DO_INFO -t matrix -e $env(JOB)/matrix ####################################### ########### buried drl = 0 ############## ####################################### COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*t2$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { cal_distance set text1 "G1-G3 \: " append text1 $nano_script(dist1) set text2 "G2-G4 \: " append text2 $nano_script(dist2) set sym "s6000" set line_x1 [format %.6f [expr $nano_script(pnl_center_x) + 20.0]] set line_x2 [format %.6f [expr $nano_script(pnl_center_x) + 45.0]] set line_y1 [format %.6f [expr $nano_script(pcb_area_min_y) - 6.0]] set line_y2 [format %.6f [expr $nano_script(pcb_area_min_y) - 5.5]] set line_y3 [format %.6f [expr $nano_script(pcb_area_min_y) - 8.0]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y1,symbol=$sym,polarity=negative COM add_text,attributes=no,type=string,x=$line_x1,y=$line_y2,text=$text1,x_size=1.8,y_size=2,w_factor=0.656167984,polarity=positive,angle=0,mirror=no,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 COM add_text,attributes=no,type=string,x=$line_x1,y=$line_y3,text=$text2,x_size=1.8,y_size=2,w_factor=0.656167984,polarity=positive,angle=0,mirror=no,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers set I 0 foreach LAYER $gROWname { if {[lindex $gROWcontext $I] eq "board"} { if {[regexp {l[0-9]*b2$} $LAYER]} { COM affected_layer,name=$LAYER,mode=single,affected=yes } } incr I } COM get_affect_layer set affect_layer $COMANS if {$affect_layer != ""} { cal_distance set text1 "G1-G3 \: " append text1 $nano_script(dist1) set text2 "G2-G4 \: " append text2 $nano_script(dist2) set sym "s6000" set line_x1 [format %.6f [expr $nano_script(pnl_center_x) + 20.0]] set line_x2 [format %.6f [expr $nano_script(pnl_center_x) + 45.0]] set line_y1 [format %.6f [expr $nano_script(pcb_area_min_y) - 6.0]] set line_y2 [format %.6f [expr $nano_script(pcb_area_min_y) - 5.5]] set line_y3 [format %.6f [expr $nano_script(pcb_area_min_y) - 8.0]] COM add_line,attributes=no,xs=$line_x1,ys=$line_y1,xe=$line_x2,ye=$line_y1,symbol=$sym,polarity=negative COM add_text,attributes=no,type=string,x=$line_x2,y=$line_y2,text=$text1,x_size=1.8,y_size=2,w_factor=0.656167984,polarity=positive,angle=0,mirror=yes,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 COM add_text,attributes=no,type=string,x=$line_x2,y=$line_y3,text=$text2,x_size=1.8,y_size=2,w_factor=0.656167984,polarity=positive,angle=0,mirror=yes,fontname=standard,bar_type=UPC39,bar_char_set=full_ascii,bar_checksum=no,bar_background=yes,bar_add_string=yes,bar_add_string_pos=top,bar_width=0.2032,bar_height=5.08,ver=1 } COM affected_layer,name=out,mode=all,affected=no COM clear_layers } ############################################################################# ## Procedure: cal_distance proc ::cal_distance {} { global widget nano_script env COMANS COM get_affect_layer set affect_layer [lindex $COMANS 0] COM filter_reset,filter_name=popup COM filter_set,filter_name=popup,update_popup=no,feat_types=pad COM filter_set,filter_name=popup,update_popup=no,include_syms=nano_g_tg_p 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_atr_reset COM filter_reset,filter_name=popup COM get_select_count set sel_cnt $COMANS if {$sel_cnt > 0} { set coord_command "args=-t layer -e $env(JOB)/$env(STEP)/$affect_layer -d FEATURES -o select ,out_file=/genesis/tmp/coord_list ,write_mode=replace ,units=mm" COM info,$coord_command set file /genesis/tmp/coord_list set fileID [open $file r] set contents [read $fileID] close $fileID } set I 0 foreach line [split $contents \n] { regsub -all "#" $line "" line if {[string match -nocase p* $line] == 1} { incr I set line [string trimleft $line "P "] if {$I == 1} { set xloc1 [format %.6f [lindex $line 0]] set yloc1 [format %.6f [lindex $line 1]] } if {$I == 2} { set xloc2 [format %.6f [lindex $line 0]] set yloc2 [format %.6f [lindex $line 1]] } if {$I == 3} { set xloc3 [format %.6f [lindex $line 0]] set yloc3 [format %.6f [lindex $line 1]] } if {$I == 4} { set xloc4 [format %.6f [lindex $line 0]] set yloc4 [format %.6f [lindex $line 1]] } } } set dist_x1 [format %.6f [expr $xloc1 - $xloc2]] set dist_y1 [format %.6f [expr $yloc1 - $yloc2]] set dist_x2 [format %.6f [expr $xloc3 - $xloc4]] set dist_y2 [format %.6f [expr $yloc3 - $yloc4]] if {$dist_x1 < 0} { set dist_x1 [format %.6f [expr {abs($dist_x1)}]] } if {$dist_y1 < 0} { set dist_y1 [format %.6f [expr {abs($dist_y1)}]] } if {$dist_x2 < 0} { set dist_x2 [format %.6f [expr {abs($dist_x2)}]] } if {$dist_y2 < 0} { set dist_y2 [format %.6f [expr {abs($dist_y2)}]] } set nano_script(dist1) [format %.3f [expr hypot($dist_x1, $dist_y1)]] set nano_script(dist2) [format %.3f [expr hypot($dist_x2, $dist_y2)]] } ############################################################################# ## Initialization Procedure: init proc ::init {argc argv} { global widget env nano_script } init $argc $argv ################################# # VTCL GENERATED GUI PROCEDURES # proc vTclWindow. {base} { if {$base == ""} { set base . } ################### # CREATING WIDGETS ################### wm focusmodel $top passive wm geometry $top 200x200+22+27; update wm maxsize $top 3364 1030 wm minsize $top 109 1 wm overrideredirect $top 0 wm resizable $top 1 1 wm withdraw $top wm title $top "main" bindtags $top "$top Main all" vTcl:FireEvent $top <> wm protocol $top WM_DELETE_WINDOW "vTcl:FireEvent $top <>" ################### # SETTING GEOMETRY ################### vTcl:FireEvent $base <> } proc vTclWindow.nano_pnl {base} { if {$base == ""} { set base .nano_pnl } if {[winfo exists $base]} { wm deiconify $base; return } set top $base ################### # CREATING WIDGETS ################### vTcl:toplevel $top -class Toplevel \ -highlightcolor black wm focusmodel $top passive wm geometry $top 405x450+157+77; update wm maxsize $top 1284 943 wm minsize $top 121 2 wm overrideredirect $top 0 wm resizable $top 0 0 wm deiconify $top wm title $top "Step & Repeat (Unit = mm)" vTcl:DefineAlias "$top" "nano_pnl" vTcl:Toplevel:WidgetProc "" 1 bindtags $top "$top Toplevel all _TopLevel" bind $top { # TODO: your event handler here tk::TabToWindow [tk_focusNext %W] } vTcl:FireEvent $top <> wm protocol $top WM_DELETE_WINDOW "vTcl:FireEvent $top <>" button $top.cpd75 \ -anchor e -background {#9c28ffffa325} -font {courier 9 bold} -pady 0 \ -relief ridge -text {JOB NAME:} vTcl:DefineAlias "$top.cpd75" "Button5" vTcl:WidgetProc "nano_pnl" 1 entry $top.cpd76 \ -background white -font {courier 9 bold} -justify center \ -relief groove -state readonly -textvariable env(JOB) -validate focus vTcl:DefineAlias "$top.cpd76" "Entry2" vTcl:WidgetProc "nano_pnl" 1 button $top.but73 \ -anchor e -background {#9c28ffffa325} \ -command {global env widget scr_array wm attributes .odb_steps -topmost 1 step_window startmodal} \ -font {courier 9 bold} -pady 0 -relief ridge -text {Pcs/Array STEP:} vTcl:DefineAlias "$top.but73" "Button1" vTcl:WidgetProc "nano_pnl" 1 entry $top.ent74 \ -background white -font {courier 9 bold} -justify center \ -relief groove -state readonly -textvariable nano_script(pcs_step) \ -validate focus vTcl:DefineAlias "$top.ent74" "Entry1" vTcl:WidgetProc "nano_pnl" 1 button $top.cpd77 \ -anchor e -background {#9c28ffffa325} -font {courier 9 bold} -pady 0 \ -relief ridge -text {Panel STEP:} vTcl:DefineAlias "$top.cpd77" "Button4" vTcl:WidgetProc "nano_pnl" 1 entry $top.cpd88 \ -background white -font {courier 9 bold} -justify center \ -relief groove -state readonly -textvariable nano_script(pnl_step) \ -validate focus vTcl:DefineAlias "$top.cpd88" "Entry13" vTcl:WidgetProc "nano_pnl" 1 label $top.cpd73 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {PCB Size X :} vTcl:DefineAlias "$top.cpd73" "Label3" vTcl:WidgetProc "nano_pnl" 1 entry $top.cpd74 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#ff0000} -insertbackground black \ -justify center -relief groove -state readonly \ -textvariable nano_script(pcs_size_x) vTcl:DefineAlias "$top.cpd74" "Entry5" vTcl:WidgetProc "nano_pnl" 1 label $top.cpd78 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {PCB Size Y :} vTcl:DefineAlias "$top.cpd78" "Label5" vTcl:WidgetProc "nano_pnl" 1 entry $top.cpd79 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#ff0000} -insertbackground black \ -justify center -relief groove -state readonly \ -textvariable nano_script(pcs_size_y) -width 60 vTcl:DefineAlias "$top.cpd79" "Entry6" vTcl:WidgetProc "nano_pnl" 1 label $top.lab47 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {ÆdzÚ ũ±â X :} vTcl:DefineAlias "$top.lab47" "Label1" vTcl:WidgetProc "nano_pnl" 1 entry $top.ent48 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#ff0000} -insertbackground black \ -justify center -relief groove -state readonly \ -textvariable nano_script(pnl_size_x) vTcl:DefineAlias "$top.ent48" "Entry3" vTcl:WidgetProc "nano_pnl" 1 label $top.lab49 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {ÆdzÚ ũ±â Y :} vTcl:DefineAlias "$top.lab49" "Label2" vTcl:WidgetProc "nano_pnl" 1 entry $top.ent50 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#ff0000} -insertbackground black \ -justify center -relief groove -state readonly \ -textvariable nano_script(pnl_size_y) -width 60 vTcl:DefineAlias "$top.ent50" "Entry4" vTcl:WidgetProc "nano_pnl" 1 label $top.cpd92 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {¹迭 °³¼ö X :} vTcl:DefineAlias "$top.cpd92" "Label11" vTcl:WidgetProc "nano_pnl" 1 entry $top.cpd93 \ -background {#ffffff} -disabledbackground {#ffffff} \ -disabledforeground {#ff0000} -font {courier 9 bold} \ -foreground {#000099} -insertbackground black -justify center \ -relief groove -textvariable nano_script(SRnx) vTcl:DefineAlias "$top.cpd93" "Entry11" vTcl:WidgetProc "nano_pnl" 1 label $top.cpd94 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {¹迭 °³¼ö Y :} vTcl:DefineAlias "$top.cpd94" "Label12" vTcl:WidgetProc "nano_pnl" 1 entry $top.cpd95 \ -background {#ffffff} -disabledbackground {#ffffff} \ -disabledforeground {#ff0000} -font {courier 9 bold} \ -foreground {#000099} -insertbackground black -justify center \ -relief groove -textvariable nano_script(SRny) vTcl:DefineAlias "$top.cpd95" "Entry12" vTcl:WidgetProc "nano_pnl" 1 label $top.cpd80 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {¹迭 °£°Ý X :} vTcl:DefineAlias "$top.cpd80" "Label6" vTcl:WidgetProc "nano_pnl" 1 entry $top.cpd81 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove \ -textvariable nano_script(step_margin_x) vTcl:DefineAlias "$top.cpd81" "Entry7" vTcl:WidgetProc "nano_pnl" 1 label $top.cpd82 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {¹迭 °£°Ý Y :} vTcl:DefineAlias "$top.cpd82" "Label7" vTcl:WidgetProc "nano_pnl" 1 entry $top.cpd83 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove \ -textvariable nano_script(step_margin_y) -width 60 vTcl:DefineAlias "$top.cpd83" "Entry8" vTcl:WidgetProc "nano_pnl" 1 label $top.cpd84 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {³»Ãþ ½ºÄÉÀÏ X :} vTcl:DefineAlias "$top.cpd84" "Label8" vTcl:WidgetProc "nano_pnl" 1 entry $top.cpd85 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(in_scale_x) vTcl:DefineAlias "$top.cpd85" "Entry9" vTcl:WidgetProc "nano_pnl" 1 label $top.cpd86 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {³»Ãþ ½ºÄÉÀÏ Y :} vTcl:DefineAlias "$top.cpd86" "Label9" vTcl:WidgetProc "nano_pnl" 1 entry $top.cpd87 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(in_scale_y) \ -width 60 vTcl:DefineAlias "$top.cpd87" "Entry10" vTcl:WidgetProc "nano_pnl" 1 label $top.cpd89 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {ÆdzÚ ¿©ºÐ X :} vTcl:DefineAlias "$top.cpd89" "Label13" vTcl:WidgetProc "nano_pnl" 1 entry $top.cpd96 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#ff0000} -insertbackground black \ -justify center -relief groove -state readonly \ -textvariable nano_script(pcb_area_min_x) vTcl:DefineAlias "$top.cpd96" "Entry14" vTcl:WidgetProc "nano_pnl" 1 label $top.cpd97 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {ÆdzÚ ¿©ºÐ Y :} vTcl:DefineAlias "$top.cpd97" "Label14" vTcl:WidgetProc "nano_pnl" 1 entry $top.cpd98 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#ff0000} -insertbackground black \ -justify center -relief groove -state readonly \ -textvariable nano_script(pcb_area_min_y) -width 101 vTcl:DefineAlias "$top.cpd98" "Entry15" vTcl:WidgetProc "nano_pnl" 1 label $top.cpd90 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {ÀÛ ¾÷ ÀÚ :} vTcl:DefineAlias "$top.cpd90" "Label10" vTcl:WidgetProc "nano_pnl" 1 label $top.cpd100 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {ÀÛ ¾÷ ³¯ ¥ :} vTcl:DefineAlias "$top.cpd100" "Label39" vTcl:WidgetProc "nano_pnl" 1 entry $top.cpd104 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(user) \ -width 101 vTcl:DefineAlias "$top.cpd104" "Entry36" vTcl:WidgetProc "nano_pnl" 1 entry $top.cpd105 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(work_date) \ -width 101 vTcl:DefineAlias "$top.cpd105" "Entry37" vTcl:WidgetProc "nano_pnl" 1 NoteBook $top.not74 \ -background {#a28ffffff1fb} -font {courier 9 bold} -height 131 \ -width 394 vTcl:DefineAlias "$top.not74" "NoteBook1" vTcl:WidgetProc "nano_pnl" 1 $top.not74 insert end page3 \ -activebackground {#00ff00} -background {#a28ffffff1fb} -text {fǰ dº¸} $top.not74 insert end page1 \ -activebackground {#00ff00} -background {#a28ffffff1fb} \ -text {Trim Size} $top.not74 insert end page4 \ -activebackground {#00ff00} -background {#a28ffffff1fb} \ -state disabled -text {RCC Trim} $top.not74 insert end page2 \ -activebackground {#00ff00} -background {#a28ffffff1fb} \ -text {Target °Ÿ®} set site_4_0 [$top.not74 getframe page3] label $site_4_0.cpd118 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {¸ð µ¨ ¸í :} vTcl:DefineAlias "$site_4_0.cpd118" "Label31" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_0.cpd119 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(model_name) vTcl:DefineAlias "$site_4_0.cpd119" "Entry32" vTcl:WidgetProc "nano_pnl" 1 label $site_4_0.cpd120 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {¾÷ ü ¸í :} vTcl:DefineAlias "$site_4_0.cpd120" "Label32" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_0.cpd121 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(customer) vTcl:DefineAlias "$site_4_0.cpd121" "Entry33" vTcl:WidgetProc "nano_pnl" 1 label $site_4_0.cpd122 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {°ü ¸® ¹ø ȣ :} vTcl:DefineAlias "$site_4_0.cpd122" "Label33" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_0.cpd123 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(spec_no) vTcl:DefineAlias "$site_4_0.cpd123" "Entry34" vTcl:WidgetProc "nano_pnl" 1 label $site_4_0.cpd124 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {ÇÊ ¸§ ¹ø ȣ :} vTcl:DefineAlias "$site_4_0.cpd124" "Label34" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_0.cpd125 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(film_no) vTcl:DefineAlias "$site_4_0.cpd125" "Entry35" vTcl:WidgetProc "nano_pnl" 1 place $site_4_0.cpd118 \ -in $site_4_0 -x 5 -y 10 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_0.cpd119 \ -in $site_4_0 -x 128 -y 10 -width 256 -height 22 -anchor nw \ -bordermode ignore place $site_4_0.cpd120 \ -in $site_4_0 -x 5 -y 33 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_0.cpd121 \ -in $site_4_0 -x 128 -y 33 -width 256 -height 22 -anchor nw \ -bordermode ignore place $site_4_0.cpd122 \ -in $site_4_0 -x 5 -y 56 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_0.cpd123 \ -in $site_4_0 -x 128 -y 56 -width 256 -height 22 -anchor nw \ -bordermode ignore place $site_4_0.cpd124 \ -in $site_4_0 -x 5 -y 79 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_0.cpd125 \ -in $site_4_0 -x 128 -y 79 -width 256 -height 22 -anchor nw \ -bordermode ignore set site_4_1 [$top.not74 getframe page1] label $site_4_1.cpd75 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {1st Trim X :} vTcl:DefineAlias "$site_4_1.cpd75" "Label15" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_1.cpd100 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(trim1_x) vTcl:DefineAlias "$site_4_1.cpd100" "Entry16" vTcl:WidgetProc "nano_pnl" 1 label $site_4_1.cpd101 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {1st Trim Y :} vTcl:DefineAlias "$site_4_1.cpd101" "Label16" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_1.cpd102 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(trim1_y) vTcl:DefineAlias "$site_4_1.cpd102" "Entry17" vTcl:WidgetProc "nano_pnl" 1 label $site_4_1.cpd103 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {2nd Trim X :} vTcl:DefineAlias "$site_4_1.cpd103" "Label17" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_1.cpd105 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(trim2_x) vTcl:DefineAlias "$site_4_1.cpd105" "Entry18" vTcl:WidgetProc "nano_pnl" 1 label $site_4_1.cpd106 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {2nd Trim Y :} vTcl:DefineAlias "$site_4_1.cpd106" "Label18" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_1.cpd107 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(trim2_y) vTcl:DefineAlias "$site_4_1.cpd107" "Entry19" vTcl:WidgetProc "nano_pnl" 1 label $site_4_1.cpd73 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {3rd Trim X :} vTcl:DefineAlias "$site_4_1.cpd73" "Label23" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_1.cpd74 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(trim3_x) vTcl:DefineAlias "$site_4_1.cpd74" "Entry24" vTcl:WidgetProc "nano_pnl" 1 label $site_4_1.cpd76 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {3rd Trim Y :} vTcl:DefineAlias "$site_4_1.cpd76" "Label24" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_1.cpd77 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(trim3_y) vTcl:DefineAlias "$site_4_1.cpd77" "Entry25" vTcl:WidgetProc "nano_pnl" 1 label $site_4_1.cpd78 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {4th Trim X :} vTcl:DefineAlias "$site_4_1.cpd78" "Label25" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_1.cpd79 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(trim4_x) vTcl:DefineAlias "$site_4_1.cpd79" "Entry26" vTcl:WidgetProc "nano_pnl" 1 label $site_4_1.cpd80 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {4th Trim Y :} vTcl:DefineAlias "$site_4_1.cpd80" "Label26" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_1.cpd81 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(trim4_y) vTcl:DefineAlias "$site_4_1.cpd81" "Entry27" vTcl:WidgetProc "nano_pnl" 1 place $site_4_1.cpd75 \ -in $site_4_1 -x 5 -y 10 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_1.cpd100 \ -in $site_4_1 -x 128 -y 10 -width 65 -height 22 -anchor nw \ -bordermode ignore place $site_4_1.cpd101 \ -in $site_4_1 -x 197 -y 10 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_1.cpd102 \ -in $site_4_1 -x 320 -y 10 -width 65 -height 22 -anchor nw \ -bordermode ignore place $site_4_1.cpd103 \ -in $site_4_1 -x 5 -y 33 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_1.cpd105 \ -in $site_4_1 -x 128 -y 33 -width 65 -height 22 -anchor nw \ -bordermode ignore place $site_4_1.cpd106 \ -in $site_4_1 -x 197 -y 33 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_1.cpd107 \ -in $site_4_1 -x 320 -y 33 -width 65 -height 22 -anchor nw \ -bordermode ignore place $site_4_1.cpd73 \ -in $site_4_1 -x 5 -y 56 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_1.cpd74 \ -in $site_4_1 -x 128 -y 56 -width 65 -height 22 -anchor nw \ -bordermode ignore place $site_4_1.cpd76 \ -in $site_4_1 -x 197 -y 56 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_1.cpd77 \ -in $site_4_1 -x 320 -y 56 -width 65 -height 22 -anchor nw \ -bordermode ignore place $site_4_1.cpd78 \ -in $site_4_1 -x 5 -y 79 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_1.cpd79 \ -in $site_4_1 -x 128 -y 79 -width 65 -height 22 -anchor nw \ -bordermode ignore place $site_4_1.cpd80 \ -in $site_4_1 -x 197 -y 79 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_1.cpd81 \ -in $site_4_1 -x 320 -y 79 -width 65 -height 22 -anchor nw \ -bordermode ignore set site_4_2 [$top.not74 getframe page4] label $site_4_2.cpd73 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {1st RCC Trim X :} vTcl:DefineAlias "$site_4_2.cpd73" "Label35" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_2.cpd74 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(rcc_trim1_x) vTcl:DefineAlias "$site_4_2.cpd74" "Entry38" vTcl:WidgetProc "nano_pnl" 1 label $site_4_2.cpd75 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {1st RCC Trim Y :} vTcl:DefineAlias "$site_4_2.cpd75" "Label36" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_2.cpd76 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(rcc_trim1_y) vTcl:DefineAlias "$site_4_2.cpd76" "Entry39" vTcl:WidgetProc "nano_pnl" 1 label $site_4_2.cpd77 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {2nd RCC Trim X :} vTcl:DefineAlias "$site_4_2.cpd77" "Label37" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_2.cpd78 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(rcc_trim2_x) vTcl:DefineAlias "$site_4_2.cpd78" "Entry40" vTcl:WidgetProc "nano_pnl" 1 label $site_4_2.cpd79 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {2nd RCC Trim Y :} vTcl:DefineAlias "$site_4_2.cpd79" "Label38" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_2.cpd80 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(rcc_trim2_y) vTcl:DefineAlias "$site_4_2.cpd80" "Entry41" vTcl:WidgetProc "nano_pnl" 1 place $site_4_2.cpd73 \ -in $site_4_2 -x 5 -y 10 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_2.cpd74 \ -in $site_4_2 -x 128 -y 10 -width 65 -height 22 -anchor nw \ -bordermode ignore place $site_4_2.cpd75 \ -in $site_4_2 -x 197 -y 10 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_2.cpd76 \ -in $site_4_2 -x 320 -y 10 -width 65 -height 22 -anchor nw \ -bordermode ignore place $site_4_2.cpd77 \ -in $site_4_2 -x 5 -y 33 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_2.cpd78 \ -in $site_4_2 -x 128 -y 33 -width 65 -height 22 -anchor nw \ -bordermode ignore place $site_4_2.cpd79 \ -in $site_4_2 -x 197 -y 33 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_2.cpd80 \ -in $site_4_2 -x 320 -y 33 -width 65 -height 22 -anchor nw \ -bordermode ignore set site_4_3 [$top.not74 getframe page2] label $site_4_3.cpd102 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {³»Ãþ Target X :} vTcl:DefineAlias "$site_4_3.cpd102" "Label19" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_3.cpd103 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(in_tg_x) vTcl:DefineAlias "$site_4_3.cpd103" "Entry20" vTcl:WidgetProc "nano_pnl" 1 label $site_4_3.cpd104 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {³»Ãþ Target Y :} vTcl:DefineAlias "$site_4_3.cpd104" "Label20" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_3.cpd105 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(in_tg_y) vTcl:DefineAlias "$site_4_3.cpd105" "Entry21" vTcl:WidgetProc "nano_pnl" 1 label $site_4_3.cpd106 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {B1 Target X :} vTcl:DefineAlias "$site_4_3.cpd106" "Label21" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_3.cpd107 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(b1_tg_x) vTcl:DefineAlias "$site_4_3.cpd107" "Entry22" vTcl:WidgetProc "nano_pnl" 1 label $site_4_3.cpd108 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {B1 Target Y :} vTcl:DefineAlias "$site_4_3.cpd108" "Label22" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_3.cpd109 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(b1_tg_y) vTcl:DefineAlias "$site_4_3.cpd109" "Entry23" vTcl:WidgetProc "nano_pnl" 1 label $site_4_3.cpd110 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {B2 Target X :} vTcl:DefineAlias "$site_4_3.cpd110" "Label27" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_3.cpd111 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(b2_tg_x) vTcl:DefineAlias "$site_4_3.cpd111" "Entry28" vTcl:WidgetProc "nano_pnl" 1 label $site_4_3.cpd112 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {B2 Target Y :} vTcl:DefineAlias "$site_4_3.cpd112" "Label28" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_3.cpd113 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(b2_tg_y) vTcl:DefineAlias "$site_4_3.cpd113" "Entry29" vTcl:WidgetProc "nano_pnl" 1 label $site_4_3.cpd114 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {B3 Target X :} vTcl:DefineAlias "$site_4_3.cpd114" "Label29" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_3.cpd115 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(b3_tg_x) vTcl:DefineAlias "$site_4_3.cpd115" "Entry30" vTcl:WidgetProc "nano_pnl" 1 label $site_4_3.cpd116 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {B3 Target Y :} vTcl:DefineAlias "$site_4_3.cpd116" "Label30" vTcl:WidgetProc "nano_pnl" 1 entry $site_4_3.cpd117 \ -background white -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -foreground {#000099} -insertbackground black \ -justify center -relief groove -textvariable nano_script(b3_tg_y) vTcl:DefineAlias "$site_4_3.cpd117" "Entry31" vTcl:WidgetProc "nano_pnl" 1 place $site_4_3.cpd102 \ -in $site_4_3 -x 5 -y 10 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_3.cpd103 \ -in $site_4_3 -x 128 -y 10 -width 65 -height 22 -anchor nw \ -bordermode ignore place $site_4_3.cpd104 \ -in $site_4_3 -x 197 -y 10 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_3.cpd105 \ -in $site_4_3 -x 310 -y 0 -width 65 -height 22 -anchor nw \ -bordermode inside place $site_4_3.cpd106 \ -in $site_4_3 -x 5 -y 33 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_3.cpd107 \ -in $site_4_3 -x 128 -y 33 -width 65 -height 22 -anchor nw \ -bordermode ignore place $site_4_3.cpd108 \ -in $site_4_3 -x 197 -y 33 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_3.cpd109 \ -in $site_4_3 -x 320 -y 33 -width 65 -height 22 -anchor nw \ -bordermode ignore place $site_4_3.cpd110 \ -in $site_4_3 -x 5 -y 56 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_3.cpd111 \ -in $site_4_3 -x 128 -y 56 -width 65 -height 22 -anchor nw \ -bordermode ignore place $site_4_3.cpd112 \ -in $site_4_3 -x 197 -y 56 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_3.cpd113 \ -in $site_4_3 -x 320 -y 56 -width 65 -height 22 -anchor nw \ -bordermode ignore place $site_4_3.cpd114 \ -in $site_4_3 -x 5 -y 79 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_3.cpd115 \ -in $site_4_3 -x 128 -y 79 -width 65 -height 22 -anchor nw \ -bordermode ignore place $site_4_3.cpd116 \ -in $site_4_3 -x 197 -y 79 -width 120 -height 22 -anchor nw \ -bordermode ignore place $site_4_3.cpd117 \ -in $site_4_3 -x 320 -y 79 -width 65 -height 22 -anchor nw \ -bordermode ignore $top.not74 raise page3 label $top.cpd106 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {f ǰ ~ ·ù :} vTcl:DefineAlias "$top.cpd106" "Label40" vTcl:WidgetProc "nano_pnl" 1 ::iwidgets::optionmenu $top.cpd91 \ -background {#f7d4b5c2ffff} -borderwidth 1 \ -command {global env widget nano_script set nano_script(pnl_type) [Optionmenu2 get]} \ -font {courier 9 bold} -labelpos e vTcl:DefineAlias "$top.cpd91" "Optionmenu2" vTcl:WidgetProc "nano_pnl" 1 $top.cpd91 insert 1 {Type} $top.cpd91 insert 2 {PTH} $top.cpd91 insert 3 {SBL} $top.cpd91 insert 4 {MBL} $top.cpd91 insert 5 {STG} $top.cpd91 insert 6 {STK} checkbutton $top.che104 \ -background {#00ff00} -font {courier 9 bold} -justify left \ -offrelief groove -relief ridge -text {°¡À̵å Çü¼º} \ -variable nano_script(panelize) vTcl:DefineAlias "$top.che104" "Checkbutton1" vTcl:WidgetProc "nano_pnl" 1 button $top.but49 \ -background {#00ff00} \ -command {global widget env nano_script apply_attr if {$nano_script(pnl_type) == "PTH"} { nano_pth } if {$nano_script(pnl_type) == "SBL"} { nano_sbl } if {$nano_script(pnl_type) == "MBL"} { nano_mbl } if {$nano_script(pnl_type) == "STG"} { nano_stg } if {$nano_script(pnl_type) == "STK"} { nano_stk }} \ -disabledforeground {#a2a2a2} -font {courier 10 bold} -pady 0 \ -relief groove -text {Ȯ ÀÎ} -width 200 vTcl:DefineAlias "$top.but49" "Button6" vTcl:WidgetProc "nano_pnl" 1 button $top.cpd99 \ -background {#ffff8bfb7c28} -command exit \ -disabledforeground {#a2a2a2} -font {courier 10 bold} -pady 0 \ -relief groove -text {Ãë ¼Ò} vTcl:DefineAlias "$top.cpd99" "Button7" vTcl:WidgetProc "nano_pnl" 1 label $top.cpd102 \ -anchor e -background {#ffffd8518000} -disabledforeground {#a2a2a2} \ -font {courier 9 bold} -relief groove -text {ǥ ¸é ó ¸® :} vTcl:DefineAlias "$top.cpd102" "Label41" vTcl:WidgetProc "nano_pnl" 1 radiobutton $top.rad103 \ -background {#f7d4b5c2ffff} -font {courier 9 bold} -relief ridge \ -text FLUX -value 1 -variable nano_script(surface) vTcl:DefineAlias "$top.rad103" "Radiobutton1" vTcl:WidgetProc "nano_pnl" 1 radiobutton $top.cpd107 \ -background {#f7d4b5c2ffff} -font {courier 9 bold} -relief ridge \ -text ¹«ÀüÇØ -value 2 -variable nano_script(surface) vTcl:DefineAlias "$top.cpd107" "Radiobutton2" vTcl:WidgetProc "nano_pnl" 1 radiobutton $top.cpd108 \ -background {#f7d4b5c2ffff} -font {courier 9 bold} -relief ridge \ -text {Àü ÇØ} -value 3 -variable nano_script(surface) vTcl:DefineAlias "$top.cpd108" "Radiobutton3" vTcl:WidgetProc "nano_pnl" 1 radiobutton $top.cpd109 \ -background {#f7d4b5c2ffff} -font {courier 9 bold} -relief ridge \ -text {´Ü ÀÚ} -value 4 -variable nano_script(surface) vTcl:DefineAlias "$top.cpd109" "Radiobutton4" vTcl:WidgetProc "nano_pnl" 1 ################### # SETTING GEOMETRY ################### place $top.cpd75 \ -in $top -x 4 -y 6 -width 120 -height 25 -anchor nw \ -bordermode ignore place $top.cpd76 \ -in $top -x 126 -y 7 -width 275 -height 25 -anchor nw \ -bordermode ignore place $top.but73 \ -in $top -x 4 -y 32 -width 120 -height 25 -anchor nw \ -bordermode ignore place $top.ent74 \ -in $top -x 126 -y 33 -width 75 -height 25 -anchor nw \ -bordermode ignore place $top.cpd77 \ -in $top -x 204 -y 32 -width 120 -height 26 -anchor nw \ -bordermode ignore place $top.cpd88 \ -in $top -x 326 -y 33 -width 75 -height 25 -anchor nw \ -bordermode ignore place $top.cpd73 \ -in $top -x 5 -y 58 -width 120 -height 22 -anchor nw \ -bordermode ignore place $top.cpd74 \ -in $top -x 126 -y 58 -width 75 -height 22 -anchor nw \ -bordermode ignore place $top.cpd78 \ -in $top -x 205 -y 59 -width 120 -height 22 -anchor nw \ -bordermode ignore place $top.cpd79 \ -in $top -x 326 -y 59 -width 75 -height 22 -anchor nw \ -bordermode ignore place $top.lab47 \ -in $top -x 5 -y 81 -width 120 -height 22 -anchor nw \ -bordermode ignore place $top.ent48 \ -in $top -x 126 -y 81 -width 75 -height 22 -anchor nw \ -bordermode ignore place $top.lab49 \ -in $top -x 205 -y 82 -width 120 -height 23 -anchor nw \ -bordermode ignore place $top.ent50 \ -in $top -x 326 -y 82 -width 75 -height 22 -anchor nw \ -bordermode ignore place $top.cpd92 \ -in $top -x 5 -y 104 -width 120 -height 22 -anchor nw \ -bordermode ignore place $top.cpd93 \ -in $top -x 126 -y 104 -width 75 -height 22 -anchor nw \ -bordermode ignore place $top.cpd94 \ -in $top -x 205 -y 106 -width 120 -height 22 -anchor nw \ -bordermode ignore place $top.cpd95 \ -in $top -x 326 -y 106 -width 75 -height 22 -anchor nw \ -bordermode ignore place $top.cpd80 \ -in $top -x 5 -y 127 -width 120 -height 22 -anchor nw \ -bordermode ignore place $top.cpd81 \ -in $top -x 126 -y 127 -width 75 -height 22 -anchor nw \ -bordermode ignore place $top.cpd82 \ -in $top -x 205 -y 129 -width 120 -height 22 -anchor nw \ -bordermode ignore place $top.cpd83 \ -in $top -x 326 -y 129 -width 75 -height 22 -anchor nw \ -bordermode ignore place $top.cpd84 \ -in $top -x 5 -y 150 -width 120 -height 22 -anchor nw \ -bordermode ignore place $top.cpd85 \ -in $top -x 126 -y 150 -width 75 -height 22 -anchor nw \ -bordermode ignore place $top.cpd86 \ -in $top -x 205 -y 152 -width 120 -height 22 -anchor nw \ -bordermode ignore place $top.cpd87 \ -in $top -x 326 -y 152 -width 75 -height 22 -anchor nw \ -bordermode ignore place $top.cpd89 \ -in $top -x 5 -y 173 -width 120 -height 22 -anchor nw \ -bordermode ignore place $top.cpd96 \ -in $top -x 126 -y 173 -width 75 -height 22 -anchor nw \ -bordermode ignore place $top.cpd97 \ -in $top -x 205 -y 175 -width 120 -height 22 -anchor nw \ -bordermode ignore place $top.cpd98 \ -in $top -x 326 -y 175 -width 75 -height 22 -anchor nw \ -bordermode ignore place $top.cpd90 \ -in $top -x 5 -y 196 -width 120 -height 22 -anchor nw \ -bordermode ignore place $top.cpd100 \ -in $top -x 205 -y 198 -width 120 -height 22 -anchor nw \ -bordermode ignore place $top.cpd104 \ -in $top -x 126 -y 196 -width 75 -height 22 -anchor nw \ -bordermode ignore place $top.cpd105 \ -in $top -x 326 -y 198 -width 75 -height 22 -anchor nw \ -bordermode ignore place $top.not74 \ -in $top -x 5 -y 225 -width 394 -height 127 -anchor nw \ -bordermode ignore place $top.cpd106 \ -in $top -x 12 -y 355 -width 120 -height 22 -anchor nw \ -bordermode ignore place $top.cpd91 \ -in $top -x 130 -y 354 -width 75 -height 25 -anchor nw \ -bordermode ignore place $top.che104 \ -in $top -x 209 -y 355 -width 190 -height 22 -anchor nw \ -bordermode ignore place $top.but49 \ -in $top -x 5 -y 415 -width 195 -height 30 -anchor nw \ -bordermode ignore place $top.cpd99 \ -in $top -x 205 -y 415 -width 195 -height 30 -anchor nw \ -bordermode ignore place $top.cpd102 \ -in $top -x 12 -y 380 -width 120 -height 22 -anchor nw \ -bordermode ignore place $top.rad103 \ -in $top -x 135 -y 380 -width 65 -height 22 -anchor nw \ -bordermode ignore place $top.cpd107 \ -in $top -x 201 -y 380 -width 65 -height 22 -anchor nw \ -bordermode ignore place $top.cpd108 \ -in $top -x 267 -y 380 -width 65 -height 22 -anchor nw \ -bordermode ignore place $top.cpd109 \ -in $top -x 333 -y 380 -width 65 -height 22 -anchor nw \ -bordermode ignore vTcl:FireEvent $base <> } proc vTclWindow.odb_steps {base} { if {$base == ""} { set base .odb_steps } if {[winfo exists $base]} { wm deiconify $base; return } set top $base ################### # CREATING WIDGETS ################### vTcl:toplevel $top -class Toplevel \ -highlightcolor black wm withdraw $top wm focusmodel $top passive wm geometry $top 155x170+205+134; update wm maxsize $top 1286 945 wm minsize $top 121 2 wm overrideredirect $top 0 wm resizable $top 0 0 wm title $top "STEP" vTcl:DefineAlias "$top" "step_window" vTcl:Toplevel:WidgetProc "" 1 bindtags $top "$top Toplevel all _TopLevel" vTcl:FireEvent $top <> wm protocol $top WM_DELETE_WINDOW "vTcl:FireEvent $top <>" listbox $top.lis72 \ -background white -relief groove -selectmode single \ -xscrollcommand "$top.scr47 set" -yscrollcommand "$top.scr73 set" \ -listvariable nano_script(steps_list) vTcl:DefineAlias "$top.lis72" "Listbox1" vTcl:WidgetProc "step_window" 1 scrollbar $top.scr73 \ -command "$top.lis72 yview" vTcl:DefineAlias "$top.scr73" "Scrollbar1" vTcl:WidgetProc "step_window" 1 button $top.but74 \ \ -command [list vTcl:DoCmdOption $top.but74 {global env widget nano_script set nano_script(pcs_step) [selection get -selection PRIMARY] DO_INFO -t step -e $env(JOB)/$nano_script(pcs_step) -d PROF_LIMITS,units=mm set nano_script(pcs_min_x) $gPROF_LIMITSxmin set nano_script(pcs_max_x) $gPROF_LIMITSxmax set nano_script(pcs_min_y) $gPROF_LIMITSymin set nano_script(pcs_max_y) $gPROF_LIMITSymax set nano_script(pcs_size_x) [format %.2f [expr $nano_script(pcs_max_x) - $nano_script(pcs_min_x)]] set nano_script(pcs_center_x) [format %.6f [expr $nano_script(pcs_max_x) - ($nano_script(pcs_size_x) / 2.0000)]] set nano_script(pcs_size_y) [format %.2f [expr $nano_script(pcs_max_y) - $nano_script(pcs_min_y)]] set nano_script(pcs_center_y) [format %.6f [expr $nano_script(pcs_max_y) - ($nano_script(pcs_size_y) / 2.0000)]] step_window endmodal}] \ -font {courier 10 bold} -pady 0 -text {O K} vTcl:DefineAlias "$top.but74" "Button1" vTcl:WidgetProc "step_window" 1 scrollbar $top.scr47 \ -command "$top.lis72 xview" -orient horizontal vTcl:DefineAlias "$top.scr47" "Scrollbar2" vTcl:WidgetProc "step_window" 1 ################### # SETTING GEOMETRY ################### place $top.lis72 \ -in $top -x 5 -y 5 -width 130 -height 110 -anchor nw \ -bordermode ignore place $top.scr73 \ -in $top -x 135 -y 5 -width 15 -height 110 -anchor nw \ -bordermode ignore place $top.but74 \ -in $top -x 5 -y 135 -width 145 -height 30 -anchor nw \ -bordermode ignore place $top.scr47 \ -in $top -x 5 -y 120 -width 130 -height 15 -anchor nw \ -bordermode ignore vTcl:FireEvent $base <> } ############################################################################# ## Binding tag: _TopLevel bind "_TopLevel" <> { if {![info exists _topcount]} {set _topcount 0}; incr _topcount } bind "_TopLevel" <> { if {[set ::%W::_modal]} { vTcl:Toplevel:WidgetProc %W endmodal } else { destroy %W; if {$_topcount == 0} {exit} } } bind "_TopLevel" { if {[winfo toplevel %W] == "%W"} {incr _topcount -1} } Window show . Window show .nano_pnl Window show .odb_steps main $argc $argv