我想要做的是尝试将多个实体转换为VLA-对象,以便使用Vlisp函数。我想做的是:
(while (<= masa masas)
(set (read (strcat "off" (itoa masa) )) (cdr (assoc -1 (eval (read (strcat "offset" (itoa masa)))))))
(set (read (strcat "obj" (itoa masa) )) (vlax-ename->vla-object (read (strcat "off" (itoa masa) ))))
(setq masa (+ masa 1))
)其中,masa是一个计数器,它允许退出while循环,而masas是变量限制。在wy代码中,while循环中的第一行和第三行工作得很好,但是第二行(我试图将每个ename转换为VLA对象)给出了错误坏参数类型: rather OFF1,因为在这种情况下,开始于1,我认为问题不是读的大写结果,因为lisp不区分大小写,而不是我无法解决的类型问题。我也尝试过使用eval或直接使用assoc -1,但我并不幸运。
发布于 2017-01-29 09:04:40
错误消息意味着OFF1不是ENAME (它是一个符号)。您需要用(eval .)来计算符号值。
(while (<= masa masas)
(set (read (strcat "off" (itoa masa)))
(cdr (assoc -1 (eval (read (strcat "offset" (itoa masa))))))
)
(set (read (strcat "obj" (itoa masa)))
(vlax-ename->vla-object (eval (read (strcat "off" (itoa masa)))))
)
(setq masa (1+ masa))
)IMO,您应该使用列表,而不是分配所有这些增量变量。要使用这些变量,您需要循环使用时间或重复,就像使用list和foreach一样。假设offsetList是dxf列表的列表(所有偏移量(N)值),您可以简单地构建一个enameS列表和一个vla对象列表。
(setq offList (mapcar '(lambda (x) (cdr (assoc -1 x))) offsetList))
(setq objList (mapcar 'vlax-ename->vla-object offList))https://stackoverflow.com/questions/41916805
复制相似问题