明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1192|回复: 5

小白请教,print1985大佬的动态复制.

[复制链接]
发表于 2021-12-6 17:45:49 | 显示全部楼层 |阅读模式
使用时和大佬演示的不一样,多了个《于》,复制不成功.有明白的大佬帮忙看下,感谢感谢~

本帖子中包含更多资源

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

x
发表于 2021-12-6 20:25:10 | 显示全部楼层
本帖最后由 尘缘一生 于 2021-12-6 20:57 编辑

这是插件基本功能,基本都有,但核心集成不一样。
比如:选择易,各种刷子,查找替换,智能中心线,等等。
本坛这些代码都有的。这个功能,有好几种:

有矩阵的,有COMMANDE 的,还有做无名块方式的。

经过多种实验:基本都是这个情况,那就是,实体少的时候,都没大问题,当选择实体多的时候,
高级手段,并没有COMMAND方式有优势。因此贴上目前我用的这一段。command 方式确实不乐意的方式,也一直寻找这个功能的更高级用法,在此同求吧,看谁还有比下面代码更完美的贴上。
楼主要的过程中,特殊功能,没看明白,也不外乎,加一句代码,按键实现。
代码舍弃扑捉部分,因为GRREAD 集成扑捉函数,模拟的,扑捉点总是不准确,同时对电脑硬件要求高。
但代码集成有文字自动归正,没有提供分步函数出来。

  • ;;多重拷贝选择集 SS:选择集 | pt0:移动起点 nil k: t 用于MOVE nil 用于copy---(一级)---------
  • ;;(sldocop (setq ss (ssget)) pt0)
  • (defun sldomov (ss pt0 k / pt elis f8 bb startpt x0 y0 x1 y1 z1 *error* e_lst ss1)
  •   (setq e_lst (sysvar '("autosnap"  "osmode" "qaflags" "cmdecho" "nomutt" "ORTHOMODE")))
  •   (defun *error* (msg)
  •     (mapcar 'eval e_lst) ;;恢复系统变量
  •     (command "_.undo" "e")
  •     (if (not (member msg '(nil "函数被取消" ";错误:quit / exit abort")))
  •       (princ (strcat "\n 退出:" "--->"))
  •     )
  •   )
  •   ;;----------------------
  •   (command "_.undo" "be") ;;函数重要,舍弃高级代码做法
  •   (setvar "osmode" 0)  ;;关闭捕捉
  •   (setvar "cmdecho" 0) ;;命令显示关闭
  •   (setvar "nomutt" 1)
  •   (if (= pt0 nil)
  •     (setq pt0 (ssmpt ss))
  •   )
  •   (if (= k nil) ;;复制
  •     (princ (slmsg (strcat "\n -> [逆转90度(TAB)/取角(A)/左右翻(D)/上下翻(S)/放大(Q)/缩小(W)/放大一倍(+)/缩小一半(-)]【左键】复制当前【右键】退出")
  •              (strcat "\n -> [逆轉90度(TAB)/取角(A)/左右翻(D)/上下翻(S)/放大(Q)/縮小(W)/放大一倍(+)/縮小一半(-)]【左鍵】復制當前【右鍵】退出")
  •            ))
  •     (princ (slmsg (strcat "\n -> [逆转90度(TAB)/取角(A)/左右翻(D)/上下翻(S)/放大(Q)/缩小(W)/放大一倍(+)/缩小一半(-)/复制当前(C)]【左键】插入【右键】退出")
  •              (strcat "\n -> [逆轉90度(TAB)/取角(A)/左右翻(D)/上下翻(S)/放大(Q)/縮小(W)/放大一倍(+)/縮小一半(-)/復制當前(C)]【左鍵】插入【右鍵】退出")
  •            ))
  •   )
  •   (setq pt pt0)
  •   (setq f8 (getvar "ORTHOMODE"))
  •   (while pt
  •     (setq bb (grread t 15 2) startpt (cadr bb))
  •     (cond
  •       ((equal bb '(2 15))    ;F8切换正交开关
  •         (if (= f8 0)
  •           (progn (setq f8 1) (prompt "\n <正交 开>"))
  •           (progn (setq f8 0) (prompt "\n <正交 关>"))
  •         )
  •         (setvar 'orthomode f8) (redraw)
  •       )
  •       ((= (car bb) 5)
  •         (setq elis startpt)
  •         (setvar 'lastpoint pt0)
  •         (redraw)
  •         (if (= f8 0)
  •           (setq elis startpt)
  •           (progn
  •             (setq x0 (car pt0)
  •               y0 (cadr pt0)
  •               x1 (car elis)
  •               y1 (cadr elis)
  •               z1 (caddr elis)
  •             )
  •             (if (> (abs (- x0 x1)) (abs (- y0 y1)))
  •               (setq elis (list x1 y0 z1))
  •               (setq elis (list x0 y1 z1))
  •             )
  •           )
  •         )
  •         (command "move" ss "" "non" pt "non" elis)
  •         (setq pt elis)
  •       )
  •       ((= (car bb) 3) ;;左键
  •         (if (= k t) ;;移动
  •           (setq pt nil)
  •           (progn
  •             (sl-sel-redrawsel ss 2)
  •             (setq ss1 (entlast))
  •             (command "copy" ss "" elis elis)
  •             (sl-wzgz (last_ent ss1))
  •             (setq pt elis)
  •           )
  •         )
  •       )
  •       ((member bb '((2 9)))      ;;table 键
  •         (command "ROTATE" ss "" "non" elis 90)
  •       )
  •       ((member bb '((2 65) (2 97)))   ;;A 旋转定角
  •         (sl-sel-redrawsel ss 2)
  •         (command "ROTATE" ss "" "non" elis pause)
  •       )
  •       ((member bb '((2 115) (2 83)))  ;;S s 上下翻
  •         (command "mirror" ss "" "non" elis "non" (mapcar '- elis '(1 0)) "Y")
  •       )
  •       ((member bb '((2 100) (2 68))) ;;D d 左右翻
  •         (command "mirror" ss "" "non" elis "non" (mapcar '- elis '(0 1)) "Y")
  •       )
  •       ((member bb '((2 32)(2 13)))  ;;回车
  •         (if (= k t) ;;移动
  •           (progn
  •             (command "MOVE" ss "" "non" elis "non" pt0)  ;;移回去
  •             (setq pt nil)
  •           )
  •           (progn
  •             (sl-sel-redrawsel ss 2)
  •             (setq ss1 (entlast))
  •             (command "copy" ss "" elis elis)
  •             (sl-wzgz (last_ent ss1))
  •             (setq pt elis)
  •           )
  •         )
  •       )
  •       ((member (car bb) '(11 25)) ;;右键
  •         (if (= k t) ;;移动
  •           (command "MOVE" ss "" "non" elis "non" pt0)  ;;移回去
  •           (sl:-erase ss)
  •         )
  •         (setq pt nil)
  •       )
  •       ((member bb '((2 67) (2 99)))   ;;C c 复制在当前
  •         (sl-sel-redrawsel ss 2)
  •         (setq ss1 (entlast))
  •         (command "copy" ss "" elis elis)
  •         (sl-wzgz (last_ent ss1))
  •       )
  •       ((member bb '((2 87) (2 119)))         ;;缩小  W w
  •         (command "scale" ss "" "non" elis "0.9")
  •       )
  •       ((member bb '((2 81) (2 113)))         ;;放大  Q q
  •         (command "scale" ss "" "non" elis "1.1")
  •       )
  •       ((equal bb '(2 45))         ;;缩小一半 -
  •         (command "scale" ss "" "non" elis "0.5")
  •       )
  •       ((member bb '((2 43) (2 61)))         ;;放大一倍 +
  •         (command "scale" ss "" "non" elis "2.0")
  •       )
  •       (T (setq pt nil)) ;;其余键
  •     )
  •   )
  •   (sl-wzgz ss)
  •   (command "_.undo" "e")
  •   (mapcar 'eval e_lst)
  •   (princ)
  •   (setq *error* nil)
  • )
  • ;;===========================(一级)===============================
  • ;;sl-sel-redrawsel 重画选择集中的对象,Sel 为选择集或图元名 mode 为方式码
  • ;;重画选择集中的对象,mode 为方式码,
  • ;;方式码 1 在屏幕重画该选择集对象
  • ;;方式码 2 隐藏该选择集对象
  • ;;方式码 3 “醒目显示”该选择集对象
  • ;;方式码 4 取消“醒目显示”该选择集对象
  • (defun sl-sel-redrawsel (sel mode / n)
  •   (if sel
  •     (cond
  •       ((= 'pickset (type sel))
  •         (repeat (setq n (sslength sel))
  •           (redraw (ssname sel (setq n (1- n))) mode)
  •         )
  •       )
  •       ((= 'ename (type sel))
  •         (redraw sel mode)
  •       )
  •     )
  •   )
  •   t
  • )


请你测试三领试试。
链接:https://pan.baidu.com/s/12Et3kWMPdl6plG53dP0hSA
提取码:w7qa





评分

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

查看全部评分

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-12-7 09:20:34 | 显示全部楼层
尘缘一生 发表于 2021-12-6 20:25
这是插件基本功能,基本都有,但核心集成不一样。
比如:选择易,各种刷子,查找替换,智能中心线,等等。 ...

感谢大佬耐心解答!纯小白,没找到快捷键,哈哈,那个云盘连接失效了.不过还是谢谢啦,我自己捣鼓下先
发表于 2021-12-7 09:23:38 | 显示全部楼层
KATANA 发表于 2021-12-7 09:20
感谢大佬耐心解答!纯小白,没找到快捷键,哈哈,那个云盘连接失效了.不过还是谢谢啦,我自己捣鼓下先:lo ...

链接:https://pan.baidu.com/s/1MFefERLBzBtQIQLrH5Qy3Q
提取码:5kek

更新了。。
 楼主| 发表于 2021-12-7 09:48:09 | 显示全部楼层
尘缘一生 发表于 2021-12-7 09:23
链接:https://pan.baidu.com/s/1MFefERLBzBtQIQLrH5Qy3Q
提取码:5kek

好嘞,感谢,下载个试试
发表于 2024-3-24 14:58:41 | 显示全部楼层
楼主能不能分享一下阿甘的动态复制,谢谢了,邮箱:16696376102@163.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 05:26 , Processed in 0.191095 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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