KATANA 发表于 2021-12-6 17:45:49

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

使用时和大佬演示的不一样,多了个《于》,复制不成功.有明白的大佬帮忙看下,感谢感谢~

尘缘一生 发表于 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





KATANA 发表于 2021-12-7 09:20:34

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

感谢大佬耐心解答!纯小白,没找到快捷键,哈哈,那个云盘连接失效了.不过还是谢谢啦,我自己捣鼓下先:lol

尘缘一生 发表于 2021-12-7 09:23:38

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

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

更新了。。

KATANA 发表于 2021-12-7 09:48:09

尘缘一生 发表于 2021-12-7 09:23
链接:https://pan.baidu.com/s/1MFefERLBzBtQIQLrH5Qy3Q
提取码:5kek



好嘞,感谢,下载个试试

yu960312 发表于 2024-3-24 14:58:41

楼主能不能分享一下阿甘的动态复制,谢谢了,邮箱:16696376102@163.com
页: [1]
查看完整版本: 小白请教,print1985大佬的动态复制.