⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dfa_assembly.il

📁 ALLEGRO SKILL SAMPLE CODE
💻 IL
📖 第 1 页 / 共 3 页
字号:
                    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 + -