找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 832|回复: 4

[编程申请]:XYP和狂刀先生请进;求一条多段线与多条多段线的交点坐标

[复制链接]
发表于 2005-11-12 19:46:29 | 显示全部楼层 |阅读模式

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

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

×
一种情况是:(见图一)一条红色多义线起点在A处,终点在B处,且A、B点坐标已知,它与n条白色多义线同在同一平面内(二维平面、Z值相同),红线与各白线都有实际的交点Pn,要求按顺序自左向右依次求出p1至pn点的交点坐标。
第二种情况是:(见图二)一条红色多义线起点在A处,终点在B处,在视觉上它与n条白色多义线相交于Pn'(没有实际的交点),白色多义线的z 值各不相同(三维空间)。要求按顺序自左向右依次求出p1至pn点的交点坐标。
    如果能把上述两种情况整合在一个lisp里最好,分做两个lisp也行。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-11-13 13:01:51 | 显示全部楼层
求交的例子很多,你搜索先看看,体会一下
第二个问题,可先将曲线压平到ab所在平面,求交点
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-13 20:29:24 | 显示全部楼层
  1. [FONT=courier new]
  2. ;;;一条线与多条线的交点
  3. (defun c:test (/ etype ptn)
  4.   (princ "\n选择源线 : ")
  5.   (while (not (setq ss1 (ssget '((0 . "CIRCLE,ELLIPSE,*LINE,ARC")))))
  6.   )
  7.   (setq s0 (ssname ss1 0))
  8.   (princ "\n选择目标线 : ")
  9.   (setq        ss (ssget '((0 . "CIRCLE,ELLIPSE,*LINE,ARC")))
  10.         i  -1
  11.   )
  12.   (command "select" ss "r" s0 "")
  13.   (setq ss (ssget "P"))
  14.   (while (setq s1 (ssname ss (setq i (1+ i))))
  15.     (if        (setq ptlst (xyp-get-Inters s0 s1 0))
  16.       (setq ptn (append ptn ptlst))
  17.     )
  18.   )
  19.   (if ptn
  20.     (setq
  21.       ptn (vl-sort ptn
  22.                    (function (lambda (e1 e2) (< (car e1) (car e2))))
  23.           )
  24.     )
  25.   )
  26.   ptn
  27. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2005-11-16 13:30:58 | 显示全部楼层
想出一个办法,不知可行否?贴出来请大家指教!
;; 曲线求交
;;假定那多条线段位于"DGX"层
(defun c:mint(/ ent1 ent2 m E E1 E2 p plist h)
  (setq ENT1 (car (entsel "\n选择第一根线: ")))
  (setq ent2 (ssget "X" '((8 . "DGX")(0 . "*POLYLINE"))))
  (setq m -1 plist '() p nil)
  (repeat (sslength ent2)
    (setq E2 (ssname ent2 (setq m (1+ m))))
    (setq E (entget E2) E1 (cdr(assoc 0 E)))
    (setq h (cond ((= E1 "POLYLINE")(last (assoc 10 E)))
                  ((= E1 "LWPOLYLINE")(cdr (assoc 38 E)))
            )
    )
    (m_h E2 (- 0 h))
    (setq p0 (x@_int ent1 E2))
    (setq p (list (car p0)(cadr p0) h))
    (setq plist (append plist (list p)))
    (m_h E2 h)
)   
  ;;交点表
  (print plist)
  (princ)
)
(defun x@_int (e1 e2)
  (vlax-invoke (vlax-ename->vla-object e1)
    'IntersectWith (vlax-ename->vla-object e2) 0)
)
(defun m_h (s h)
   (command "_.move" s "" (list 0 0 0) "")
   (command "_.move" s "" (list 0 0 h) "")
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 19:04 , Processed in 0.331763 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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