计算特定位置的块(autolisp)
Counting blocks in a specific location (autolisp)
所以我在 autolisp 中做了一个简单的函数来计算图形中特定块的数量,它看起来像这样:
(defun c:contarblocos()
(setq ss (ssget "x" ' ((0. "INSERT") (2. "Nome do bloco"))))
(setq count (sslength ss))
(alert(strcat "Total de blocos no desenho: " (itoa count)))
)
现在,我真正想要的是计算用户定义的特定区域中的块数。换句话说,用户将调用该函数,然后该函数将请求一个特定的区域,在那里它会寻找特定的块并计算它们,而不计算所选区域之外的任何块。
而不是使用 ssget
函数的 x
模式字符串(它在整个绘图数据库中搜索满足过滤列表参数条件的所有实体),只需省略此参数即可允许用户使用任何有效的选择方法进行选择,例如:
(defun c:contarblocos ( / sel )
(if (setq sel (ssget '((0 . "INSERT") (2 . "Nome do bloco"))))
(alert (strcat "Total de blocos no desenho: " (itoa (sslength sel))))
)
(princ)
)
您当前的代码还有一些其他问题:
始终声明作用域为函数局部的变量:在我上面的示例中,您会注意到 sel
符号在 [=16= 内的变量列表中声明] 表达。关于为什么这很重要的更多信息,您不妨参考我的教程here.
你应该在调用sslength
函数获取集合中的项目数之前测试ssget
return是否是一个有效的选择集,因为(sslength nil)
会报错。您会看到我在代码中使用 if
语句来完成此操作。
ssget
过滤列表参数应该是点对的关联列表,因此,key
和key
之间应该有一个space value
在每个列表项中,因此:
(0. "INSERT")
应该变成:
(0 . "INSERT")
您应该在 defun
表达式中包含最终的 (princ)
或 (prin1)
表达式,以便函数 return 是命令的空符号行,而不是 returning 由最后计算的表达式(即 alert
表达式,它将 return nil
编辑的值 return。在我的示例中包含一个 (princ)
表达式将确保函数退出 'cleanly'.
所以我在 autolisp 中做了一个简单的函数来计算图形中特定块的数量,它看起来像这样:
(defun c:contarblocos()
(setq ss (ssget "x" ' ((0. "INSERT") (2. "Nome do bloco"))))
(setq count (sslength ss))
(alert(strcat "Total de blocos no desenho: " (itoa count)))
)
现在,我真正想要的是计算用户定义的特定区域中的块数。换句话说,用户将调用该函数,然后该函数将请求一个特定的区域,在那里它会寻找特定的块并计算它们,而不计算所选区域之外的任何块。
而不是使用 ssget
函数的 x
模式字符串(它在整个绘图数据库中搜索满足过滤列表参数条件的所有实体),只需省略此参数即可允许用户使用任何有效的选择方法进行选择,例如:
(defun c:contarblocos ( / sel )
(if (setq sel (ssget '((0 . "INSERT") (2 . "Nome do bloco"))))
(alert (strcat "Total de blocos no desenho: " (itoa (sslength sel))))
)
(princ)
)
您当前的代码还有一些其他问题:
始终声明作用域为函数局部的变量:在我上面的示例中,您会注意到
sel
符号在 [=16= 内的变量列表中声明] 表达。关于为什么这很重要的更多信息,您不妨参考我的教程here.你应该在调用
sslength
函数获取集合中的项目数之前测试ssget
return是否是一个有效的选择集,因为(sslength nil)
会报错。您会看到我在代码中使用if
语句来完成此操作。ssget
过滤列表参数应该是点对的关联列表,因此,key
和key
之间应该有一个spacevalue
在每个列表项中,因此:(0. "INSERT")
应该变成:
(0 . "INSERT")
您应该在
defun
表达式中包含最终的(princ)
或(prin1)
表达式,以便函数 return 是命令的空符号行,而不是 returning 由最后计算的表达式(即alert
表达式,它将 returnnil
编辑的值 return。在我的示例中包含一个(princ)
表达式将确保函数退出 'cleanly'.