谁有90度检查的源码
谁有90度检查的源码yonglee9x 发表于 2025-5-6 14:56
我也很关心
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") 'Callbackt)
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(clineclines
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")==tthen
alllist=alllist1
c=c1
else
if(axlFormGetField(form_angle, "check_2")==tthen
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 "TLOC1 11\n")
fprintf(FORMFILE_90angle "ENDTEXT\n\n")
fprintf(FORMFILE_90angle "TEXT \"currently:\n")
fprintf(FORMFILE_90angle "TLOC11 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
(procedureCallback(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")==tthen
numb()
c=c1
else
if(axlFormGetField(form_angle, "check_2")==tthen
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(clineclines
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
补充内容 (2025-11-17 15:39):
fprintf(FORMFILE_90angle "TEXT \"currently:\n")
fprintf(FORMFILE_90angle "TLOC11 11\n")
fprintf(FORMFILE_90angle "ENDTEXT\n\n") 我也很关心 ;余弦函数求角度,再反余弦求度数
degree = axlRadToDeg(acos((LenA*LenA+LenB*LenB-LenC*LenC)/(2*LenA*LenB))) vivienluo 发表于 2025-5-9 17:06
原来如此,感谢大佬解惑 本帖最后由 xieeyawen 于 2025-5-29 16:49 编辑
见楼下 yonglee9x 发表于 2025-5-6 14:56
我也很关心
看楼下我贴了代码,但是可能功能不是特别好,代码水平有限。 vivienluo 发表于 2025-5-9 17:06
还是不会的,不过我自己在楼下写了一个,你看下有没有好办法优化,有些找不出来,另外有些45度的报出来,但是其实是没问题的 yonglee9x 发表于 2025-5-6 14:56
我也很关心
别人提供的思路:
获取cline seg的长度(axlMPythag),判断是首尾连接后,直接用勾股定理判断,会有一点误差,最长边需要加入误差冗余值(我设置的是0.01),因为小数点计算的时候会有点偏差 xieeyawen 发表于 2025-5-19 09:20
找到别人写的代码,使用还不错
页:
[1]
2