我不明白。例如,在图层集合中,有两个或三个具有相同的线型和颜色,那么会发生什么?
(vl-load-com)
(setq acadDocument (vla-get-activedocument (vlax-get-acad-object)))
(setq layertable (vla-get-layers acadDocument))
(repeat
(setq Lay (tblnext "LAYER" 1))
(while
(setq layLT (cdr (assoc 6 lay))
layCOLOR (cdr (assoc 62 lay))
layNM (cdr (assoc 2 lay))
);setq
(open C:\\Documents and Settings\\moorerb\\Desktop\\scripting-lisp\\standardlayers.txt "r")
这是我到目前为止的编码。我还没有找到结束循环的方法,仍然在阅读如何计算分隔文件中的每一行,TSV作为分隔符 假设我有20层相同的LT和颜色,它将评估匹配层属性的名称,如果有问题的层的第一个字符与其中一个可能匹配的第一个字符匹配,则它将该名称保存为变量以将其更改为,如果有多个匹配,则它将顺行比较可能匹配的第二个字符。。。以此类推,以获得层的最准确名称。 (while(setq a(tblnext“LAYER”(null a))(setq coll(list(cdr(assoc 6 a))(cdr(assoc 62 a))(cdr(assoc 2 a))))(print coll);
这是standardlayers的一部分。txt。这些空间实际上是选项卡定界 可以在这里为我们演示这两行:
电气1隐藏
电气7隐藏
如果找到匹配项。然后呢?新名字是什么?
Anyhoo。。如果唯一的问题是循环。参见上一篇文章 旧层名称:ELECTRICAL
图层颜色:1
图层LT:隐藏
(与standardlayers.txt比较)
新图层名称:ELEC
(命令“-rename”“la”OLD NEW)
它只比较颜色和线型以及名称中的字符(如果需要)。很可能需要比较名称中的字符 看看我是否做对了。电气/1/隐藏将是电气,电气/7/隐藏也将是电气,对吗?
使用wcmatch进行名称比较,或使用层名称上的第一个字符减少比较列表的谓词函数 请记住,我对lisp非常陌生,不知道很多函数。我的想法是,我将逐步遍历每个现有层,对照列表检查名称,如果名称不在我的列表中,则运行更改名称的函数。IE:所有关于颜色和lt检查的废话。当我考虑这个例程的wcmatch功能时,如果我错了,请纠正我,它必须是自己的功能,在运行我的主例程之前过滤现有的层列表??
是的,有点。。。我可以给你写一个片段。。。。但是你没有回答我的问题,
页:
1
[2]