属性块中某个属性转成文字
本帖最后由 hhhlike 于 2012-5-5 21:47 编辑拿出我所有的币,想把属性块中某个属性转成单行文字
菜鸟研究了半天都没搞定,请哪位高手伸出援助之手
怎么不在标题里说清楚啊 看看这个对你吗?
(defun C:gai (/ ss p0 h i ent ent1 str )(command "undo" "be")(if (setq SS (ssget ":E" '((0 . "INSERT") (66 . 1)))) (progn (setq p0 (getpoint "\n指定书写文字的基点:")) (setq h (getreal "\n指定文字的高度:")) (setvar "cmdecho" 0) (setvar "osmode" 0) (setq I -1) (repeat (sslength SS) (setq ENT(entget (ssname SS (setq I (1+ I)))) ENT1 ENT ) (while (= (cdr (assoc 0 (setq ENT1 (entget (entnext (cdr (assoc -1 ENT1))))) ) ) "ATTRIB" ) (if (= (cdr (assoc 2 ENT1)) "LENGTH") (progn (setq str (cdr (assoc 1 ENT1))) (Command "_.TEXT" "_S" "standard" "j" "mc" p0 h 0 str) ) ) ) ) ))(setvar "osmode" 15359)(command "undo" "e")(prin1)) 本帖最后由 caoyin 于 2012-5-5 22:01 编辑
这个不是针对块的属性,因为实现对块属性的转换会有很多问题,涉及到块重定义
;;将属性定义(ATTDEF)转化为文字----by caoyin
(defun C:ATT2TEXT (/ SS N1 N2 I EN ENT)
(setvar 'NOMUTT 1)
(vl-catch-all-apply
'(lambda ()
(princ "\n选择属性定义对象 <选择全部>: ")
(if (or (setq SS (ssget '((0 . "ATTDEF"))))
(setq SS (ssget "X" '((0 . "ATTDEF"))))
)
(repeat (progn (setq N1 0 N2 0 I 0) (sslength SS))
(setq EN(ssname SS I)
ENT (entget EN)
ENT (subst '(0 . "TEXT") '(0 . "ATTDEF") ENT)
ENT (subst (cons 1 (cdr (assoc 2 ENT))) (assoc 1 ENT) ENT)
ENT (subst (cons 73 (cdr (assoc 74 ENT))) (assoc 73 ENT) ENT)
ENT (vl-remove-if
'(lambda (X) (member (car X) '(100 280 3 2 70 74)))
ENT
)
I (1+ I)
)
(if (and (entdel EN) (entmake ENT))
(setq N1 (1+ N1))
(setq N2 (1+ N2))
)
(princ (strcat "\r发现 "
(itoa (+ N1 N2))
" 个对象: "
(itoa N1)
" 个处理成功,"
(itoa N2)
" 个处理失败。"
)
)
)
(princ "未发现任何属性定义对象。")
)
)
)
(setvar 'NOMUTT 0)
(princ)
)
caoyin 发表于 2012-5-5 21:55 static/image/common/back.gif
这个不是针对块的属性,因为实现对块属性的转换会有很多问题,涉及到块重定义
;;将属性定义(ATTDEF)转化 ...
曹版,这个也处理不了
提示“未发现任何属性定义对象” 这个不是针对块的属性,因为实现对块属性的转换会有很多问题,涉及到块重定义
(defun C:gai (/ ss p0 h i str ent ent1)
(command "undo" "be")
(if (setq SS (ssget ":E" '((0 . "INSERT") (66 . 1))))
(progn
(setq p0 (getpoint "\n指定书写文字的基点:"))
(setq h (getreal "\n指定文字的高度:"))
(setvar "cmdecho" 0)
(setvar "osmode"0)
(setq I -1)
(repeat (sslength SS)
(setq ENT(entget (ssname SS (setq I (1+ I))))
ENT1 ENT
)
(while
(=
(cdr
(assoc 0
(setq ENT1 (entget (entnext (cdr (assoc -1 ENT1)))))
)
)
"ATTRIB"
)
(setq str (cdr (assoc 1 ENT1)))
(Command "_.TEXT" "_S" "standard" "j" "mc" p0 h 0 str)
(setq p0 (list (car p0)(-(cadr p0) (* h 1.2))));1.2是控制行间距的数越大间距越大
)
)
)
)
(setvar "osmode"15359)
(command "undo" "e")
(prin1)
)
wwwbxd 发表于 2012-5-5 22:20 static/image/common/back.gif
看看我这个行不行 wwwbxd 发表于 2012-5-5 22:22 static/image/common/back.gif
看看我这个行不行
很好了,不过我只想要一个“length"
就是那个数字 wwwbxd 发表于 2012-5-5 22:48 static/image/common/back.gif
怎么不在标题里说清楚啊 看看这个对你吗?
太感谢了,已经很接近完美了,
不过批量选择的话,生成的文字位置就不对了
最佳答案非你莫属 可以参考一下ET中burst.lsp
页:
[1]
2