在 AutoLISP 中列出并提示特定对象实体

List and Prompt a specific object entity in AutoLISP

我正在努力解决我遇到的这个错误,我是 AutoLISP 的新手。

错误信息: 错误的参数类型:stringp (142 . 3000.0)

目前唯一的目标是提示选定的特定对象实体。

我的代码如下:

(defun c:getObjectLenght()
    (setq a (car (entsel "\nSelect a object: ")))
    (setq b (entget a))
    (setq c (assoc 142 b))
    (prompt (strcat "\nThe value of 142 is: " c))
(princ)
)

我尝试了很多不同的解决方案并在网上进行了搜索,但没有找到我想要的结果。所以我希望有人能给我指出正确的方向。

提前致谢。 :)

据我所知,assoc函数的用途是在关联列表中查找键值,这就像字典搜索一样,您需要提供键才能搜索特定值检查更多here
在应用函数 assoc 之后,它的输出是 列表格式 请参见下面的示例。

(assoc  8 (entget (car (entsel)) ))

选择实体输出后像 (8 . "0")
这是所选实体的图层名称,您的案例名称可能不同

再检查一个例子

(assoc  10 (entget (car (entsel)) ))

选择实体后输出为 (10 3.25 5.5 0.0)
输出值为所选实体的插入坐标。

注意Strcat函数加入字符串检查更多here.

在第 5 行的函数中,您尝试将字符串与列表连接起来,这就是为什么会发生错误。

如你所说的错误,我觉得你需要加入值3000.0.

为此,您可以按如下方式更改您的功能。

(defun c:getObjectLenght()
    (setq a (car (entsel "\nSelect a object: ")))
    (setq b (entget a))
    (setq c  (if (assoc 142 b)  (rtos (cdr (assoc 142 b)))  "Not Found" ) )
    ;Note that rtos function use to convert decimal value into sting.
    ; And if condition use in case entity not contain Key value 142 so to avoid error.
    (prompt (strcat "\nThe value of 142 is: " c))
(princ)
)

我从来没有遇到过 DXF 代码 assoc 142 我 google 找过,但没找到多少。

strcat 期望字符串,但 (assoc 142 b) returns 列表 (142 . 3000.0),因此您需要将列表转换为字符串。取决于您的实体 select 和值的类型 您应该使用 rtositoavl-princ-to-string

我想你需要的是:

(strcat "\nThe value of 142 is: " (vl-princ-to-string (cdr(assoc 42 b ) ) ))