首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换多个对象的vlax-ename->vla-对象

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

Stack Overflow用户
提问于 2017-01-29 01:40:25
回答 1查看 530关注 0票数 0

我想要做的是尝试将多个实体转换为VLA-对象,以便使用Vlisp函数。我想做的是:

代码语言:javascript
复制
(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,但我并不幸运。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-29 09:04:40

错误消息意味着OFF1不是ENAME (它是一个符号)。您需要用(eval .)来计算符号值。

代码语言:javascript
复制
(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对象列表。

代码语言:javascript
复制
(setq offList (mapcar '(lambda (x) (cdr (assoc -1 x))) offsetList))
(setq objList (mapcar 'vlax-ename->vla-object offList))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41916805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档