找回密码
 注册
关于网站域名变更的通知
查看: 178|回复: 10
打印 上一主题 下一主题

个人试着写下90度及锐角线的检查,但是写的不够好

[复制链接]
  • TA的每日心情
    开心
    2025-6-4 15:44
  • 签到天数: 29 天

    [LV.4]偶尔看看III

    跳转到指定楼层
    1#
     楼主| 发表于 2025-5-15 16:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    本帖最后由 式试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


    复制代码


  • TA的每日心情
    奋斗
    2025-4-27 15:26
  • 签到天数: 81 天

    [LV.6]常住居民II

    2#
    发表于 2025-5-16 10:16 | 只看该作者
    看着那一堆条件,有点头大。
    讨论思路比讨论代码方便点。

    点评

    感觉思想需要碰撞下,思路的确比讨论代码好,我也不想看代码了,好累  详情 回复 发表于 2025-5-16 11:47
  • TA的每日心情

    2021-1-21 15:57
  • 签到天数: 121 天

    [LV.7]常住居民III

    3#
    发表于 2025-5-16 10:58 | 只看该作者
    我是获取cline seg的长度(axlMPythag),判断是首尾连接后,直接用勾股定理判断,会有一点误差,最长边需要加入误差冗余值(我设置的是0.01),因为小数点计算的时候会有点偏差

    点评

    原来有这个函数,好像是可以做,我来试试  详情 回复 发表于 2025-5-16 11:42
  • TA的每日心情
    开心
    2025-6-4 15:44
  • 签到天数: 29 天

    [LV.4]偶尔看看III

    4#
     楼主| 发表于 2025-5-16 11:42 | 只看该作者
    w_w 发表于 2025-5-16 10:58
    我是获取cline seg的长度(axlMPythag),判断是首尾连接后,直接用勾股定理判断,会有一点误差,最长边需 ...

    原来有这个函数,好像是可以做,我来试试
  • TA的每日心情
    开心
    2025-6-4 15:44
  • 签到天数: 29 天

    [LV.4]偶尔看看III

    5#
     楼主| 发表于 2025-5-16 11:47 | 只看该作者
    db-_- 发表于 2025-5-16 10:16
    看着那一堆条件,有点头大。
    讨论思路比讨论代码方便点。

    感觉思想需要碰撞下,思路的确比讨论代码好,我也不想看代码了,好累
  • TA的每日心情
    奋斗
    2025-4-27 15:26
  • 签到天数: 81 天

    [LV.6]常住居民II

    6#
    发表于 2025-5-16 13:54 | 只看该作者
    其实自带的这个功能,也挺好用的。你可以考虑考虑。为自己省下一些脑细胞。


    点评

    那个好像不好用,而且是17.4的功能,16.6没有  详情 回复 发表于 2025-5-16 16:53
  • TA的每日心情
    开心
    2025-6-4 15:44
  • 签到天数: 29 天

    [LV.4]偶尔看看III

    7#
     楼主| 发表于 2025-5-16 16:53 | 只看该作者
    db-_- 发表于 2025-5-16 13:54
    其实自带的这个功能,也挺好用的。你可以考虑考虑。为自己省下一些脑细胞。

    那个好像不好用,而且是17.4的功能,16.6没有
  • TA的每日心情
    奋斗
    2025-4-27 15:26
  • 签到天数: 81 天

    [LV.6]常住居民II

    8#
    发表于 2025-5-16 17:32 | 只看该作者
    要我写,我可能会遍历所有cline的segs,相邻两条逐一判断,根据两条线的三个点,直接计算夹角。夹角≤90度,直接就输出。
    不知道有没有什么遗漏的。

    点评

    是这样的,我写的这个太复杂,而且好像还会遗漏  详情 回复 发表于 2025-5-16 19:06
  • TA的每日心情
    开心
    2025-6-4 15:44
  • 签到天数: 29 天

    [LV.4]偶尔看看III

    9#
     楼主| 发表于 2025-5-16 19:06 | 只看该作者
    db-_- 发表于 2025-5-16 17:32
    要我写,我可能会遍历所有cline的segs,相邻两条逐一判断,根据两条线的三个点,直接计算夹角。夹角≤90度 ...

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

    该用户从未签到

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



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

    “来自电巢APP”

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-6-5 03:18 , Processed in 0.109375 second(s), 28 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表