EDA365电子论坛网

标题: 个人试着写下90度及锐角线的检查,但是写的不够好 [打印本页]

作者: 式试1813    时间: 2025-5-15 16:44
标题: 个人试着写下90度及锐角线的检查,但是写的不够好
本帖最后由 式试1813 于 2025-5-15 17:16 编辑
  1. axlCmdRegister("cedg9" 'check_etch_degree90 ?cmdType "interactive")
  2. procedure(check_etch_degree90()
  3. let((
  4.     l_clines
  5.     log_file
  6.     fileport
  7.     clines
  8.     a
  9.     x1 x2 y1 y2
  10.     lista
  11.     slop
  12.     s0 e0
  13.     temp_b
  14.     temp_e
  15.                 )
  16.                 axlSetFindFilter(?enabled '(noall clinesegs) ?onButtons        '(noall clinesegs))
  17.                 l_clines=axlGetSelSet(axlAddSelectAll())
  18.                 ;l_clines=axlGetSelSet(axlSingleSelectBox())
  19.                 axlClearSelSet()
  20.                 log_file = "./check_etch_degree.log"
  21.                 fileport = outfile(log_file)   ;打开端口,新建log_file文件
  22.                 temp_e=nil
  23.                
  24.                 temp_b=0
  25.                 foreach(clines l_clines
  26.                        a=clines->startEnd
  27.                        x1=caar(a)
  28.                        y1=cadar(a)
  29.                        x2=caadr(a)
  30.                        y2=cadadr(a) ;x1,y1,x2,y2为线的起点和终点坐标
  31.                        s0=car(a) ;线的起点坐标
  32.                        e0=cadr(a);线的终点坐标
  33.                        slop=axlLineSlope(clines->startEnd)        ;斜率          
  34.                        if(slop
  35.                                then
  36.              a = axlRadToDeg(atan(axlLineSlope(clines->startEnd))) ;获得每根线的角度值,以竖线为90度,倾斜到左边的线角度为-90到0度之间,倾斜到右边的线角度为0到90度之间,没有-90度这个值
  37.                                else
  38.                                 a = 90.00 ;斜率为nil就是90度
  39.                                        );endif
  40.                        lista=nil
  41.                        lista=append1(lista ((x1+x2)/2))
  42.                        lista=append1(lista ((y1+y2)/2)) ;线的中间左边
  43.                        if(s0 == temp_e ;线的起点和前一段线的终点一致,则进行角度比较
  44.                                then
  45.                                cond(

  46.                                ((a>0 && temp_b>=0) && ((a-temp_b)<=90.00) && ((a-temp_b)>0.00)
  47.                                        fprintf(fileport "Degree : %.2f\t\t%L\t\t%s\n" a-temp_b lista clines~>net~>name) ;输出当前线和前一段线的夹角值,输出当前线的网络名及坐标
  48.                                        axlHighlightObject(clines))        ;高亮当前线
  49.                                ((a>=0 && temp_b>0) && ((temp_b-a)<=90.00) && ((temp_b-a)>0.00)
  50.                                        fprintf(fileport "Degree : %.2f\t\t%L\t\t%s\n" temp_b-a lista clines~>net~>name)
  51.                                        axlHighlightObject(clines))                                      
  52.                                ((a>=0 && temp_b<=0) && ((180.00-a+temp_b)<=90.00) && ((180.00-a+temp_b)>0.00)
  53.                                        fprintf(fileport "Degree : %.2f\t\t%L\t\t%s\n" 180.00-a+temp_b lista clines~>net~>name)
  54.                                        axlHighlightObject(clines))                                              
  55.                                ((a>0 && temp_b<=0) && ((a-temp_b)<=90.00) && ((a-temp_b)>0.00)
  56.                                        fprintf(fileport "Degree : %.2f\t\t%L\t\t%s\n" a-temp_b lista clines~>net~>name)
  57.                                        axlHighlightObject(clines))
  58.                                ((a<0 && temp_b<=0) && ((temp_b-a)<=90.00) && ((temp_b-a)>0.00)
  59.                                        fprintf(fileport "Degree : %.2f\t\t%L\t\t%s\n" temp_b-a lista clines~>net~>name)
  60.                                        axlHighlightObject(clines))                                                                                     
  61.                                ((a<=0 && temp_b<0) && ((a-temp_b)<=90.00) && ((a-temp_b)>0.00)
  62.                                        fprintf(fileport "Degree : %.2f\t\t%L\t\t%s\n" a-temp_b lista clines~>net~>name)
  63.                                        axlHighlightObject(clines))                                              
  64.                                       

  65.                                                                                                                                        
  66.                                        );endcond
  67.                                        );endif
  68.                               
  69.                                temp_b=a ;保存当前线的角度,用于下次的比较
  70.                                temp_e=e0 ;保存当前线的终点坐标,用于下次的比较
  71.                                );endforeach                     
  72.                   close(fileport)
  73.                         axlUIViewFileCreate(log_file "check_etch_degree.log" nil)
  74.                         deleteFile(fileport)
  75.         );endlet
  76.         );procedure


复制代码



作者: db-_-    时间: 2025-5-16 10:16
看着那一堆条件,有点头大。
讨论思路比讨论代码方便点。
作者: w_w    时间: 2025-5-16 10:58
我是获取cline seg的长度(axlMPythag),判断是首尾连接后,直接用勾股定理判断,会有一点误差,最长边需要加入误差冗余值(我设置的是0.01),因为小数点计算的时候会有点偏差
作者: 式试1813    时间: 2025-5-16 11:42
w_w 发表于 2025-5-16 10:58
我是获取cline seg的长度(axlMPythag),判断是首尾连接后,直接用勾股定理判断,会有一点误差,最长边需 ...

原来有这个函数,好像是可以做,我来试试
作者: 式试1813    时间: 2025-5-16 11:47
db-_- 发表于 2025-5-16 10:16
看着那一堆条件,有点头大。
讨论思路比讨论代码方便点。

感觉思想需要碰撞下,思路的确比讨论代码好,我也不想看代码了,好累

作者: db-_-    时间: 2025-5-16 13:54
其实自带的这个功能,也挺好用的。你可以考虑考虑。为自己省下一些脑细胞。



作者: 式试1813    时间: 2025-5-16 16:53
db-_- 发表于 2025-5-16 13:54
其实自带的这个功能,也挺好用的。你可以考虑考虑。为自己省下一些脑细胞。

那个好像不好用,而且是17.4的功能,16.6没有

作者: db-_-    时间: 2025-5-16 17:32
要我写,我可能会遍历所有cline的segs,相邻两条逐一判断,根据两条线的三个点,直接计算夹角。夹角≤90度,直接就输出。
不知道有没有什么遗漏的。
作者: 式试1813    时间: 2025-5-16 19:06
db-_- 发表于 2025-5-16 17:32
要我写,我可能会遍历所有cline的segs,相邻两条逐一判断,根据两条线的三个点,直接计算夹角。夹角≤90度 ...

是这样的,我写的这个太复杂,而且好像还会遗漏

作者: Dc2025060477a    时间: 2025-6-4 20:50
db-_- 发表于 2025-05-16 13:54:30
其实自带的这个功能,也挺好用的。你可以考虑考虑。为自己省下一些脑细胞。

[attach]399239[/attach]


实际使用中,有真实错误没有检测出的情况发生

作者: 式试1813    时间: 2025-6-25 15:43
*********1111




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2