王与韩1 发表于 2014-7-30 09:12:38

能否实现同一DWG文件内的链接

RT,能不能实现在图纸内点击一文字,即得到同一图纸内相对应的图块或文字

榨菜人生 发表于 2023-11-3 12:24:53

edata 发表于 2014-7-30 17:51


一个文字可以链接多个图形吗?谢谢!

edata 发表于 2014-7-30 10:53:43

得到的是什么,文字内容,图块名称,还是。。。。不清楚意图。

etoxp 发表于 2014-7-30 11:15:50

是不是说的视图跳转?

masterlong 发表于 2014-7-30 12:24:59

“链接规则以及链接后处理”要清楚
比如
dwg内含有多张图纸以及目录
点击目录条目
视窗转换到对应图纸

要求清楚了
程序并不难
但是通用基本不可能

王与韩1 发表于 2014-7-30 16:07:41

masterlong 发表于 2014-7-30 12:24 static/image/common/back.gif
“链接规则以及链接后处理”要清楚
比如
dwg内含有多张图纸以及目录


就是这个意思,从目录文字跳往图纸,通用是什么意思,从文字跳往图块?

edata 发表于 2014-7-30 16:47:59

通用则需要适合每个人的需要。
一般地,目录文字跳转图块还算是比较好处理的。可以手动链接两个对象的句柄值。使用程序的时候选择了连接的目录文字,自动寻找对应句柄,低版本计算外框值,缩放视图即可,高版本直接 zoom o 。。。

王与韩1 发表于 2014-7-30 16:54:09

edata 发表于 2014-7-30 16:47 static/image/common/back.gif
通用则需要适合每个人的需要。
一般地,目录文字跳转图块还算是比较好处理的。可以手动链接两个对象的句柄 ...

虽不明,但觉厉...大神可否写点程序

masterlong 发表于 2014-7-30 17:32:27

其实就是通过某种方式获取一些"特征"
再根据"特征"搜寻符合特征的其它数据
再进行相应的处理
就好比文字查找替换这一类的程序
其实也是一样的思路

正因为可以有非常多的可能
所以通用是不可能的
只能具体要求具体解决

edata 发表于 2014-7-30 17:51:18

本帖最后由 edata 于 2014-7-30 18:02 编辑

;;图形内链接跳转
;;code by edata @ mjtd.com 2014-7-30
;;首次执行将选择提示选择对象并关联对象
;;再次选择关联的对象将相互跳转
;;关联跳转
(defun c:tt(/ ss en en2 en2_h5 en_h5 sk_link)
(prompt "\n请选择关联对象:")
(if(setq ss(ssget ":E:S" ));'((0 . "*text"))))
    (progn
      (setq en(ssname ss 0))
      (setq en_h5(sk_dxf en 5))
      (if(and (setq sk_link(vlax-ldata-get (vlax-ename->vla-object en) "sk_hplink")) (entget (handent sk_link)))
(progn
    (prompt "\n执行跳转.")
    (setvar 'cmdecho 0)
    (command "zoom" "o" (ssadd(handent sk_link)) "")
    (setvar 'cmdecho 1)
    )
(progn
    (if(setq en2(car(entsel "\n该对象无链接,请选择链接对象:")))
      (progn
      (setq en2_h5(sk_dxf en2 5))
      (vlax-ldata-put (vlax-ename->vla-object en) "sk_hplink" en2_h5)
      (vlax-ldata-put (vlax-ename->vla-object en2) "sk_hplink" en_h5)
      (prompt "\n链接完成.")
      )
      )
    )
)
      )
    )
(princ)
)
;;关联删除
(defun c:tt2(/ ss en sk_link en2)
(prompt "\n请选择需要删除关联的对象:")
(if(setq ss(ssget));'((0 . "*text"))))
    (while(setq en(ssname ss 0))            
      (if(setq sk_link(vlax-ldata-get (vlax-ename->vla-object en) "sk_hplink"))
(progn
    (prompt "\r删除........")
    (setq en2 (handent sk_link))   
    (vlax-ldata-delete (vlax-ename->vla-object en) "sk_hplink")
    (and (entget en2) (vlax-ldata-delete (vlax-ename->vla-object en2) "sk_hplink"))
    (prompt "\r删除完成....")
    )
(prompt "\r没有发现链接.")
)
      (setq ss (ssdel en ss))
      )
    )
(princ)
)
;;dxf组码获取函数
(defun sk_dxf(ent code)(cdr(assoc code (entget ent))))

王与韩1 发表于 2014-7-30 17:57:36

edata 发表于 2014-7-30 17:51 static/image/common/back.gif


谢谢哈,真大神也,这样看图就方便了许多
页: [1] 2
查看完整版本: 能否实现同一DWG文件内的链接