正文

以含有输入内容的文本坐标为基准,插入指定的图块2006-05-15 10:29:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/otot/14093.html

分享到:

;;以含有输入内容的文本坐标为基准,插入指定的图块
;;主要语句取材chtext.lsp

(defun c:Tb (/ last_o tot_o ent o_str n_str st s_temp n_slen o_slen si chf chm cont ans class ename sta_x sta_y pt name1 x_offset y_offset)
                      
;; Select objects if running standalone

  (setq name1 nil)
  (if obj_block
    (progn
      (princ "\n请点选将要插入的块(默认块为<")
      (princ obj_block )
      (princ ">):")  )
    (print "请点选将要插入的块:"))
  (while (= name1 nil)
    (progn
      (setq p1 (getpoint ))
      (if p1
 (progn
   (setq name1 (ssname (ssget p1) 0))
   (setq ent (entget name1))
   (setq obj_block_temp   (cdr (assoc 2 ent)))

   (if obj_block_temp (setq obj_block obj_block_temp)
     (print "没有图块被选中,重新选择")
     )

   )
 (if obj_block (setq name1 1))
 )
      )
    )

  (princ "\n\t你将插入的图块名称为:《")
  (PRINC obj_block)
  (princ "》")
 

  (princ "\n请框选作为基准坐标的文字范围")
  (setq objs (ssget (list(cons 0 "TEXT")(cons 100 "AcDbText"))))
  (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 o_str (getstring "\n匹配的字符内容   : " t))   ;匹配的字符内容输入!      (setq x_offset 0  y_offset 0)
      (setq x_offset (getint "\n输入“X”偏移量(整数): "))           ;输(整数)!
      (setq y_offset (getint "\n输入“Y”偏移量(整数): "))           ;输(整数)!
      (if (= x_offset nil) (setq x_offset 0))
      (if (= y_offset nil) (setq y_offset 0))
      (setq o_slen (strlen o_str))    ;求输入的字长
      (if (/= o_slen 0)      ;字长为非0
        (progn       ;则
          (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 ename (ssname objs last_o))
            (setq class (cdr (assoc 0 (setq ent (entget ename)))))
            (if (or (= "TEXT" class)    ;ENT为被动手术的表
                    (= "MTEXT" class) )
              (progn
                (setq chf nil si 1)
                (setq s_temp (cdr (assoc 1 ent)))  ;ENT中的文字内容
                (while (= o_slen (strlen (setq st (substr s_temp si o_slen))))
                  (if (= st o_str)    ;o_slen为输入旧的串的长
                    (progn     ;比较!

                      (setq chf t)       ;; 标记Found old string
                      (setq si (+ si o_slen))   ;指针往下跳
                    )
                    (setq si (1+ si))    ;若不同,则指针只跳一
                  )
                )
                (if chf
                  (progn                 ;; 替代 new string for old
                          ;; 开始插入块
                    (print "TEXT:")
                    (print (cdr (assoc 1 ent)))
      (setq class (cdr (assoc 10 ent)))
      (setq sta_x (car class)
     sta_y (car (cdr class)))
      (setq sta_x (+ sta_x x_offset))
      (setq sta_y (+ sta_y y_offset))     
      (setq pt (list sta_x sta_y))
                    (print "位置:")
                    (print pt)     
      (command "insert" obj_block pt "" "" "")
                    (setq chm (1+ chm))    ;统计修改次数
                  )
                )
              )
            )
            (setq last_o (1+ last_o))    ;做下一个目标的手术
          )
        )
               ;; else go on to the next line...
      )
    )
  )
  (print)
  (if (/= (type objs) 'ENAME)
            ;; Print total lines changed
    (if (/= (sslength objs) 1)
      (princ (strcat (rtos chm 2 0) " 个图块插入"))
    )
  )
  (terpri)
)
(PRINC "\n\t Insert the block on the text you select.")
(princ "\n\tTB command loaded.")
(princ)

阅读(3505) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册