乐筑天下

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

数组的对象属性列表?

[复制链接]

15

主题

56

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2007-11-8 14:33:06 | 显示全部楼层 |阅读模式
我想得到一个数组中一个对象的所有属性的列表 用VBA有什么方法可以做到这一点吗
具体来说,我想获得一个图层的所有属性和值,以便存储它们或将它们复制到另一个图形中 我不知道'我不想指定属性,因为我希望代码在将新属性添加到对象模型时接受它们
欢迎所有建议,
Mike Weaver
回复

使用道具 举报

15

主题

56

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2007-11-8 14:43:47 | 显示全部楼层
我不知道'我不这么认为'这是可能的 我真的很想在这件事上被证明是错的,只是因为看到它会很酷。
回复

使用道具 举报

28

主题

249

帖子

7

银币

后起之秀

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

铜币
361
发表于 2007-11-8 14:57:16 | 显示全部楼层
MSDN有一篇文章http://msdn.microsoft.com/msdnmag/issues/1200/TypeLib/default.aspx这解释了如何使用tlbinf32.dll来实现,但我希望vba中内置了一些东西
迈克
回复

使用道具 举报

15

主题

56

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2007-11-8 17:11:11 | 显示全部楼层
可以用Lisp完成 看看'原子族#039;作用
回复

使用道具 举报

28

主题

249

帖子

7

银币

后起之秀

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

铜币
361
发表于 2007-11-8 19:03:03 | 显示全部楼层
Tim,
我能看到的唯一可能获得原子族对象属性列表的方法是使用vlax-property-available-p检查原子族的每个成员与我的对象,看看它是否是该对象的属性 这是你想的吗,还是我还有别的办法;我失踪了
迈克·韦弗
回复

使用道具 举报

15

主题

56

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2007-11-8 19:31:26 | 显示全部楼层
这就是我当时的想法,也是我的议员(从这里)向我展示的方式 我不知道'我不知道还有别的办法,迈克。
回复

使用道具 举报

15

主题

56

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2007-11-8 20:51:52 | 显示全部楼层
使用AxDbDocument和ThisDrawing克隆它。从内存复制对象。
回复

使用道具 举报

15

主题

56

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2007-11-8 21:40:09 | 显示全部楼层

使用上述链接中的信息,此代码(尽可能丑陋和笨拙)将返回一个集合,其中填充了所需Autocad实体的属性[代码大多数代码来自类型库信息库的帮助文件
VBA项目必须包含对TypeLineInformation(tlbinf32.dll)的引用
结果在所附图像中
回复

使用道具 举报

15

主题

56

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2007-11-8 22:01:40 | 显示全部楼层

这就是我当时的想法,也是我的议员(从这里)看到的 我不知道'我不知道还有别的办法,迈克
将层设置为层对象后,我得到以下结果:
  1. (setq temp (vl-remove-if-not (function (lambda(var)
  2. (vlax-property-available-p layer var))) (atoms-family 0)))
  3. (LAYERON)
不完全是我所期望的
回复

使用道具 举报

15

主题

56

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
113
发表于 2007-11-8 22:14:59 | 显示全部楼层
好吧,忘掉我上一篇文章中的所有内容
它变得简单多了
仍然需要引用TypeLineInformation(tlbinf32.dll)
  1. Public Sub testGetProps()
  2.     Dim cData As Collection
  3.     Set cData = dkb_GetProperties(ThisDrawing.ModelSpace(0)) 'select your object however suits you best
  4. End Sub
  5. Public Function dkb_GetProperties(pObject As Acad0bject) As Collection
  6.     Dim iInterFaceInfo As InterfaceInfo
  7.     Dim cClassInfo As TypeInfo
  8.    
  9.     Dim colProperties As Collection
  10.     Dim i As Integer
  11.    
  12.     Set colProperties = New Collection
  13.    
  14.     Set iInterFaceInfo = InterfaceInfoFromObject(pObject)
  15.     For i = 1 To iInterFaceInfo.Members.Count
  16.         If iInterFaceInfo.Members(i).InvokeKind = INVOKE_PROPERTYGET Then
  17.             colProperties.Add iInterFaceInfo.Members(i).Name
  18.         End If
  19.     Next i
  20.     Set dkb_GetProperties = colProperties
  21. End Function
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-5 18:11 , Processed in 1.758945 second(s), 72 queries .

© 2020-2025 乐筑天下

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