[LISP]请高手帮我改一下这段程序——实现动态画线
我想实现动态画线功能,请高手帮助修改,欲画的曲线是方程:y=4kx(m-x) ,k和m是常数怎磨没有高手回答呢? 是啊,我都等了好久了,请高手帮帮忙 你想修改成什么样呢? 能够像cad本身的对象(比如:圆、多义线)那样动态显示,这段代码不知道飞哥运行过了没,输入参数后,移动鼠标就会画很多线,不能删除掉没用的曲线 问题是我实在想象不出一个二次方程曲线该怎么动态显示?
圆可以根据圆心和鼠标当前位置确定半径,以达到动态显示,直线根据起点和鼠标当前位置作线,动态显示。。。可一天二次曲线,动态的时候显示的是什么呢?可否图示一下。
你的程序我运行了,看不出来你的意图。。。另:*error*函数最好存到变量里,最后恢复,否则你的程序一运行,*error*函数就被更改了,别人的错误也得用你的错误处理函数了 曲线是方程:y=4kx(m-x) 的k参数指定后,在平面上选定一个点,然后把鼠标移动的点作为第二个点,两点间的距离为m,第二个点变化(m在变)则曲线就不同,我想只要最后鼠标左键按下的那条曲线
不好意思我的表达能力不太好,见谅 还是做不到,这是一条无限长的曲线,不可能都画出来,只能画某一段,只有给定起点和终点(或曲线长度,或其它限制条件),,,, 就是两点之间的部分 看看先:(defun c:test(/ PTA VK VD pti m ents)
(SETQ PTA (GETPOINT "\nFirst Point:")
VK (GETDIST "\nParameter K=")
VD (GETINT "\nDivide of the line:"))
(setq ent nil)
(command "_.pline")
(repeat (1+ vd) (command '(0 0)))
(command "")
(setq ents (entget (entlast)))
(while (/= (car (setq pti (grread t 15 0))) 3)
(if (= (car pti) 5)
(progn
(setq pti (cadr pti))
(setq ents (drawxlx PTA pti VK VD ents))
)
)
)
)
(defun drawxlx(pta ptb vk vd ents / m x i xi y)
(setq m (distance pta ptb))
(setq x (- (car ptb) (car pta)))
(setq x (/ x vd))
(setq i 0)
(repeat (1+ vd)
(setq xi (+ (car pta) (* x i)))
(setq y (* 4 vk xi (- m xi)))
(setq ents (subilst (list 10 xi y) i 10 ents))
(setq i (1+ i))
)
(entmod ents)
)
;引用无痕帖子中程序改编
(defun subilst (a ilst key lst / n)
(setq n -1)
(mapcar '(lambda(x)
(if (= (car x) key)
(progn
(setq n (1+ n))
(if (= ilst n) a x))
x
)
) lst)
)
页:
[1]
2