bapatri 发表于 2022-7-5 20:19:26

创建新的当前层

 
我从中找到这个Lisp程序(http://autolispgs.blogspot.com/2013/02/create-new-layer.html),我希望新创建的层成为当前层。
 

 
(defun c:新层(/层名称颜色)
;;作者:Ganesh Shetty,版权所有©2013-http://autolispgs.blogspot.in
(setq Layername(getstring“\n输入新层名称:”))
(如果(不是(Tblsearch“LAYER”Layername))
(程序
(setq color(getint“\n输入新层的颜色类型:”))
(命令“_Layer”“New”layername“c”color layername“”)
(princ(strcat“layer\”layername“Created.”)
)
(princ“\n层名称已存在。”)
)
(普林斯)
);结束defun

bapatri 发表于 2022-7-5 20:26:25

 
我在autolispgs上找到了这个lisp。blogspot。com,我想知道是否有人可以添加到它。我希望创建的新层成为当前层。
 
(defun c:新层(/层名称颜色)
;;作者:Ganesh Shetty,版权所有©2013-http://autolispgs.blogspot.in
(setq Layername(getstring“\n输入新层名称:”))
(如果(不是(Tblsearch“LAYER”Layername))
(程序
(setq color(getint“\n输入新层的颜色类型:”))
(命令“_Layer”“New”layername“c”color layername“”)
(princ(strcat“layer”“layername”“Created.”)
)
(princ“\n层名称已存在。”)
)
(普林斯)
);结束defun
 
泰。

BlackBox 发表于 2022-7-5 20:34:12

欢迎来到CADTutor。
 
也许这对你有用?
 

(defun c:NewLayer () (command "._-layer" "_m" pause "_c" pause "" "") (princ))

 
 
 
干杯
 
 
 
P、 请使用[代码]标签。

Tharwat 发表于 2022-7-5 20:38:38

检查新图层名是否有效是这方面的重要问题之一。

BlackBox 发表于 2022-7-5 20:45:45

 
你还没有测试代码,是吗?

Tharwat 发表于 2022-7-5 20:53:29

对不起,我正在关注OP来考虑这个问题

bapatri 发表于 2022-7-5 20:58:32

太好了,谢谢

BlackBox 发表于 2022-7-5 21:06:21

 
LAYER命令的Make(_m)关键字利用LayerTable对象的Add()方法(也称为vla Add),该方法将获取或创建相应的LAYERTABLECORD,给定作为字符串提供的名称参数。
 
举个简单的例子:
 

(defun _GetOrCreateLayer (doc layerName)
(vlax-invoke
   (vla-get-layers doc)
   (if (tblsearch "layer" layerName)
   'item
   'add
   )
   layerName
)
)

 
 
... 可以替换为:
 

(defun _GetOrCreateLayer2 (doc layerName)
(vla-add (vla-get-layers doc) layerName)
)

 
 
... 这不仅更简洁,而且在性能方面更高效。
 
 
 
 
不客气,巴帕特里;我很乐意帮忙。
 
干杯

BIGAL 发表于 2022-7-5 21:11:17

设置电流
 

(command "_Layer" "New" layername "c" color layername "")
new
(command "_Layer" "New" layername "c" color layername "S" layername "")
or
command "_Layer" "New" layername "c" color layername "")(setvar "clayer" layername)

fuccaro 发表于 2022-7-5 21:14:32

试试这个:
(defun c:Newlayer (/ Layername Color)
;;Author:Ganesh Shetty, Copyright © 2013 -http://autolispgs.blogspot.in
;-a small modification: If a new layer is created, it will become the current one
;-Fuccaro M.2015-01-22
(setq Layername(getstring "\nEnter New Layer Name:"))
(if (not (Tblsearch "LAYER" Layername))
(progn
(setq color(getint "\nEnter Color Type for New Layer:"))
(command "_Layer" "Make" layername "c" color layername "")
(princ(strcat "\nLayer \"" layername "\"Created ."))
)
(princ "\nLayer Name Already exist.")
)
(princ)
);end defun +
 
我看到你已经得到了你的请求的答案,我将合并这两个线程
页: [1] 2
查看完整版本: 创建新的当前层