求一个AutoLisp 程序,作用是 求一条直线与多条平行线的交点,并输出交点坐标。

2024-12-19 11:53:49
推荐回答(1个)
回答1:

操作模式如何?这对编程的难度有比较大的差异。
(1)先选中“直线”再提示选择“被相交”的平行线,计算出坐标点,再输出到txt(比较简单)
(2)直接选中一堆线,然后去分析哪条是“主相交”线,哪些是平行线,要多次循环判断,这个难度就大了,光给点分很难获得回答。
要第一种方案的话,有空倒是可以帮你。

直线相交求交点,给你核心代码,加载后执行GX命令输出交点到命令行
(defun c:gx(/ ent n sel ptlst nent px)
(setvar "cmdecho" 0)
(setq ent(car(entsel)))
(if(not ent)(exit))
(if(/=(cdr(assoc 0(entget ent)))"LINE")(exit))

(princ "\n选择要被相交的平行线:")
(setq sel(ssget '((0 . "LINE"))))
(if(not sel)(exit))
(setq ptlst nil)
(setq p1(cdr(assoc 10(entget ent)))
p2(cdr(assoc 11(entget ent))))
(setq n 0)
(repeat(sslength sel)
(setq nent(ssname sel n))
(setq p3(cdr(assoc 10(entget nent)))
p4(cdr(assoc 11(entget nent))))
(setq px(inters p1 p2 p3 p4))
(setq px(trans px 0 1))
(if ptlst(setq ptlst(cons px ptlst))(setq ptlst(list px)))
(setq n(1+ n))
)
(princ ptlst)
(setvar "cmdecho" 1)
(princ)
)