找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 910|回复: 9

[其他]:一位网友需要的R14下Line选择集交点函数

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-8-9 18:28:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×

  1. ;;求直线选择集交点, 不过滤重复点
  2. (defun lnsinters (ss /  n m e1 e2 el el1 p1 p2 p3 p4 intp intps)
  3.   (setq        n (sslength ss))
  4.   (while (> n 0)
  5.     (setq e1 (ssname ss (setq n (1- n)))
  6.           el (entget e1)
  7.           m  (1- n)
  8.           p1 (cdr (assoc 10 el))
  9.           p2 (cdr (assoc 11 el))
  10.     )
  11.     (while (> m 0)
  12.       (setq e2         (ssname ss m)
  13.             el1         (entget e2)
  14.             p3         (cdr (assoc 10 el1))
  15.             p4         (cdr (assoc 11 el1))
  16.             intp (inters p1 p2 p3 p4)
  17.             m         (1- m)
  18.       )
  19.       (if intp
  20.         (setq intps (cons intp intps))
  21.       )
  22.     )
  23.   )
  24.   intps
  25. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-8-11 11:57:41 | 显示全部楼层

Re: [其他]:一位网友需要的R14下Line选择集交点函数

最初由 eachy 发布
[B][CODE]
;;求直线选择集交点, 不过滤重复点
(defun lnsinters (ss /  n m e1 e2 el el1 p1 p2 p3 p4 intp intps)
  (setq        n (sslength ss))
  (while (> n 0)
    (setq e1 (ssname ss (setq n (1- n)))
          el ... [/B]

程序有一处错误
(while (> m 0) 应该改为 (while (>= m 0)
参照上代码加了增加直线平行连续画时的连接也算交点的情况
[php]
(defun lnsinters (ss / n n1 m e1 e2 el el1 p1 p2 p3 p4 intp intps)
  (setq ss (ssget))
  (setq n (sslength ss))
  (setq intps nil)
  (while (> n 0)
    (setq e1 (ssname ss (setq n (1- n)))
          el (entget e1)
          m  (1- n)
          p1 (cdr (assoc 10 el))
          p2 (cdr (assoc 11 el))
    )
    (while (>= m 0)
      (setq e2         (ssname ss m)
            el1         (entget e2)
            p3         (cdr (assoc 10 el1))
            p4         (cdr (assoc 11 el1))
            intp (inters p1 p2 p3 p4)
            m         (1- m)
      )
      (if intp
        (setq intps (cons intp intps))
        (if (or        (setq intp (cdr (member p1 (list p3 p4))))
                (setq intp (cdr (member p2 (list p3 p4))))
            )
          (setq intps (cons intp intps))
        )
      )
    )
  )
  intps
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-12 18:19:14 | 显示全部楼层
斑竹:你好,我用不到你的程序,不知能否指点一下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-13 09:24:03 | 显示全部楼层

Re: [其他]:一位网友需要的R14下Line选择集交点函数

最初由 eachy 发布
[B][CODE]
;;求直线选择集交点, 不过滤重复点
(defun lnsinters (ss /  n m e1 e2 el el1 p1 p2 p3 p4 intp intps)
... [/B]


谢谢版主,已经下载学习了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2005-12-13 13:21:22 | 显示全部楼层

Re: Re: [其他]:一位网友需要的R14下Line选择集交点函数

最初由 黄卫文 发布
[B][QUOTE]最初由 eachy 发布
[B][CODE]
;;求直线选择集交点, 不过滤重复点
(defun lnsinters (ss /  n m e1 e2 el el1 p1 p2 p3 p4 intp intps)
  (setq        n (sslength ss))
  (while (> n 0)
    (setq e1... [/B]

測試:

命令: (LNSINTERS ss)

选择对象: 指定对角点: 找到 17 个

选择对象:
(((3405.32 5081.69 0.0)) (3420.14 5066.88 0.0) ((3420.14 5066.88 0.0))
((3416.17 5055.13 0.0)) ((3412.61 5044.56 0.0)) (3422.43 5067.42 0.0) ((3422.43
5067.42 0.0)) ((3418.07 5054.49 0.0)) ((3414.5 5043.92 0.0)) ((3406.02 5082.39
0.0)) (3421.28 5067.15 0.0) ((3421.28 5067.15 0.0)) ((3417.12 5054.81 0.0))
((3413.56 5044.24 0.0)))

點集中爲什麽有的點是((點)),有的是(點)?

修改:
[PHP](defun lnsinters (ss / n n1 m e1 e2 el el1 p1 p2 p3 p4 intp intps)

  (setq n (sslength ss))

  (while (> n 0)
    (setq e1 (ssname ss (setq n (1- n)))
      el (entget e1)
      m  (1- n)
      p1 (cdr (assoc 10 el))
      p2 (cdr (assoc 11 el))
    )
    (while (>= m 0)
      (setq e2     (ssname ss m)
        el1     (entget e2)
        p3     (cdr (assoc 10 el1))
        p4     (cdr (assoc 11 el1))
        intp (inters p1 p2 p3 p4)
        m     (1- m)
      )
      (if intp
    (setq intps (cons intp intps))
    (if (or    (setq intp (cadr (member p1 (list p3 p4))))
        (setq intp (cadr (member p2 (list p3 p4))))
        )
      (setq intps (cons intp intps))
    )
      )
    )
  )
  intps
)
[/PHP]
再改,過濾相同點.
[PHP](defun lst-delsame (pts / pl)
  (while pts
    (setq p (car pts)
          pts (cdr pts)
          pts (vl-remove-if '(lambda (x)
                               (equal x p 1e-10)
                             ) pts
              )
          pl (cons p pl)
    )
  )
  (reverse pl)
)
(defun lines-inters (ss / n n1 m e1 e2 el el1 p1 p2 p3 p4 intp intps)
  (setq n (sslength ss))
  (while (> n 0)
    (setq e1 (ssname ss (setq n (1- n)))
          el (entget e1)
          m (1- n)
          p1 (cdr (assoc 10 el))
          p2 (cdr (assoc 11 el))
    )
    (while (>= m 0)
      (setq e2 (ssname ss m)
            el1 (entget e2)
            p3 (cdr (assoc 10 el1))
            p4 (cdr (assoc 11 el1))
            intp (inters
                   p1
                   p2
                   p3
                   p4
                 )
            m (1- m)
      )
      (if intp
        (setq intps (cons intp intps))
        (if (or
              (setq intp (cadr (member p1 (list p3 p4))))
              (setq intp (cadr (member p2 (list p3 p4))))
            )
          (setq intps (cons intp intps))
        )
      )
    )
  )
  (lst-delsame intps)

)
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2005-12-13 18:01:34 | 显示全部楼层
图中有完全重合直线时返回点表中含子表。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-10-12 20:06:15 | 显示全部楼层
如果在lisp程序中已知p1、p2、p3、p4四个点,如何应用该程序?我试验后,现程序只能人为选择点…………
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-4-15 10:54:19 | 显示全部楼层

我也改一个

我也改一个

[PHP]
(defun CheckSamePoint (p / p0 i exit0)
  (setq i -1)
  (while (and intps
              (setq p0 (nth (setq i (1+ i)) intps))
              (not (setq exit0 (equal p p0 1e-4)))
         )
  )
  (princ exit0)
  exit0
)


;;求直线选择集交点, 滤重复点
(defun lnsinters (ss /  n m e1 e2 el el1 p1 p2 p3 p4 intp intps)
(if (and ss (> (sslength ss) 0))(progn
  (setq n -1)
  (while (setq e1 (ssname ss (setq n (1+ n))))
    (setq el (entget e1)
          m  n
          p1 (cdr (assoc 10 el))
          p2 (cdr (assoc 11 el))
    )
    (while (setq e2 (ssname ss (setq m (1+ m))))
      (setq el1         (entget e2)
            p3         (cdr (assoc 10 el1))
            p4         (cdr (assoc 11 el1))
            intp (inters p1 p2 p3 p4)
      )
      (if (and intp (not (CheckSamePoint intp)))
        (setq intps (cons intp intps))
      )
    )
  )
))
  intps
)

;测试
(defun c:tt ()
  (princ (lnsinters (ssget)))
  (princ)
)



[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-6-6 11:00:43 | 显示全部楼层
以上各位的程序非常好,可否增加其他类型曲线的交点?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2008-6-27 06:27:49 | 显示全部楼层
程序很好,不知道有没有,画角平分线的命令
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-16 18:32 , Processed in 0.295164 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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