📄 find_dlines.il
字号:
;########################################################################
;# #
;# Header Section #
;# #
;########################################################################
;
; Date Created: December 22, 1995
; Tested with Allegro Release: 11.0 - 9502
; Name of this file: find_dlines.il
; Written by Larry Bowman (bowman@cadence.com)
;
;
; 1-5-96 Added option of leaving traces hilighted.
; added to comment section
; changed 'ars' references to 'skill'
;
; 1-8-96 Corrected problem with registering command name
;
; Revision: June 18, 1996
; By: Larry Bowman - Cadence Technical Services
; email: bowman@cadence.com
; Telephone: 512-349-1109
; Modifications: Modified this program to have a form driven interface.
; The form will display all the dangling clines and
; dangling lines. From the form, the user may select
; any of the dangling clines or dangling lines by their
; XY locations and the program will dehilite the other
; dangling (C)lines and hilite the one selected and zoom
; into the problem (C)line. The user may delete the
; dangling (C)line individually or the entire list at one
; time. Users need to be aware that some designers may
; put lines on the Etch Class when adding company logos
; or other information and these items will be considered
; "dangling" lines. Basically, any (C)line without a net
; name on the ETCH class is, by definition, a dangling
; (C)line.
;
; When an item is selected from the list, a "Show Element"
; window will appear with the data as if the Show Element
; command was executed on the selected item.
;
; If the Show Element window does NOT appear or the data
; in the Show Element window does NOT update, then it is
; likely that this selection is on an ETCH/CONDUCTOR subclass that
; is invisibile. To see this data, turn on the visibility
; from the DISPLAY->Color/Visibility menu selection.
;
;
; The command was changed from "find dang" to "find_dang"
; as a work around for a bug in BoardQuest.
;
; 7-6-98 Made the following changes to be compatible with Allegro 12.x and
; Allegro 13.x
; 1. Changed the argument to axlDBCreateExternalDRC from
; "drc error/" to "drc error class/".
; 2. Corrected problem with X/Y locations not being
; displayed in the list boxes.
;
; 01/25/2006 Modified the skillMakeDangList function to also find clines with an
; empty string "" for a net name.
;
;########################################################################
;# WARNING: The form may not display the XY locations in the lists #
;# occasionally. The work around is to select the "Redisplay" #
;# in the form's window banner with the Right Mouse button. #
;# This will bring the XY locations into the list. If anyone #
;# can determine why this is happening, and has a fix, please #
;# let me know. - Larry Bowman #
;########################################################################
;########################################################################
;# #
;# Comment Section #
;# #
;########################################################################
;
; This program will check an APD design for any "dangling"
; cline segments, mark all the "dangling" Cline segments with a
; user definded DRC marker and hilite all dangling Clines found.
;
; If the user elects NOT to delete the "dangling" cline, then these
; "dangling" cline segments will remain with a user defined DRC marker.
; To remove these user defined DRC markers, issue the command:
; APD> rmdrcs
; Or select the "Remove DRCs" button from the "Find Dangling Clines
; and Dangling Lines" form.
;
; Any stand alone vias or clines with net names that are dangling,
; (Actully called 'hanging' traces) may be removed with the APD gloss
; program.
;
; A "dangling" cline is any cline in the design that does not have a net
; name associated with it.
;
; The APD summary report (-v sum) reports both hanging AND dangling in
; the dangling_lines.log.
;
; This program will also find any line segments in the design that
; are on the CLASS->ETCH layers and perform the same way as mentioned
; above for cline segments.
;
;
; This APD Skill program may be loaded automatically
; when APD is invoked by creating an apd.ilinit
; file in the user's pcbenv directory (i.e., ~/pcbenv/apd.ilinit).
;
; The apd.ilinit file could look like the following:
;----------- Start of apd.ilinit file -----------------------------
;setSkillPath(". ~/scripts/SKILL.sav /cds/9502/ibm/tools/pcb/etc/skill")
;load("find_dlines.il")
;----------- End of apd.ilinit file --------------------------------
;
; Where this file, find_dlines.il, is located in one of the directory paths
; as defined by the setSkillPath function.
;
; Note: If you ever change the APD Skill path with the setSkillPath
; function as noted above, ALWAYS be sure to include the period(.),
; which is the current working directory, as part of the search path
; definition. There are some APD commands that expect to see the
; current working directory as part of the search path and will fail
; if it is not part of the search path.
;
; Also, most of the Skill functions that do file access will use the
; setSkillPath value as the directory paths to perform their file
; reads and writes.
;
; The command to type in the APD editor to invoke this program is:
; APD> find_dang
;
; There is also a command that will remove the DRC bow ties. This comand is:
; APD> rmdrcs
;
;
;###################### End Of Comment Section ##########################
;########################################################################
;# #
;# Main Program skillFindDang #
;# #
;########################################################################
axlCmdRegister("find_dang" 'skillFindDang)
axlCmdRegister("rmdrcs" 'skillDeleteDrcs)
(defun skillFindDang ()
; create find_dline.form file
_createForm()
; set variables
l_alldang = list()
selected_dbid = nil
lineList = nil
dangList = nil
linecheck = nil
clinecheck = nil
; create the form symbol and display
Form=axlFormCreate( (gensym) form_file nil 'Form_Action t)
axlFormDisplay(Form)
; Setup the Form
_setup()
; Remove form_file from disk
deleteFile(form_file)
) ; end skillFindDang
;########################################################################
;# #
;# End of Main Program skillFindDang #
;# #
;########################################################################
;##################################
;# Function Form CallBack #
;##################################
;---------------------------------------------------
;| |
;| This function determines what APD commands |
;| to execute, based on the user's selection from |
;| the Find Dangling form. |
;| |
;---------------------------------------------------
(defun Form_Action (Form)
(case Form->curField
("delete_all_clines" axlUIWPrint(Form "Deleting ALL Dangling Clines.")
axlUIWPrint(nil "Deleting ALL Dangling Clines.")
_deleteAllClines()
axlFlushDisplay()
selected_dbid = nil)
("delete_all_lines" axlUIWPrint(Form "Deleting ALL Dangling Lines.")
axlUIWPrint(nil "Deleting ALL Dangling Lines.")
_deleteAllLines()
axlFlushDisplay()
selected_dbid = nil)
("cline_list" sel_cline = t
_zoomin2(l_clinedang "c")
)
("line_list" sel_cline = nil
_zoomin2(l_linedang "l")
)
("delete_one"
_deleteXY()
selected_dbid = nil
) ; delete_one
("find_clines" axlUIWPrint(Form "Looking for Dangling Clines with no netname.")
axlUIWPrint(nil "Looking for Dangling Clines with no netname.")
clinecheck = t
_find_Clines()
axlFlushDisplay() )
("find_lines" axlUIWPrint(Form "Looking for Dangling Lines.")
axlUIWPrint(nil "Looking for Dangling Lines.")
linecheck = t
_find_Lines()
axlFlushDisplay() )
("remove_drcs" axlUIWPrint(Form "Clearing DRCs.")
axlUIWPrint(nil "Clearing DRCs.")
skillDeleteDrcs()
axlFlushDisplay() )
("remove_hilite"
if(!axlOKToProceed() then
axlFlushDisplay()
else
if(clinecheck then
if(car(dangList)->objType then
axlUIWPrint(Form "Dehiliting Clines.")
axlDehighlightObject( dangList)
else
axlUIWPrint(Form "Dbids out of date; rechecking Clines . . .")
_find_Clines()
axlDehighlightObject( dangList)
); endif
); endif
if(linecheck then
if(car(lineList)->objType then
axlUIWPrint(nil "Dehiliting Lines.")
axlDehighlightObject( lineList)
else
axlUIWPrint(Form "Dbids out of date; rechecking Lines . . .")
_find_Lines()
axlDehighlightObject( lineList)
); endif
); endif
axlFlushDisplay()
);endif
)
("done" if(axlOKToProceed() then
(axlFlushDisplay)
(axlCancelEnterFun)
(axlFormClose Form)
else
axlUIWPrint(Form "End the current command and try again.")
axlUIWPrint(nil "End the current command and try again.")
);endif
); end done
("pr_help" _helpButton() )
); endcase
); end defun Form_Action
;##################################
;# End Function Form CallBack #
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -