明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 努.力

[提问] 8向滑动圆盘grvecs做的,麻烦路过的大神帮优化一下

[复制链接]
 楼主| 发表于 2023-12-1 09:44 | 显示全部楼层
菜卷鱼 发表于 2023-12-1 08:43
我个人认为,用Lisp的话,圆盘改成宫格比较容易实现,判断点在pizza里比矩形里难一些

宫格前易后难,圆盘前难后易,各有千秋。
本题意在不用点击,把鼠标移出圆盘即触发,各向移动距离相等,如果用宫格,是不是只能用点击…
发表于 2023-12-1 12:11 | 显示全部楼层
 楼主| 发表于 2023-12-2 17:00 | 显示全部楼层
经过一番折腾,改成以下效果:
1:分别从8个不同区域滑出滑盘之外,可以获得8个不同的返回值
2:左键点击8个不同的区域,可再获得8个不同的返回值
3:右键点击8个不同的区域,可再获得8个不同的返回值
4:当光标处于8个区域中任意一区域内,按下键盘……每个字母(或数字)键又可以获得8个不同返回值……
5:把滑盘直径设置大一些,套娃实现手势……
想着都爽歪歪……

目前存在问题:单击鼠标右键或按键盘,都出错,无返回值
实在是不知道是哪里写错,因此再次求助大神帮忙改正一下,在此谢过

(defun c:x(/ a)
(setq
a (diy 0.2 "爽歪歪" "←" "→" "↑" "↓" "↖" "↗" "↙" "↘")
;a (strcat a "+" (diy 0.2 "爽歪歪" "←" "→" "↑" "↓" "↖" "↗" "↙" "↘"));套娃
)
(princ a)
)

;(diy 0.07 ts 左滑 右滑 上滑 下滑 左上滑 右上滑  左下滑 右下滑)
(defun diy(bs ts fx_z fx_y fx_s fx_x fx_zs fx_ys fx_zx fx_yx / *error* n an an0 bl gr jp grdral loop p0 pj xc gc hd aj)

(defun *error*(msg / *error*);出错处理
(setvar'cursorsize gb);恢复光标大小
(setvar'pickbox bk);恢复靶框大小
(redraw);更新
(setq aj nil)
)

;飞雪神光 2023-11-30 http://bbs.mjtd.com/thread-188998-1-1.html
;矢量线
;(grvecs (list 颜色 点 点 颜色 点 点))
;矢量线
;(grdraw 点 长度 角度 颜色)
(defun grdral(pt10 bj an0 co / an an1 pt pt1)
(setq
an (+ an0 (/ pi (/ n 2)))
an1 an0
pt (polar pt10 an1 bj)
)
(grdraw pt10 pt co)
(setq pt (polar pt10 an bj))
(grdraw pt10 pt co)
(repeat (/ n 2)
(setq
pt (polar pt10 an1 bj)
pt1 pt
an1 (+ an1 (* (/ (/ 360.0 32) 180.0) pi))
pt (polar pt10 an1 bj)
)
(grdraw pt1 pt co);滑盘外圈颜色
) )
;————————————————————
(if(= bs "")(setq bs 0.07)) ;屏幕高度的倍数
(setq
n 8 ;滑盘等分数
xc 160 ;非光标处滑盘颜色
gc 6 ;光标处滑盘颜色
p0 (cadr (grread *));滑盘中心点
gb (getvar'cursorsize);记录光标大小
bk (getvar'pickbox);记录靶框大小
loop t)
(setvar'cursorsize 1);设置光标大小
(setvar'pickbox 1);设置靶框大小
;————————————————————鼠标移动前绘制滑盘
(setq an0 (* pi 1.875))
(repeat n
(grdral p0 (*(getvar'viewsize)bs) an0 3)
(setq an0 (+ an0 (/ pi (/ n 2))))
)
(princ (setq ts (strcat "\n" ts
" 左滑:" fx_z
" 右滑:" fx_y
" 上滑:" fx_s
" 下滑:" fx_x
" 左上滑:" fx_zs
" 右上滑:" fx_ys
" 左下滑:" fx_zx
" 右下滑:" fx_yx
) )
);提示
;————————————————————
(while loop
;(if(/= ss "")(sssetfirst()ss));如果已选中对象则亮显它
(setq gr (grread t 8) aj (car gr) jp (cadr gr)
bl (*(getvar'viewsize)bs);滑盘大小(屏幕高度×倍数)
pj (distance p0 jp))

(cond
((= aj 3) (setq loop nil) (setq aj "左键") )
((= aj 25) (setq loop nil) (setq aj "右键") )
;————————————————————移动鼠标开始
((and (= aj 5)(> pj (* bl 0.07)));移动鼠标触发距离
(redraw);更新
;————————————————————鼠标移动后绘制滑盘
(setq an0 (* pi 1.875))
(repeat n
(grdral p0 bl an0 xc);非光标处滑盘颜色
(setq an0 (+ an0 (/ pi (/ n 2))))
)
(grdraw p0 jp 1);光标引线
;————————————————————8向滑动判断
(setq ts1 (strcat "\n " ts));提示
(setq an (angle p0 jp))
;(vl-string-subst "替换后的文字" "要替换的文字" wz);字符串替换,替换wz里指定的字符串
(cond
((< (* pi 0.125) an (* pi 0.375)) (grdral p0 bl (* pi 0.125) gc) (setq hd "右上滑")
(if (/= fx_ys "") (setq ts1 (vl-string-subst "" (strcat " " hd ":" fx_ys ) ts1))) (princ (strcat "\n " ts1 "\n " hd ":" fx_ys)) );↗

((< (* pi 0.375) an (* pi 0.625)) (grdral p0 bl (* pi 0.375) gc) (setq hd "上滑")
(if (/= fx_s "") (setq ts1(vl-string-subst "" (strcat " " hd ":" fx_s) ts1))) (princ (strcat "\n " ts1 "\n " hd ":" fx_s)) );↑

((< (* pi 0.625) an (* pi 0.875)) (grdral p0 bl (* pi 0.625) gc) (setq hd "左上滑")
(if (/= fx_zs "") (setq ts1(vl-string-subst "" (strcat " " hd ":" fx_zs) ts1))) (princ (strcat "\n " ts1 "\n " hd ":" fx_zs)) );↖

((< (* pi 0.875) an (* pi 1.125)) (grdral p0 bl (* pi 0.875) gc) (setq hd "左滑")
(if (/= fx_z "") (setq ts1(vl-string-subst "" (strcat " " hd ":" fx_z) ts1))) (princ (strcat "\n " ts1 "\n " hd ":" fx_z)) );←

((< (* pi 1.125) an (* pi 1.375)) (grdral p0 bl (* pi 1.125) gc) (setq hd "左下滑")
(if (/= fx_zx "") (setq ts1(vl-string-subst "" (strcat " " hd ":" fx_zx) ts1))) (princ (strcat "\n " ts1 "\n " hd ":" fx_zx)) );↙

((< (* pi 1.375) an (* pi 1.625)) (grdral p0 bl (* pi 1.375) gc) (setq hd "下滑")
(if (/= fx_x "") (setq ts1(vl-string-subst "" (strcat " " hd ":" fx_x) ts1))) (princ (strcat "\n " ts1 "\n " hd ":" fx_x)) );↓

((< (* pi 1.625) an (* pi 1.875)) (grdral p0 bl (* pi 1.625) gc) (setq hd "右下滑")
(if (/= fx_yx "") (setq ts1(vl-string-subst "" (strcat " " hd ":" fx_yx) ts1))) (princ (strcat "\n " ts1 "\n " hd ":" fx_yx)) );↘

((or (<= (* pi 1.875) an (* pi 2)) (<= 0 an (* pi 0.125)))(grdral p0 bl (* pi 1.875) gc) (setq hd "右滑")
(if (/= fx_y "") (setq ts1(vl-string-subst "" (strcat " " hd ":" fx_y) ts1))) (princ (strcat "\n " ts1 "\n " hd ":" fx_y)) );→
);————————————————————
(if (> pj (*(*(getvar'viewsize)bs)1)) (progn ;光标离开滑盘
(setq loop nil)
(setvar'cursorsize gb);恢复光标大小
(setvar'pickbox bk);恢复靶框大小
(redraw);更新
) )
);————————————————————移动鼠标结束
;————————————————————按键盘(grread)
((= aj 2)(setq loop nil)
(cond
((= jp 96) (setq aj "`"))
((or(= jp 113)(= jp 81)) (setq aj "q"))
((or(= jp 119)(= jp 87)) (setq aj "w"))
((or(= jp 101)(= jp 69)) (setq aj "e"))
((or(= jp 114)(= jp 82)) (setq aj "r"))
((or(= jp 116)(= jp 84)) (setq aj "t"))
((or(= jp 121)(= jp 89)) (setq aj "y"))
((or(= jp 117)(= jp 85)) (setq aj "u"))
((or(= jp 105)(= jp 73)) (setq aj "i"))
((or(= jp 111)(= jp 79)) (setq aj "o"))
((or(= jp 112)(= jp 80)) (setq aj "p"))
((= jp 91) (setq aj "["))
((= jp 93) (setq aj "]"))

((= jp 8) (setq aj "删除")) ;Backspace
((= jp 61) (setq aj "="))
((or(= jp 97)(= jp 65)) (setq aj "a"))
((or(= jp 115)(= jp 83)) (setq aj "s"))
((or(= jp 100)(= jp 68)) (setq aj "d"))
((or(= jp 102)(= jp 70)) (setq aj "f"))
((or(= jp 103)(= jp 71)) (setq aj "g"))
((or(= jp 104)(= jp 72)) (setq aj "h"))
((or(= jp 106)(= jp 74)) (setq aj "j"))
((or(= jp 107)(= jp 75)) (setq aj "k"))
((or(= jp 108)(= jp 76)) (setq aj "l"))
((= jp 59) (setq aj ";"))
((= jp 39) (setq aj "'"))
((or(= jp 122)(= jp 90)) (setq aj "z"))
((or(= jp 120)(= jp 88)) (setq aj "x"))
((or(= jp 99)(= jp 67)) (setq aj "c"))
((or(= jp 118)(= jp 86)) (setq aj "v"))
((or(= jp 98)(= jp 66)) (setq aj "b"))
((or(= jp 110)(= jp 78)) (setq aj "n"))
((or(= jp 109)(= jp 77)) (setq aj "m"))

((= jp 44) (setq aj ","))
((= jp 92) (setq aj "\\"))
((= jp 13) (setq aj "回车"))
((= jp 32) (setq aj "空格"))
((= jp 46) (setq aj "."))
((= jp 48) (setq aj 0))
((= jp 49) (setq aj 1))
((= jp 50) (setq aj 2))
((= jp 51) (setq aj 3))
((= jp 52) (setq aj 4))
((= jp 53) (setq aj 5))
((= jp 54) (setq aj 6))
((= jp 55) (setq aj 7))
((= jp 56) (setq aj 8))
((= jp 57) (setq aj 9))
((= jp 43) (setq aj "+"))
((= jp 45) (setq aj "-"))
((= jp 42) (setq aj "*"))
((= jp 47) (setq aj "/"))
((= jp 9) (setq aj "Tab")) ;Tab
;————————————————————Shift+
((= jp 123) (setq aj "{"))
((= jp 125) (setq aj "}"))
((= jp 58) (setq aj ":"))
((= jp 34) (setq aj "\""))
((= jp 60) (setq aj "<"))
((= jp 62) (setq aj ">"))
((= jp 63) (setq aj "?"))
((= jp 124) (setq aj "|"))
((= jp 126) (setq aj "~"))
((= jp 33) (setq aj "!"))
((= jp 64) (setq aj "@"))
((= jp 35) (setq aj "#"))
((= jp 36) (setq aj "$"))
((= jp 37) (setq aj "%"))
((= jp 94) (setq aj "^"))
((= jp 38) (setq aj "&"))
((= jp 40) (setq aj "("))
((= jp 41) (setq aj ")"))
((= jp 95) (setq aj "_"))
) )
;————————————————————
) );while
(setvar'cursorsize gb);恢复光标大小
(setvar'pickbox bk);恢复靶框大小
(redraw);更新
(if hd (setq aj (strcat hd aj)))
(princ "\n")
aj
)

本帖子中包含更多资源

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

x
发表于 2023-12-2 20:22 | 显示全部楼层

本帖子中包含更多资源

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

x

点评

代码太臃肿  发表于 2023-12-2 23:00
 楼主| 发表于 2023-12-2 20:37 | 显示全部楼层
路过的大神神们,帮忙看看程序是哪里问题,不能接受键盘和右键输入,就差最后一步啦
发表于 2023-12-3 15:06 | 显示全部楼层
随便写了一个,可能与你的思路不一样
  1. (defun grrev (/             ANG    ANG0   CODE          FANGWEI        LOOP   PT
  2.               PT0    QUYU   REV           SCALE  TS         TS1        TS2    TS3
  3.               TS4    TS5    TS6           TS7          TS8         YUANPAN
  4.              )
  5.   (defun mat_mxv (m v /)
  6.     (mapcar '(lambda (r) (apply '+ (mapcar '* r v)))
  7.             m
  8.     )
  9.   )
  10.   (defun mat_trp (m /)
  11.     (apply 'mapcar (cons 'list m))
  12.   )
  13.   (defun mat_cen (m q /)
  14.     (mapcar '(lambda (r)
  15.                (mat_mxv (mat_trp q) r)
  16.              )
  17.             m
  18.     )
  19.   )
  20.   (setq        yuanpan        '(5
  21.                   (0.0 0.0 0.0)
  22.                   (0.915327 -0.379141 0.0)
  23.                   (-0.379141 0.915327 0.0)
  24.                   (0.379141 -0.915327 0.0)
  25.                   (0.379141 0.915327 0.0)
  26.                   (-0.379141 -0.915327 0.0)
  27.                   (0.915327 0.379141 0.0)
  28.                   (-0.915327 -0.379141 0.0)
  29.                   (0.0 0.0 0.0)
  30.                   (-0.915327 0.379141 0.0)
  31.                   (-0.156434 0.987688)
  32.                   (-0.45399 0.891007)
  33.                   (-0.45399 0.891007)
  34.                   (-0.707107 0.707107)
  35.                   (-0.707107 0.707107)
  36.                   (-0.891007 0.45399)
  37.                   (-0.891007 0.45399)
  38.                   (-0.987688 0.156434)
  39.                   (-0.987688 0.156434)
  40.                   (-0.987688 -0.156434)
  41.                   (-0.987688 -0.156434)
  42.                   (-0.891007 -0.45399)
  43.                   (-0.891007 -0.45399)
  44.                   (-0.707107 -0.707107)
  45.                   (-0.707107 -0.707107)
  46.                   (-0.45399 -0.891007)
  47.                   (-0.45399 -0.891007)
  48.                   (-0.156434 -0.987688)
  49.                   (-0.156434 -0.987688)
  50.                   (0.156434 -0.987688)
  51.                   (0.156434 -0.987688)
  52.                   (0.45399 -0.891007)
  53.                   (0.45399 -0.891007)
  54.                   (0.707107 -0.707107)
  55.                   (0.707107 -0.707107)
  56.                   (0.891007 -0.45399)
  57.                   (0.891007 -0.45399)
  58.                   (0.987688 -0.156434)
  59.                   (0.987688 -0.156434)
  60.                   (0.987688 0.156434)
  61.                   (0.987688 0.156434)
  62.                   (0.891007 0.45399)
  63.                   (0.891007 0.45399)
  64.                   (0.707107 0.707107)
  65.                   (0.707107 0.707107)
  66.                   (0.45399 0.891007)
  67.                   (0.45399 0.891007)
  68.                   (0.156434 0.987688)
  69.                   (0.156434 0.987688)
  70.                   (-0.156434 0.987688)
  71.                  )
  72.   )
  73.   (setq        quyu '(2
  74.                (0.0 0.0 0.0)
  75.                (0.915327 -0.379141 0.0)
  76.                (0.915327 0.379141 0.0)
  77.                (-1.61054e-15 -6.67109e-16 0.0)
  78.                (0.987688 0.156434 0.0)
  79.                (0.915327 0.379141 0.0)
  80.                (0.987688 -0.156434 0.0)
  81.                (0.987688 0.156434 0.0)
  82.                (0.915327 -0.379141 0.0)
  83.                (0.987688 -0.156434 0.0)
  84.               )
  85.   )

  86.   (setq        ts1 '(1 (0.15808 -0.0956111 0.0) (0.15808 0.206223 0.0))
  87.   )
  88.   (setq        ts2 '(1
  89.               (0.223258 -0.0956111 0.0)
  90.               (0.223258 0.206223 0.0)
  91.               (0.15808 -0.0956111 0.0)
  92.               (0.15808 0.206223 0.0)
  93.              )
  94.   )
  95.   (setq        ts3 '(1
  96.               (0.288436 -0.0956111 0.0)
  97.               (0.288436 0.206223 0.0)
  98.               (0.223258 -0.0956111 0.0)
  99.               (0.223258 0.206223 0.0)
  100.               (0.15808 -0.0956111 0.0)
  101.               (0.15808 0.206223 0.0)
  102.              )
  103.   )
  104.   (setq        ts4 '(1
  105.               (0.353613 0.206223 0.0)
  106.               (0.288436 -0.0956111 0.0)
  107.               1
  108.               (0.223258 0.206223 0.0)
  109.               (0.288436 -0.0956111 0.0)
  110.               1
  111.               (0.15808 -0.0956111 0.0)
  112.               (0.15808 0.206223 0.0)
  113.              )
  114.   )
  115.   (setq        ts5 '(1
  116.               (0.288436 0.206223 0.0)
  117.               (0.223258 -0.0956111 0.0)
  118.               (0.15808 0.206223 0.0)
  119.               (0.223258 -0.0956111 0.0)
  120.              )
  121.   )
  122.   (setq        ts6 '(1
  123.               (0.353613 -0.0956111 0.0)
  124.               (0.353613 0.206223 0.0)
  125.               (0.288436 0.206223 0.0)
  126.               (0.223258 -0.0956111 0.0)
  127.               (0.15808 0.206223 0.0)
  128.               (0.223258 -0.0956111 0.0)
  129.              )
  130.   )
  131.   (setq        ts7 '(1
  132.               (0.288436 0.206223 0.0)
  133.               (0.223258 -0.0956111 0.0)
  134.               (0.15808 0.206223 0.0)
  135.               (0.223258 -0.0956111 0.0)
  136.               (0.418791 -0.0956111 0.0)
  137.               (0.418791 0.206223 0.0)
  138.               (0.353613 -0.0956111 0.0)
  139.               (0.353613 0.206223 0.0)
  140.              )
  141.   )
  142.   (setq        ts8 '(1
  143.               (0.483969 -0.0956111 0.0)
  144.               (0.483969 0.206223 0.0)
  145.               (0.288436 0.206223 0.0)
  146.               (0.223258 -0.0956111 0.0)
  147.               (0.15808 0.206223 0.0)
  148.               (0.223258 -0.0956111 0.0)
  149.               (0.418791 -0.0956111 0.0)
  150.               (0.418791 0.206223 0.0)
  151.               (0.353613 -0.0956111 0.0)
  152.               (0.353613 0.206223 0.0)
  153.              )
  154.   )



  155.   (setq pt0 (cadr (grread t)))
  156.   (setq loop t)
  157.   (while loop
  158.     (setq pt (grread t))
  159.     (setq code (car pt)
  160.           pt   (cadr pt)
  161.     )
  162.     (redraw)
  163.     (cond
  164.       ((= code 5)
  165.        (setq scale (* (getvar 'viewsize) 0.2))
  166.        (GRVECS yuanpan
  167.                (list (list scale 0 0 (car pt0))
  168.                      (list 0 scale 0 (cadr pt0))
  169.                      (list 0 0 scale 0)
  170.                      '(0 0 0 1)
  171.                )
  172.        )
  173. ;;;绘制圆盘


  174.        (setq ang (angle pt0 pt))
  175.        (setq ang0 (/ (* ang 180.0) pi))
  176.        (setq fangwei (cond
  177.                        ((<= 22.5 ang0 67.5) (setq ts ts2) 2)
  178.                        ((<= 67.5 ang0 112.5) (setq ts ts3) 3)
  179.                        ((<= 112.5 ang0 157.5) (setq ts ts4) 4)
  180.                        ((<= 157.5 ang0 202.5) (setq ts ts5) 5)
  181.                        ((<= 202.5 ang0 247.5) (setq ts ts6) 6)
  182.                        ((<= 247.5 ang0 292.5) (setq ts ts7) 7)
  183.                        ((<= 292.5 ang0 337.5) (setq ts ts8) 8)
  184.                        (t (setq ts ts1) 1)
  185.                      )
  186.        )
  187.        (setq ang0 (/ (* (1- fangwei) 45 pi) 180.0))
  188.        (GRVECS quyu
  189.                (mat_cen        (list (list scale 0 0 (car pt0))
  190.                               (list 0 scale 0 (cadr pt0))
  191.                               (list 0 0 scale 0)
  192.                               '(0 0 0 1)
  193.                         )
  194.                         (list (list (cos ang0) (* -1 (sin ang0)) 0. 0.)
  195.                               (list (sin ang0) (cos ang0) 0. 0.)
  196.                               '(0. 0. 1. 0.)
  197.                               '(0. 0. 0. 1.)
  198.                         )
  199.                )

  200.        )
  201. ;;;绘制区域

  202.        (GRVECS ts
  203.                (list (list scale 0 0 (car pt))
  204.                      (list 0 scale 0 (cadr pt))
  205.                      (list 0 0 scale 0)
  206.                      '(0 0 0 1)
  207.                )
  208.        )
  209. ;;;绘制提示
  210.        (if (> (distance pt0 pt) scale)
  211.          (setq loop nil
  212.                rev  (list 5 fangwei)
  213.          )
  214.        )
  215.       )
  216. ;;;移动鼠标
  217.       ((= code 3)
  218.        (setq ang (angle pt0 pt))
  219.        (setq ang0 (/ (* ang 180.0) pi))
  220.        (setq fangwei (cond
  221.                        ((<= 22.5 ang0 67.5) (setq ts ts2) 2)
  222.                        ((<= 67.5 ang0 112.5) (setq ts ts3) 3)
  223.                        ((<= 112.5 ang0 157.5) (setq ts ts4) 4)
  224.                        ((<= 157.5 ang0 202.5) (setq ts ts5) 5)
  225.                        ((<= 202.5 ang0 247.5) (setq ts ts6) 6)
  226.                        ((<= 247.5 ang0 292.5) (setq ts ts7) 7)
  227.                        ((<= 292.5 ang0 337.5) (setq ts ts8) 8)
  228.                        (t (setq ts ts1) 1)
  229.                      )
  230.        )
  231.        (setq loop nil
  232.              rev  (list 3 fangwei)
  233.        )
  234.       )
  235. ;;;点击鼠标左键
  236.       (t
  237.        (setq loop nil
  238.              rev  (list code pt)
  239.        )
  240.       )
  241.     )
  242.   )
  243.   (redraw)
  244.   rev
  245. )
回复 支持 1 反对 0

使用道具 举报

发表于 2023-12-3 15:26 | 显示全部楼层
  1. (defun c:x(/ a)
  2.         (setq
  3.                 a (diy 0.2 "爽歪歪" "←" "→" "↑" "↓" "↖" "↗" "↙" "↘")
  4.                 ;a (strcat a "+" (diy 0.2 "爽歪歪" "←" "→" "↑" "↓" "↖" "↗" "↙" "↘"));套娃
  5.         )
  6.         (princ a)
  7.         (princ)
  8. )

  9. ;(diy 0.07 ts 左滑 右滑 上滑 下滑 左上滑 右上滑  左下滑 右下滑)
  10. (defun diy(bs ts fx_z fx_y fx_s fx_x fx_zs fx_ys fx_zx fx_yx / *error* n an an0 bl gr jp grdral loop p0 pj xc gc hd aj)
  11.         (defun *error*(msg / *error*);出错处理
  12.                 (setvar'cursorsize gb);恢复光标大小
  13.                 (setvar'pickbox bk);恢复靶框大小
  14.                 (redraw);更新
  15.                 (setq aj nil)
  16.         )
  17.         ;飞雪神光 2023-11-30 http://bbs.mjtd.com/thread-188998-1-1.html
  18.         ;矢量线
  19.         ;(grvecs (list 颜色 点 点 颜色 点 点))
  20.         ;矢量线
  21.         ;(grdraw 点 长度 角度 颜色)
  22.         (defun grdral(pt10 bj an0 co / an an1 pt pt1)
  23.                 (setq
  24.                         an (+ an0 (/ pi (/ n 2)))
  25.                         an1 an0
  26.                         pt (polar pt10 an1 bj)
  27.                 )
  28.                 (grdraw pt10 pt co)
  29.                 (setq pt (polar pt10 an bj))
  30.                 (grdraw pt10 pt co)
  31.                 (repeat (/ n 2)
  32.                         (setq
  33.                                 pt (polar pt10 an1 bj)
  34.                                 pt1 pt
  35.                                 an1 (+ an1 (* (/ (/ 360.0 32) 180.0) pi))
  36.                                 pt (polar pt10 an1 bj)
  37.                         )
  38.                         (grdraw pt1 pt co);滑盘外圈颜色
  39.                 )
  40.         )
  41.         ;————————————————————
  42.         (if(= bs "")(setq bs 0.07)) ;屏幕高度的倍数
  43.         (setq
  44.                 n 8 ;滑盘等分数
  45.                 xc 160 ;非光标处滑盘颜色
  46.                 gc 6 ;光标处滑盘颜色
  47.                 p0 (cadr (grread *));滑盘中心点
  48.                 gb (getvar'cursorsize);记录光标大小
  49.                 bk (getvar'pickbox);记录靶框大小
  50.                 loop t
  51.                 princpd t
  52.                 princpd1 1
  53.                 princpd2 2
  54.         )
  55.         (setvar'cursorsize 1);设置光标大小
  56.         (setvar'pickbox 1);设置靶框大小
  57.         ;————————————————————鼠标移动前绘制滑盘
  58.         (setq an0 (* pi 1.875))
  59.         (repeat n
  60.                 (grdral p0 (*(getvar'viewsize)bs) an0 3)
  61.                 (setq an0 (+ an0 (/ pi (/ n 2))))
  62.         )
  63.         (princ (setq ts (strcat ts " 左滑:" fx_z " 右滑:" fx_y " 上滑:" fx_s " 下滑:" fx_x " 左上滑:" fx_zs " 右上滑:" fx_ys " 左下滑:" fx_zx " 右下滑:" fx_yx)));提示
  64.         ;————————————————————
  65.         (while loop
  66.                 ;(if(/= ss "")(sssetfirst()ss));如果已选中对象则亮显它
  67.                 (setq
  68.                         gr (grread t 8)
  69.                         aj0 (car gr)
  70.                         jp (cadr gr)
  71.                 )
  72.                 (cond
  73.                         ((= aj0 3) (setq loop nil) (setq aj "左键") )
  74.                         ((= aj0 25) (setq loop nil) (setq aj "右键") )
  75.                         ((= aj0 5) ;移动鼠标触发距离
  76.                                 (setq
  77.                                         bl (*(getvar'viewsize)bs);滑盘大小(屏幕高度×倍数)
  78.                                         pj (distance p0 jp)
  79.                                 )
  80.                                 (if (> pj (* bl 0.07))
  81.                                         (progn
  82.                                                 (redraw);更新
  83.                                                 ;————————————————————鼠标移动后绘制滑盘
  84.                                                 (setq an0 (* pi 1.875))
  85.                                                 (repeat n
  86.                                                         (grdral p0 bl an0 xc);非光标处滑盘颜色
  87.                                                         (setq an0 (+ an0 (/ pi (/ n 2))))
  88.                                                 )
  89.                                                 (grdraw p0 jp 1);光标引线
  90.                                                 ;————————————————————8向滑动判断
  91.                                                 (setq ts1 (strcat "\n " ts)) ;提示
  92.                                                 (setq an (angle p0 jp))
  93.                                                 ;(vl-string-subst "替换后的文字" "要替换的文字" wz);字符串替换,替换wz里指定的字符串
  94.                                                 ;(print (list princpd1 princpd2))
  95.                                                 (cond
  96.                                                         ((< (* pi 0.125) an (* pi 0.375))
  97.                                                                 (grdral p0 bl (* pi 0.125) gc) (setq hd "右上滑")
  98.                                                                 (if (/= fx_ys "") (setq ts1 (vl-string-subst "" (strcat " " hd ":" fx_ys) ts1)))
  99.                                                                 (if (= princpd1 princpd2)
  100.                                                                         (if princpd
  101.                                                                                 (progn
  102.                                                                                         ;(princ (strcat "\n " ts1 "\n " hd ":" fx_ys))
  103.                                                                                         (princ (strcat "\n " hd ":" fx_ys))
  104.                                                                                         (setq princpd nil)
  105.                                                                                 )
  106.                                                                         )
  107.                                                                         (setq princpd t princpd1 princpd2)
  108.                                                                 )
  109.                                                                 (setq princpd2 1)
  110.                                                         );↗
  111.                                                         ((< (* pi 0.375) an (* pi 0.625))
  112.                                                                 (grdral p0 bl (* pi 0.375) gc) (setq hd "上滑")
  113.                                                                 (if (/= fx_s "") (setq ts1 (vl-string-subst "" (strcat " " hd ":" fx_s) ts1)))
  114.                                                                 (if (= princpd1 princpd2)
  115.                                                                         (if princpd
  116.                                                                                 (progn
  117.                                                                                         ;(princ (strcat "\n " ts1 "\n " hd ":" fx_s))
  118.                                                                                         (princ (strcat "\n " hd ":" fx_s))
  119.                                                                                         (setq princpd nil)
  120.                                                                                 )
  121.                                                                         )
  122.                                                                         (setq princpd t princpd1 princpd2)
  123.                                                                 )
  124.                                                                 (setq princpd2 2)
  125.                                                         );↑
  126.                                                         ((< (* pi 0.625) an (* pi 0.875))
  127.                                                                 (grdral p0 bl (* pi 0.625) gc) (setq hd "左上滑")
  128.                                                                 (if (/= fx_zs "") (setq ts1 (vl-string-subst "" (strcat " " hd ":" fx_zs) ts1)))
  129.                                                                 (if (= princpd1 princpd2)
  130.                                                                         (if princpd
  131.                                                                                 (progn
  132.                                                                                         (princ (strcat "\n "  hd ":" fx_zs))
  133.                                                                                         (setq princpd nil)
  134.                                                                                 )
  135.                                                                         )
  136.                                                                         (setq princpd t princpd1 princpd2)
  137.                                                                 )
  138.                                                                 (setq princpd2 3)
  139.                                                         );↖
  140.                                                         ((< (* pi 0.875) an (* pi 1.125))
  141.                                                                 (grdral p0 bl (* pi 0.875) gc) (setq hd "左滑")
  142.                                                                 (if (/= fx_z "") (setq ts1 (vl-string-subst "" (strcat " " hd ":" fx_z) ts1)))
  143.                                                                 (if (= princpd1 princpd2)
  144.                                                                         (if princpd
  145.                                                                                 (progn
  146.                                                                                         (princ (strcat "\n " hd ":" fx_z))
  147.                                                                                         (setq princpd nil)
  148.                                                                                 )
  149.                                                                         )
  150.                                                                         (setq princpd t princpd1 princpd2)
  151.                                                                 )
  152.                                                                 (setq princpd2 4)
  153.                                                         );←
  154.                                                         ((< (* pi 1.125) an (* pi 1.375))
  155.                                                                 (grdral p0 bl (* pi 1.125) gc) (setq hd "左下滑")
  156.                                                                 (if (/= fx_zx "") (setq ts1 (vl-string-subst "" (strcat " " hd ":" fx_zx) ts1)))
  157.                                                                 (if (= princpd1 princpd2)
  158.                                                                         (if princpd
  159.                                                                                 (progn
  160.                                                                                         (princ (strcat "\n " hd ":" fx_zx))
  161.                                                                                         (setq princpd nil)
  162.                                                                                 )
  163.                                                                         )
  164.                                                                         (setq princpd t princpd1 princpd2)
  165.                                                                 )
  166.                                                                 (setq princpd2 5)
  167.                                                         );↙
  168.                                                         ((< (* pi 1.375) an (* pi 1.625))
  169.                                                                 (grdral p0 bl (* pi 1.375) gc) (setq hd "下滑")
  170.                                                                 (if (/= fx_x "") (setq ts1 (vl-string-subst "" (strcat " " hd ":" fx_x) ts1)))
  171.                                                                 (if (= princpd1 princpd2)
  172.                                                                         (if princpd
  173.                                                                                 (progn
  174.                                                                                         (princ (strcat "\n " hd ":" fx_x))
  175.                                                                                         (setq princpd nil)
  176.                                                                                 )
  177.                                                                         )
  178.                                                                         (setq princpd t princpd1 princpd2)
  179.                                                                 )
  180.                                                                 (setq princpd2 6)
  181.                                                         );↓
  182.                                                         ((< (* pi 1.625) an (* pi 1.875))
  183.                                                                 (grdral p0 bl (* pi 1.625) gc) (setq hd "右下滑")
  184.                                                                 (if (/= fx_yx "") (setq ts1 (vl-string-subst "" (strcat " " hd ":" fx_yx) ts1)))
  185.                                                                 (if (= princpd1 princpd2)
  186.                                                                         (if princpd
  187.                                                                                 (progn
  188.                                                                                         (princ (strcat "\n " hd ":" fx_yx))
  189.                                                                                         (setq princpd nil)
  190.                                                                                 )
  191.                                                                         )
  192.                                                                         (setq princpd t princpd1 princpd2)
  193.                                                                 )
  194.                                                                 (setq princpd2 7)
  195.                                                         );↘
  196.                                                         ((or (<= (* pi 1.875) an (* pi 2)) (<= 0 an (* pi 0.125)))(grdral p0 bl (* pi 1.875) gc) (setq hd "右滑")
  197.                                                                 (if (/= fx_y "") (setq ts1 (vl-string-subst "" (strcat " " hd ":" fx_y) ts1)))
  198.                                                                 (if (= princpd1 princpd2)
  199.                                                                         (if princpd
  200.                                                                                 (progn
  201.                                                                                         (princ (strcat "\n " hd ":" fx_y))
  202.                                                                                         (setq princpd nil)
  203.                                                                                 )
  204.                                                                         )
  205.                                                                         (setq princpd t princpd1 princpd2)
  206.                                                                 )
  207.                                                                 (setq princpd2 8)
  208.                                                         );→
  209.                                                 );————————————————————
  210.                                                 (if (> pj (* (* (getvar 'viewsize) bs) 1))
  211.                                                         (progn ;光标离开滑盘
  212.                                                                 (setq loop nil)
  213.                                                                 (setvar'cursorsize gb);恢复光标大小
  214.                                                                 (setvar'pickbox bk);恢复靶框大小
  215.                                                                 (redraw);更新
  216.                                                         )
  217.                                                 )
  218.                                         )
  219.                                  (setq aj ":盘外")
  220.                                 )
  221.                         );————————————————————移动鼠标结束
  222.                         ;————————————————————按键盘(grread)
  223.                         ((= aj0 2)
  224.                                 (setq loop nil)
  225.                                 (cond
  226.                                         ((= jp 96) (setq aj "`"))
  227.                                         ((or(= jp 113)(= jp 81)) (setq aj "q"))
  228.                                         ((or(= jp 119)(= jp 87)) (setq aj "w"))
  229.                                         ((or(= jp 101)(= jp 69)) (setq aj "e"))
  230.                                         ((or(= jp 114)(= jp 82)) (setq aj "r"))
  231.                                         ((or(= jp 116)(= jp 84)) (setq aj "t"))
  232.                                         ((or(= jp 121)(= jp 89)) (setq aj "y"))
  233.                                         ((or(= jp 117)(= jp 85)) (setq aj "u"))
  234.                                         ((or(= jp 105)(= jp 73)) (setq aj "i"))
  235.                                         ((or(= jp 111)(= jp 79)) (setq aj "o"))
  236.                                         ((or(= jp 112)(= jp 80)) (setq aj "p"))
  237.                                         ((= jp 91) (setq aj "["))
  238.                                         ((= jp 93) (setq aj "]"))
  239.                                         ((= jp 8) (setq aj "删除")) ;Backspace
  240.                                         ((= jp 61) (setq aj "="))
  241.                                         ((or(= jp 97)(= jp 65)) (setq aj "a"))
  242.                                         ((or(= jp 115)(= jp 83)) (setq aj "s"))
  243.                                         ((or(= jp 100)(= jp 68)) (setq aj "d"))
  244.                                         ((or(= jp 102)(= jp 70)) (setq aj "f"))
  245.                                         ((or(= jp 103)(= jp 71)) (setq aj "g"))
  246.                                         ((or(= jp 104)(= jp 72)) (setq aj "h"))
  247.                                         ((or(= jp 106)(= jp 74)) (setq aj "j"))
  248.                                         ((or(= jp 107)(= jp 75)) (setq aj "k"))
  249.                                         ((or(= jp 108)(= jp 76)) (setq aj "l"))
  250.                                         ((= jp 59) (setq aj ";"))
  251.                                         ((= jp 39) (setq aj "'"))
  252.                                         ((or(= jp 122)(= jp 90)) (setq aj "z"))
  253.                                         ((or(= jp 120)(= jp 88)) (setq aj "x"))
  254.                                         ((or(= jp 99)(= jp 67)) (setq aj "c"))
  255.                                         ((or(= jp 118)(= jp 86)) (setq aj "v"))
  256.                                         ((or(= jp 98)(= jp 66)) (setq aj "b"))
  257.                                         ((or(= jp 110)(= jp 78)) (setq aj "n"))
  258.                                         ((or(= jp 109)(= jp 77)) (setq aj "m"))
  259.                                         ((= jp 44) (setq aj ","))
  260.                                         ((= jp 92) (setq aj "\\"))
  261.                                         ((= jp 13) (setq aj "回车"))
  262.                                         ((= jp 32) (setq aj "空格"))
  263.                                         ((= jp 46) (setq aj "."))
  264.                                         ((= jp 48) (setq aj 0))
  265.                                         ((= jp 49) (setq aj 1))
  266.                                         ((= jp 50) (setq aj 2))
  267.                                         ((= jp 51) (setq aj 3))
  268.                                         ((= jp 52) (setq aj 4))
  269.                                         ((= jp 53) (setq aj 5))
  270.                                         ((= jp 54) (setq aj 6))
  271.                                         ((= jp 55) (setq aj 7))
  272.                                         ((= jp 56) (setq aj 8))
  273.                                         ((= jp 57) (setq aj 9))
  274.                                         ((= jp 43) (setq aj "+"))
  275.                                         ((= jp 45) (setq aj "-"))
  276.                                         ((= jp 42) (setq aj "*"))
  277.                                         ((= jp 47) (setq aj "/"))
  278.                                         ((= jp 9) (setq aj "Tab")) ;Tab
  279.                                         ;————————————————————Shift+
  280.                                         ((= jp 123) (setq aj "{"))
  281.                                         ((= jp 125) (setq aj "}"))
  282.                                         ((= jp 58) (setq aj ":"))
  283.                                         ((= jp 34) (setq aj "\""))
  284.                                         ((= jp 60) (setq aj "<"))
  285.                                         ((= jp 62) (setq aj ">"))
  286.                                         ((= jp 63) (setq aj "?"))
  287.                                         ((= jp 124) (setq aj "|"))
  288.                                         ((= jp 126) (setq aj "~"))
  289.                                         ((= jp 33) (setq aj "!"))
  290.                                         ((= jp 64) (setq aj "@"))
  291.                                         ((= jp 35) (setq aj "#"))
  292.                                         ((= jp 36) (setq aj "$"))
  293.                                         ((= jp 37) (setq aj "%"))
  294.                                         ((= jp 94) (setq aj "^"))
  295.                                         ((= jp 38) (setq aj "&"))
  296.                                         ((= jp 40) (setq aj "("))
  297.                                         ((= jp 41) (setq aj ")"))
  298.                                         ((= jp 95) (setq aj "_"))
  299.                                 )
  300.                         )
  301.                 )
  302.         );while
  303.         (setvar'cursorsize gb);恢复光标大小
  304.         (setvar'pickbox bk);恢复靶框大小
  305.         (redraw);更新
  306.         (if hd (setq aj (strcat hd aj)))
  307.         (princ "\n")
  308.         aj
  309. )
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-12-3 16:08 | 显示全部楼层

非常感谢大神的再次帮助,可否提示一下,究竟是那里导致右键和键盘出错的?
 楼主| 发表于 2023-12-3 16:09 | 显示全部楼层
lijiao 发表于 2023-12-3 15:06
随便写了一个,可能与你的思路不一样

非常感谢大神分享不同的思路
发表于 2023-12-3 17:53 | 显示全部楼层
努.力 发表于 2023-12-3 16:08
非常感谢大神的再次帮助,可否提示一下,究竟是那里导致右键和键盘出错的?

aj变量冲突
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 09:42 , Processed in 0.186774 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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