nnutting 发表于 2022-7-5 23:33:28

图层标准例程

我有下面的代码。这将把我们公司的所有图层插入到一个新的绘图中。。。如果他们还不在那里。如果图层已在图形中,是否有方法将图形中的现有图层特性(颜色和线型)更改为插入块的特性?这将非常有帮助,因为我正在更新我们的颜色标准。
 
(defun c:SAA ()
(command "_.layer" "_set" "0" "")
(command "_purge" "blocks" "LAYERS" "y" "y")
(setq new (getpoint "\n SPECIFY INSERTION POINT:"))
(command "_insert" "LAYERS" new "1" "" "0" "")
(command "explode" (entlast) "")
(command "change" (entlast) "" "properties" "la" "0" "")
(princ)
)

Snownut 发表于 2022-7-5 23:44:10

看起来你在一个名为“layers”的块中拥有所有层,为什么你会关心插入点,只需指定点“0,0”。
 
如果您将所有层都列在一个外部“txt”文件中,您可以循环安装所有层。
“txt”文件更易于编辑和添加,您可以使用Excel创建文件。。。。

Snownut 发表于 2022-7-5 23:46:58

另一种选择是在acad中创建层。lsp文件,因此每次打开图形时,它都确保具有所有正确的图层,而无需用户参与。(只是不喜欢分解块法)
 
BricsCAD中的“acad.lsp”或“on_start.lsp”中的类似内容应该可以做到这一点(下面的代码包含两层“test1”和“test2”)
 

(foreach x '(( "test1" "yellow") ( "test2" "green" ) )
(vl-cmdf "_.layer" "N" (car x) "C" (cadr x) (car x) "")
)

 
这还具有更新现有图层上的线型、颜色或输入的任何其他信息的附加好处。(你正在努力实现的目标)

nnutting 发表于 2022-7-5 23:53:14

 
 
雪果。。。我使用块方法,以便人们可以简单地匹配属性。因此,在指定的屏幕点插入的块具有所有层名称(在正确的层上)和每个名称下的一行,每个名称也在正确的层上。插入点不能在0,0,因为这是我们平面图左下角的位置。

nnutting 发表于 2022-7-6 00:03:24

 
我负责开发我们办公室的CAD标准,我从一个非常初级的分层系统变成了一个相当复杂的系统。我已经设置了所有图层名称,但在过去一年中,我已经更改了几次颜色。我想让这个例程有能力被插入到一个已经有图层,但可能与旧的颜色,并改变颜色到新的更新版本的绘图。。。

Snownut 发表于 2022-7-6 00:05:54

使用我发布的方法也将更新现有图层上的颜色,这就是为什么我使用该颜色作为示例。(也可以使用颜色编号而不是名称)
 
实施CAD标准的更好方法之一是在acad中这样做。lsp文件(也可以将其设置为加密的FAS文件,这样用户就不会弄乱它),这确保了每次打开图形时都会强制执行标准。(同样,不需要用户输入)

nnutting 发表于 2022-7-6 00:10:29

所以在你发布的方法中,我必须用所有层替换“test1”和“test2”。。。对的
只是想弄清楚我将把你的代码部分放在我的代码中的什么地方,以及我需要多深入。

Snownut 发表于 2022-7-6 00:19:14

我的代码“test1”和“test2”只是示例层名称。您需要按照我用于示例层的格式列出所有层和颜色。(带引号和括号,如图所示)

nnutting 发表于 2022-7-6 00:23:42

好啊所以我还是个新手。。。你能告诉我这些函数实际上是做什么的吗?
现有的颜色需要放在图层名称的旁边,还是只需要列出我想要的颜色?
第二行以vl cmdf开头。。。我需要修改你的代码吗?

Snownut 发表于 2022-7-6 00:30:16

您根本不需要现有的颜色,层名称旁边的颜色是新颜色(它必须在那里…)。谁知道用户对图层颜色做了什么。。。
 
如果你只需要图层名和颜色,你不需要对代码做任何事情,只需要创建列表。要设置线型和宽度等,还需要将其添加到代码中。要关闭图层,请使用负数作为颜色。
 
vl cmdf是vl相当于“command”(您在代码中使用的命令),它在完成时返回T,而不是像command那样返回nil。它运行得更干净。。。。(除其他外)
 
foreach行使foreach中列出的操作(在本例中是vl cmdf)应用于列表中的每个项目,列表中的每个项目每次都通过函数分配给“x”,其中“x”通过列表索引直到完成。
 
在这种情况下,主列表中有子列表,子列表(“test1”“黄色”)等。。每层一个,共同构成主列表。
 
运算符创建列表。
页: [1] 2
查看完整版本: 图层标准例程