Tipo166 发表于 2022-7-6 15:01:22

按线型冻结?-VBA

大家好。我有一个梦想。。。。。我希望遍历dwg中的所有对象(显示的对象),选择“按线型”,然后冻结(或不显示)具有该线型的对象。特别是即使它们位于块参照中。。。。。我能把它们的线型改成“空白”线型吗
? 嗯,仅在某些情况下。。。。。。。
思想?

uddfl 发表于 2022-7-6 15:09:30

我不知道如何在VBA中执行此操作,但有一种使用AutoLISP执行此操作的方法:
 
 

(setq ss1 (ssget "x" (list (cons (6 LINETYPENAME))))
(setq ent-index 0)
(repeat (sslength ss1)
(setq entname (ssname ss1 ent-index))
(setq entlist (entget entname))
(if (assoc 60 entlist)
   (setq entlist (subst '(60 . 1) (assoc 60 entlist) entlist))
   (setq entlist (append entlist '((60 . 1)))))
(entmod entlist)
(setq ent-index (1+ ent-index))
)

Lee Mac 发表于 2022-7-6 15:15:01

Uddfl,将跳过线型设置为“bylayer”的图元。。。
 
只是一个想法。。

Lee Mac 发表于 2022-7-6 15:25:41

啊,还有一件事-注意超过32767个元素的选择集。。。重复方法对这些不起作用。。。

uddfl 发表于 2022-7-6 15:32:08

嗯,我刚刚扔了一个又便宜又脏的。我不太想打字(是的,星期五)。 
六羟甲基三聚氰胺六甲醚。。。是的。你如何解决这些问题?WHILE函数?

Lee Mac 发表于 2022-7-6 15:39:44

检查这个-
 
需要考虑所有情况。。。
[列表]
[*]在具有所需线型的图层上,对象线型设置为bylayer(需要这些…)
[*]在具有所需线型的图层上,对象线型设置为不同的值(去掉这些..)
[*]不在具有所需线型的图层上,但对象设置为所需线型。(需要这些…)
这不是一项容易的任务。。。

Lee Mac 发表于 2022-7-6 15:42:30

如果您不想将选择集转换为实体名称列表,可以使用类似这样的方法来迭代ss:
 
2
 
我知道一个愚蠢的例子,但我只是想告诉你这个想法

uddfl 发表于 2022-7-6 15:52:59

^你作弊了,你使用了vl函数!
 
实际上,这是一个很好的了解方法。谢谢

Lee Mac 发表于 2022-7-6 15:59:13

哈哈。。。如果没有vl函数,我可能可以做到这一点,但这需要大量的编码
 
使用ssnamex将其放入列表是很好的,因为不需要在集合中乱序,这是一种繁琐的方法-您可以使用LISP的目的:列表。
 
因此,您可以使用所有列表函数,例如foreach、mapcar。。等等等等。
 
希望这有帮助
 

Lee Mac 发表于 2022-7-6 16:01:45

在这一切之后,我们甚至没有像OP想要的那样使用VBA
页: [1]
查看完整版本: 按线型冻结?-VBA