明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1205|回复: 9

[求助]让程序在运行的过程中支持"鼠标捕捉"

[复制链接]
发表于 2008-4-19 13:16 | 显示全部楼层 |阅读模式

下面是"zml84"博客上的一个LISP程序....

求助各位版主,,能否改进一下,让程序在运行的过程中支持"鼠标捕捉"功能!

多条橡皮筋.lsp


;|;;要求:
如同CAD中选择实体的“WP”功能,在绘制任意多边形时,鼠标在屏幕上拾取点的时候,
总是同时和上一点以及第一点相连,在任何时候看都是一个多边形。
;;;==============================================================================
(defun
			C:TT
			()
    (if	(and
			(setq
			PT1
			(getpoint
			"\n起始点: "))
	     (setq
			PT2
			(getpoint
			PT1
			"\n指定下一点: "))
	)
	(progn
	    (command
			"_.pline"
			"non"
			PT1
			"non"
			PT2)
	    (setq
			TEST
			t)
	    (while
			TEST
		(setq
			TMP
			(grread
			t
			7
			0))
		(redraw)
		(cond
			((=
			(car
			TMP)
			3)
			;_左键
		       (setq
			PT2
			(cadr
			TMP))
		       (command
			"non"
			PT2)
		      )
		      ((=
			(car
			TMP)
			11)
			;_右键
		       (command
			"c")
		       (setq
			TEST
			NIL)
		      )
		      ((=
			(car
			TMP)
			5)
			;_移动
		       (setq
			PT
			(cadr
			TMP))
		       (grdraw
			PT
			PT1
			1
			1)
		       (grdraw
			PT
			PT2
			2)
		      )
		)
	    )
			;_结束 while
	)
    )
    (princ)
)
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2008-4-19 13:54 | 显示全部楼层
(osnap (getpoint) "_end"),,,其它同理
发表于 2008-4-19 14:29 | 显示全部楼层
这样试试:
  1. (defun C:TT ()
  2. (if (and (setq PT1 (getpoint "\n起始点: "))
  3.          (setq PT2 (getpoint PT1 "\n指定下一点: "))) (progn
  4. (command "_.pline" PT1 PT2)
  5. (setq TEST t)
  6. (while TEST
  7.   (setq TMP (grread t 7 0))
  8.   (redraw)
  9.   (cond
  10.    ((= (car TMP) 3)   ;_左键
  11.     (setq PT2 (cadr   TMP))
  12.     (command PT2)
  13.    )
  14.    ((= (car TMP) 11)   ;_右键
  15.     (command "c")
  16.     (setq TEST NIL)
  17.    )
  18.    ((= (car TMP) 5)   ;_移动
  19.     (setq PT (cadr TMP))
  20.     (grdraw PT PT1 1 1)
  21.     (grdraw PT PT2 2)
  22.    )
  23.   )
  24. )   ;_结束 while
  25. ))
  26. (princ)
  27. )
 楼主| 发表于 2008-4-19 16:15 | 显示全部楼层
根据各位的提示,我自己把程序改进了一下!虽然可以实现想要的捕捉效果...可问题又出现了:
就是当在键盘上按下u时,如何撤销上一个点的问题?!就像画多义线的样子,可以取消一个点!
  1. (defun C:TT ()
  2. (if (and (setq PT1 (getpoint "\n起始点: "))
  3.           (setq PT2 (getpoint PT1 "\n指定下一点: "))) (progn
  4.   (command "_.pline" PT1 PT2)
  5.   (setq TEST t)
  6.   (while TEST
  7.    (setq TMP (grread t 7 0))
  8.    (redraw)
  9.    (cond
  10.     ((= (car TMP) 3)   ;_左键
  11.   (setq PT2 (cadr TMP))
  12.      (command PT2)
  13.     )
  14.     ((= (car TMP) 12)   ;_右键
  15.   (if (/= tmp2 nil)
  16.   (progn
  17.     (setq PT2 tmp2 tmp2 nil)
  18.        (command PT2)
  19.   ))
  20.     )
  21.     ((= (car TMP) 2)   ;_键盘
  22.      (command "c")
  23.      (setq TEST NIL)
  24.     )
  25.     ((= (car TMP) 5)   ;_移动
  26.   (if (setq pt (osnap (cadr TMP) "cen,end,mid"));_捕捉
  27.    (progn
  28.    (setq tmp2 pt)
  29.          (grdraw PT PT1 1 1)
  30.          (grdraw PT PT2 2)
  31.     )
  32.    (progn
  33.          (setq PT (cadr TMP))
  34.          (grdraw PT PT1 1 1)
  35.          (grdraw PT PT2 2)
  36.    )
  37.   )
  38.     )
  39.     )
  40.   )   ;_结束 while
  41. ))
  42.   (princ)
  43. )
发表于 2008-4-19 16:40 | 显示全部楼层
本帖最后由 作者 于 2008-4-19 17:01:40 编辑

;我只说一次

(vlax-invoke (vla-get-activedocument(vlax-get-acad-object))'SendCommand "(ssget) wp ")

 楼主| 发表于 2008-4-19 18:01 | 显示全部楼层
无痕版主,我不是想要"(ssget) wp ",我是想要画PLINE时,也能像"WP"的效果!
发表于 2008-4-19 19:57 | 显示全部楼层
本帖最后由 作者 于 2008-4-20 9:28:48 编辑

游客,本帖隐藏的内容需要发帖数高于 5 才可浏览,你当前发帖数只有 0

 楼主| 发表于 2008-4-19 21:23 | 显示全部楼层

本帖子中包含更多资源

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

x
发表于 2008-4-20 09:31 | 显示全部楼层
7楼已改。
 楼主| 发表于 2008-4-20 09:48 | 显示全部楼层
谢谢谢谢谢谢!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-13 21:23 , Processed in 0.197889 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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