KarolR 发表于 2022-7-6 07:10:07

如何组合多个SETVAR

例如,不要写很多这样的内容:
(setvar“coords”2)(setvar“hpassoc”1)。。。
我可以合并吗?

BlackBox 发表于 2022-7-6 07:17:31


(vl-load-com)

(foreach x (list '(coords 2)
                '(hpassoc 1)
                ;; <-- More sysvars
          )
(vl-catch-all-apply 'setvar x)
)

Dadgad 发表于 2022-7-6 07:22:36

 
是的,这个方法会奏效,但只有几件事(我的朋友,这不是对你的反思)。。。。
 
我非常不喜欢这种方法,主要是因为它将系统变量和所需值分为两个单独的列表,而不是如我上面的示例所示的一个列表对(即'(变量值))。
 
这不仅仅是源于代码维护的观点,因为保持变量值列表对在一起也有一个(尽管很小)性能优势。。。在此小速度测试中演示:
 
测试功能:

(mapcar 'setvar '(coords hpassoc) (list 2 1))
速度测试结果:
 

(vl-load-com)

(defun _Mapcar (vars vals)
(mapcar 'setvar vars vals)
)

(defun _Foreach (pairs)
(foreach x pairs
   (vl-catch-all-apply 'setvar x)
)
)

BlackBox 发表于 2022-7-6 07:23:29

两者之间的区别是什么:(list‘a’b’c),它给出了一个list(a b c),
和:(列出a b c),这也给出了(a b c)。
我不知道引号(')函数是什么,为什么我需要它,在上面的示例代码中

Tharwat 发表于 2022-7-6 07:27:42

 
如果您知道该列表中要提供的所有值,那么就不需要像我在该示例中演示的那样调用list函数。这样做只需最小化实际调用的时间列表的数量。
 
我使用List函数调用的原因是,我可以提供已知值(引用的项)以及需要评估的值(意味着在List调用本身中正在执行一些编程操作)。
 
考虑这个例子:
(vl load com)(foreach x(list)(坐标2)-(hpassoc 1)(list“osmode(cond)(=“user1”(setq user(getvar”loginname))255)((=“user2”user)35)((=“user3”user)39)((=“user4”user)243)(T(getvar“osmode))    ;

BlackBox 发表于 2022-7-6 07:33:08

我在我的系统变量中包含的另一项,在AcadDoc时需要评估。正在加载的lsp是AUTOMATICPUB系统变量,因此当DWGPREFIX包含我们的sheets目录时,它被启用,而当在我们的model目录中时,它被禁用。

KarolR 发表于 2022-7-6 07:39:26

 
这一古老的解释可能有助于:
http://www.cadtutor.net/forum/showthread.php?38732-选择所有未闭合的多段线&p=258390#post258390

BlackBox 发表于 2022-7-6 07:42:41

 
... 另一个很好的帖子,李。

BlackBox 发表于 2022-7-6 07:47:42

干杯伙计

Lee Mac 发表于 2022-7-6 07:52:25

什么是(vl load com)?我应该在代码中插入它吗?
vl是函数吗?
页: [1] 2
查看完整版本: 如何组合多个SETVAR