hhhlike 发表于 2012-5-5 21:26:47

属性块中某个属性转成文字

本帖最后由 hhhlike 于 2012-5-5 21:47 编辑

拿出我所有的币,想把属性块中某个属性转成单行文字
菜鸟研究了半天都没搞定,请哪位高手伸出援助之手

wwwbxd 发表于 2012-5-5 21:26:48

怎么不在标题里说清楚啊 看看这个对你吗?
(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 21:55:24

本帖最后由 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)
)

hhhlike 发表于 2012-5-5 22:12:53

caoyin 发表于 2012-5-5 21:55 static/image/common/back.gif
这个不是针对块的属性,因为实现对块属性的转换会有很多问题,涉及到块重定义

;;将属性定义(ATTDEF)转化 ...

曹版,这个也处理不了
提示“未发现任何属性定义对象”

caoyin 发表于 2012-5-5 22:20:28

这个不是针对块的属性,因为实现对块属性的转换会有很多问题,涉及到块重定义

wwwbxd 发表于 2012-5-5 22:20:33

(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:22:35

wwwbxd 发表于 2012-5-5 22:20 static/image/common/back.gif


看看我这个行不行

hhhlike 发表于 2012-5-5 22:36:52

wwwbxd 发表于 2012-5-5 22:22 static/image/common/back.gif
看看我这个行不行

很好了,不过我只想要一个“length"
就是那个数字

hhhlike 发表于 2012-5-5 23:02:58

wwwbxd 发表于 2012-5-5 22:48 static/image/common/back.gif
怎么不在标题里说清楚啊 看看这个对你吗?

太感谢了,已经很接近完美了,
不过批量选择的话,生成的文字位置就不对了
最佳答案非你莫属

自贡黄明儒 发表于 2012-5-6 13:51:13

可以参考一下ET中burst.lsp
页: [1] 2
查看完整版本: 属性块中某个属性转成文字