明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1470|回复: 9

[源码] 连续复制,需要Express Tool支持

[复制链接]
发表于 2020-9-4 11:07:05 | 显示全部楼层 |阅读模式
;连续复制,需要Express Tool支持
  1. (defun c:cc (/ *error* redrawss ss0 p0 ss1 p1 v tmp)
  2.   (vl-load-com)
  3.   (defun redrawss (ss mode / m n)
  4.     (setq m (sslength ss) n 0)
  5.     (repeat m (redraw (ssname ss n) mode) (setq n (1+ n)))
  6.   )
  7.   (or *adoc* (setq *adoc* (vla-get-ActiveDocument (vlax-get-acad-object))))
  8.   (vla-endundomark *adoc*)
  9.   (vla-startundomark *adoc*)
  10.   (if (and (setq ss0 (ssget))(setq p0 (getpoint "\n指定基点:")))
  11.     (progn
  12.       (setq snap (getvar "osmode"))
  13.       (command ".COPY" ss0 "" p0 p0)
  14.       (setq ss1 ss0 v nil)
  15.       (redrawss ss1 3)
  16.       (while ss1
  17.         (initget "R S D T E")
  18.         (setq p1 (acet-ss-drag-move ss1 p0 (strcat "\n点取位置,或[转90度(R)/左右翻(S)/上下翻(D)/改基点(T)/退出(E)]<"(if v "重复上次" "退出")">:") 1 0))
  19.         (if (and(not p1)v)(setq p1 (mapcar '+ p0 v)))
  20.         (cond
  21.           ((eq p1 "R")(command ".ROTATE" ss1 "" p0 "90") (redrawss ss1 3))
  22.           ((eq p1 "S")(command ".MIRROR" ss1 "" p0 (list (car P0) (+ (cadr P0) (getvar 'viewsize))) "Y")(redrawss ss1 3))
  23.           ((eq p1 "D")(command ".MIRROR" ss1 "" p0 (list (+ (car P0)(getvar 'viewsize))(cadr P0)) "Y") (redrawss ss1 3))
  24.           ((eq p1 "T")(if(setq tmp (getpoint p0 " 指定新基点:")) (setq p0 tmp)) (redrawss ss1 3))
  25.           ((eq p1 "E")(command ".ERASE" ss1 "")(setq ss1 nil)(setvar "osmode" snap))
  26.           ((listp p1)
  27.             (setvar "osmode" 0)
  28.             (command ".move" ss1 "" p0 p1)
  29.             (setq v (mapcar '- p1 p0) p0 p1 ss0 ss1)
  30.             (command ".COPY" ss0 "" p0 p0)
  31.             (setq ss1 ss0)
  32.             (redrawss ss1 3)
  33.             (setvar "osmode" snap)
  34.           )
  35.         )
  36.       )
  37.       (setvar "osmode" snap)
  38.     )
  39.   )
  40.   (vla-endundomark *adoc*)
  41.   (princ)
  42. )

评分

参与人数 1明经币 +1 收起 理由
lee50310 + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2020-9-4 20:12:28 | 显示全部楼层
使用的时候 极轴无法生效
发表于 2020-9-4 21:28:43 | 显示全部楼层
wowan1314 有个程序,地址自己找

;;;==================={ 自由复制V1.8 BY wowan1314 }================================;;;
;;; 功能:实现复制的过程中镜像、旋转、放大、缩小、对齐、改基点、改转角、记忆复制。         
;;; 特别鸣谢: G版 不死猫 xshrimp                                                     
;;; 特别说明:左键点取位置,右键退出,F3开关捕捉,F8开关正交,距离可直接输入无需按键         
;;; 量取Z的意思是:复制距离可由屏幕两点来确认,方便后面空格来默认距离                     
;;;===============================================================================;;;
;;;缺点:1、对于圆心的捕捉毫无办法。2、对极轴的支持。3、所有command都改为VLA函数。                                 
;;;===============================================================================;;;
 楼主| 发表于 2020-9-5 19:30:15 | 显示全部楼层
bai2000 发表于 2020-9-4 21:28
wowan1314 有个程序,地址自己找

;;;==================={ 自由复制V1.8 BY wowan1314 }=============== ...

你说的这个YY插件我用过,grread捕捉(捕捉最近点)有问题,会捕捉到动态移动的图元本身上去造成失误,所以我才自己写了这个。
郎大师也有个连续复制,不过对UCS支持不是很好(ucs下继续上一次复制会跑到不正确的地方去),且需要Esc退出。
 楼主| 发表于 2020-9-5 19:37:10 | 显示全部楼层
ljfzx 发表于 2020-9-4 20:12
使用的时候 极轴无法生效

极轴坐标没问题呀。@5000<30
你输入的什么?
发表于 2020-9-6 10:23:53 | 显示全部楼层
指的是F10的极轴功能
发表于 2021-6-19 19:20:04 | 显示全部楼层
试了下,感觉很不错!但怎么能改为按Esc也能退出呢?
发表于 2021-6-20 15:12:32 | 显示全部楼层
应该为ESC退出才行
发表于 2022-5-8 21:17:23 | 显示全部楼层
挺好用的。如果要改成Esc退出的话,可以如下操作:
1. 把 (if (and(not p1)v)(setq p1 (mapcar '+ p0 v))) 这一句改一下。
2. 把(command ".ERASE" ss1 "")(setq ss1 nil)(setvar "osmode" snap) 放到*error*函数里,但command 需改为command-s以便能在*error*里执行。
发表于 2022-10-4 15:04:16 | 显示全部楼层
挺好的,受教了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-15 22:31 , Processed in 0.169978 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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