乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 54|回复: 18

[编程交流] 替换对象(矩形)

[复制链接]

13

主题

46

帖子

33

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-5 16:35:43 | 显示全部楼层 |阅读模式
如何用命名块替换对象(矩形)并保留超链接。
可以做到吗?比吉·lisp?
 
Jaap公司
回复

使用道具 举报

55

主题

293

帖子

239

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2022-7-5 16:40:51 | 显示全部楼层
这真的很奇怪。
 
这项工作的目的是什么?
回复

使用道具 举报

13

主题

46

帖子

33

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-5 16:42:49 | 显示全部楼层
它用于dwf文件,为建筑集成系统制作屏幕。超链接已附加到块。有了一个属性,我希望它使超链接在纸/屏幕上可见,便于检查。
它不是一个网络地址,而是这样的东西:根,firemap。探测器2334.43
我使用Autocad Electrical,我可以把它放到excel中。
 
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-5 16:47:02 | 显示全部楼层
用命名块替换任何对象(本例中为矩形)很简单,前提是您已经规划了从原始对象提取所需的数据。例如,将在哪里插入命名块,即矩形的质心?
 
也就是说,这个超链接存储在哪里。。。在矩形还是块上?
 
如果在矩形上简单地选择矩形,计算插入点,插入命名块,提取超链接信息,并将其应用于块(可能需要一些变化的可见性状态才能使其显示在平面上?)。
 
希望这有帮助!
回复

使用道具 举报

13

主题

46

帖子

33

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-5 16:49:19 | 显示全部楼层
超链接连接到矩形。这是旧图纸中的情况。我想把它们转换成块,这样我就可以在块编辑器中编辑它们,并添加一些属性(TAG1等)以导出到Excel。Lisp程序很好,但问题是。。。当我选择所有要转换的矩形(大约80个)时,它们会从第一个选定的矩形中获得所有超链接。我想有一个块名块,但都有自己的超链接。
 
Jaap公司
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-5 16:52:33 | 显示全部楼层
 
发布您的代码。
回复

使用道具 举报

13

主题

46

帖子

33

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-5 16:58:26 | 显示全部楼层
  1. (defun c:CTB (/ ss adoc pt_lst center blk *error* lst bpat bname bi first)
  2. ;;;Each primitive in a separate named block
  3. (defun *error* (msg)
  4.    (vla-endundomark adoc)
  5.    (princ msg)
  6.    (princ)
  7.    ) ;_ end of defun
  8. (setq bpat "BIS-") ;_ <- Edit block name pattern here
  9. (vl-load-com)
  10. (vla-startundomark
  11.    (setq adoc (vla-get-activedocument (vlax-get-acad-object)))
  12.    ) ;_ end of vla-StartUndoMark
  13. (if (not (vl-catch-all-error-p
  14.             (vl-catch-all-apply '(lambda () (setq ss (ssget "_:L"))))
  15.             ) ;_ end of vl-catch-all-error-p
  16.           ) ;_ end of not
  17.    (progn
  18.      (mapcar '(lambda(item)
  19.      (setq
  20. ss (list item)
  21.        pt_lst (apply 'append
  22.                      (mapcar
  23.                        '(lambda (x / minp maxp)
  24.                           (vla-getboundingbox x 'minp 'maxp)
  25.                           (list (vlax-safearray->list minp)
  26.                                 (vlax-safearray->list maxp)
  27.                                 ) ;_ end of append
  28.                           ) ;_ end of lambda
  29.                        ss
  30.                        ) ;_ end of mapcar
  31.                      ) ;_ end of append
  32.        center (mapcar '(lambda (a b) (/ (+ a b) 2.))
  33.                       (list (apply 'min (mapcar 'car pt_lst))
  34.                             (apply 'min (mapcar 'cadr pt_lst))
  35.                             (apply 'min (mapcar 'caddr pt_lst))
  36.                             ) ;_ end of list
  37.                       (list (apply 'max (mapcar 'car pt_lst))
  38.                             (apply 'max (mapcar 'cadr pt_lst))
  39.                             (apply 'max (mapcar 'caddr pt_lst))
  40.                             ) ;_ end of list
  41.                       ) ;_ end of mapcar
  42. )
  43. (if (null first)
  44.   (progn
  45.     (setq
  46.       bname  
  47.      (progn
  48.        (setq bi 0)
  49.        (while (tblsearch "BLOCK" (setq bname (strcat bpat (itoa(setq bi(1+ bi)))))))
  50.        bname)
  51.       blk
  52.      (vla-add (vla-get-blocks adoc)
  53.                        (vlax-3d-point center)
  54.                        bname
  55.        )
  56.       ) ;_ end of setq
  57.    (vla-copyobjects
  58.        adoc
  59.        (vlax-make-variant
  60.          (vlax-safearray-fill
  61.            (vlax-make-safearray vlax-vbobject (cons 0 (1- (length ss))))
  62.            ss
  63.            ) ;_ end of vlax-safearray-fill
  64.          ) ;_ end of vlax-make-variant
  65.        blk
  66.        );_ end of vla-copyobjects
  67.     (setq first t)
  68.   )
  69. )
  70.    
  71.      (vla-insertblock
  72.        (vla-objectidtoobject adoc (vla-get-ownerid (car ss)))
  73.        (vlax-3d-point center)
  74.        (vla-get-name blk)
  75.        1.0
  76.        1.0
  77.        1.0
  78.        0.0
  79.        ) ;_ end of vla-insertblock
  80.   )
  81.   (setq
  82.        lst     (mapcar 'vlax-ename->vla-object
  83.                       (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
  84.                       ) ;_ end of mapcar
  85. )
  86.       )
  87.      
  88.      (mapcar 'vla-erase lst)
  89.      ) ;_ end of and
  90.    ) ;_ end of if
  91. (vla-endundomark adoc)
  92. (princ)
  93. )
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-5 17:00:30 | 显示全部楼层
圣诞快乐:
 
  1. (defun c:CTB  (/ ss mn mx insertPoint blockObj)
  2. (vl-load-com)
  3. (vla-startundomark
  4.    (cond
  5.      (*activeDoc*)
  6.      ((setq *activeDoc*
  7.              (vla-get-activedocument (vlax-get-acad-object))))))
  8. ;; Main code
  9. (if (setq ss (ssget "_:L" '((0 . "*POLYLINE"))))
  10.    (progn
  11.      (vlax-for x  (setq ss (vla-get-activeselectionset *activeDoc*))
  12.        ;; Calculate the centroid
  13.        (vla-getboundingbox x 'mn 'mx)
  14.        (setq insertPoint
  15.               (vlax-3d-point
  16.                 (mapcar '*
  17.                         (mapcar '+
  18.                                 (vlax-safearray->list mn)
  19.                                 (vlax-safearray->list mx))
  20.                         '(0.5 0.5 0.5))))
  21.        ;; Insert block
  22.        (setq blockObj
  23.               (vla-insertblock
  24.                 (if (= "MODEL" (strcase (getvar 'ctab)))
  25.                   (cond (*modelSpace*)
  26.                         ((setq *modelSpace*
  27.                                 (vla-get-modelspace *activeDoc*))))
  28.                   (cond (*paperSpace*)
  29.                         ((setq *paperSpace*
  30.                                 (vla-get-paperspace *activeDoc*)))))
  31.                 insertPoint
  32.                 "[color=red]blockName[/color].dwg" [color=seagreen]; <- Include file path if not in support path[/color]
  33.                 1.
  34.                 1.
  35.                 1.
  36.                 0.))
  37.        ;; Place block on original object's layer
  38.        (vla-put-layer blockObj (vla-get-layer x))
  39.        ;; Extract hyperlink and add to block
  40.        (vlax-for link (vla-get-hyperlinks x)
  41.          (vlax-invoke
  42.            (vla-get-hyperlinks blockObj)
  43.            'add
  44.            (vla-get-url link)
  45.            (vla-get-urldescription link)
  46.            ""))
  47.        ;; Delete original object
  48.        (vla-delete x))
  49.      ;; Delete selection set
  50.      (vla-delete ss))
  51.    (prompt "\n  <!>  Nothing Selected  <!> "))
  52. (vla-endundomark *activeDoc*)
  53. (princ))

 
 
-圣诞老人的小精灵
173545naxd3s9i0qdd9xag.jpg
回复

使用道具 举报

13

主题

46

帖子

33

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-5 17:03:28 | 显示全部楼层
哇!效果完美。是否有lisp将附加的超链接放入具有选定块的te tag HYPERILNK的属性?
 
 
Jaap公司
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-5 17:08:21 | 显示全部楼层
 
谢谢
 
一个单独的Lisp程序?还是作为其中的一部分?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 15:51 , Processed in 2.549969 second(s), 74 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表