明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1226|回复: 6

[提问] 如何使用LISP 编辑鼠标左右键

[复制链接]
发表于 2018-5-17 10:34:41 | 显示全部楼层 |阅读模式
(setq p1 (getpoint))
(setq p2 (getpoint p1 "\n請選擇方向: "))
(command “line” p1 p2)
以上操作 用该是
鼠标(左键点击) = p1
鼠标再次(左键点击) = p2
由命令画p1p2的线
这次我想请教的问题是如何 在鼠标第二次点击的时候 不点击左键 而是点击 右键
提示(alert"鼠标右键成功")
我的想法是这么写的 在CAD中 我使用了!p2 检查了下P2是=nil的 但是 不会执行(alert) 我感觉我这是在乱写 所以请问大佬们 对于鼠标的左右键 是怎么编辑的
(if (= p2 nil)
(alert "鼠标右键成功")
)


还有个追加的想法
有没有可能 鼠标双击 = (defun c:mm() 命令的启动 不需要按mm 鼠标双击就启动命令呢
欢迎大家交流一下

点评

yxp
用双击反应器可以实现,但是,你再也不能双击修改文字了。  发表于 2018-5-17 12:20
发表于 2018-5-17 12:13:36 | 显示全部楼层
这是以前的一个不成熟的测试代码,仅供参考

  1. (defun c:test()
  2. (while (setq code (grread t 5 0))
  3.         (setq first (car code)
  4.                 second (cadr code)
  5.         )
  6.         (cond
  7.                 ((= first 2)
  8.                         (princ "\n按下了键盘 mode= ")
  9.                         (princ first)
  10.                         (princ "  键盘码 code= ")
  11.                         (princ second))
  12.                 ((= first 3)
  13.                         (princ "\n按下鼠标左键 mode= ")
  14.                         (princ first)
  15.                         (princ "  xyz= ")
  16.                         (princ second))
  17.                 ((= first 4)
  18.                         (princ "\n你点了屏幕菜单 mode= ")
  19.                         (princ first)
  20.                         (princ "  second= ")
  21.                         (princ second))
  22.                 ((= first 5)
  23.                         (if (equal second old 0.001)
  24.                                 (progn
  25.                                         (princ "\n按下鼠标右键 mode= ")
  26.                                         (princ first)
  27.                                         (princ "  xyz= ")
  28.                                         (princ second))
  29.                                 (progn
  30.                                         (princ "\n鼠标正在移动 mode= ")
  31.                                         (princ first)
  32.                                         (princ "  xyz= ")
  33.                                         (princ second)
  34.                                         (setq old second))
  35.                         ))
  36.                 (t nil)
  37.         )
  38. )
  39. )

发表于 2018-5-17 12:45:04 | 显示全部楼层
你看这个行不  有过有BUG
1. 不能用捕捉
2. 右键坐标可能不标准

水平有限 只能编成这样了

  1. (defun c:tt (/ get get_bak pt1 pt2 xh)
  2.         (setq xh t)
  3.         (while xh
  4.                 (setq get (grread 1 7 0));把当前的转入设备的值赋给变量
  5.                 (if (= 5 (car get))
  6.                         (setq get_bak get)
  7.                 )
  8.                 (cond
  9.                         ((= 3 (car get));变量为3开头时为点击左键
  10.                                 (if (= pt2 nil)
  11.                                         (setq pt1 (cadr get));
  12.                                         (progn
  13.                                                 (setq pt1 (cadr get))
  14.                                                 (command "._line" pt1 pt2 "")
  15.                                                 (setq xh nil)
  16.                                         )
  17.                                 )
  18.                         )
  19.                         ((= 25 (car get));变量为25开头时为点击右键
  20.                                 (if (= pt1 nil)
  21.                                         (progn
  22.                                                 (princ "第一点未定位")
  23.                                                 (setq pt2 (cadr get_bak));
  24.                                         )
  25.                                         (progn
  26.                                                 (setq pt2 (cadr get_bak))
  27.                                                 (command "._line" pt1 pt2 "")
  28.                                                 (setq xh nil)
  29.                                         )
  30.                                 )
  31.                         )
  32.                 )
  33.         )
  34.         (princ)
  35. )
 楼主| 发表于 2018-5-17 14:52:31 | 显示全部楼层
研究了俩位的 了解了一下 鼠标左键 中键 键盘得到的值 是可以操作的
但是右键 还是没有 右键我的CAD 没有反应 很有意思 我也会找一些资料学习 弄明白了分享给大家
发表于 2018-5-17 17:00:01 | 显示全部楼层
(defun weizhi() ;(weizhi)
(setvar 'osmode 0)             ;关闭捕捉
(setq gbwz (grread 3))         ;光标位置
(if (member (car gbwz)'(3 5))
(setq o (cadr gbwz)) )         ;鼠标位置
;(setq pmzd(getvar "viewctr")) ;屏幕中点
(setvar 'osmode 6079)          ;打开捕捉
)

(setq p1 (getpoint))
(setq p2 (getpoint p1 "\n請選擇方向: "))
(if (= p2 nil)(progn (weizhi)(setq p2 o)) )
(command “line”"non" p1 "non" p2)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-16 21:56 , Processed in 0.155006 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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