第一个方案:用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)
)
(DEFUN C:TT ( / ss ff ss1 en pt x y)(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setvar "dimzin" 0)
(vl-load-com)加载vlax扩展函数
(setq ss (ssget '((0 . "point"))) n 0)请选择点
(if (/= ss nil)
(progn
(setq ff (open "d://文字到TXT.txt" "w") ss1 '())在D盘建立记事本《文字到TXT》这里可以查看内容
(repeat (sslength ss)循环选择
(setq en (ssname ss n) n (+ n 1)提取图元
pt (cdr (assoc 10 (entget en)))取得点坐标
ss1 (cons pt ss1)加入表
)
)
(setq ss1 (vl-sort ss1 (function (lambda (x y)(< (car x) (car y))))))X排序从左到右
(setq ss1 (vl-sort ss1 (function (lambda (x y)(> (cadr x) (cadr y))))))Y排序从上到下
(foreach en ss1函数遍历表,将其中每一个元素依次赋给变量,并对每一个表达式求值
(setq x (rtos (car en) 2 5))
(setq y (rtos (cadr en)2 5))取得Y坐标精确到小数点后5位
(princ x ff)
(princ "," ff)
(princ y ff)
(princ "\n" ff)
)
(close ff)
)
)
(princ)
)
这个TT命令修改了一下,可以对点坐标排序,保存到D盘《文字到TXT》记事本里面;实际上坐标需要X=;Y=这个标记的,这个标记表示大地坐标;大地坐标X=cad里面的y坐标,同样的Y=cad里面的x坐标,所以不能够随便修改文字格式。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)