如何用lisp程序提取选择的属性块中的length属性,并加合,最后给出结果

上次你给我的答案不能加合,而且只能选择一个块,我不是想学习lisp,我只是想要一个结果我需要的是我在图中选出我需要的块,然后把它们的length属性合计,给出结果... 上次你给我的答案不能加合,而且只能选择一个块,我不是想学习lisp,我只是想要一个结果
我需要的是我在图中选出我需要的块,然后把它们的length属性合计,给出结果
展开
 我来答
TD哥哥3103
2014-09-11 · 超过56用户采纳过TA的回答
知道答主
回答量:113
采纳率:0%
帮助的人:51.6万
展开全部
一般有两个方案
第一个方案:用AutoLisp方案,首先用 取得图块这个图元,然后用 entnext 逐一找到属性块来找到其中length的属性,然后将它的值给找出来,然后进行运算,注意 entnext 的运用。这个很简单,你自己应该写吧。
第二个方案:用VisualLisp方案,注意vla-getattributes,vlax-variant-value,vlax-safeArray->list这几个函数的运用,以下为 VisualLisp的例子
(Defun C:Test ()
(setq en0 (car (entsel)))
;;此处请选有属性定义的图块
(setq vn0 (vlax-ename->vla-object en0))
(setq lstVar (vla-getattributes vn0))
(setq lstAttrs (vlax-safeArray->list (vlax-variant-value lstVar)))
(setq TextString nil)
(foreach attr lstAttrs
(setq TagString (vla-get-TagString attr))
(if (equal TagString "length") ;此处为你想要的元素
(setq TextString (vla-get-TextString attr))
)
)
(if TextString
(princ (strcat "The content of length = " TextString))
(princ "没有找到length ")
)
(prin1)
)
以上回答你满意么?
追问
这个不行,只能选择一个块,我要的是合计。你给出第一个方案也行,我不太懂lisp,我只是要一个结果,能用就行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
设计人生3n
推荐于2016-01-11 · 超过26用户采纳过TA的回答
知道答主
回答量:34
采纳率:0%
帮助的人:44万
展开全部
(Defun C:T911 (/ lstText i sum textA tmp)
;; 子函数:返回列表("52" "36" "48")
(Defun GetAttsFromBlk (/ lstSS ss i lstText en vn lstAttrs TagString)
(setq lstSS '((0 . "INSERT") (2 . "wdx_new_00")))
(setq ss (vl-catch-all-apply 'ssget (list lstSS)))
(cond ((or (null ss) (vl-catch-all-error-p ss)) (vl-exit-with-value 0)))
(setq i 0)
(setq lstText '())
(repeat (sslength ss)
(setq en (ssname ss i)
i (1+ i)
vn (vlax-ename->vla-object en)
lstAttrs (vlax-safeArray->list (vlax-variant-value (vla-getattributes vn)))
)
(foreach attr lstAttrs
(setq TagString (vla-get-TagString attr))
(if (equal (strcase TagString) (strcase "length"))
(progn
(setq TextString (vla-get-TextString attr))
(setq lstText (cons (vl-string-trim TextString) lstText))
)
)
)
)
lstText
)
;;; ;;
;;; ;;
(setq lstText (T0911_GetAttsFromBlk))
(setq i 0)
(setq sum 0)
(repeat (length lstText)
(setq textA (nth i lstText)
i (1+ i)
)
(setq tmp (vl-catch-all-apply 'atof (list textA)))
(if (not (vl-catch-all-error-p tmp))
(setq sum (+ sum tmp))
)
)
(princ (strcat "结果=" (rtos sum 2 4)))
(prin1)
)
更多追问追答
追问
怎么用啊,是不是加载了之后,输入T911。但出现错误

错误: no function definition: T0911_GETATTSFROMBLK
追答
已经给你发了邮件,你查收一下
来自:求助得到的回答
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式