- 积分
- 7560
- 明经币
- 个
- 注册时间
- 2022-2-9
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 sandyvs 于 2023-4-6 23:44 编辑
2023.4.6
嗯。。达到要求了
(defun c:tt (/ *error* cc code gr loop n pt0 ptx xj xx zz)
(defun *error* (msg)
(if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
(progn (princ (strcat "\n错误:" msg))
(if cc
(entdel cc)
)
(if zz
(entdel zz)
)
)
)
(princ)
)
;;;----------------------------------------------------
(setvar "cmdecho" 0)
(setvar "dynmode" 0)
(setq scale (getvar "dimscale"))
(setq n 1)
(setq xx 0)
(princ "/n 空格序号-1,右键退出,插入点更换:s左/f右/e上/d下:<左>")
(setq loop t) ;grread
(while loop
(setq gr (grread t 15 0)
code (car gr)
ptx (cadr gr)
)
(cond
((= code 3)
(redraw)
(setq cc nil)
(setq zz nil)
(setq n (1+ n))
)
((= code 5) ; 鼠标移动
(redraw)
(if cc
(entdel cc)
)
(if zz
(entdel zz)
)
;(setq ptx (osnappt nil ptx))
(setvar "osmode" 0)
(setq pt0 (polar ptx xx (* scale 2)))
(vl-cmdf "circle" pt0 (* scale 2))
(setq cc (entlast))
(entmakeX
(list '(0 . "TEXT")
(cons 1 (vl-princ-to-string n))
(cons 10 pt0)
(cons 40 (* scale 2))
(cons 11 pt0)
(cons 72 1)
(cons 73 2)
)
)
(setq zz (entlast))
)
((MEMBER (CADR GR) '(13 32)) ;空格 回车
(setq n (- n 1))
)
((MEMBER (CADR GR) '(83 115)) ;a键
(setq xx 0)
)
((MEMBER (CADR GR) '(70 102)) ;f键
(setq xx pi)
)
((MEMBER (CADR GR) '(68 100)) ;d键
(setq xx (* 0.5 pi))
)
((MEMBER (CADR GR) '(69 101)) ;e键
(setq xx (* -0.5 pi))
)
((= code 25)
(if cc
(entdel cc)
)
(if zz
(entdel zz)
)
(setq loop nil)
)
)
)
(princ)
)
算是解决了吧,加个循环就好了。。空格 换方向,右击退出,但这个退出是因为错误退出。。
想要动态插入圆序号,请教下,有两个问题:1、最后一个生成的序号没用,如何删除?2、能否在移动过程中按键盘选择序圆插入点,比如上、下、左、右键对应圆的一、二、三、四象限。
(defun c:tt (/ *error* cc code gr loop n pt0 ptx xj xx zz)
(defun *error* ( msg )
(if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
(progn (princ (strcat "\n错误:" msg)) (if cc (entdel cc)) (if zz (entdel zz)))
)
(princ)
)
;;;----------------------------------------------------
(setvar "cmdecho" 0)
(setvar "dynmode" 0)
(setq scale (getvar "dimscale"))
(setq n 1)
(setq tj t)
(while tj
(initget "a s d w")
(setq xj
(cond ((getkword "\n 选择插入点:[a 左/s 下/ d 右/w 上]<a>: ")) ("a")))
(cond
((= xj "a")
(setq xx 0)
)
((= xj "d")
(setq xx pi)
)
((= xj "w")
(setq xx (* -0.5 pi))
)
((= xj "s")
(setq xx (* 0.5 pi))
)
)
(setq loop t) ;grread
(while loop
(setq gr (grread t 15 0)
code (car gr)
ptx (cadr gr)
)
(cond
((= code 3)
(redraw)
(setq cc nil)
(setq zz nil)
(setq n (1+ n))
)
((= code 5) ; 鼠标移动
(redraw)
(if cc
(entdel cc)
)
(if zz
(entdel zz)
)
;(setq ptx (osnappt nil ptx))
(setvar "osmode" 0)
(setq pt0 (polar ptx xx (* scale 2)))
(vl-cmdf "circle" pt0 (* scale 2))
(setq cc (entlast))
(entmakeX
(list '(0 . "TEXT")
(cons 1 (vl-princ-to-string n))
(cons 10 pt0)
(cons 40 (* scale 2))
(cons 11 pt0)
(cons 72 1)
(cons 73 2)
)
)
(setq zz (entlast))
)
;((= code 2) ; 键盘输入
; (princ "\n键盘输入=")(princ pt))
((or(member code '(2 13))(member code '(2 32))) ; 空格,回车
(entdel cc)
(entdel zz)
(redraw)
(setq cc nil)
(setq zz nil)
(setq loop nil)
)
(((= code 25)) ; 鼠标右击
(entdel cc)
(entdel zz)
(redraw)
(setq cc nil)
(setq zz nil)
(setq tj nil)
)
)
)
)
(princ)
)
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
|