革天明 发表于 2012-7-26 12:23:30

继续顶,有高手在等到吗?

ORCHI 发表于 2012-7-26 21:20:37

illcyt 发表于 2012-7-26 08:36 static/image/common/back.gif
相同文字修改,你用find修改不就行了吗,或者很多类似find的插件可以查找替换修改的

find不行,因为图中可能只是某几个地方相关联,有些虽然一样但并不关联。
个人觉得反应器比较能符合实际需求。话说这个悬赏开的够高了,G版应该有兴趣搞搞吧。

仲文玉 发表于 2012-7-26 21:34:58

没多大用处吧,同一文字应该不会很多

lingduwx 发表于 2012-7-27 00:26:01

仲文玉 发表于 2012-7-26 21:34 static/image/common/back.gif
没多大用处吧,同一文字应该不会很多

但是这个对我来说用处就大着了
这个几个文字相关联的文件多了改起来就很方便,也许你说用find吧
可是我需要的做成一个模板,以后都可以用哦,呵呵
其实,我本来想找一个“关联复制”的程序的,所有东西关联复制之后都可以随便修改的,但这个可能难度更大,所以先单求一个文字关联算了。

illcyt 发表于 2012-7-27 08:29:15

ORCHI 发表于 2012-7-26 21:20 static/image/common/back.gif
find不行,因为图中可能只是某几个地方相关联,有些虽然一样但并不关联。
个人觉得反应器比较能符合实际 ...

find不是可以手动框选吗

Gu_xl 发表于 2012-7-27 09:35:40

本帖最后由 Gu_xl 于 2012-7-27 14:31 编辑



;;(c:wzgl) 相同文字关联
(defun c:wzgl(/ SS GROUPTAG N E EL OBJ HAND)
(setq ss (ssget ":L" '((0 . "*text")(-4 . "<not") (-3 ("WZGL")) (-4 . "not>") )))
(if ss
    (progn
      (setq groupTag (rtos (getvar 'cdate) 2 8))
      (regapp groupTag) (regapp "WZGL")
      (repeat (setq n (sslength ss))
(setq e    (ssname ss (setq n (1- n)))
       el   (entget e)
       el (append el (list (list -3 (list "WZGL" (cons 1000 groupTag))(list groupTag (cons 1000 groupTag)))))
       obj(vlax-ename->vla-object e)
       hand (cdr (assoc 5 el))
       )
       (entmod el)
(vlr-pers (VLR-Object-Reactor
      (list obj)
      (list groupTag hand)
      '((:VLR-modified . gxl-Text-Change)))) ;_ 添加永久反应器
)
      )
    )
(princ)
)
;;(c:qxwzgl) 取消文字关联
(defun c:qxwzgl (/ SS HANDS VLROBJECTS VLRDATA TAG TAGS HAND kd filter doc)
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
(initget "Sel All")
(setq kd
(cond
    ((getkword "\n取消文字关联选项[仅所选文字Sel/所选文字全部相关All]<All>"))
    ("All")
    )
)
(setq ss (ssget ":L" '((0 . "*text") (-3 ("WZGL")))))
(if ss
    (progn
      (if (= "All" kd)
(progn
   (gxl-sel-mapcar
   ss
   '(lambda (x / tag)
      (setq tag (cdr(cadadr(assoc -3 (entget x '("WZGL"))))))
(if (not (member tag tags)) (setq tags (cons tag tags)))
      )
   )
   (setq filter (mapcar '(lambda (x) (list -3(list "WZGL") (list x ))) tags))
(Setq ss (ssget "x"
   (append
       (list '(0 . "*text") '(-4 . "<or"))
       filter
       '((-4 . "or>"))
       )
   )
       )
   )
)
      (setq hands (gxl-sel-mapcar ss '(lambda (X) (gxl-dxfx 5))))
   (setq vlrobjects (car(vlr-reactors :VLR-Object-Reactor))) ;_ 获取图形全部对象反应器
   (foreach vlr(cdr vlrobjects) ;_ 过滤其他对象反应器
       (if
(and
    (setq vlrdata (vlr-data vlr))
    (= 'list (type vlrdata))
    (setq tag (car vlrdata))
    (setq hand (cadr vlrdata))
    )
   (progn
   (if (member hand hands)
       (progn
(vlr-owner-remove vlr (vla-HandleToObject doc hand))
)
       )
   )
   )
       )
      (gxl-sel-mapcar
ss
'(lambda (x / a)
    (if (setq a (assoc -3 (entget x '("WZGL"))))
      (entmod
    (append (entget x)
   (list (list -3 '("WZGL") (list (cdr(cadadr a)))))
   )
    )
      )
    )
)
      )
    )
(princ)
)
;;gxl-Text-Change 回调函数
(defun gxl-Text-Change (TEXT-OBJECT
       REACTOR-OBJECT      PARAMETER-LIST
       /   DATA      TAGHAND
       STRINGSS      VLROBJECTSVLRDATA
       N vlrs Hands e)
(setq data (vlr-data Reactor-Object)
tag (car data)
hand (cadr data)
string (vla-get-textstring Text-Object)
)
(setq ss (ssget "x" (list '(0 . "*text") (list -3 (list tag)))))
(ssdel (vlax-vla-object->ename Text-Object) ss)
(setq vlrobjects (car(vlr-reactors :VLR-Object-Reactor))) ;_ 获取图形全部对象反应器
(foreach vlr (cdr vlrobjects) ;_ 过滤其他对象反应器
    (if
      (and
(setq vlrdata (vlr-data vlr))
(= 'list (type vlrdata))
(= (car vlrdata) tag)
(/= (cadr vlrdata) hand)
)
      (progn
      (setq vlrs (cons vlr vlrs))
      (setq Hands (cons (cadr vlrdata) Hands))
      (vlr-remove vlr) ;_ 禁用text的对象反应器,防止嵌套调用反应器,导致系统崩溃
      )
      )
    )
(if (> (setq n (sslength ss)) 0)
    (repeat n
      (vla-put-textstring (vlax-ename->vla-object (setq e (ssname ss (setq n (1- n))))) string)
      (if (not (member (setq hand (cdr (assoc 5 (entget e)))) Hands))
(vlr-pers (VLR-Object-Reactor
      (list (vlax-ename->vla-object e))
      (list tag hand)
      '((:VLR-modified . gxl-Text-Change))))
) ;_ 添加永久反应器,使得被复制的对象可以自动添加反应器
      )
    )
;;恢复启用反应器
(foreach vlr vlrs (vlr-add vlr))
(princ)
)
(defun gxl-dxf (ent i)
    (cond ((= (type ent) 'ename)
   (cdr (assoc i (entget ent '("*"))))
      )
   ((= (type ent) 'list)
    (cdr (assoc i ent))
    )
    ) ;_ if
)
(defun gxl-Sel-Mapcar (ss Fun / nn rtn)
(if ss
(repeat (setq nn (sslength ss))
(setq rtn (cons (apply Fun (list (ssname ss (setq nn (1- nn))))) rtn))
    )
    )
)


lz123456 发表于 2012-7-27 11:33:37

本帖最后由 lz123456 于 2012-7-27 11:34 编辑

G版,文字关联后,如果再用那命令选择到了那原来关联了的文字,CAD就崩溃了,最好是能过滤掉或者提供个选项去掉关联

s4ns4n 发表于 2012-7-27 11:46:47

标高问题想解决啊

myjping 发表于 2012-7-27 11:50:18

本帖最后由 myjping 于 2012-7-27 11:54 编辑

不错,很好用,但应该加个消除关联的
同时在关联的两个文字间应加个东东标识,比如相关联的形成组,组散了就不关联了,组另复制后,只有组内的关联

s4ns4n 发表于 2012-7-27 12:42:21

Gu_xl 发表于 2012-7-27 09:35 static/image/common/back.gif


关联后移动会带动其他联动文字。移动关联文字和其他物体时,其他物体会产生丢失现象
页: 1 2 3 [4] 5 6 7 8 9 10 11 12 13
查看完整版本: 寻求相同文字内容关联程序!!!