连续等距复制
本帖最后由 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))
xxyyzzlg 发表于 2024-7-17 21:35
这个功能很常用,但用F和回车重复复制,很不习惯。。。习惯空格键重复
可以私人订制:lol:lol lzspain 发表于 2024-6-26 21:37
有复制上限吗?貌似复制了14次之后就不行了。
嗯,有这个情况,因为复制了很多对象,在排查原因中。 JUN1 发表于 2024-7-4 16:28
copy里的选型很香呀
工具的使用,就是习惯的问题,没有哪个好,哪个不好。习惯了就好。 有复制上限吗?貌似复制了14次之后就不行了。 lzspain 发表于 2024-6-26 21:37
有复制上限吗?貌似复制了14次之后就不行了。
已经修改好了,多次复制,不会有问题了。 谢谢,很不错 qazxswk 发表于 2024-6-27 02:00
已经修改好了,多次复制,不会有问题了。
谢谢,确实可以了。 利用前辈们的一些代码,解决了不能复制动态块和属性块的问题。 我也是在别人的代码中学习起来的,通过简单改改代码解决繁琐的工作 怎么使用的呀,有文件吗
页:
[1]
2