AutoCADlisp插件三维交点坐标提取
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;;;本插件为AutoCADlisp插件,用于获取LINE命令绘出的线段的交点,交点坐标返回为被交线段上的点(即外观交点xy+被交线段对应该点的z值)
;;;获取切割线与相交直线的交点,返回被交线段上的交点。
(defun C:JDHQ()
(setvar "cmdecho" 0)
(princ "\n选择要切割的直线:")
(setq lll(entsel));选择直线
;;;
;取得直线起点零高程坐标列表
(setq lllxyz1(cdr (assoc 10 (entget (car lll)))))
(setq lllx1(nth 1 lllxyz1))
(setq llly1(nth 0 lllxyz1))
(setq lllxyz10 (list llly1 lllx1 0.0))
;;;
;取得直线终点零高程坐标列表
(setq lllxyz2(cdr(assoc 11 (entget (car lll)))))
(setq lllx2(nth 1 lllxyz2))
(setq llly2(nth 0 lllxyz2))
(setq lllxyz20 (list llly2 lllx2 0.0))
;;;
(princ "\n选择被相交的直线图元集:")
(setq ss(ssget));被交线图元集
(setq n(sslength ss));计算图元集图元个数
(setq ff(open(getfiled "交点保存为" "" "txt" 1)"w"))
;;;;;
(setq i 0)
(repeat n
(setq spt (ssname ss i))
(setq ept (entget spt))
(if (=(cdr(assoc 0 ept)) "LINE")
(progn
(setq lxyz1(cdr (assoc 10 ept)))
(setq sx1(nth 1 lxyz1))
(setq sy1(nth 0 lxyz1))
(setq sz1(nth 2 lxyz1))
(setq lxyz10 (list sy1 sx1 0.0))
;;;
(setq lxyz2(cdr (assoc 11 ept)))
(setq sx2(nth 1 lxyz2))
(setq sy2(nth 0 lxyz2))
(setq sz2(nth 2 lxyz2))
(setq lxyz20 (list sy2 sx2 0.0))
;;;
;计算交点坐标
(setq jdxy0(inters lllxyz10 lllxyz20 lxyz10 lxyz20))
(if (/= jdxy0 nil)
(progn
(setq jdx(nth 1 jdxy0))
(setq jdy(nth 0 jdxy0))
;
;求交点高程z
(setq l1(sqrt(+(* (- sx2 sx1) (- sx2 sx1)) (* (- sy2 sy1) (- sy2 sy1)))))
(setq l2(sqrt(+(* (- jdx sx1) (- jdx sx1)) (* (- jdy sy1) (- jdy sy1)))))
(setq jdz(+ sz1 (* (- sz2 sz1) (/ l2 l1))))
(setq jdz1(rtos jdz 2 3))
(setq jdx1(rtos jdx 2 3))
(setq jdy1(rtos jdy 2 3))
;
;
(setq jdxyz(strcat jdy1"," jdx1 ","jdz1))
(write-line jdxyz ff)
)
)
)
)
(setq i (+ i 1))
)
(close ff)
(prin1)
)
(prompt "********<<C:JDHQ>>********")
(prin1)。