ly8zx2109 发表于 2013-5-7 08:39:04

替换属性块中的文字,求完善程序

本帖最后由 ly8zx2109 于 2013-5-10 09:41 编辑


替换属性块中的文字,求完善程序,自己编的小程序,不是很好,没找到哪里有错误,求高手帮忙修改一下,谢谢。

ly8zx2109 发表于 2013-5-9 14:39:36

文字部分可以,就是属性块还是不循环,只是修改一个。

本帖最后由 ly8zx2109 于 2013-5-10 09:41 编辑


ZZXXQQ 发表于 2013-5-7 08:39:05


;替换文字和属性指定内容 明经 ZZXXQQ 2013.5.9
(vl-load-com)
(defun c:11()
(SETVAR "CMDECHO" 0)
(setq SS (ssget "X" (list (cons 0 "INSERT,TEXT"))));;;附带处理单行文本
(setq S1 (ssget "P" '((0 . "INSERT") (66 . 1))));;;过滤出属性块
(vl-cmdf "SELECT" SS "")
(SETQ S88 (SSGET "P" '((0 . "TEXT"))));;;过滤出文本
(setq i -1)
(setq s2 (ssname s1 0))
(setq s20 (getstring "\n请输入要查找的文本内容:"))
(setq s21 (getstring "\n请输入要替换的文本内容:"))
(if s88 (progn
(repeat (sslength s88)
   (setq s83 (entget (ssname s88 (setq i (1+ i)))))
   (setq s84 (cdr (assoc 1 s83)))
   (if (vl-string-search s20 s84)
    (entmod (subst (cons 1 (vl-string-subst s21 s20 s84)) (assoc 1 s83) s83))
   )
)
))
(if s1 (progn
(setq i -1)
(repeat (sslength S1)
   (setq ENT (entget (ssname S1 (setq I (1+ I))))
         ENT1 ENT)
   (while (/= (cdr(assoc 0 (setq ENT1 (entget(entnext(cdr(assoc -1 ENT1))))))) "SEQEND")
    (if (= (cdr(assoc 0 ENT1)) "ATTRIB") (progn
   (setq s15 (cdr(assoc 1 ent1)))
   (if (vl-string-search s20 s15) (progn
      (entmod (subst (cons 1 (vl-string-subst s21 s20 s15)) (assoc 1 ent1) ent1))
      (entmod ent)
   ))
    ))
   )
)
))
(terpri)
(SETVAR "CMDECHO" 1)
(princ)
)

ly8zx2109 发表于 2013-5-7 08:39:43

本帖最后由 ly8zx2109 于 2013-5-9 14:42 编辑

看楼下。

zyhandw 发表于 2013-5-7 10:22:15

图上全是属性块吗?如果不是的话,那s1中不是属性块的怎么处理呢?附上你的dwg来测试下吧

ly8zx2109 发表于 2013-5-7 16:10:44

附件已上传,谢谢

zyhandw 发表于 2013-5-8 14:40:17

思路上应该可以更简捷!给你推荐个严长老的,可能就是你想要的:http://bbs.mjtd.com/thread-94971-1-1.html

ly8zx2109 发表于 2013-5-8 17:05:28

本帖最后由 ly8zx2109 于 2013-5-8 17:11 编辑

还是谢谢你了,可 我想搞一个小程序,只是能换其中的文本,然后把他加入到批量执行的程序中,批量修改一批图纸,谢谢。其中的的程序可以借鉴一下。

ly8zx2109 发表于 2013-5-10 09:37:53

本帖最后由 ly8zx2109 于 2013-5-13 08:24 编辑

konoko 发表于 2013-5-11 11:55:33

谢谢Z大的指点。。
页: [1] 2 3
查看完整版本: 替换属性块中的文字,求完善程序