乐筑天下

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

[编程交流] ObjectDBX:Vla AttachExternalR

[复制链接]

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:40:22 | 显示全部楼层 |阅读模式
使用ObjectDBX,我很难完成外部参照的附着(MS)和标题栏的插入(PS)。
 
具体来说,当使用dbx打开预设置标题栏图形(保存在PaperSpace中)时,尝试将外部参照附着成功,但仅附着到当前空间(PS),而不附着到其所属的模型空间(MS)。
 
尽管我努力使用(vla get modelspace dbx)作为vla AttachExternalReference的对象参数,或者通过单步执行选项卡来获取布局的块对象,如下所示:
 
  1. (defun c:FOO ( / dbx master)
  2. (vl-load-com)
  3. (if (setq dbx (vla-GetInterfaceObject
  4.                         (vlax-Get-Acad-Object)
  5.                         (strcat "ObjectDBX.AxDbDocument."
  6.                                 (substr (getvar 'acadver) 1 2))))
  7.    (progn
  8.      (vl-catch-all-apply 'vla-open (list dbx "C:\\my_titleblock.dwt"))
  9.      (vlax-for lay  (vla-get-layouts dbx)
  10.        (if (= "MODEL" (strcase (vla-get-name lay)))
  11.          (progn
  12.            (vla-attachexternalreference
  13.              (vla-get-block lay)
  14.              (setq master "C:\\my_xref.dwg")
  15.              (vl-filename-base master)
  16.              (vlax-3d-point '(0 0 0))
  17.              1
  18.              1
  19.              1
  20.              0
  21.              :vlax-true))))
  22.      (vl-catch-all-apply 'vla-saveas (list dbx "C:\\my_sheet.dwg"))
  23.      (setq dbx (vl-catch-all-apply 'vlax-Release-Object (list dbx)))))
  24. (princ))

 
任何帮助都将不胜感激!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:05:53 | 显示全部楼层
你好,Renderman,
 
这对我来说很好:
 
  1. (defun c:test ( / dbx title master ) (vl-load-com)
  2. (setq title  "C:\\my_titleblock.dwt"
  3.        master "C:\\my_xref.dwg"
  4. )
  5. (if
  6.    (and
  7.      (setq dbx    (LM:GetDocumentObject title))
  8.      (setq master (findfile master))
  9.    )
  10.    (progn
  11.      (vla-attachexternalreference (vla-get-modelspace dbx) master
  12.        (vl-filename-base master) (vlax-3d-point '(0 0 0)) 1. 1. 1. 0. :vlax-true
  13.      )
  14.      (vl-catch-all-apply 'vla-saveas (list dbx "C:\\my_sheet.dwg"))
  15.      (vl-catch-all-apply 'vlax-Release-Object (list dbx))
  16.    )
  17. )
  18. (princ)
  19. )
  20. ;;-----------------=={ Get Document Object }==----------------;;
  21. ;;                                                            ;;
  22. ;;  Retrieves a the VLA Document Object for the specified     ;;
  23. ;;  filename. Document Object may be present in the Documents ;;
  24. ;;  collection, or obtained through ObjectDBX                 ;;
  25. ;;------------------------------------------------------------;;
  26. ;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
  27. ;;------------------------------------------------------------;;
  28. ;;  Arguments:                                                ;;
  29. ;;  filename - filename for which to retrieve document object ;;
  30. ;;------------------------------------------------------------;;
  31. ;;  Returns:  VLA Document Object, else nil                   ;;
  32. ;;------------------------------------------------------------;;
  33. (defun LM:GetDocumentObject ( filename / docs dbx ) (vl-load-com)
  34. (vlax-map-collection (vla-get-Documents (vlax-get-acad-object))
  35.    (function
  36.      (lambda ( doc )
  37.        (setq docs
  38.          (cons
  39.            (cons (strcase (vla-get-fullname doc)) doc) docs
  40.          )
  41.        )
  42.      )
  43.    )
  44. )
  45. (cond
  46.    ( (not (setq filename (findfile filename))) )
  47.    ( (cdr (assoc (strcase filename) docs)) )
  48.    ( (not
  49.        (vl-catch-all-error-p
  50.          (vl-catch-all-apply 'vla-open
  51.            (list (setq dbx (LM:ObjectDBXDocument)) filename)
  52.          )
  53.        )
  54.      )
  55.      dbx
  56.    )
  57. )
  58. )
  59. ;;-----------------=={ ObjectDBX Document }==-----------------;;
  60. ;;                                                            ;;
  61. ;;  Retrieves a version specific ObjectDBX Document object    ;;
  62. ;;------------------------------------------------------------;;
  63. ;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
  64. ;;------------------------------------------------------------;;
  65. ;;  Arguments: - None -                                       ;;
  66. ;;------------------------------------------------------------;;
  67. ;;  Returns:  VLA ObjectDBX Document object, else nil         ;;
  68. ;;------------------------------------------------------------;;
  69. (defun LM:ObjectDBXDocument ( / acVer )
  70. (vla-GetInterfaceObject (vlax-get-acad-object)
  71.    (if (< (setq acVer (atoi (getvar "ACADVER"))) 16)
  72.      "ObjectDBX.AxDbDocument"
  73.      (strcat "ObjectDBX.AxDbDocument." (itoa acVer))
  74.    )
  75. )
  76. )

 
确保您具有直接写入C驱动器的权限。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 10:20:38 | 显示全部楼层
谢谢你的尝试,李,但结果是一样的。。。外部参照通过标题栏附着到图纸空间,而不是外部参照所属的模型空间。
 
该行为似乎表明,无论源图形/模板保存在哪个选项卡中,都会确定附着外部参照的空间,而不管在Vla AttachExternalReference期间如何指定模型空间对象。
 
我已尝试使用保存在“模型”选项卡中的源图形/模板,并且外部参照已正确附着到MS。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:37:09 | 显示全部楼层
IIRC我的测试涉及保存到MS选项卡的图形
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 10:50:05 | 显示全部楼层
 
不用担心,我*以为*我是在使用保存到PS的源图形来保存步骤,因为创建的图纸将保存到PS。
 
后来我改为使用源代码的标准模板(保存在MS中),我必须找到一种使用Vla InsertBlock将标题栏添加到PS的方法。
 
干杯
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 00:33 , Processed in 1.015489 second(s), 62 queries .

© 2020-2025 乐筑天下

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