乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 25|回复: 19

[编程交流] 复制/重命名层

[复制链接]

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:56:19 | 显示全部楼层 |阅读模式
大家好,
 
我经常需要创建一个新层,该层与图形中已经存在的某个层具有相同的属性和/或以某种简单的方式重命名层。无需使用注释层道具管理器或重命名。只需在命令行中保持简单、干净和快速即可。
 
我的想法是,在选择一个实体后,您可以复制(创建具有相同属性的新层)或重命名选定实体的层。经过几次Lisp程序测试,我明白这超出了我的技能范围。。。
谁能帮帮我吗?
 
谢谢
回复

使用道具 举报

5

主题

1074

帖子

1088

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-5 17:00:47 | 显示全部楼层
 
欢迎来到CADTutor。在LAYERS 2工具栏上有一些很棒的工具或命令。其中之一是COPYTOLAYER。您也可以在命令行中调用它。如果选择一个实体,该实体位于与新图层相同设置的图层上,并选择名称选项midcommand,则可以指定一个不存在的图层名称,在确认要使用该名称创建图层后,将创建该图层。
回复

使用道具 举报

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:03:49 | 显示全部楼层
谢谢你的回复!问题是:COPYTOLAYER没有保持相同的属性(颜色、线型、线宽)。
回复

使用道具 举报

8

主题

1133

帖子

1164

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 17:06:10 | 显示全部楼层
很抱歉,您不喜欢使用图层特性管理器,因为您想做的事情非常简单。
 
单击要复制的图层,然后单击“新建”。新层具有第一层的所有属性,只需要一个名称(或默认为Layer1)。
175623gxj4uaajciaalo9a.jpg
回复

使用道具 举报

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:10:26 | 显示全部楼层
这是我每天努力避免的例行公事:)问题是,大多数时候我需要处理具有数千层的图形,而层道具管理器通常会减慢autocad的速度。所以我用的是老古典主义者。。。它似乎比图层道具管理器快得多
回复

使用道具 举报

5

主题

1074

帖子

1088

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-5 17:14:47 | 显示全部楼层
将应用于正在创建的新图层的特性
指定新图层名称,
与当前层的相同,而不是与
从中复制实体的图层的。
 
正如eldon所指出的那样,在不需要图层特性管理器的情况下,首先确保当前图层
具有要应用于新层的特性。
如果你这样做,我相信你会发现所有的属性都是你想要的。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 17:16:13 | 显示全部楼层
这有什么帮助吗?
 
希望您的系统上安装了Express Tools,以享受选择集拖动模式功能
 
  1. (defun c:Test (/ ss p1 p2 i sn lst l)
  2. ;;___ Tharwat 12. May. 2013 ___;;
  3. (if
  4.    (and
  5.      (setq ss (ssget "_:L"))
  6.      (setq p1 (getpoint "\n Specify base point :"))
  7.      (setq p2 (acet-ss-drag-move ss p1 "\n Specify second point :"))
  8.      (repeat (setq i (sslength ss))
  9.        (setq sn (ssname ss (setq i (1- i))))
  10.        (setq lst (cons (vla-copy (vlax-ename->vla-object sn)) lst))
  11.      )
  12.    )
  13.     (progn
  14.       (foreach e lst
  15.         (vla-move e (vlax-3d-point p1) (vlax-3d-point p2))
  16.       )
  17.       (while
  18.         (and (/= "" (setq l (getstring t "\n Specify New Layer Name :")))
  19.              (snvalid l)
  20.              (tblsearch "LAYER" l)
  21.         )
  22.          (princ
  23.            "\n Unvalid name of layer or it's already existed ! TRY AGAIN "
  24.          )
  25.       )
  26.       (if (not (tblsearch "LAYER" l))
  27.         (progn
  28.           (vla-add (vla-get-layers
  29.                      (vla-get-activedocument (vlax-get-acad-object))
  30.                    )
  31.                    l
  32.           )
  33.           (foreach o lst (vla-put-layer o l))
  34.         )
  35.       )
  36.     )
  37. )
  38. (princ "\n Written by Tharwat ...")
  39. (princ)
  40. )
  41. (vl-load-com)
回复

使用道具 举报

VVA

1

主题

308

帖子

308

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-5 17:19:03 | 显示全部楼层
可能是这个
  1.         (defun ListBox (title msg keylab flag / tmp file dcl_id choice)
  2.         ;; ListBox (gile)
  3.         ;; Dialog box to choose one or more in a list
  4.         ;;
  5.         ;; Arguments
  6.         ;; title : the dialog title (string)
  7.         ;; msg ; message (string), "" or nil for none
  8.         ;; keylab : an dotted pairs list of type ((key1 . label1) (key2 . label2) ...)
  9.         ;; flag : 0 = popup list
  10.         ;;        1 = single choice list box
  11.         ;;        2 = multipe choices list box
  12.         ;;
  13.         ;; Return value : the choosen key (flag = 0 or 1) or the list of choosen keys (flag = 2)
  14.         ;;
  15.         ;; Using example
  16.         ;; (listbox "Layout" "Choose a layout" (mapcar 'cons (layoutlist) (layoutlist)) 1)
  17.         ;; create and open a temporay file
  18.           (setq        tmp  (vl-filename-mktemp "tmp.dcl")
  19.                 file (open tmp "w")
  20.           )
  21.                 ;; write the file according to arguments
  22.           (write-line
  23.             (strcat "ListBox:dialog{label="" title "";")
  24.             file
  25.           )
  26.           (if (and msg (/= msg ""))
  27.             (write-line (strcat ":text{label="" msg "";}") file)
  28.           )
  29.           (write-line
  30.             (cond
  31.               ((= 0 flag) "spacer;:popup_list{key="lst";")
  32.               ((= 1 flag) "spacer;:list_box{key="lst";allow_accept = true;")
  33.               (T "spacer;:list_box{key="lst";multiple_select=true;")
  34.             )
  35.             file
  36.           )
  37.           (write-line "}spacer;ok_cancel;}" file)
  38.           (close file)
  39.                
  40.                 ;; load the file and show the dialog
  41.           (setq dcl_id (load_dialog tmp))
  42.           (if (not (new_dialog "ListBox" dcl_id))
  43.             (exit)
  44.           )
  45.           (start_list "lst")
  46.           (mapcar 'add_list (mapcar 'cdr keylab))
  47.           (end_list)
  48.           (action_tile
  49.             "accept"
  50.             "(or (= (get_tile "lst") "")
  51.             (if (= 2 flag) (progn
  52.             (foreach n (str2lst (get_tile "lst") " ")
  53.             (setq choice (cons (nth (atoi n) (mapcar 'car keylab)) choice)))
  54.             (setq choice (reverse choice)))
  55.             (setq choice (nth (atoi (get_tile "lst")) (mapcar 'car keylab)))))
  56.             (done_dialog)"
  57.           )
  58.           (start_dialog)
  59.           (unload_dialog dcl_id)
  60.           (vl-file-delete tmp)
  61.           choice
  62.         )
  63. (defun make-copy-layer (New_Layer_Name Owner_Layer_Name / tmp )
  64. ;;;http://www.caduser.ru/forum/index.php?PAGE_NAME=message&FID=2&TID=47868&PAGEN_1=2
  65. ;;;Functionh to create a copy of the layer
  66. ;;; New_Layer_Name - the name of the new layer
  67. ;;; Owner_Layer_Name - name of the copied layer
  68. ;;; Returns ename copy created layer or nil
  69. ;;; (Make-copy-layer "My new layer" "0")
  70. (if (and (setq tmp (tblobjname "LAYER" Owner_Layer_Name))
  71.           (setq tmp (entget tmp))
  72.           (snvalid New_Layer_Name 0)
  73.           (not (tblsearch "LAYER" New_Layer_Name))
  74.           )
  75.    (entmakex (subst (cons 2 New_Layer_Name)(assoc 2 tmp) tmp))
  76.    )
  77. )
  78. ;;;Written By Michael Puckett.
  79. ;;;(setq all_layers (tablelist "LAYER"))
  80. (defun tablelist (s / d r)
  81.      (while (setq d (tblnext s (null d)))
  82.        (setq r (cons (cdr (assoc 2 d)) r))
  83.      );_ while
  84.    );_ defun
  85. (defun c:test ( / e1 _l _n _nl )
  86. (if
  87.   (setq e1 (entsel "\nPlease select a primitive copy of the layer you want to get <exit>: "))
  88.   (progn      
  89.       (print (setq _l (cdr(assoc 8 (entget(car e1))))))
  90.       (setq _nl (getstring t "\nNew layer name: "))
  91.       (if (make-copy-layer  _nl _l) (setvar "clayer" _nl))
  92.   ))
  93. );defun
  94. (defun C:test1 ( / _nl _l )
  95. (vl-load-com)
  96. (and
  97. (setq _l  
  98. (listbox "Layer" "Select exist layer"
  99.    ((lambda(l)(mapcar 'cons l l))(vl-remove-if-not 'snvalid (tablelist "LAYER")))
  100.    1
  101.    )
  102. )
  103. (setq _nl (getstring t "\nNew layer name: "))
  104. (snvalid _nl 0)
  105. (if (make-copy-layer  _nl _l) (setvar "clayer" _nl))
  106. )
  107. (princ)
  108. )
  109. (princ "\n type Test or Test1 in command line")(princ)

 
将图层特性从一个图层复制到另一个图层
回复

使用道具 举报

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:22:17 | 显示全部楼层
达德加德,
对不起,你说得对!
 
塔尔瓦特,
谢谢,但新图层具有默认属性
 
VVA,
非常感谢。两者都很棒!!!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 17:27:27 | 显示全部楼层
很好的解决方案VVA。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 13:58 , Processed in 0.584475 second(s), 85 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表