明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3131|回复: 15

[讨论] 求一批量检查圆弧与线段是否相切的外挂

  [复制链接]
发表于 2011-7-9 00:08:27 | 显示全部楼层 |阅读模式
求一批量检查圆弧与线段是否相切的外挂   ,不知道有没有什么好用的方法  ,小弟是小白,希望大家多多指教
发表于 2025-5-30 21:38:57 | 显示全部楼层
下载学习学习
回复 支持 反对

使用道具 举报

发表于 2011-7-9 00:53:35 | 显示全部楼层
(defun test (LINE ARC / P1 P2 CEN INS)
  (setq LINE (entget LINE)
        ARC  (entget ARC)
        P1   (cdr (assoc 10 LINE))
        P2   (cdr (assoc 11 LINE))
        CEN  (cdr (assoc 10 ARC))
        INS  (inters P1 P2 CEN (polar CEN (+ (angle P1 P2) (/ PI 2)) 1) nil)
  )
  (equal (distance CEN INS) (cdr (assoc 40 ARC)) 1E-5)
)
;;;(test  (car(entsel "\n选择直线: "))  (car(entsel "\n选择圆弧: ")))
发表于 2011-7-9 01:45:20 | 显示全部楼层

  1. ;;;判断圆弧或圆是否与线段相切
  2. (defun if_tan (s1 s2 / pt_cen pta ptb Radius ptangle ptn jptx dist)
  3.   (setq        pt_cen        (cdr (assoc 10 (entget s1)))
  4.         Radius        (cdr (assoc 40 (entget s1)))
  5.         pta        (cdr (assoc 10 (entget s2)))
  6.         ptb        (cdr (assoc 11 (entget s2)))
  7.         ptangle        (angle pta ptb)
  8.         ptn        (polar pt_cen (+ (* 0.5 pi) ptangle) 0.01)
  9.         jptx        (inters pt_cen ptn pta ptb nil)
  10.         dist        (distance pt_cen jptx)
  11.   )
  12.   (if (equal dist radius 1e-5);容差1e-5认为相等
  13.     T
  14.     nil
  15.   )
  16. )
  17. (defun c:iftan (/ ss ss_arc ss_line n m n1 m1 n2 m2 ss1)
  18.   (prompt "\n选择需要判断的线段、圆、圆弧")
  19.   (setq ss (ssget))
  20.   (setq ss_arc (ssadd))
  21.   (setq ss_line (ssadd))
  22.   (setq ss_c_l  (ssadd))
  23.   (setq n (sslength ss))
  24.   (setq m 0)
  25.   (while (/= m n)
  26.     (setq ss1 (ssname ss m))
  27.     (if        (= (cdr (assoc 0 (entget ss1))) "LINE")
  28.       (ssadd ss1 ss_line)
  29.     )
  30.     (if        (or (= (cdr (assoc 0 (entget ss1))) "ARC")
  31.             (= (cdr (assoc 0 (entget ss1))) "CIRCLE")
  32.         )
  33.       (ssadd ss1 ss_arc)
  34.     )
  35.     (setq m (1+ m))
  36.   )
  37.   (setq n1 (sslength ss_arc))
  38.   (setq n2 (sslength ss_line))
  39.   (setq m1 0)  
  40.   (while (/= m1 n1)
  41.     (setq ss1_arc (ssname ss_arc m1))
  42.     (setq m2 0)
  43.     (while (/= m2 n2)
  44.       (setq ss1_line (ssname ss_line m2))
  45.       (if (if_tan ss1_arc ss1_line)
  46.         (progn
  47.           (redraw ss1_arc 3)
  48.           (redraw ss1_line 3)
  49.         )
  50.       )
  51.       (setq m2 (1+ m2))
  52.     )
  53.     (setq m1 (1+ m1))
  54.   )
  55. )
发表于 2011-7-9 07:01:42 | 显示全部楼层
本帖最后由 caoyin 于 2011-7-9 07:02 编辑

楼上
(setq ss_arc (ssadd))
(setq ss_line (ssadd))
......
部分我觉得可以改成
(setq ss_arc (ssget "p" '((0 . "line"))))
(sssetfirst nil ss)
(setq ss_arc (ssget "i" '((0 . "arc,circle"))))
话又说回来,建这么多选集,反复遍历是不是划不来?何不用表貌似更快
 楼主| 发表于 2011-7-9 08:34:49 | 显示全部楼层
非常感谢你们的帮忙,再问个小白的问题,那些代码怎么在CAD里面用,我不会用,能否教我下,好人做到底
发表于 2011-7-9 09:22:39 | 显示全部楼层
使用时将其拖入cad窗口,用iftan命令运行,选择需要判断的圆弧和线,可窗选。凡是相切的都将高亮显示。

本帖子中包含更多资源

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

x
 楼主| 发表于 2011-7-9 17:29:15 | 显示全部楼层
太谢谢您了,非常不错
 楼主| 发表于 2011-7-10 08:55:54 | 显示全部楼层
本帖最后由 zuoq 于 2011-7-10 09:57 编辑

回复 zhynt 的帖子

首先非常感谢你这么热情的帮助我,今天试了下你做的那个代码,要是出现这种情况怎么检查是否相切呢?红色部分   有一边是相切的,另一边不是,使用您给我的那个软件也会显示是相切的,这种情况怎么办,有什么方法能修改下吗?小弟这里都是慢走丝加工,出现没有相切的情况会割坏模具板

本帖子中包含更多资源

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

x
发表于 2011-7-10 14:20:20 | 显示全部楼层
这倒不是程序判断有误,而是下边的线段和左边的圆弧相切,所以高亮了,这样的情况你可以分开选择,一次选一组,相切就高亮,否则无变化。
 楼主| 发表于 2011-7-10 16:23:16 | 显示全部楼层
回复 zhynt 的帖子

像您说的这样假如批量检测圆弧与直线是否相切  就不能正确检测出来,您做的这个只要有一条直线与一个圆弧相切就会高亮显示,像我那做五金模具 ,冲头比较多,难道必须一条一条直线一个圆弧的检查吗?您能不能帮我想点办法修改下这个代码

本帖子中包含更多资源

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

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-9-10 04:29 , Processed in 0.183832 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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