在 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 和值的类型 您应该使用 rtos
、itoa
或 vl-princ-to-string
我想你需要的是:
(strcat "\nThe value of 142 is: " (vl-princ-to-string (cdr(assoc 42 b ) ) ))
我正在努力解决我遇到的这个错误,我是 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 和值的类型 您应该使用 rtos
、itoa
或 vl-princ-to-string
我想你需要的是:
(strcat "\nThe value of 142 is: " (vl-princ-to-string (cdr(assoc 42 b ) ) ))