如何动态实现绘制一定坡比的斜线
刚开始学lisp,试着写了一个简单的绘制斜线的代码,平时画岸坡确定坡比的时候,会用到。用的都是初学者的几个函数,请问有没有办法不需要提前输入长度,而是需要输入坡比,然后像拉伸直线一样绘制出一条斜线出来呢。[*](defun c:xp(/ p1 p2 l1 n1 x1 y1 x2 y2 pz)
[*](setq pz (getvar "osmode")) ;获取当前捕捉设置
[*](setvar "osmode" 0) ;关闭捕捉
[*](setq p1 (getpoint "\n输入第一个点"))
[*](setq l1 (getdist "\n输入长度"))
[*](setq n1 (getint "请输入坡比 1:n"))
[*](setq x1 (car p1))
[*](setq y1 (cadr p1))
[*](setq x2 (+ x1 l1))
[*](setq y2 (+ y1 (/ l1 n1)))
[*](setq p2 (list x2 y2))
[*](command "line" p1 p2 "")
[*](setvar "osmode" pz) ;还原设置捕捉
[*](princ)
[*])
用两个点的坐标可以直接算出长度 (DEFUN C:T1 ()
(SETQ P1 (GETPOINT"\n请指定起点"))
(setq pd(getreal"\n请指输入坡度"))
(SETQ P2 (POLAR (POLAR P1 0 1) (+ (* 0.5 PI)) PD))
(SETQ LOOP T)
(SETQ E (entmakeX (list '(0 . "LINE") (cons 10 p1) (cons 11 p2))))
(WHILE LOOP
(setq code (grread T 8)
PT (CADR CODE)
)
(COND
((= (car code) 5)
(IF E(ENTDEL E))
(SETQ P3 (INTERS P1 P2 PT (POLAR PT (+ (* 0.5 PI)) 100) NIL)
E(entmakeX (list '(0 . "LINE") (cons 10 p1) (cons 11 p3)))
)
)
;;; 鼠标移动
((OR (= (car code) 3) (= (car code) 11)) (SETQ LOOP NIL)))
;;; 鼠标左键
)
(PRINC )
)
没有捕捉其实没啥用,动态是没办法精准的 (DEFUN C:T1 ()
(SETQ P1 (GETPOINT"\n请指定起点"))
(setq pd(getreal"\n请指输入坡度"))
(SETQ P2 (POLAR (POLAR P1 0 1) (+ (* 0.5 PI)) PD))
(SETVAR "POLARADDANG" (ANGTOS (ANGLE P1 P2) 0))
(SETQ P2 (GETPOINT p1"\n请指定起点"))
(SETQ E (entmakeX (list '(0 . "LINE") (cons 10 p1) (cons 11 p2))))
(PRINC )
)
这样,还能精准点 liuhe 发表于 2023-8-19 16:38
这样,还能精准点
:lol,两段代码我都好好学习下。谢谢您了。您好像是做给排水或暖通之类设计的,我是做水运设计的,有种简易码头叫斜坡码头,画剖面图的时候,需要定一个护岸的坡度,我会经常画一定坡度的线比划,来估算可能的开挖程度,这条线对捕捉的需求不是很高的。 动态可以捕捉的,我记得在哪里看过,需要自己定义函数,使用legend获取捕捉状态,重定义捕捉 看看我这个能满足你的要求不http://bbs.mjtd.com/thread-188262-1-1.html 花开富贵 发表于 2023-8-20 00:11
动态可以捕捉的,我记得在哪里看过,需要自己定义函数,使用legend获取捕捉状态,重定义捕捉
谢谢您。我先研究下liuhe大神的动态代码,学习下grreed函数,然后在研究捕捉的问题。再次感谢您的帮助。 sandyvs 发表于 2023-8-20 07:58
看看我这个能满足你的要求不http://bbs.mjtd.com/thread-188262-1-1.html
您插件的功能比我想象中的还要强大,我现在主要是想学习各个大佬的经验,以学习为主,希望早日出师,:lol。
页:
[1]