找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 614|回复: 1

[LISP函数]:在选中的文本前面加如字符

[复制链接]
发表于 2003-7-27 12:55:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
ACAD里面有个chtext.lsp但是好像只能匹配字符批量修改,如果想要批量加入字头的话,自己改编了它一下。

addtxt.lsp  


;;本文件用于批处理DWG图形中的文本内容,是从AUTOCAD自带的chtext.lsp中
;;简化出来的,功能是在所有选中的元素中搜索出独立的文本元素,并在它们
;;内容的前面增加输入的字符串。
;;命令行是CTB

(defun c:ctB (/ last_o tot_o ent o_str n_str st s_temp n_slen o_slen si chf chm cont ans class)
                       
                                                                  ;; Select objects if running standalone
  
  (setq objs (ssget))                                                ;;选择元素集合

  (setq chm 0)                                                               ;统计修改次数
  (if objs                        
    (progn                                                      ;; If any objects selected
      (if (= (type objs) 'ENAME)                                       ;如果objs为一个实体名
        (progn
          (setq ent (entget objs))                                     ;将以OBJS为名的表抽出放入ENT
          (princ (strcat "\nExisting string: " (cdr (assoc 1 ent))))
        )                                                        ;搜出ENT中的文字内容
        (if (= (sslength objs) 1)                                ;又或OBJS集合里只有一个内容
          (progn
            (setq ent (entget (ssname objs 0)))                 ;将集里的东西的表抽出
            (princ (strcat "\nExisting string: " (cdr (assoc 1 ent))))
          )                                                        ;将其文字内容搜出来
        )
      )
      
      (setq n_str (getstring "\nNew string     : " t))                ;输入!
      (setq n_slen (strlen n_str))                                ;求输入的字长
      (setq last_o 0
            tot_o  (if (= (type objs) 'ENAME)                ;tot_o设为集合的实体数量
                       1
                       (sslength objs)
                   )
      )
                                                                  ;; For each selected object...
      (while (< last_o tot_o)
            (setq class (cdr (assoc 0 (setq ent (entget (ssname objs last_o))))))
            (if (or (= "TEXT" class)                                ;ENT为被动手术的表
                    (= "MTEXT" class) )
              (progn
                (setq s_temp (cdr (assoc 1 ent)))                ;ENT中的文字内容
                (setq s_temp (strcat                                 ;如果相同,则重组文字内容
                              n_str s_temp)
                )
                (entmod (subst (cons 1 s_temp) (assoc 1 ent) ent));; 修正 the TEXT 实体
                (setq chm (1+ chm))                                ;统计修改次数
              )
            )
            (setq last_o (1+ last_o))                                ;做下一个目标的手术
      )                                                        ;; else go on to the next line...
        
                                                               
    )                                                        ;PROGN
  )                                                        ;IF
  
  (if (/= (type objs) 'ENAME)
                                                          ;; Print total lines changed
    (if (/= (sslength objs) 1)
      (princ (strcat (rtos chm 2 0) " text lines changed."))
    )
  )
  (terpri)
)
(princ "\n\t Add some new words ahead the text that you select!")
(princ "\n\tCTB command loaded.")
(princ)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-7-28 17:31:13 | 显示全部楼层
需要那么复杂吗?如果只是你题目要求的,试试下边的小程序:
(defun c:test ()
  (princ "\nSelect Text:")
  (setq ss (ssget))
  (vl-load-com)
  (setq n 0)
  (setq pre (getstring "\nType Prefix:"))
  (while (< n (sslength ss))
    (setq obj (vlax-ename->vla-object (ssname ss n)))
    (setq newt (strcat pre (vla-get-TextString obj)))
    (vla-put-TextString obj newt)
    (setq n (1+ n))
    )
  )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-26 14:29 , Processed in 0.355866 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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