乐筑天下

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

[编程交流] VLA Copyobjects

[复制链接]

4

主题

78

帖子

74

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:06:03 | 显示全部楼层 |阅读模式
自从AUGI把他们的网站搞砸了,我失去了以前所有帖子的访问权限,我想我会尝试加入这里。
我之前发布了一个关于使用VLA Copyobjects的问题。我有一个例程,用用户提供的后缀创建一个新层,然后它接受任何选定对象,获取其层名称,添加后缀,然后将选定对象放在新层上,然后冻结它们。我不知道代码来自哪里,所以我不知道我应该发布它。我要做的是让程序创建对象的副本,并将其放置在新层上,而不是原始层上。我找到了VLA Copyobjects函数,但似乎无法使其工作。有没有人有什么好的例子,或者甚至可能有什么已经做到了这一点?
 
提前谢谢。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:12:23 | 显示全部楼层
欢迎来到CADWGILL
vla CopyObjects更适合在数据库之间复制,而不是在同一个数据库中复制对象-为此,我将使用vla copy。
 
我稍后将发布一个示例
回复

使用道具 举报

4

主题

78

帖子

74

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:15:18 | 显示全部楼层
谢谢你的欢迎。
 
这是有道理的,如果我能记住我的另一条线索,我想这也是有人建议的。Peter Jamtgaard确实发布了一个使用vla CopyObjects的示例,但正如我所说,我失去了对它的所有访问权限。我期待你的榜样。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:18:20 | 显示全部楼层
我认为另一种更优雅的方法是使用CopyObjects将所有对象复制到ObjectDBX文档,将层后缀添加到所有层,然后将它们复制回工作文档中。。。
回复

使用道具 举报

4

主题

78

帖子

74

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:20:59 | 显示全部楼层
远远超过我的头。尽管我已经编写了几年代码,但我现在才开始更加深入地研究Vlisp。AutoCAD的新帮助系统无法帮助实现这一过渡。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:23:11 | 显示全部楼层
 
真的-我尝试了AutoCAD 2011的帮助,但根本无法继续。。。
回复

使用道具 举报

4

主题

78

帖子

74

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 10:27:24 | 显示全部楼层
我发现我自己打开了chm的帮助,从他们发布的修复,并试图从那里去。另一个问题是,vla函数的上下文启用帮助从未起作用,它总是返回一个页面未找到错误。你可能认为Autodesk现在已经解决了这个问题。也许明年。。。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:30:51 | 显示全部楼层
尝试了CopyObjects方法:
 
  1. (defun c:CopytoLayerSuffix ( / *error* doc spc l s dbx var )
  2. (vl-load-com)
  3. ;; © Lee Mac 2010
  4. (defun *error* ( msg )
  5.    (if dbx (vlax-release-object dbx))
  6.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  7.        (princ (strcat "\n** Error: " msg " **")))
  8.    (princ)
  9. )
  10. (LM:ActiveSpace 'doc 'spc)
  11. (if (setq l (LM:ss->vla (ssget "_:L" (list (cons 410 (getvar 'CTAB))))))
  12.    (progn
  13.      (setq s (getstring t "\nSpecify Layer Suffix: "))
  14.      
  15.      (setq dbx (LM:ObjectDBXDocument)
  16.            var (vla-CopyObjects doc (LM:ObjectVariant l) (vla-get-ModelSpace dbx))
  17.      )
  18.      (vlax-for l (vla-get-Layers dbx)
  19.        (vl-catch-all-apply '(lambda ( la ) (vla-put-name la (strcat (vla-get-name la) s))) (list l))
  20.      )
  21.      (setq var (vla-CopyObjects dbx var spc))
  22.      (vlax-release-object dbx)
  23.      (
  24.        (lambda ( ss )
  25.          (mapcar '(lambda ( o ) (ssadd (vlax-vla-object->ename o) ss))
  26.            (vlax-safearray->list
  27.              (vlax-variant-value var)
  28.            )
  29.          )
  30.          (sssetfirst nil ss)
  31.        )
  32.        (ssadd)
  33.      )      
  34.    )
  35. )
  36. (princ)
  37. )
  38. ;;-------------------=={ Object Variant }==-------------------;;
  39. ;;                                                            ;;
  40. ;;  Creates a populated Object Variant                        ;;
  41. ;;------------------------------------------------------------;;
  42. ;;  Author: Lee Mac, Copyright © 2010 - www.lee-mac.com       ;;
  43. ;;------------------------------------------------------------;;
  44. ;;  Arguments:                                                ;;
  45. ;;  lst - list of VLA Objects to populate the Variant.        ;;
  46. ;;------------------------------------------------------------;;
  47. ;;  Returns:  VLA Object Variant                              ;;
  48. ;;------------------------------------------------------------;;
  49. (defun LM:ObjectVariant ( lst )
  50. ;; © Lee Mac 2010
  51. (LM:SafearrayVariant vlax-vbobject lst)
  52. )
  53. ;;------------------=={ Safearray Variant }==-----------------;;
  54. ;;                                                            ;;
  55. ;;  Creates a populated Safearray Variant of a specified      ;;
  56. ;;  data type                                                 ;;
  57. ;;------------------------------------------------------------;;
  58. ;;  Author: Lee Mac, Copyright © 2010 - www.lee-mac.com       ;;
  59. ;;------------------------------------------------------------;;
  60. ;;  Arguments:                                                ;;
  61. ;;  datatype - variant type enum (eg vlax-vbDouble)           ;;
  62. ;;  data     - list of static type data                       ;;
  63. ;;------------------------------------------------------------;;
  64. ;;  Returns:  VLA Variant Object of type specified            ;;
  65. ;;------------------------------------------------------------;;
  66. (defun LM:SafearrayVariant ( datatype data )
  67. ;; © Lee Mac 2010
  68. (vlax-make-variant
  69.    (vlax-safearray-fill
  70.      (vlax-make-safearray datatype (cons 0 (1- (length data))))
  71.      data
  72.    )   
  73. )
  74. )
  75. ;;-----------------=={ ObjectDBX Document }==-----------------;;
  76. ;;                                                            ;;
  77. ;;  Retrieves a version specific ObjectDBX Document object    ;;
  78. ;;------------------------------------------------------------;;
  79. ;;  Author: Lee Mac, Copyright © 2010 - www.lee-mac.com       ;;
  80. ;;------------------------------------------------------------;;
  81. ;;  Arguments: - None -                                       ;;
  82. ;;------------------------------------------------------------;;
  83. ;;  Returns:  VLA ObjectDBX Document object, else nil         ;;
  84. ;;------------------------------------------------------------;;
  85. (defun LM:ObjectDBXDocument ( / acVer )
  86. ;; © Lee Mac 2010
  87. (vla-GetInterfaceObject (vlax-get-acad-object)
  88.    (if (< (setq acVer (atoi (getvar "ACADVER"))) 16)
  89.      "ObjectDBX.AxDbDocument"
  90.      (strcat "ObjectDBX.AxDbDocument." (itoa acVer))
  91.    )
  92. )
  93. )
  94. ;;-----------------=={ SelectionSet -> VLA }==----------------;;
  95. ;;                                                            ;;
  96. ;;  Converts a SelectionSet to a list of VLA Objects          ;;
  97. ;;------------------------------------------------------------;;
  98. ;;  Author: Lee Mac, Copyright © 2010 - www.lee-mac.com       ;;
  99. ;;------------------------------------------------------------;;
  100. ;;  Arguments:                                                ;;
  101. ;;  ss - Valid SelectionSet (Pickset)                         ;;
  102. ;;------------------------------------------------------------;;
  103. ;;  Returns:  List of VLA Objects                             ;;
  104. ;;------------------------------------------------------------;;
  105. (defun LM:ss->vla ( ss )
  106. ;; © Lee Mac 2010
  107. (if ss
  108.    (
  109.      (lambda ( i / e l )
  110.        (while (setq e (ssname ss (setq i (1+ i))))
  111.          (setq l (cons (vlax-ename->vla-object e) l))
  112.        )
  113.        l
  114.      )
  115.      -1
  116.    )
  117. )
  118. )
  119. ;;--------------------=={ ActiveSpace }==---------------------;;
  120. ;;                                                            ;;
  121. ;;  Retrieves pointers to the Active Document and Space       ;;
  122. ;;------------------------------------------------------------;;
  123. ;;  Author: Lee Mac, Copyright © 2010 - www.lee-mac.com       ;;
  124. ;;------------------------------------------------------------;;
  125. ;;  Arguments:                                                ;;
  126. ;;  *doc - quoted symbol (other than *doc)                    ;;
  127. ;;  *spc - quoted symbol (other than *spc)                    ;;
  128. ;;------------------------------------------------------------;;
  129. (defun LM:ActiveSpace ( *doc *spc )
  130. ;; © Lee Mac 2010
  131. (set *spc
  132.    (vlax-get-property
  133.      (set *doc
  134.        (vla-get-ActiveDocument
  135.          (vlax-get-acad-object)
  136.        )
  137.      )
  138.      (if (= 1 (getvar 'CVPORT)) 'PaperSpace 'ModelSpace)
  139.    )
  140. )
  141. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:34:14 | 显示全部楼层
 
确切地说,该功能在2010年*有时*有效,但它引用了VBA文章,但在2011年,没有任何VBA文档,有效的VL帮助就消失了。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:34:38 | 显示全部楼层
更新了上述内容以显示结果选择集。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 22:10 , Processed in 0.396476 second(s), 72 queries .

© 2020-2025 乐筑天下

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