明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: lingduwx

寻求相同文字内容关联程序!!!

  [复制链接]
 楼主| 发表于 2012-7-27 13:20 | 显示全部楼层
Gu_xl 发表于 2012-7-27 09:35
[/post]

G版出手就是不一样啊,
不过小弟现在发现一个小问题,就是再次用此命令选择已关联字体时,CAD出现错误后关闭,
另外一个问题就是再次复制关联的文字时,偶想要默认是关联的,但是也可以输入N不关联,望G版解决一下,谢谢
回复

使用道具 举报

发表于 2012-7-27 13:39 | 显示全部楼层
;;;;我也写了一个,添加关联用addgl,删除关联用delgl,显示关联用xsgl,复制文本不能产生关联。
我用的是命令反应器,只有一个反应器,不会使CAD崩溃。
ddedit命令结束时触发反应器。

(vl-load-com)
(if (not txt_gl)
    (setq txt_gl (VLR-Command-Reactor
                      nil
                      '((:VLR-commandEnded . GL-CALL))
                    )
    )
  )
;;;*********************************************************
(defun c:addgl ( / GLEDS GLS HANDS NEW_GL SS X txt)
  (if (setq ss (ssget '((0 . "*TEXT"))))
    (progn
      (setq ss (OSS->VL-LIST ss))
      (setq hands (mapcar 'vla-get-handle ss))
      (setq gls (FENXI-GL hands))
      (if gls
        (progn
          (setq gleds (vlax-ldata-list "CS_GUANLIAN"))
          (mapcar '(lambda (x)
                     (vlax-ldata-delete "CS_GUANLIAN" x)
                   )
                  gls
          )
;;;删除旧的关联
          (setq        new_gl (mapcar '(lambda        (x / tmp)
                                  (cdr (assoc x gleds))
                                )
                               gls
                       )
          )
          (setq        new_gl (mapcar '(lambda        (x)
                                  (mapcar 'car x)
                                )
                               new_gl
                       )
          )
          (setq new_gl (apply 'append new_gl))
          (setq new_gl (append new_gl hands))
          (setq new_gl (remove-same new_gl))
        )
        (setq new_gl hands)
      )
      (setq txt (get-txt (car new_gl)))
      (mapcar '(lambda(x) (put-txt x txt)) new_gl)
      (put-gl new_gl)
      (princ "\n关联已经建立。")
    )
  )
  (princ)
)
;;;***********************************************************
(defun c:delgl (/ GLEDS GLS HANDS NEW_GL SS X)
  (if (setq ss (ssget '((0 . "*TEXT"))))
    (progn
      (setq ss (OSS->VL-LIST ss))
      (setq hands (mapcar 'vla-get-handle ss))
      (setq gls (FENXI-GL hands))
      (if gls
        (progn
          (setq gleds (vlax-ldata-list "CS_GUANLIAN"))
          (mapcar '(lambda (x)
                     (vlax-ldata-delete "CS_GUANLIAN" x)
                   )
                  gls
          )
;;;删除旧的关联
          (setq        new_gl (mapcar '(lambda        (x / tmp)
                                  (cdr (assoc x gleds))
                                )
                               gls
                       )
          )
          (setq        new_gl (mapcar '(lambda        (x)
                                  (mapcar 'car x)
                                )
                               new_gl
                       )
          )
          (setq new_gl (apply 'append new_gl))
          (foreach item        hands
            (setq new_gl (vl-remove item new_gl))
          )
          (if (> (length new_gl) 1)
            (put-gl new_gl)
          )
          (princ "\n关联已经解除。")
        )
      )
    )
  )
  (princ)
)
;;;*********************************************************
(defun c:xsgl ( / ENT ENTS GLEDS HAND HANDS X)
  (if (setq ent (car (entsel)))
    (progn
      (setq ent (vlax-ename->vla-object ent))
      (setq hand (vla-get-handle ent))
      (setq gleds (vlax-ldata-list "CS_GUANLIAN"))
      (setq gleds (mapcar '(lambda        (x)
                                  (mapcar 'car (cdr x))
                                )
                               gleds
                       )
            )
      (setq gleds (vl-remove nil (mapcar '(lambda(x) (if (member hand x) x)) gleds)))
      (if gleds
        (progn
          (setq hands (car gleds))
          (setq ents (vl-remove nil (mapcar 'handent hands)))
          (setq ents (mapcar 'vlax-ename->vla-object ents))
          (mapcar '(lambda(x) (vla-Highlight x :vlax-true)) ents)
          )
        )
      )
    )
(princ)
  )
;;;**************************************************************
(defun gl-call (aaa bbb / BJ_JG GLEDS GLS HANDS KEY OLD_GL TMP X Y)
  (if (= "DDEDIT" (strcase (car bbb)))
    (progn
      (setq gleds (vlax-ldata-list "CS_GUANLIAN"))
      (setq hands (mapcar '(lambda (x)
                             (cons (car x) (mapcar 'car (cdr x)))
                           )
                          gleds
                  )
      )
      (setq
        gls (mapcar
              '(lambda (x)
                 (cons (car x)
                       (vl-remove nil
                                  (mapcar
                                    '(lambda (y)
                                       (if (setq tmp (get-txt y))
                                         (cons y tmp)
                                       )
                                     )
                                    (cdr x)
                                  )
                       )
                 )
               )
              hands
            )
      )
      (foreach item gls
        (setq key  (car item)
              item (cdr item)
        )
        (setq old_gl (cdr (assoc key gleds)))
        (setq tmp
               (vl-remove
                 nil
                 (mapcar '(lambda (x)
                            (if        (/= (cdr x) (cdr (assoc (car x) old_gl)))
                              (cdr x)
                            )
                          )
                         item
                 )
               )
        )
        (if tmp
          (progn
            (vlax-ldata-delete "CS_GUANLIAN" key)
            (setq bj_jg (last tmp))
            (setq item (mapcar '(lambda        (x)
                                  (put-txt (car x) bj_jg)
                                  (car x)
                                )
                               item
                       )
            )
            (put-gl item)
          )
        )
      )
    )
  )
  (princ)
)

;;;*********************************************************
(defun oss->vl-list (ss / I OUT TMP)
  (setq        i   -1
        out '()
  )
  (repeat (sslength ss)
    (setq tmp (ssname ss (setq i (1+ i))))
    (setq tmp (vlax-ename->vla-object tmp))
    (setq out (cons tmp out))
  )
  (reverse out)
)

;;;*********************************************************
(defun put-gl (lst / GL_DATA KEY TMP X)
  (if (> (length lst) 1)
    (progn
      (setq key (car lst))
      (setq gl_data (vl-remove nil
                               (mapcar '(lambda        (x / tmp)
                                          (if (setq tmp (GET-TXT x))
                                            (cons x tmp)
                                          )
                                        )
                                       lst
                               )
                    )
      )
      (vlax-ldata-put "CS_GUANLIAN" key gl_data)
    )
  )
  (princ)
)
;;;********************************************************
(defun fenxi-gl (lst / GLEDS OUT X Y)
  (setq gleds (vlax-ldata-list "CS_GUANLIAN"))
  (setq gleds (mapcar '(lambda(x)
                         (mapcar 'car (cdr x)))
                      gleds))
  (setq out (vl-remove nil
              (mapcar '(lambda(x)
                       (vl-remove nil
                         (mapcar '(lambda(y)
                                  (if (member x y) (car y))
                                  )
                               gleds)
                         )
                       )
                    lst)
              )
        )
  (remove-same (apply 'append out))
  )
;;;***************************************************
(defun remove-same (lst / OUT TMP)
  (setq out '())
  (while lst
    (setq tmp (car lst))
    (setq out (cons tmp out))
    (setq lst (vl-remove tmp lst))
  )
  (reverse out)
)
;;;****************************************************
(defun get-txt (hand / TMP)
  (if (and (setq tmp (handent hand))
           (setq tmp (vlax-ename->vla-object tmp))
           (not (vlax-erased-p tmp))
           )
    (vla-get-textstring tmp)
    )
  )
;;;****************************************************
(defun put-txt (hand txt / TMP)
  (if (and (setq tmp (handent hand))
           (setq tmp (vlax-ename->vla-object tmp))
           (not (vlax-erased-p tmp))
           )
    (vla-put-textstring tmp txt)
    )
  )

点评

兄弟,顶你,因为只有一个最佳答案,所以不好意思,30 币送上,略表心意  发表于 2012-7-29 18:08

评分

参与人数 3明经币 +5 金钱 +85 收起 理由
yoyoho + 1 + 50 赞一个!
lingduwx + 1 + 5 哎,怎么评分显示 明经币评分区0~1 ,今日剩.
Gu_xl + 3 + 30 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2012-7-27 14:37 | 显示全部楼层
lingduwx 发表于 2012-7-27 13:20
G版出手就是不一样啊,
不过小弟现在发现一个小问题,就是再次用此命令选择已关联字体时,CAD出现错误后 ...

35楼代码已更新!
修正了已关联的物体再次关联时出错的问题!
增加取消关联命令: QXWZGL!关联后的文字被复制后,只要将原关联文字原位移动一下,或编辑一下,就自动关联!若不想关联,用取消关联命令选中复制的文字取消即可!
回复

使用道具 举报

发表于 2012-7-27 14:46 | 显示全部楼层
顺路问下,有没有可以关联数字的哪?就像EXCEL中运算那样

点评

论坛找一下,前几天我发过源码的!  发表于 2012-7-27 14:56
回复

使用道具 举报

发表于 2012-7-27 16:27 | 显示全部楼层

本帖最后由 myjping 于 2012-7-27 16:36 编辑

试用了lijiao 和Gu_xl各有优势:
Gu_xl可在属性里修改文字,lijiao 只能双击修改
lijiao 可以关联后再关联即多重关联,Gu_xl只可一重
希望二们多改动,弄点经典的东东
别我坚持我的观点,相关联的成组,复制后不关联,命令越少越好
回复

使用道具 举报

发表于 2012-7-27 17:45 | 显示全部楼层
myjping 发表于 2012-7-27 16:27
试用了lijiao 和Gu_xl各有优势:
Gu_xl可在属性里修改文字,lijiao 只能双击修改
lijiao 可以关联后再关联 ...

Gu_xl的可以正常运行,lrjiao的不能,06机械版,只能实现文字内容一样,改动一个其它的不变
回复

使用道具 举报

发表于 2012-7-27 17:51 | 显示全部楼层
Gu_xl 发表于 2012-7-27 09:35
[/post]

G版你好!程序试用发现后只能一组一组的关联,我希望能实现“入党”功能,也就是A,B, C,是一组了,这时D也想加入,如何实现?目前我只使用一组,但组内成员的数量不定,希望能进群,也能退群
回复

使用道具 举报

发表于 2012-7-27 17:55 | 显示全部楼层
lijiao 发表于 2012-7-27 13:39
;;;;我也写了一个,添加关联用addgl,删除关联用delgl,显示关联用xsgl,复制文本不能产生关联。
我用的是 ...

你好!试用后发现不能实现关联,只能实现一次文字内容相同,也就是“文字内容刷”,可以实现“进群”,G版的不能加入新成员,有时间再修改一下,造福全人类
回复

使用道具 举报

发表于 2012-7-27 18:56 来自手机 | 显示全部楼层
革天明 发表于 2012-7-27 17:55
你好!试用后发现不能实现关联,只能实现一次文字内容相同,也就是“文字内容刷”,可以实现“进群”,G版 ...

这个很容易,你把程序看懂了,实现这个用不了三五句代码,这个作为你的思考题,慢慢琢麽吧!
回复

使用道具 举报

 楼主| 发表于 2012-7-27 20:53 | 显示全部楼层
Gu_xl 发表于 2012-7-27 14:37
35楼代码已更新!
修正了已关联的物体再次关联时出错的问题!
增加取消关联命令: QXWZGL!关联后的文字 ...

非常感谢G版,程序非常不错,
现在就是想怎么把悬赏的150给你啊
悬赏的那儿我一直点不了

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 01:38 , Processed in 0.152579 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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