明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2647|回复: 14

[LISP]请高手帮我改一下这段程序——实现动态画线

  [复制链接]
发表于 2005-1-13 08:48:00 | 显示全部楼层 |阅读模式
我想实现动态画线功能,请高手帮助修改,欲画的曲线是方程:y=4kx(m-x)                ,k和m是常数


本帖子中包含更多资源

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

x
发表于 2005-1-13 16:36:00 | 显示全部楼层
怎磨没有高手回答呢?
 楼主| 发表于 2005-1-13 17:33:00 | 显示全部楼层
是啊,我都等了好久了,请高手帮帮忙
发表于 2005-1-13 17:39:00 | 显示全部楼层
你想修改成什么样呢?
 楼主| 发表于 2005-1-14 08:42:00 | 显示全部楼层
能够像cad本身的对象(比如:圆、多义线)那样动态显示,这段代码不知道飞哥运行过了没,输入参数后,移动鼠标就会画很多线,不能删除掉没用的曲线
发表于 2005-1-14 10:52:00 | 显示全部楼层
问题是我实在想象不出一个二次方程曲线该怎么动态显示?


圆可以根据圆心和鼠标当前位置确定半径,以达到动态显示,直线根据起点和鼠标当前位置作线,动态显示。。。可一天二次曲线,动态的时候显示的是什么呢?可否图示一下。


你的程序我运行了,看不出来你的意图。。。另:*error*函数最好存到变量里,最后恢复,否则你的程序一运行,*error*函数就被更改了,别人的错误也得用你的错误处理函数了
 楼主| 发表于 2005-1-14 13:20:00 | 显示全部楼层
曲线是方程:y=4kx(m-x)         的k参数指定后,在平面上选定一个点,然后把鼠标移动的点作为第二个点,两点间的距离为m,第二个点变化(m在变)则曲线就不同,我想只要最后鼠标左键按下的那条曲线


       


不好意思我的表达能力不太好,见谅
发表于 2005-1-14 14:10:00 | 显示全部楼层
还是做不到,这是一条无限长的曲线,不可能都画出来,只能画某一段,只有给定起点和终点(或曲线长度,或其它限制条件),,,,
 楼主| 发表于 2005-1-14 14:43:00 | 显示全部楼层
就是两点之间的部分
发表于 2005-1-14 16:32:00 | 显示全部楼层
看看先:
  1. (defun c:test(/ PTA VK VD pti m ents)
  2.    (SETQ PTA (GETPOINT "\nFirst Point:")
  3.   VK   (GETDIST "\nParameter K=")
  4.   VD   (GETINT "\nDivide of the line:"))
  5.    (setq ent nil)
  6.    (command "_.pline")
  7.    (repeat (1+ vd) (command '(0 0)))
  8.    (command "")
  9.    (setq ents (entget (entlast)))
  10.    (while (/= (car (setq pti (grread t 15 0))) 3)
  11.        (if (= (car pti) 5)
  12.            (progn
  13.   (setq pti (cadr pti))
  14.   (setq ents (drawxlx PTA pti VK VD ents))
  15.            )
  16.        )
  17.    )
  18. )
  19. (defun drawxlx(pta ptb vk vd ents / m x i xi y)
  20.    (setq m (distance pta ptb))
  21.    (setq x (- (car ptb) (car pta)))
  22.    (setq x (/ x vd))
  23.    (setq i 0)
  24.    (repeat (1+ vd)
  25.        (setq xi (+ (car pta) (* x   i)))
  26.        (setq y (* 4 vk xi (- m xi)))
  27.        (setq ents (subilst (list 10 xi y) i 10 ents))
  28.        (setq i (1+ i))
  29.    )
  30.    (entmod ents)
  31. )
  32. ;引用无痕帖子中程序改编
  33. (defun subilst (a ilst key lst / n)
  34.    (setq n -1)
  35.    (mapcar '(lambda(x)
  36.            (if (= (car x) key)
  37.                (progn     
  38.      (setq n (1+ n))
  39.      (if (= ilst n) a x))
  40.                x
  41.                )
  42.            
  43.        ) lst)
  44. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-9-29 20:27 , Processed in 0.274008 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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