明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: cj52000

[提问] 帮忙修改下程序,选物单开图层并将此物图层置为当前

[复制链接]
 楼主| 发表于 2024-1-29 13:40:24 | 显示全部楼层

可以多选了,但是图层不能置为当前,比如选中3个图层单开,使其任意1个图层置为当前都行
发表于 2024-1-29 13:57:32 | 显示全部楼层
cj52000 发表于 2024-1-29 13:40
可以多选了,但是图层不能置为当前,比如选中3个图层单开,使其任意1个图层置为当前都行

你任意图层都行是吧……多个对象也是随机一个图层就行?
 楼主| 发表于 2024-1-29 14:15:49 | 显示全部楼层
kucha007 发表于 2024-1-29 13:57
你任意图层都行是吧……多个对象也是随机一个图层就行?

嗯嗯,是的大佬
发表于 2024-1-29 14:23:51 | 显示全部楼层
cj52000 发表于 2024-1-29 14:15
嗯嗯,是的大佬

  1. (defun c:TT (/ DOC LayLst SS i obj Lay LayOpen)
  2.   (if (null vlax-dump-object) (vl-load-com));;将Visual LISP扩展功能加载到AutoLISP
  3.   (setq DOC    (vla-get-activedocument (vlax-get-acad-object))
  4.         LayLst (vla-get-layers DOC)
  5.   )
  6.   (defun *error* (Msg)
  7.     (vla-endundomark DOC)
  8.   )
  9.   (while (eq 8 (logand 8 (getvar 'undoctl)))
  10.     (vla-endundomark DOC)
  11.   ) ;关闭以前的编组
  12.   (vla-startundomark DOC) ;记录编组
  13.     (if
  14.       (and
  15.           (princ "\n——★★★ 请选择需要保留图层的对象 ★★★——\n")
  16.           (setq SS (ssget))
  17.       )
  18.       (progn
  19.         (vlax-for XX LayLst (vla-put-layeron XX :vlax-false)) ;图层全关
  20.         (repeat (setq i (sslength SS))
  21.           (setq obj (vlax-ename->vla-object (ssname SS (setq i (1- i))))
  22.                 Lay (vla-get-Layer obj)
  23.           )
  24.           (if (not (vl-position Lay LayOpen))
  25.             (progn
  26.               (vla-put-layeron (vla-item LayLst Lay) :vlax-true) ;打开目标图层
  27.               (setq LayOpen (cons Lay LayOpen))
  28.             )
  29.           )
  30.         );关闭其它
  31.         (setvar "CLAYER" (car LayOpen)) ;图层置为当前
  32.         (princ "\n——★★★ 已关闭除所选对象以外的其它图层 ★★★——\n")
  33.       )
  34.     )
  35.   (vla-endundomark DOC) ;结束编组
  36.   (command "redraw")
  37.   (princ)
  38. )

评分

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

查看全部评分

 楼主| 发表于 2024-1-29 15:11:46 | 显示全部楼层

可以了,感谢!
发表于 2024-1-29 17:30:38 来自手机 | 显示全部楼层
vitalgg 发表于 2024-1-28 21:50
源码:
https://gitee.com/atlisp/packages/blob/main/at-layer/at-layer.lsp

看着挺好,不知道咋用
发表于 2024-1-29 17:44:28 | 显示全部楼层
paulpipi 发表于 2024-1-29 17:30
看着挺好,不知道咋用

想直接用更简单。
复制以下代码到CAD命令行,回车安装即可。
  1. (progn(vl-load-com)(setq s strcat h "http" o(vlax-create-object (s"win"h".win"h"request.5.1"))v vlax-invoke e eval r read)(v o'open "get" (s h"://atlisp.""cn/@"):vlax-true)(v o'send)(v o'WaitforResponse 1000)(e(r(vlax-get o'ResponseText))))
发表于 2024-1-29 18:39:54 | 显示全部楼层

不错,正常使用,能加个不选对象时回车后恢复图层会更方便一点
发表于 2024-1-29 20:47:34 | 显示全部楼层
试试这个

(Defun C:y (/ ss ct cl la old)


(setvar "cmdecho" 0)


(setq ss (ssget))


(setq ct 0

len (sslength ss)

cl (cdr (assoc 8 (entget (ssname ss 0))))

)


(setvar "clayer" cl)


(while (< ct len)


(setq la (cdr (assoc 8 (entget (ssname ss ct)))))


(if (= old nil)


(setq OLD la)


(setq OLD (strcat OLD "," la))

)


(setq ct (1+ ct))

)


(command ".layer" "off" "*" "n" "")


(command ".layer" "on" old "")


(setvar "CECOLOR" (itoa (cdr (assoc 62 (tblsearch "layer" (getvar "CLAYER"))))))

(princ)

)

回复 支持 1 反对 0

使用道具 举报

发表于 2024-1-29 22:50:47 | 显示全部楼层

真好用,感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 23:12 , Processed in 0.177033 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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