本帖最后由 qazxswk 于 2024-6-27 16:50 编辑
看到langjs大神的帖子,http://bbs.mjtd.com/forum.php?mod=viewthread&tid=171879
然后有网友提出,输入复制的距离后,然后按下 R 键,就可以快速复制了。不需要不断地按右键或空格。我试着写了一个。
我感觉,按【F】键连续复制比按R键更为方便,另外,如果在输入复制距离数据后,按【回车】键也可以继续复制。
抛砖引玉,看大家有没有更好的代码。
 - (defun c:11(/ *error* newss_after elast osm ss bb pt pt1 pt2 d r en)
- (defun *error* (msg)(setvar "osmode" osm)(setvar "cmdecho" 1)(princ "\n***复制完成***"))
- (defun newss_after (elast / en ss0)
- (if elast (progn
- (setq ss0 (ssadd))
- (setq en (entnext elast))
- (while en
- (if (not (member (cdr (assoc 0 (entget en))) '("ATTRIB" "VERTEX" "SEQEND")))(setq ss0 (ssadd en ss0)))
- (setq en (entnext en))
- )
- ss0 )
- ) )
- (setvar "cmdecho" 0)
- (setq osm (getvar "osmode"))
- (if (and
- (setq ss (ssget)) (setq pt (getpoint "\n选择复制基点:"))
- (setq en (entlast))
- (vl-cmdf "_.copy" ss "" pt pause)
- (setvar "osmode" 16384)
- (setq pt1 (getvar "lastpoint"))
- (setq d (distance pt pt1) r (angle pt pt1))
- )
- (while
- (princ "\n按【F】键或【回车】键连续复制,空格或ESC键退")
- (if d (princ (strcat "<当前复制距离" (rtos d) ">:")))
- (while pt1 (setq bb (grread t 4 2))
- (cond
- ((member bb '((2 13)(2 70)(2 102)))
- (setq ss (newss_after en))
- (setq en (entlast))
- (setq pt2 (polar pt1 r d))
- (vl-cmdf "_.copy" ss "" pt1 pt2)
- )
- ((member bb '((2 32)))(exit))
- )
- )
- (setq pt1 pt2)
- )
- )
- (princ))
|