小白请教,print1985大佬的动态复制.
使用时和大佬演示的不一样,多了个《于》,复制不成功.有明白的大佬帮忙看下,感谢感谢~本帖最后由 尘缘一生 于 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
尘缘一生 发表于 2021-12-6 20:25
这是插件基本功能,基本都有,但核心集成不一样。
比如:选择易,各种刷子,查找替换,智能中心线,等等。 ...
感谢大佬耐心解答!纯小白,没找到快捷键,哈哈,那个云盘连接失效了.不过还是谢谢啦,我自己捣鼓下先:lol KATANA 发表于 2021-12-7 09:20
感谢大佬耐心解答!纯小白,没找到快捷键,哈哈,那个云盘连接失效了.不过还是谢谢啦,我自己捣鼓下先:lo ...
链接:https://pan.baidu.com/s/1MFefERLBzBtQIQLrH5Qy3Q
提取码:5kek
更新了。。 尘缘一生 发表于 2021-12-7 09:23
链接:https://pan.baidu.com/s/1MFefERLBzBtQIQLrH5Qy3Q
提取码:5kek
好嘞,感谢,下载个试试 楼主能不能分享一下阿甘的动态复制,谢谢了,邮箱:16696376102@163.com
页:
[1]