我想要做的是尝试在prder中将多个实体转换为VLA-OBJECTS,以使用可用的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对象的第二行给出了错误错误的参数类型:lentityp OFF1 因为在这个案例关闭从1开始,我认为问题不是读取的大写结果,因为lisp不区分大小写,而不是我无法解决的类型问题。我也尝试使用eval或使用直接关联-1但我没有幸运。
答案 0 :(得分:1)
错误消息表示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-objectS列表。
(setq offList (mapcar '(lambda (x) (cdr (assoc -1 x))) offsetList))
(setq objList (mapcar 'vlax-ename->vla-object offList))