亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? auto_balancing.il

?? skill語言在Cadence平臺二次開發(fā)中大量使用
?? IL
字號:
; ##########################################################################
;
;                    Automatic Copper Balancing for Allegro
;
;   This routine will add filled rectangles on an etch layer to provide balance
;   during the plating process of manufacturing.

;   This routine requires a "MANUFACTURING/BALANCE" subclass with a rectangle
;   that encloses the area in which the balance figures are to be added.

;   The procedure will check each point, on the grid, for any existing features,
;   and build a list of the x/y coordinates that are available. The filled rect-
;   angles are added after checking the entire board. On large boards the checking
;   process may take a couple of minutes, and there is no visual indication that
;   the routine is working (no busy light).

;   The operator is presented with a "Balance Parameters" form. This form is used
;   to define the following:
;      Balancing Layer - The layer on which the figures are to be added.
;      Figure Size - The size of the square that is to be added
;      Clearance - The closest (edge to edge) that a figure can be added to existing
;                  features.
;      Mask Grid - The grid used for adding the figures.
;      Half Density - Yes/No toggle. If set to YES then only every other grid point
;                     is used creating a "checker board" pattern.

;   To run the routine within Allegro type "auto balance".

;   Written by David J. Scheuring
;   Sr. Applications Eng. Cadence Design Systems
;   May 18, 1994

;   Rev. A - Sept. 15, 1994
;   Added function to record and reset the visibility 

;   Rev. B - Jan. 4, 1995
;   Added function to print "Checking etch elements" and "Adding balancing figures"

axlCmdRegister( "auto balance" `Auto_Balance ?cmdType "interactive")

; ########################
; Set the global variables
; ########################

Mask_Layer="TOP"
Figure_Size=40.0
Clearance=25.0
Mask_Grid=50.0
Half_Density=t

(defun Auto_Balance ()

 ; #################
 ; Declare variables
 ; #################

 (let (Boundary
       Boundary_Layer
       Balance_Form
       Available_Layers)

  ; ###############
  ; Clear variables
  ; ###############

  axlDBRefreshId(axlDBGetDesign())
  Boundary=nil
  Boundary_Layer=nil
  Balancing_Form=nil
  Available_Layers=nil

  ; ########################################################
  ; Check for the existence of "Manufaturing/Balancing" layer
  ; ########################################################

  Boundary="paramLayerGroup:MANUFACTURING"

  foreach(Item (axlGetParam(Boundary)->groupMembers)

   if(Item=="BALANCE" then

    Boundary=strcat(Boundary "/paramLayer:BALANCE")

   ); end if Item=="BALANCE"

  ); end foreach Item (axlGetParam(Boundary)->groupMembers)

  if(Boundary=="paramLayerGroup:MANUFACTURING" then

   axlUIConfirm("You must have a\"Manufaturing/Balance\" subclass with a balancing boundary defined")

   else

   ; #########################
   ; Find the available layers
   ; #########################

   Boundary_Layer=axlGetParam(Boundary)
   Available_Layers=(axlGetParam("paramLayerGroup:ETCH")->groupMembers)
   Last_Layer="BOTTOM"

   ; #######################
   ; Build the Balancing form
   ; #######################

   Balancing_Form=outfile("./Balancing_Form.form" "w")
   fprintf(Balancing_Form "FILE_TYPE=FORM_DEFN VERSION=2\n")
   fprintf(Balancing_Form "FORM\n")
   fprintf(Balancing_Form "FIXED\n")
   fprintf(Balancing_Form "PORT 29 10\n")
   fprintf(Balancing_Form "HEADER \"Auto Balancing Form\"\n")
   fprintf(Balancing_Form "POPUP <Layer_Names>")

   foreach(Item Available_Layers

    if(Item==Last_Layer then

     (fprintf Balancing_Form "\"%s\"" Item)
     (fprintf Balancing_Form "\"%s\".\n" Item)

     else

     (fprintf Balancing_Form "\"%s\"" Item)
     (fprintf Balancing_Form "\"%s\"," Item)

    ); end if Item==Last_Layer

   ); end foreach Item Available_Layers

   fprintf(Balancing_Form "TILE\n")
   fprintf(Balancing_Form "TEXT \"Select Balancing Layer:\"\n")
   fprintf(Balancing_Form "TLOC 3 1\n")
   fprintf(Balancing_Form "ENDTEXT\n")
   fprintf(Balancing_Form "FIELD Existing_Layer_Names\n")
   fprintf(Balancing_Form "FLOC 2 3\n")
   fprintf(Balancing_Form "ENUMSET 23\n")
   fprintf(Balancing_Form "POP \"Layer_Names\"\n")
   fprintf(Balancing_Form "ENDFIELD\n")
   fprintf(Balancing_Form "TEXT \"Figure Size:\"\n")
   fprintf(Balancing_Form "TLOC 3 6\n")
   fprintf(Balancing_Form "ENDTEXT\n")
   fprintf(Balancing_Form "FIELD Figure_Size\n")
   fprintf(Balancing_Form "FLOC 16 6\n")
   fprintf(Balancing_Form "REALFILLIN 6 6\n")
   fprintf(Balancing_Form "REALMIN 10.0\n")
   fprintf(Balancing_Form "REALMAX 100.0\n")
   fprintf(Balancing_Form "ENDFIELD\n")
   fprintf(Balancing_Form "TEXT \"Clearance:\"\n")
   fprintf(Balancing_Form "TLOC 3 8\n")
   fprintf(Balancing_Form "ENDTEXT\n")
   fprintf(Balancing_Form "FIELD Clearance\n")
   fprintf(Balancing_Form "FLOC 16 8\n")
   fprintf(Balancing_Form "REALFILLIN 6 6\n")
   fprintf(Balancing_Form "REALMIN 1.0\n")
   fprintf(Balancing_Form "REALMAX 50.0\n")
   fprintf(Balancing_Form "ENDFIELD\n")
   fprintf(Balancing_Form "TEXT \"Mask Grid:\"\n")
   fprintf(Balancing_Form "TLOC 4 11\n")
   fprintf(Balancing_Form "ENDTEXT\n")
   fprintf(Balancing_Form "FIELD Mask_Grid\n")
   fprintf(Balancing_Form "FLOC 15 11\n")
   fprintf(Balancing_Form "REALFILLIN 6 6\n")
   fprintf(Balancing_Form "REALMIN 0.0\n")
   fprintf(Balancing_Form "REALMAX 500.0\n")
   fprintf(Balancing_Form "ENDFIELD\n")
   fprintf(Balancing_Form "FIELD Half_Density\n")
   fprintf(Balancing_Form "FLOC 6 13\n")
   fprintf(Balancing_Form "CHECKLIST \"Half Density\"\n")
   fprintf(Balancing_Form "ENDFIELD\n")
   fprintf(Balancing_Form "FIELD done\n")
   fprintf(Balancing_Form "FLOC 2 16\n")
   fprintf(Balancing_Form "MENUBUTTON \"Done\" 9 3\n")
   fprintf(Balancing_Form "ENDFIELD\n")
   fprintf(Balancing_Form "FIELD Add\n")
   fprintf(Balancing_Form "FLOC 20 16\n")
   fprintf(Balancing_Form "MENUBUTTON \"Add\" 6 3\n")
   fprintf(Balancing_Form "ENDFIELD\n")
   fprintf(Balancing_Form "ENDTILE\n")
   fprintf(Balancing_Form "ENDFORM\n")
   close(Balancing_Form)

   Balancing_Form=axlFormCreate( (gensym) "Balancing_Form.form" '(e inner) 'Balancing_Form_Action t)
   axlFormDisplay(Balancing_Form)
   axlFormSetField(Balancing_Form "Existing_Layer_Names" Mask_Layer)
   axlFormSetField(Balancing_Form "Figure_Size" Figure_Size)
   axlFormSetField(Balancing_Form "Clearance" Clearance)
   axlFormSetField(Balancing_Form "Mask_Grid" Mask_Grid)
   axlFormSetField(Balancing_Form "Half_Density" Half_Density)

  ); end if Boundary=="paramLayerGroup:MANUFACTURING"

 ); end Let

); end defun Auto_Balancing

; ###############################
; Define the Balancing form action
; ###############################
 
(defun Balancing_Form_Action (Balancing_Form)
 
 ; #################
 ; Declare variables
 ; #################
 
 (let (Visibility_Script
  Bound_Box
  Outline
  Outline_LeftX
  Outline_RightX
  Outline_LowerY
  Outline_UpperY
  Current_X
  Current_Y
  Y_Grid_Counter
  Current_Search_Area
  To_Do_List)
 
  ; ###############
  ; Clear variables
  ; ###############
 
  axlDBRefreshId(axlDBGetDesign())
  Visibility_Script=nil
  Bound_Box=nil
  Outline=nil
  Outline_LeftX=nil
  Outline_RightX=nil
  Outline_LowerY=nil
  Outline_UpperY=nil
  Current_X=nil
  Current_Y=nil
  Y_Grid_Counter=nil
  Current_Search_Area=nil
  To_Do_List=nil
 
  ; #################
  ; Begin form action
  ; #################
 
  (case Balancing_Form->curField
 
   ("done"
    axlFormClose(Balancing_Form)
    axlCancelEnterFun()
    shell("rm Balancing_Form.form")
    nil
   ); end "done"
 
   ("Existing_Layer_Names"
    Mask_Layer=(Balancing_Form->curValue)
    t
   ); end "Existing_Layer_Names"
 
   ("Figure_Size"
    Figure_Size=(Balancing_Form->curValue)
    t
   ); end "Figure_Size"
 
   ("Clearance"
    Clearance=(Balancing_Form->curValue)
    t
   ); end "Clearance"
 
   ("Mask_Grid"
    Mask_Grid=(Balancing_Form->curValue)
    t
   ); end "Mask_Grid"
 
   ("Half_Density"
    Half_Density=(Balancing_Form->curValue)
    t
   ); end "Half_Density"
 
   ("Add"
    Balancing_Adder()
   ); end Add
 
  ); end case Balancing_Form->curField
 
 ); end let
 
); end defun Balancing_Form_Action
 
; ##############################################
; Define the routine to add the balancing figures
; ##############################################

(defun Balancing_Adder ()

 ; ############################
 ; Check for Balancing Bound Box
 ; ############################
 
 Going_On=axlGetParam("paramLayerGroup:MANUFACTURING/paramLayer:BALANCE")
 Going_On->visible=t
 axlSetParam(Going_On)

 axlSetActiveLayer("MANUFACTURING/BALANCE")
 axlClearSelSet()
 axlSetFindFilter(?enabled '(noall shapes) ?onButtons '(noall shapes))
 Outline=axlGetSelSet(axlAddSelectAll())
 
 foreach(Item Outline

  if(Item->layer=="MANUFACTURING/BALANCE"
   Bound_Box=Item->bBox
  ); end if Item->layer=="MANUFACTURING/BALANCE"

 );end foreach Item Outline

 if(Bound_Box==nil then
  axlUIConfirm("You must have a rectangle defined on the balance subclass that encloses the balancing area")
  else
  ;axlFormClose(Balancing_Form)
  ;axlCancelEnterFun()

  ; ###################
  ; Clear the variables
  ; ###################

  Classes=nil
  Class=nil
  SubClasses=nil
  SubClass=nil
  Param=nil
  Param_List=nil
  Visible=nil
  Visible_List=nil
  Going_off=nil
  Going_On=nil

  ; ########################################################################
  ; Go thru all the class/subclass combinations and determine what's visible
  ; ########################################################################

  Classes=axlGetParam("paramLayerGroup")->groupMembers
  foreach(Class Classes
   SubClasses=axlGetParam(sprintf(String "paramLayerGroup:%s/paramLayer" Class))->groupMembers
   foreach(SubClass SubClasses
    if(axlGetParam(sprintf(String "paramLayerGroup:%s/paramLayer:%s" Class SubClass))->visible==t then
     Visible=list(Class SubClass)
     if(Visible_List==nil then
      Visible_List=list(Visible)
      else
      Visible_List=cons(Visible Visible_List)
     ); end if axlGetParam(sprintf(String ...))->visible==t

     ; #######################
     ; Reset visibility to off
     ; #######################

     Going_Off=axlGetParam(sprintf(String "paramLayerGroup:%s/paramLayer:%s" Class SubClass))
     Going_Off->visible=nil
     axlSetParam(Going_Off)
    ); end if axlGetParam(sprintf(String ...))->visible==t
   ); end foreach SubClass SubClasses
  ); end foreach Class Classes

  ; ##############################################################
  ; Set the visibility to ON for the Etch, Pin, and Via subclasses
  ; ##############################################################

  Going_On=axlGetParam(sprintf(dummy "paramLayerGroup:ETCH/paramLayer:%s" Mask_Layer))
  Going_On->visible=t
  axlSetParam(Going_On)
  Going_On=axlGetParam(sprintf(dummy "paramLayerGroup:VIA CLASS/paramLayer:%s" Mask_Layer))
  Going_On->visible=t
  axlSetParam(Going_On)
  Going_On=axlGetParam(sprintf(dummy "paramLayerGroup:PIN/paramLayer:%s" Mask_Layer))
  Going_On->visible=t
  axlSetParam(Going_On)
  Outline_LeftX=car(car(Bound_Box))
  Outline_RightX=car(car(cdr(Bound_Box)))
  Outline_LowerY=car(cdr(car(Bound_Box)))
  Outline_UpperY=car(cdr(car(cdr(Bound_Box))))
  Current_X=(Mask_Grid*fix(Outline_LeftX/Mask_Grid))
  Current_Y=(Mask_Grid*fix(Outline_LowerY/Mask_Grid)+Mask_Grid)

  ; ########################################
  ; Querry the Vertices and add the balancing
  ; ########################################

  axlUIWPrint(Balancing_Form "Checking etch elements")
  axlSetActiveLayer(strcat( "ETCH/" Mask_Layer))
  axlClearSelSet()
  axlSetFindFilter(?enabled '(noall pins clines vias shapes lines figures text)
                   ?onButtons '(noall pins clines vias shapes lines figures text))
  if(Half_Density==t then

   ; ##########################
   ; Do the add at half density
   ; ##########################

   Y_Grid_Counter=0
   To_Do_List=nil
   while((Current_Y < Outline_UpperY)
    if(evenp(Y_Grid_Counter)==t then
     Current_X=((Mask_Grid*fix(Outline_LeftX/Mask_Grid))+Mask_Grid)
     else
     Current_X=((Mask_Grid*fix(Outline_LeftX/Mask_Grid))+(Mask_Grid*2))
    ); end if evenp(Y_Grid_Counter)==t
    while((Current_X < Outline_RightX)
     Current_Search_Area=axlSingleSelectBox(list(Current_X-(Clearance+(Figure_Size/2)) :Current_Y-(Clearance+(Figure_Size/2)) Current_X+(Clearance+(Figure_Size/2)) :Current_Y+(Clearance+(Figure_Size/2))))
     if(Current_Search_Area==nil then
      To_Do_List=cons(list(Current_X Current_Y) To_Do_List)
      Current_X = Current_X+(Mask_Grid*2)
      else
      Current_X = Current_X+(Mask_Grid*2)
     ); end if Current_Search_Area==nil
    ); end while Current_X < Outline_RightX
    Current_Y = Current_Y+Mask_Grid
    Y_Grid_Counter=Y_Grid_Counter+1
   ); end while (Current_Y < Outline_UpperY)
   else

   ; ##########################
   ; Do the add at full density
   ; ##########################

   To_Do_List=nil
   while((Current_Y < Outline_UpperY)
    Current_X=((Mask_Grid*fix(Outline_LeftX/Mask_Grid))+Mask_Grid)
    while((Current_X < Outline_RightX)
     Current_Search_Area=axlSingleSelectBox(list(Current_X-(Clearance+(Figure_Size/2)):Current_Y-(Clearance+(Figure_Size/2)) Current_X+(Clearance+(Figure_Size/2)):Current_Y+(Clearance+(Figure_Size/2))))
     if(Current_Search_Area==nil then
      To_Do_List=cons(list(Current_X Current_Y) To_Do_List)
      Current_X = Current_X+Mask_Grid
      else
      Current_X = Current_X+Mask_Grid
     ); end if Current_Search_Area==nil
    ); end while Current_X < Outline_RightX
    Current_Y = Current_Y+Mask_Grid
   ); end while (Current_Y < Outline_UpperY)
  ); end if Half_Density==t
  axlUIWPrint(Balancing_Form "Adding balancing figures")
  foreach(Item To_Do_List
   axlDBCreateRectangle( list(car(Item)-(Figure_Size/2):car(cdr(Item))-(Figure_Size/2)
   car(Item)+(Figure_Size/2):car(cdr(Item))+(Figure_Size/2)) t)
  ); end foreach Item To_Do_List
  To_Do_List=nil

  ; ################################################
  ; Reset visibility to what it was when you started
  ; ################################################

  foreach(Visible Visible_List
   Class=car(Visible)
   SubClass=car(cdr(Visible))
   Going_On=axlGetParam(sprintf(dummy "paramLayerGroup:%s/paramLayer:%s" Class SubClass))
   Going_On->visible=t
   axlSetParam(Going_On)
  ); end foreach Visible Visible_List
 ); end if Bound_Box==nil
 axlUIWPrint(Balancing_Form "Auto balancing Complete")
 axlShell("redisplay")

); end defun Balancing_Adder

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产99久久久国产精品潘金| 1024精品合集| 日本视频中文字幕一区二区三区| 91丝袜高跟美女视频| 亚洲视频免费在线| 在线亚洲精品福利网址导航| 亚洲免费观看高清| 欧美日韩日日骚| 奇米综合一区二区三区精品视频 | 精品福利一二区| 精品一区二区影视| 国产丝袜在线精品| 99综合电影在线视频| 亚洲综合清纯丝袜自拍| 欧美一区二区三区精品| 国产一区二区导航在线播放| 欧美国产一区视频在线观看| 91网站最新地址| 午夜精品视频在线观看| 久久综合久久综合久久综合| 懂色av噜噜一区二区三区av| 亚洲一区二区在线免费看| 欧美一区二区三区播放老司机| 精品在线播放免费| 亚洲三级免费观看| 91精品中文字幕一区二区三区| 国产乱人伦精品一区二区在线观看 | 亚洲高清视频在线| 久久丝袜美腿综合| 欧美性感一类影片在线播放| 精彩视频一区二区| 一区二区三区影院| 久久蜜桃av一区二区天堂| av亚洲精华国产精华精华| 五月天婷婷综合| 国产精品沙发午睡系列990531| 欧美日韩一区二区三区在线看| 色狠狠一区二区三区香蕉| 日本亚洲三级在线| 亚洲免费av网站| 精品国产污污免费网站入口| 色哟哟欧美精品| 国产成人综合网站| 日本中文字幕一区| 夜夜精品视频一区二区| 国产女人水真多18毛片18精品视频 | 亚洲欧美激情一区二区| 日韩精品一区二区三区在线观看| 成人免费观看视频| 免费成人结看片| 亚洲国产综合视频在线观看| 中文字幕国产一区二区| 日韩欧美电影一区| 欧美日韩免费视频| 色综合婷婷久久| 成人福利视频网站| 狠狠色综合色综合网络| 视频在线观看91| 一区二区三区国产精品| 国产精品久久久爽爽爽麻豆色哟哟| 日韩午夜激情视频| 欧美剧情电影在线观看完整版免费励志电影 | 亚洲人吸女人奶水| 中日韩免费视频中文字幕| 欧美成人性福生活免费看| 欧美精品自拍偷拍| 精品视频一区二区不卡| 在线精品视频免费播放| 91美女片黄在线| eeuss国产一区二区三区| 国产成+人+日韩+欧美+亚洲| 国内成人免费视频| 久草中文综合在线| 久久精品国产一区二区| 免费观看成人鲁鲁鲁鲁鲁视频| 香蕉乱码成人久久天堂爱免费| 一区二区三区精密机械公司| 亚洲精品免费视频| 亚洲综合免费观看高清完整版 | 久久久噜噜噜久久中文字幕色伊伊 | 日本在线不卡一区| 视频一区二区中文字幕| 亚洲成a人v欧美综合天堂| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲三级免费观看| 亚洲午夜国产一区99re久久| 亚洲一区二区欧美| 日日欢夜夜爽一区| 免费人成黄页网站在线一区二区| 午夜久久久久久| 美女在线视频一区| 国产激情视频一区二区在线观看| 国产成人在线看| 91色综合久久久久婷婷| 欧美网站一区二区| 日韩视频一区二区三区在线播放| 日韩欧美成人一区二区| 久久精品一区二区| 亚洲欧洲日韩综合一区二区| 一区二区三区中文在线| 日本亚洲最大的色成网站www| 久久99最新地址| 成人av资源站| 欧美日韩亚洲综合一区二区三区| 欧美一区二区三区日韩视频| 久久综合九色综合97婷婷| 国产精品视频第一区| 亚洲最大的成人av| 久久99精品久久只有精品| av毛片久久久久**hd| 欧美日韩国产乱码电影| 精品少妇一区二区三区| 中文字幕视频一区二区三区久| 亚洲国产一区二区三区| 国产综合一区二区| 91免费视频网址| 欧美一区二区在线观看| 国产精品午夜在线| 视频在线观看一区二区三区| 国产大片一区二区| 欧美嫩在线观看| 欧美国产视频在线| 婷婷激情综合网| 成人激情动漫在线观看| 欧美日韩高清影院| 国产精品欧美一区二区三区| 午夜精品久久久久久不卡8050| 国产成人欧美日韩在线电影 | 91精品国产免费| 国产亚洲欧美色| 视频一区二区不卡| 91老师片黄在线观看| 欧美精品一区二| 亚洲国产成人va在线观看天堂| 国产成人在线观看免费网站| 欧美美女一区二区三区| 国产精品久久久99| 韩国精品主播一区二区在线观看| 欧美性大战久久久| 国产精品福利一区| 国内精品伊人久久久久av影院 | 国产精品入口麻豆原神| 麻豆精品一二三| 欧美日韩一区成人| 亚洲乱码一区二区三区在线观看| 韩国精品主播一区二区在线观看| 欧美日免费三级在线| 自拍偷拍国产精品| 高清av一区二区| 精品日韩99亚洲| 婷婷亚洲久悠悠色悠在线播放| 91美女在线观看| 国产精品视频一二三| 国产精品一线二线三线| 精品久久久久久久一区二区蜜臀| 丝袜亚洲另类丝袜在线| 欧美性猛交xxxxxx富婆| 亚洲综合久久av| 91电影在线观看| 亚洲激情图片一区| 色综合天天综合| 亚洲欧洲日产国产综合网| 成人中文字幕电影| 中文字幕的久久| 成人av电影在线观看| 国产精品高潮呻吟| 91片黄在线观看| 亚洲一区在线电影| 欧美日韩中文字幕精品| 亚洲图片欧美一区| 欧美人狂配大交3d怪物一区| 无码av免费一区二区三区试看| 欧洲一区在线观看| 亚洲成人一二三| 亚洲色图一区二区| 欧美视频在线观看一区二区| 亚洲一区二区三区四区在线观看| 91国产成人在线| 五月激情综合婷婷| 精品国产精品一区二区夜夜嗨| 国产一区二区视频在线| 国产欧美日韩激情| 91美女片黄在线| 日韩精品免费专区| 26uuu久久综合| zzijzzij亚洲日本少妇熟睡| 亚洲精品乱码久久久久久日本蜜臀| 欧美在线免费播放| 美女www一区二区| 久久在线免费观看| 91免费在线视频观看| 天天综合网 天天综合色| 日韩久久久精品| 成人99免费视频| 亚洲一区二区三区在线播放| 日韩精品一区二区三区在线观看 | 成人免费视频视频| 一区二区三区中文在线| 欧美高清一级片在线| 国产高清久久久|