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

标签 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 对象的第二行给我错误 bad argument type: lentityp OFF1 因为在这种情况从 1 开始,我认为问题不是读取的大写结果,因为 lisp 不区分大小写,而不是我无法解决的类型问题。我也尝试过使用 eval 或直接使用 assoc -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,您应该使用列表,而不是分配所有这些递增的变量。 要使用这些变量,您需要使用 whilerepeat 循环遍历它们,就像使用 list 和 foreach 一样。 假设 offsetList 是 dxf 列表的列表(所有您的 offset(n) 值),您可以简单地构建一个 enameS 列表和一个 vla-objectS 列表。

(setq offList (mapcar '(lambda (x) (cdr (assoc -1 x))) offsetList))
(setq objList (mapcar 'vlax-ename->vla-object offList))

关于lisp - 转换多个对象的vlax-ename->vla-object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41916805/

相关文章:

exception - 嵌入式 ECL Lisp 错误处理获取默认错误字符串和可能的行号

vector - 为什么无法在 Scheme 中调整 SRFI-4 向量的大小?

return - 订单与SBCL中的返回有关

c# - 创建布局和逻辑 AutoCAD 插件对话框

lisp - AutoLISP:删除列表中的连续重复项

macos - 更改 Aquamacs 中的字体?

c++ - AutoCAD C++ AcDbEntity 何时需要打开读取?

c# - 是否可以使用 Autodesk.AutoCAD.Interop 在 AutoCAD 中编辑 block 属性?

python - 使用 AutoCAD 中的 lisp 应用程序和 Python 3.5

autocad - 在 Lisp 退出时执行代码