转换vlax-ename->多个对象的vla-object

时间:2017-01-29 01:40:26

标签: lisp autocad autolisp

我想要做的是尝试在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但我没有幸运。

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))