明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6301|回复: 16

[命令] 查找线自相交[原创.附源码]

[复制链接]
发表于 2015-9-10 03:33:45 | 显示全部楼层 |阅读模式
本帖最后由 tryhi 于 2015-9-10 15:45 编辑
  1. (setq rrno1 5)
  2. ;;函数名:zjhy(自交画圆)
  3. ;;功能:在多段线是线自相交处画圆圈标注      
  4. ;;注:多段线为纯线段,不含弧线
  5. (defun c:zjhy(/ $i $j jiaodian lss nn ns os pt1 pt2 pt3 pt4)
  6.   (setq lss (Vertexs (car(entsel))));获取定点表
  7.   (setq rrno1 (ureal 0 "" "输入圆圈半径" rrno1))
  8.   (setq nn 0)
  9. (setq os (getvar "osmode"))
  10.   (setvar "osmode" 0)(setvar "CMDECHO" 0)
  11.   (setq ns (length lss));返回顶点个数
  12.   (setq $i 0);循环初始
  13.   (setq $j 2);嵌套循环初始
  14.   (repeat (- ns 1);循环从第一点到倒数第二点
  15.     (repeat (if(= $i 0)(1-(- ns $j))(- ns $j));循环到第一点(首点除外)
  16.       (setq pt1(nth $i lss));0
  17.       (setq pt2(nth (1+ $i) lss));1
  18.       (setq pt3(nth $j lss));2
  19.       (setq pt4(nth (if(=(1+ $j)ns)0(1+ $j)) lss));3(超过最后一个点跳到第一点)
  20.       (setq jiaodian(inters pt1 pt2 pt3 pt4));判断线段相交
  21.       (if jiaodian(command "CIRCLE" jiaodian rrno1));画圆
  22.       (if jiaodian(setq nn(1+ nn)));计数
  23.       (setq $j (1+ $j))
  24.     )
  25.     (setq $i (1+ $i))
  26.     (setq $j (+ 2 $i))
  27.   )
  28.   (setvar "osmode" os)
  29.   (princ "\n共找到") (princ nn)(princ "个自相交点。")
  30.   (prin1)
  31.   )
  32. (prompt
  33.   "\n******* zjhy[自交画圆]命令加载完成!*******------tryhi----2015-9-10"
  34. )(prin1)
  35. ;;返回多段线顶点表         
  36.   (defun Vertexs (s1 / lst);
  37.     (setq  lst (entget s1)
  38.       lst (vl-remove-if-not '(lambda (x) (= (car x) 10)) lst)
  39.       lst (mapcar 'cdr lst)
  40.     )
  41.   )
  42. ;;                  实型数输入格式化                           
  43. (defun ureal (bit kwd msg def / inp)
  44.   (if def
  45.     (setq msg (strcat "\n" msg "<" (rtos def 2) ">: ") bit (* 2 (fix (/ bit 2))))
  46.     (setq msg (strcat "\n" msg ": "))
  47.   )
  48.   (initget bit kwd)
  49.   (setq inp (getreal msg))
  50.   (if inp inp def)
  51. )

本帖子中包含更多资源

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

x
发表于 2018-1-27 10:45:53 | 显示全部楼层
海哥  厉害  顶顶顶  过来学习下
发表于 2020-7-27 15:09:49 | 显示全部楼层
You havn't checked  segment is a arc curve case
发表于 2017-10-30 21:54:57 | 显示全部楼层
谢谢楼主的分享,我把他转换为C#代码试试看
发表于 2015-9-10 13:59:08 | 显示全部楼层
谢谢,虽然不是C#,但是做法学会了
发表于 2015-9-10 19:37:41 | 显示全部楼层
支持原创
发表于 2015-9-20 23:16:34 | 显示全部楼层
支持一下!
发表于 2015-9-29 19:40:23 | 显示全部楼层
支持  原创   源码   
发表于 2015-10-20 11:46:05 | 显示全部楼层
感谢大师的分享
发表于 2017-10-5 20:15:43 | 显示全部楼层
回帖是一种美德!感谢楼主的无私分享 谢谢
发表于 2017-10-16 17:27:16 | 显示全部楼层
回帖是一种美德!感谢楼主的无私分享 谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-23 15:05 , Processed in 0.191060 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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