📄 dfa_assembly.il
字号:
axlTempFileRemove("DFA_Form.form")
)
("LOG"
unless(status>0
fprintf(dfa_check_log "No DFA Violations found.\n")
);end unless
if(windowcount < 1 then
fprintf(dfa_check_log "\n\tEnd of report.\n")
axlDMClose(dfa_check_log)
) ; end if
logname = get_filename(dfa_check_log)
w_msg = axlUIViewFileCreate(logname "DFA VIOLATIONS Log" nil)
windowcount++
)
) ; end case
); end defun
;###########################################################
;# #
;# Main Program clrn #
;# #
;###########################################################
procedure( clrn(comp1 comp2 grid_inc prop_value dfa_check_log)
prog( ( gn_dbid l_path_dbids nsegs_path ref_des symbol_dbid xy_loc refdes2 seg2 error_count refdes_c1 refdes_c2)
bbox_table = makeTable("test_table" nil)
bbox_set = makeTable("set_table" nil)
seg_nsegs1 = refdes2 = nil
axlVisibleDesign(nil)
axlVisibleLayer(strcat("PACKAGE GEOMETRY/" prop_value) t)
axlSetFindFilter(?enabled '(NOALL SHAPES LINES LINESEGS) ?onButtons '(SHAPES LINES LINESEGS))
axlClearSelSet()
axlAddSelectAll()
l_paths=axlGetSelSet()
axlClearSelSet()
foreach( l_path_dbids l_paths
unless(l_path_dbids->parent == nil
case(l_path_dbids->objType
("polygon"
cond(
(l_path_dbids->nSegs == 1 seg_nsegs1 = append(seg_nsegs1 list(l_path_dbids)) )
(l_path_dbids->isRect && member(l_path_dbids->parent->refdes refdes2) == nil
seg2 = append(seg2 list(l_path_dbids))
refdes2 = append(refdes2 list(l_path_dbids->parent->refdes)) )
)
)
("path"
cond(
(l_path_dbids->nSegs == 1 seg_nsegs1 = append(seg_nsegs1 list(l_path_dbids))
)
(l_path_dbids->nSegs > 1 seg2 = append(seg2 list(l_path_dbids))
unless(member(l_path_dbids->parent->refdes refdes2) != nil
refdes2 = append(refdes2 list(l_path_dbids->parent->refdes))
)
)
)
)
("shape"
seg2 = append(seg2 list(l_path_dbids))
unless(member(l_path_dbids->parent->refdes refdes2) != nil
refdes2 = append(refdes2 list(l_path_dbids->parent->refdes))
)
)
) ; end case
) ; end unless
) ; end foreach
; Add only unique Refdes to the list and store their Dbids.
foreach(p_seg1 seg_nsegs1
seg2 = append(seg2 list(p_seg1))
unless(member(p_seg1->parent->refdes refdes2) != nil
refdes2 = append(refdes2 list(p_seg1->parent->refdes))
) ; end unless
) ; end foreach
bbox_table = assembly_bBox(seg2) ; Create Assembly Bounding Box.
cond(
(rexMatchp("^\\([A-Za-z][0-9]+\\)\\*" comp1) comp1 = strcat(upperCase(rexSubstitute("\\1")) ".")
refdes_c1 = rexMatchList(comp1 refdes2) )
(rexMatchp("\\([A-Za-z]+\\)\\*" comp1) comp1 = strcat(upperCase(rexSubstitute("\\1")) ".")
refdes_c1 = rexMatchList(comp1 refdes2) )
(comp1 == "*" refdes_c1 = refdes2 )
(t unless(member(comp1 refdes2) == nil
refdes_c1 = list(upperCase(comp1)) ) )
)
cond(
(rexMatchp("^\\([A-Za-z][0-9]+\\)\\*" comp2) comp2 = strcat(upperCase(rexSubstitute("\\1")) ".")
refdes_c2 = rexMatchList(comp2 refdes2) )
(rexMatchp("\\([A-Za-z]+\\)\\*" comp2) comp2 = strcat(upperCase(rexSubstitute("\\1")) ".")
refdes_c2 = rexMatchList(comp2 refdes2) )
(comp2 == "*" refdes_c2 = refdes2 )
(t unless(member(comp2 refdes2) == nil
refdes_c2 = list(upperCase(comp2)) ) )
)
if( refdes_c1 == nil || refdes_c2 == nil then
axlUIConfirm("Specified refdes for one of the Component selection not evaluated. Either its a circular geometry Or components dont belong to same Assembly Subclass")
else
bbox_set = set_bBox_Right(bbox_table) ; Set the bBox coordinates to Bottom-Left and Top-Right
error_count = clearance_check(refdes_c1 refdes_c2 bbox_set grid_inc dfa_check_log seg2)
return(error_count)
) ; end if
) ; end prog
); end proc
;###########################################################
;# #
;# create_bBox Function #
;# Function creates a new Bounding box based on clearance #
;###########################################################
(defun create_bBox (check grid_inc line_width1 line_width2)
prog( ( key clear_bbox1 clear_bbox2)
bbox_clear = makeTable("c_table" nil)
key = check
clear_bbox1 = list((caar(bbox_set[ key ]) - grid_inc - line_width1/2 - line_width2/2)
(cadar(bbox_set[ key ]) - grid_inc - line_width1/2 - line_width2/2))
clear_bbox2 = list((caadr(bbox_set[ key ]) + grid_inc + line_width1/2 + line_width2/2)
(cadadr(bbox_set[ key ]) + grid_inc+ line_width1/2 + line_width2/2))
bbox_clear[ key ] = list(clear_bbox1 clear_bbox2)
return(bbox_clear)
) ; end prog
); end defun
;##########################################################################
;# #
;# assembly_bBox Function #
;# Form the Bounding box for all the selected Dbids from the Assembly_top.#
;##########################################################################
(defun assembly_bBox (seg2)
prog( ( assem_box key line_bBox1 line_bBox2 line_count refdes_list bbox_table bbox_set error_count dbid_multiple bbox_dbid temp_line temp_line1 bottom_left top_right assem_dup line_bBox refdes2 dbid_count)
bbox_table = makeTable("a_table" nil)
bbox_set = makeTable("s1_table" nil)
line_bBox1 = line_bBox2 = refdes2 = temp = nil
foreach(assem_box seg2
dbid_multiple = nil
unless(member(assem_box->parent->refdes refdes2) !=nil
foreach(assem_dup seg2
unless(assem_dup->parent->refdes != assem_box->parent->refdes
dbid_multiple = append(dbid_multiple list(assem_dup))
) ; end unless
) ; end foreach
refdes2 = append(refdes2 list(assem_box->parent->refdes))
line_bBox = nil temp_line = nil dbid_count = 0
foreach(bbox_dbid dbid_multiple
dbid_count++
case(bbox_dbid->objType
("polygon"
bbox_table[bbox_dbid->parent->refdes] = bbox_dbid->bBox
line_bBox = append(line_bBox list(bbox_dbid->bBox))
)
("shape"
bbox_table[bbox_dbid->parent->refdes] = bbox_dbid->bBox
line_bBox = append(line_bBox list(bbox_dbid->bBox))
)
("path"
line_count = 0
foreach(seg_box bbox_dbid->segments
cond(
(evenp(bbox_dbid->nSegs)
if(bbox_dbid->nSegs == 2 then
cond(
(line_count == 0 line_bBox1 = car(seg_box->startEnd))
(line_count == (bbox_dbid->nSegs)-1 line_bBox2 = cadr(seg_box->startEnd) )
)
else
cond(
(line_count == 0 line_bBox1 = cadr(seg_box->startEnd) )
(line_count == (bbox_dbid->nSegs)-1 line_bBox2 = car(seg_box->startEnd) )
)
) ; end if
)
(oddp(bbox_dbid->nSegs)
if(bbox_dbid->nSegs == 1 then
line_bBox1 = car(seg_box->startEnd)
line_bBox2 = cadr(seg_box->startEnd)
else
cond(
(line_count == 0 line_bBox1 = car(seg_box->startEnd) temp = car(seg_box->startEnd) )
(line_count == (bbox_dbid->nSegs)-3 temp_seg3 = car(seg_box->startEnd) )
(line_count == (bbox_dbid->nSegs)-1
if(axlDistance(temp cadr(seg_box->startEnd)) == 0.0 then
line_bBox2 = temp_seg3
else line_bBox2 = car(seg_box->startEnd)
) ; end if
)
)
) ; end if
)
) ; end cond
line_count++
) ; end foreach
line_bBox = append(line_bBox list(list(line_bBox1 line_bBox2)))
line_count = 0
) ; end path
); end case
) ;end foreach
if(dbid_count == 1 then
bbox_table[assem_box->parent->refdes] = nth(0 line_bBox)
else
for( i 0 length(line_bBox)-1
if(temp_line == nil then
temp_line = set_bBox_point(nth(i line_bBox))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -