明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3348|回复: 8

[求助]求批量属性文字转文字

[复制链接]
发表于 2007-2-12 15:19:00 | 显示全部楼层 |阅读模式

就是还没定义块前的属性文字

转成单行或多行文字都可

发表于 2007-2-12 21:27:00 | 显示全部楼层
估计这段对你有用
  1. ((= (cdr (assoc 0 ENTS)) "INSERT")
  2.     (setq J (+ J 1))
  3.     (princ (strcat "\n正在处理第<"
  4.      (itoa (+ J 1))
  5.      ">个图元,请稍候..."
  6.     )
  7.     )
  8.     (setq ENTB (tblobjname "block" (cdr (assoc 2 ENTS))))
  9.     (setq ENTSB (entget ENTB))
  10.     ;;放过特殊情况
  11.     ;;2007-01-25修改为在说明中找指定文字
  12.     (if (vl-string-search
  13.    "SPECIAL TEXTSTYLE"
  14.    (if (cdr (assoc 4 ENTSB))
  15.      (cdr (assoc 4 ENTSB))
  16.      ""
  17.    )
  18.         )
  19.       (setq LOOP NIL)
  20.       (progn
  21.         ;;如果是属性块,ENT,如果不是,ENTB
  22.         (if (assoc 66 ENTS)
  23.    (setq ENT (entnext ENT))
  24.    (setq ENT (entnext ENTB))
  25.         )
  26.         (setq LOOP t)
  27.       )
  28.     )
  29.     ;;以下处理INSERT中的属性文字
  30.     ;;取得块的插入点
  31.     ;;进入块中图元的循环
  32.     (while
  33.       (and ENT LOOP)
  34.        (setq ELIST (entget ENT))
  35.        ;;以下开始处理
  36.        (if (or (= (cdr (assoc 0 ELIST)) "TEXT")
  37.         (= (cdr (assoc 0 ELIST)) "ATTRIB")
  38.     )
  39.   ;;以下IF语句是2007-1-16加入的,对字体是SM的情况加以减化
  40.   (if (/= (cdr (assoc 7 ELIST)) "SM")
  41.     ;;如果图元是TEXT或ATTRIB,进行以下处理
  42.     (progn
  43.       (setq TXB (textbox ELIST))
  44.       ;;得到旧的文字总宽度
  45.       (setq
  46.         OLD_WIDTH (- (car (cadr TXB)) (car (car TXB)))
  47.       )
  48.       ;;得到旧的文字总宽度
  49.       (setq ELIST
  50.       (subst (cons 7 "SM") (assoc 7 ELIST) ELIST)
  51.       )
  52.       (setq ELIST (subst (cons 41 0.7)
  53.            (assoc 41 ELIST)
  54.            ELIST
  55.     )
  56.       )
  57.       (entmod ELIST)
  58.       (entmod ENTS)
  59.       (setq TXB (textbox ELIST))
  60.       ;;得到文字宽度
  61.       (setq
  62.         NEW_WIDTH (- (car (cadr TXB)) (car (car TXB)))
  63.       )
  64.       ;;如果新的文字宽度比旧的文字宽度宽,则对文字宽度进行修改
  65.       (if (> NEW_WIDTH OLD_WIDTH)
  66.         (setq ELIST
  67.         (subst (cons 41 (* 0.7 (/ OLD_WIDTH NEW_WIDTH)))
  68.         (assoc 41 ELIST)
  69.         ELIST
  70.         )
  71.         )
  72.       )
  73.     )
  74.     ;;如果字体是SM,保证其宽度比例不能超过0.7
  75.     (if (> (cdr (assoc 41 ELIST)) 0.7)
  76.       (setq ELIST
  77.       (subst (cons 41 0.7) (assoc 41 ELIST) ELIST)
  78.       )
  79.     )
  80.   )
  81.        )
  82.        (entmod ELIST)
  83.        (setq ENT (entnext ENT))
  84.        (if ENT
  85.   (if (= (cdr (assoc 0 (entget ENT))) "SEQEND")
  86.     (setq LOOP NIL)
  87.   )
  88.        )
  89.     )
  90.     (if (not (assoc 66 ENTS))
  91.       (entmod ENTSB)
  92.     )
  93.     (entmod ENTS)
  94.    )
 楼主| 发表于 2007-2-13 10:56:00 | 显示全部楼层

不是很懂这个。。。

na

发表于 2007-2-14 07:50:00 | 显示全部楼层
  1. ;;求批量屬性文字轉文字
  2. ;;就是還沒定義塊前的屬性文字
  3. ;;By LUCAS
  4. (defun C:CH_ATTDEF_TXT (/ LST N SS X)
  5.   (prompt "\nSelect "Attdef" Objects: ")
  6.   (if (setq SS (ssget '((0 . "ATTDEF"))))
  7.     (progn
  8.       (setq N 0)
  9.       (repeat (sslength SS)
  10. (setq LST '((0 . "TEXT")))
  11. (mapcar
  12.    '(lambda (X)
  13.       (if (not (member (car X) '(-1 2 0 330 5 1 3 70 74 100)))
  14.         (setq LST (cons X LST))
  15.         (if (= (car X) 2)
  16.    (setq LST (cons (cons 1 (cdr X)) LST))
  17.         )
  18.       )
  19.     )
  20.    (entget (ssname SS N))
  21. )
  22. (setq LST (reverse LST)
  23.        N   (1+ N)
  24. )
  25. (entmake LST)
  26.       )
  27.       (command "_.erase" SS "")
  28.     )
  29.   )
  30.   (princ)
  31. )
  32. (princ "\nType Ch_Attdef_Txt,By Lucas\n")
  33. (princ)
发表于 2007-2-14 14:13:00 | 显示全部楼层
本帖最后由 作者 于 2007-2-14 14:25:18 编辑

06年以前好像也写过,这个是在我电脑上找到的,不象是我自己写的
  1. ;; 属性转文本 
  2. (defun C:TAG2TXT ()
  3.   (setq sset (ssget '((0 . "ATTDEF"))))
  4.   (setq num (sslength sset) itm 0)
  5.   (while (< itm num)
  6.     (setq hnd (ssname sset itm))
  7.     (setq ent (entget hnd))
  8.     (setq new '((0 . "TEXT")))
  9.     (setq new (append new (list (cons 1 (cdr (assoc 2 ent))))))
  10.     (setq dolst (list 7 8 10 11 39 40 41 50 51 62 71 72 73))
  11.     (foreach grp dolst
  12.       (setq addto (assoc grp ent))
  13.       (if (/= addto nil)
  14.         (setq new (append new (list (assoc grp ent))))
  15.       )
  16.     )
  17.     (entdel hnd)
  18.     (entmake new)
  19.     (setq itm (1+ itm))
  20.   )
  21.   (princ)
  22. )
 楼主| 发表于 2007-2-14 21:40:00 | 显示全部楼层
谢谢楼上的2位朋友,这程序解决了大忙了
发表于 2007-2-14 23:46:00 | 显示全部楼层
用CAD扩展工具好了。那里就有。
 楼主| 发表于 2007-2-15 21:25:00 | 显示全部楼层

回楼上的

那个是定义块后的  

发表于 2013-1-1 11:31:38 | 显示全部楼层
我是来求工具的 ,我也需要这个,还没学习好 代码怎么用呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-6-2 18:06 , Processed in 0.173926 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表