| 
 | 
 
 
 楼主 |
发表于 2025-5-19 09:20:21
|
显示全部楼层
 
 
 
- axlCmdRegister("cedg9" 'check_etch_degree90 ?cmdType "interactive")
 
 - procedure(check_etch_degree90()
 
 -                 (setq curVisible9 (axlVisibleGet))  ;保存当前的显示层
 
 -     (axlVisibleDesign nil);隐藏显示层
 
 -     (axlClearSelSet)
 
 -                 prog( ( layername
 
 -                        layerlist
 
 -                        layername
 
 -                        LayerType
 
 -                        )
 
 -          layerlist = axlGetParam("paramLayerGroup:ETCH")->groupMembers
 
 -         
 
 -         foreach( layername layerlist LayerType=axlDBGetLayerType(layername)
 
 -                                                 
 
 -                 if(        LayerType != "PLANE"  
 
 -                         then
 
 -                         sprintf(ss "ETCH/%s" layername)
 
 -                         axlVisibleLayer(ss, t)                
 
 -                         axlVisibleLayer("PIN/TOP", t)
 
 -                         axlVisibleLayer("PIN/BOTTOM", t)
 
 -                         axlVisibleLayer("VIA CLASS/TOP", t)
 
 -                         axlVisibleUpdate(t)        ))
 
 -                         num=0.6
 
 -                         c=0
 
 -                         i = 0
 
 -                         
 
 -         interface()
 
 -         form_angle = (axlFormCreate (gensym) "./angle.form" `("E" "OUTER") 'Callback  t)
 
 -         axlFormDisplay(form_angle)
 
 -         axlFormSetField(form_angle , "widths" ,num)
 
 -                         );ENDPROG                
 
 -                         );ENDprocedure  
 
 -                 
 
 - procedure(numb( )
 
 - prog(()        
 
 -         axlClearSelSet()
 
 -         axlVisibleDesign(nil)
 
 -         layerlist = axlGetParam("paramLayerGroup:ETCH")->groupMembers
 
 -         
 
 - foreach( layername layerlist
 
 -         LayerType=axlDBGetLayerType(layername)
 
 -                 
 
 -                 if(        LayerType!="PLANE"  
 
 -                         then
 
 -                         sprintf(ss "ETCH/%s" layername)
 
 -                         axlVisibleLayer(ss, t)
 
 -                         
 
 -                         axlVisibleLayer("PIN/TOP", t)
 
 -                         axlVisibleLayer("PIN/BOTTOM", t)
 
 -                         axlVisibleLayer("VIA CLASS/TOP", t)
 
 -                         axlVisibleUpdate(t)        )
 
 -                         );endforeach
 
 -                                 
 
 -                 num=axlFormGetField(form_angle, "widths")
 
 -                 num=atof(num)        
 
 -         axlSetFindFilter(?enabled list( "noall" "Clines")  ?onButtons list("noall" "Clines"))
 
 -                         axlAddSelectAll() 
 
 -                         clines=axlGetSelSet()
 
 -                         
 
 -                                 c1=0
 
 -                                 x = nil
 
 -                                 i = 0
 
 -                                 alllist1=nil
 
 -                         foreach(cline  clines
 
 -                         
 
 -                                         segs=cline->segments
 
 -                                         n=length(segs)
 
 -                                                 
 
 -                                 when((n>1) 
 
 -                                         for(i 1 n-1
 
 -                                                 seg1=nthelem(i segs)
 
 -                                                 seg2=nthelem(i+1 segs)
 
 -                                                                 
 
 -                                                 wid1=seg1->width
 
 -                                                 wid2=times(wid1 num)
 
 -                                                                 
 
 -                                                 start1=nthelem(1 seg1->startEnd)
 
 -                                                 end1=nthelem(2 seg1->startEnd)
 
 -                                                 end2=nthelem(2 seg2->startEnd)
 
 -                                                                 
 
 -                                                 len1=axlDistance(start1 end1)
 
 -                                                 len2=axlDistance(end1 end2)
 
 -                                                                         
 
 -                                         when((len1>wid2)&&(len2>wid2)                
 
 -                                                         x1=nthelem(1 start1)
 
 -                                                         y1=nthelem(2 start1)
 
 -                                                         x2=nthelem(1 end1)
 
 -                                                         y2=nthelem(2 end1)
 
 -                                                         x3=nthelem(1 end2)
 
 -                                                         y3=nthelem(2 end2)
 
 -                         if((expt((x1-x2) 2)+expt((y1-y2) 2)+expt((x3-x2) 2)+expt((y3-y2) 2)>=expt((x3-x1) 2)+expt((y3-y1) 2))
 
 -                                                         then
 
 -                                                         axlHighlightObject(seg1 nil)
 
 -                                                         axlHighlightObject(seg2 nil)        
 
 -                             layers=seg1->layer 
 
 -                                 alllist1=append1(alllist1 list(layers end1))
 
 -                                 
 
 -                                         c1++)
 
 -                                         );endwhen
 
 -                                         )
 
 -                                         ));endforeach
 
  
-         axlFormSetField(form_angle , "total_count" ,c1)
 
 -         axlFormSetField(form_angle , "nonce" ,i)
 
 -         axlClearSelSet()                                   
 
 -         )
 
 -         )                
 
 - ;*****************************************                
 
 - procedure(one_count()
 
 - prog(()
 
 -         
 
 - if((axlFormGetField(form_angle, "check_1")==t)&&(axlFormGetField(form_angle, "check_2")==t) then
 
 -         alllist=append(alllist1 alllist2)
 
 -         c=c1+c2
 
 -         else
 
 - if(axlFormGetField(form_angle, "check_1")==t  then
 
 -         alllist=alllist1
 
 -         c=c1
 
 -         else
 
 - if(axlFormGetField(form_angle, "check_2")==t  then
 
 -         alllist=alllist2
 
 -         c=c2
 
 -         )))
 
 -         axlVisibleDesign(nil)
 
 -         alist=nthelem(i alllist)
 
 -         cpoint=nthelem(2 alist)
 
 -         llayer=nthelem(1 alist)
 
 -         
 
 -                 xx1 = car(cpoint)
 
 -                 yy1 = cadr(cpoint)
 
 -                 axlVisibleLayer("PIN/TOP", t)
 
 -                 axlVisibleLayer("PIN/BOTTOM", t)
 
 -                 axlVisibleLayer("VIA CLASS/TOP", t)
 
 -                 axlVisibleLayer(llayer, t)
 
 -                 
 
 -                 pcbunit = car(axlDBGetDesignUnits())
 
 - if(("millimeters" == pcbunit)
 
 -                 then
 
 -                 
 
 -                 xx2 = xx1+1.27
 
 -                 yy2 = yy1+1.27
 
 -                 xx1 = xx1-1.27
 
 -                 yy1 = yy1-1.27
 
 -         axlWindowBoxSet( list(xx1:yy1 xx2:yy2))        
 
 - else    
 
 -                 xx2 = xx1+50
 
 -                 yy2 = yy1+50
 
 -                 xx1 = xx1-50
 
 -                 yy1 = yy1-50
 
 -         axlWindowBoxSet( list(xx1:yy1 xx2:yy2))
 
 -         
 
 -         axlClearSelSet()
 
 -         )))
 
 - ;******************************************        
 
 -         
 
 -         defun(interface ()        
 
 -         FORMFILE_90angle = outfile("./angle90.form")        
 
 -         
 
 -           fprintf(FORMFILE_90angle "FILE_TYPE=FORM_DEFN VERSION=2\n")      
 
 -     fprintf(FORMFILE_90angle "FORM\n")                                 
 
 -     fprintf(FORMFILE_90angle "FIXED\n")                                 
 
 -     fprintf(FORMFILE_90angle "PORT 23 11\n")                        
 
 -     fprintf(FORMFILE_90angle "HEADER "Check Right Angle"\n") 
 
 -     fprintf(FORMFILE_90angle "\n")     
 
 -     fprintf(FORMFILE_90angle "TILE\n")   
 
 -         
 
 -           fprintf(FORMFILE_90angle "GROUP "check list"blue_a\n") 
 
 -           fprintf(FORMFILE_90angle "GLOC 1 0\n")           
 
 -           fprintf(FORMFILE_90angle "GSIZE 22 10\n")         
 
 -           fprintf(FORMFILE_90angle "ENDGROUP\n")  
 
 -         
 
 -           fprintf(FORMFILE_90angle "FIELD check_1\n")      
 
 -     fprintf(FORMFILE_90angle "FLOC 2 2\n")
 
 -     fprintf(FORMFILE_90angle "CHECKLIST "right angle"\n")  
 
 -     fprintf(FORMFILE_90angle "ENDFIELD\n")
 
 -         
 
 -           fprintf(FORMFILE_90angle "FIELD check_2\n")      
 
 -     fprintf(FORMFILE_90angle "FLOC 2 4\n")
 
 -     fprintf(FORMFILE_90angle "CHECKLIST "small corner"\n")  
 
 -     fprintf(FORMFILE_90angle "ENDFIELD\n")
 
 -         
 
 -           fprintf(FORMFILE_90angle "FIELD bmpos1\n")
 
 -           fprintf(FORMFILE_90angle "TLOC 16 2\n")
 
 -           fprintf(FORMFILE_90angle "THUMBNAIL"d:/os1.bmp" \n")
 
 -           fprintf(FORMFILE_90angle "FSIZE 2 2\n" )
 
 -           fprintf(FORMFILE_90angle "ENDFIELD\n\n")
 
 -         
 
 -           fprintf(FORMFILE_90angle "FIELD bmpos2\n")
 
 -           fprintf(FORMFILE_90angle "TLOC 16 4\n")
 
 -           fprintf(FORMFILE_90angle "THUMBNAIL"d:/os2.bmp" \n")
 
 -           fprintf(FORMFILE_90angle "FSIZE 2 2\n" )
 
 -           fprintf(FORMFILE_90angle "ENDFIELD\n\n")
 
 -         
 
 -         
 
 -           fprintf(FORMFILE_90angle "TEXT "total:" \n") 
 
 -     fprintf(FORMFILE_90angle "TLOC  1 11\n")             
 
 -     fprintf(FORMFILE_90angle "ENDTEXT\n\n") 
 
 -         
 
 -           fprintf(FORMFILE_90angle "TEXT "currently:\n") 
 
 -     fprintf(FORMFILE_90angle "TLOC  11 11\n")             
 
 -     fprintf(FORMFILE_90angle "ENDTEXT\n\n") 
 
 -     
 
 -         
 
 -           fprintf(FORMFILE_90angle "TEXT " " total_count\n")
 
 -           fprintf(FORMFILE_90angle "TLOC 5 11\n")
 
 -           fprintf(FORMFILE_90angle "STRFILLIN 4 5\n")
 
 -           fprintf(FORMFILE_90angle "ENDTEXT\n")
 
 -                 
 
 -     fprintf(FORMFILE_90angle "TEXT " " nonce\n")
 
 -                 fprintf(FORMFILE_90angle "TLOC 18 11\n")
 
 -                 fprintf(FORMFILE_90angle "STRFILLIN 4 5\n")
 
 -                 fprintf(FORMFILE_90angle "ENDTEXT\n")
 
 -                         
 
 -                 fprintf(FORMFILE_90angle "TEXT " " widths\n")
 
 -                 fprintf(FORMFILE_90angle "TLOC 10 7\n")
 
 -                 fprintf(FORMFILE_90angle "STRFILLIN 3 3\n")
 
 -                 fprintf(FORMFILE_90angle "ENDTEXT\n")
 
 -                 
 
 -           fprintf(FORMFILE_90angle "FIELD up\n")  
 
 -     fprintf(FORMFILE_90angle "FLOC 1 15\n")
 
 -     fprintf(FORMFILE_90angle "MENUBUTTON "prev.." 4 3\n")  
 
 -     fprintf(FORMFILE_90angle "ENDFIELD\n")
 
 -         
 
 -           fprintf(FORMFILE_90angle "FIELD next_to\n")      
 
 -     fprintf(FORMFILE_90angle "FLOC 10 15\n")
 
 -     fprintf(FORMFILE_90angle "MENUBUTTON "next.." 4 3\n")  
 
 -     fprintf(FORMFILE_90angle "ENDFIELD\n")
 
 -     
 
 -     fprintf(FORMFILE_90angle "FIELD Done\n")      
 
 -     fprintf(FORMFILE_90angle "FLOC 17 15\n")
 
 -     fprintf(FORMFILE_90angle "MENUBUTTON "Bye" 4 3\n")  
 
 -     fprintf(FORMFILE_90angle "ENDFIELD\n")
 
 -         
 
 -           fprintf(FORMFILE_90angle "FIELD check\n")      
 
 -     fprintf(FORMFILE_90angle "FLOC 15 7\n")
 
 -     fprintf(FORMFILE_90angle "MENUBUTTON "check" 3 3\n")  
 
 -     fprintf(FORMFILE_90angle "ENDFIELD\n")
 
 -         
 
 -           fprintf(FORMFILE_90angle "\n")
 
 -     fprintf(FORMFILE_90angle "ENDTILE\n") 
 
 -     fprintf(FORMFILE_90angle "\n")
 
 -     fprintf(FORMFILE_90angle "ENDFORM\n") 
 
 -         
 
 -     close(FORMFILE_90angle)
 
 -     deleteFile("angle90.form")
 
 -         
 
 - );endprocedure
 
  
-     (procedure  Callback(form_angle)  
 
 -     (prog (cpoint)        
 
 -     case( form_angle->curField      
 
 -             
 
 -                         ("up"
 
 -                         i--
 
 -                         if((i<1) then
 
 -                         i=c)
 
 -                         one_count() 
 
 -                         axlFormSetField(form_angle , "nonce" ,i)
 
 -                         
 
 -                         if((i<1)
 
 -                         i=c)
 
 -                         t)
 
 -                         
 
 -                         ("next_to"
 
 -                         i++
 
 -                         if((i>c)
 
 -                         i=1)
 
 -             one_count()
 
 -                         axlFormSetField(form_angle , "nonce" ,i)
 
 -                         t)
 
 -                         
 
 -                         ("Done"
 
 -                         (axlVisibleSet curVisible9)  ;还原保存的显示层
 
 -       (axlVisibleUpdate t);还原保存的显示层
 
 -       axlFormClose(form_angle)
 
 -                         t)                        
 
 -                         
 
 -                         
 
 -                         ("check"
 
 -                         
 
 - if((axlFormGetField(form_angle, "check_1")==t)&&(axlFormGetField(form_angle, "check_2")==t)
 
 -             then
 
 -                         numb()
 
 -                         shortline()
 
 -                         c=c1+c2
 
 -                         axlFormSetField(form_angle , "total_count" ,c1+c2)
 
 -                 else
 
 - if(axlFormGetField(form_angle, "check_1")==t  then
 
 -                         numb() 
 
 -                         c=c1
 
 -                 else        
 
 - if(axlFormGetField(form_angle, "check_2")==t  then
 
 -                         shortline()
 
 -                         c=c2
 
 -                         )
 
 -                 t)))
 
 -                         
 
 -                 )))        
 
 -                 
 
 -                 
 
 - procedure(shortline()
 
 - prog( (m 
 
 -        num 
 
 -        layerlist
 
 -        layername
 
 -        LayerType
 
 -        clines
 
 -        cline
 
 -        segs
 
  
-        n
 
 -        i
 
 -        ss
 
 -        end1 end2 end3 
 
 -        seg1 seg2 seg3 wid1 wid2 len2
 
 -        x1 x2 x3 x4 y1 y2 y3 y4
 
 -        start1
 
 -       
 
 -        )                        
 
 - num=axlFormGetField(form_angle, "widths")
 
 - num=atof(num)
 
 -         axlVisibleDesign(nil)
 
 -         layerlist = axlGetParam("paramLayerGroup:ETCH")->groupMembers
 
 -         foreach( layername layerlist
 
 -                 LayerType=axlDBGetLayerType(layername)
 
 -                 
 
 -                 if(        LayerType!="PLANE"  
 
 -                         then
 
 -                         sprintf(ss "ETCH/%s" layername)
 
 -                         axlVisibleLayer(ss, t)
 
 -                         axlVisibleLayer("PIN/TOP", t)
 
 -                         axlVisibleLayer("PIN/BOTTOM", t)
 
 -                         axlVisibleLayer("VIA CLASS/TOP", t)
 
 -                         axlVisibleUpdate(t)        ))
 
 -         axlSetFindFilter(?enabled list( "noall" "Clines")  ?onButtons list("noall" "Clines"))
 
 -                 axlAddSelectAll() 
 
 -                 clines=axlGetSelSet()
 
 -                         c2=0
 
 -                         i=0        
 
 -                         alllist2=nil
 
 -                 foreach(cline  clines
 
 -                                         segs=cline->segments
 
 -                                         n=length(segs)
 
 -                                                 
 
 -                                 when((n>3) 
 
 -                                         for(i 2 n-2
 
 -                                                         seg1=nthelem(i segs)
 
 -                                                         seg2=nthelem(i+1 segs)
 
 -                                                         seg3=nthelem(i+2 segs)
 
 -                                                         
 
 -                                                         wid1=seg1->width
 
 -                                                         wid2=times(wid1 num)
 
 -                                                                 
 
 -                                                         start1=nthelem(1 seg1->startEnd)
 
 -                                                         end1=nthelem(2 seg1->startEnd)
 
 -                                                         end2=nthelem(2 seg2->startEnd)
 
 -                                                         end3=nthelem(2 seg3->startEnd)
 
 -                                                         
 
 -                                                         ;len1=axlDistance(start1 end1)
 
 -                                                         len2=axlDistance(end1 end2)
 
 -                                                         ;len3=axlDistance(end2 end3)
 
 -                                                         ;len2<wid2
 
 -                                                         
 
 -                                                         x1=nthelem(1 start1)
 
 -                                                         y1=nthelem(2 start1)
 
 -                                                         x2=nthelem(1 end1)
 
 -                                                         y2=nthelem(2 end1)
 
 -                                                         x3=nthelem(1 end2)
 
 -                                                         y3=nthelem(2 end2)
 
 -                                                         y4=nthelem(2 end3)
 
 -                                                         x4=nthelem(1 end3)
 
 -                                                         
 
 - m=((x2-x1)*(x4-x3)+(y2-y1)*(y4-y3))/(sqrt(expt((x2-x1) 2)+expt((y2-y1) 2))*sqrt(expt((x4-x3) 2)+expt((y4-y3) 2)))
 
 -                         
 
 - if(((cos(3.1415926*91/180)<m)&&(m<cos(3.1415926*89/180)))&&(len2<wid2)
 
 -                                         
 
 -                                                         then
 
 -                                                         axlHighlightObject(seg1 nil)
 
 -                                                         axlHighlightObject(seg2 nil)
 
 -                                                         axlHighlightObject(seg3 nil)                                                        
 
 -                                         layers=seg2->layer
 
 -                                         alllist2=append1(alllist2 list(layers end1))
 
 -                                         
 
 -                                         c2++)
 
 -                                         ))        
 
 -                                         );endforeach                
 
 -         
 
 -     axlFormSetField(form_angle , "total_count" ,c2)
 
 -         axlFormSetField(form_angle , "nonce" ,i)
 
 -         axlClearSelSet()
 
 -                         );ENDPROG                
 
 -                         );ENDprocedure
 
  复制代码 |   
 
 
 
 |