乐筑天下

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

按名称获取表

[复制链接]

3

主题

19

帖子

1

银币

初来乍到

Rank: 1

铜币
31
发表于 2016-3-2 20:42:48 | 显示全部楼层 |阅读模式
我试图在我的绘图中获得所有的自定义表,我可以用编辑器来完成,但我不想使用编辑器,我更喜欢使用数据库,以下是我所拥有的,指导将是巨大的。
Dim filter for()As typed value = { New typed value(0,“ACAD _表”),New TypedValue(1000,“表名”)}
Dim SF As selection filter = New selection filter(filter for)
Dim PSR As PromptSelectionResult = ed。选择全部(sf)

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2016-3-3 02:15:31 | 显示全部楼层
嗨,
我不知道你想做什么
您将如何选择所有表并使用数据库
回复

使用道具 举报

3

主题

19

帖子

1

银币

初来乍到

Rank: 1

铜币
31
发表于 2016-3-3 07:00:30 | 显示全部楼层
嗯,我有很多图纸需要从中读取表格,所以我想使用
ReadDwgFile,但当时我无法使用编辑器。获取所有块BlockReference的示例如下:
将MyBTR设置为BlockTableRecord=DirectCast(SpaceId.GetObject(OpenMode.ForRead),BlockTableRecord)
,除了我想要表
回复

使用道具 举报

3

主题

19

帖子

1

银币

初来乍到

Rank: 1

铜币
31
发表于 2016-3-3 09:13:07 | 显示全部楼层
我发现了..
私有共享函数GetTables(_Database As Database,Table style name As String)As List(Of Table)
Dim return value As New List(Of Table)
使用tran As Transaction = _Database。transaction manager . start transaction()
Dim layout dict As db dictionary = direct cast(tran。GetObject(_Database。LayoutDictionaryId,OpenMode。ForRead)、DBDictionary)
对于layoutDict中的每个条目作为DictionaryEntry。GetObject(DirectCast(entry。Value,ObjectId),OpenMode。ForRead)、Layout)
Dim oBlockTableRecord As block table record = DirectCast(tran。GetObject(oLayout。BlockTableRecordId,OpenMode。ForRead)、BlockTableRecord)
对于oBlockTableRecord中作为ObjectId的每个oo ObjectId
Dim odb object As DBObject = direct cast(tran。GetObject(oo objectid,OpenMode。ForRead),DBObject)
如果oDBObject的类型是Table,则
Dim oTable As Table = try cast(odb object,Table)
如果oTable不是Nothing,则
如果oTable。table style name . ToUpper = table style name。ToUpper Then
返回值。add(oTable)
End If
End If
End If
Next
Next
End Using
Return Return value
End函数
回复

使用道具 举报

24

主题

204

帖子

6

银币

后起之秀

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

铜币
300
发表于 2016-3-3 13:26:19 | 显示全部楼层
(1)Transaction.GetObject() 返回一个 DbObject,因此您不必强制转换返回类型。
(2)那么看起来你正在测试oDBObject是否属于Type Table。 然后,您正在使用TryCast()的下一行将始终返回一个非空对象,因为它必须通过您的第一个测试。
回复

使用道具 举报

3

主题

19

帖子

1

银币

初来乍到

Rank: 1

铜币
31
发表于 2016-3-3 14:07:26 | 显示全部楼层
我想试试这样的
,每个objectId作为ObjectTableRecord中的objectId。
如果是objectId.ObjectClass。DxfName=“表DXF名称”然后
Dim table=DirectCast(trans.GetObject(objectId,OpenMode.ForRead),table)
如果是table.TableStyleName。ToUpper()=表样式名。ToUpper()然后
返回值。添加(表)
如果
如果
下一个
在打开对象之前检查DXF名称比打开对象然后检查更快。首先,您没有不必要地打开对象。其次,您知道它是一个表,因此您可以将其作为一个表打开,而无需任何trycast。希望这能有所帮助。
回复

使用道具 举报

3

主题

19

帖子

1

银币

初来乍到

Rank: 1

铜币
31
发表于 2016-3-3 14:39:28 | 显示全部楼层
下面是使用命名对象字典的另一种方法。由于调用此方法时很可能会有一个活动事务,因此我使用了顶部事务,而不是创建一个新事务
公共共享函数GetTablesByNameFromLayouts(数据库为数据库,表名为字符串)为列表(表)
Dim tables=新列表(表格)
Dim transaction=database.TransactionManager.TopTransaction()
如果事务=无,则
抛出新的Autodesk.AutoCad.Runtime.Exception(ErrorStatus.NoActiveTransactions,“此方法要求激活事务”)
如果
Dim nod=DirectCast(transaction.GetObject(database.NamedObjectsDictionaryId,OpenMode.ForRead),DBDictionary)
Dim layouts=DirectCast(transaction.GetObject(nod.GetAt(“ACAD_LAYOUT”),OpenMode。ForRead),DBDictionary)
<div>对于布局中作为DBDictionaryEntry的每个条目</div>
Dim layout=DirectCast(transaction.GetObject(entry.Value,OpenMode.ForRead),布局)
Dim blockTableRecord=DirectCast(transaction.GetObject(layout.blocktablerrecordid,OpenMode.ForRead),blocktable记录)
对于blockTableRecord中作为objectId的每个objectId
如果是objectId.ObjectClass。DxfName=“表DXF名称”然后
Dim table=DirectCast(transaction.GetObject(objectId,OpenMode.ForRead),table)
如果是table.TableStyleName。ToUpper()=表名。ToUpper()然后
表格。添加(表格)
如果
如果
下一个
下一个
返回表
结束函数

我一开始就这么做了,没有运行或调试代码,所以我交叉手指,它是正确的。
回复

使用道具 举报

24

主题

204

帖子

6

银币

后起之秀

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

铜币
300
发表于 2016-3-3 15:10:03 | 显示全部楼层
我认为你也可以从表格样式字典中获取TableStyle,并使用GetPersistentReactorIds()获取表格。
回复

使用道具 举报

3

主题

19

帖子

1

银币

初来乍到

Rank: 1

铜币
31
发表于 2016-3-3 15:18:44 | 显示全部楼层
Wowens,
您可以在Autocad扩展库中找到许多有用的方法和扩展
回复

使用道具 举报

3

主题

19

帖子

1

银币

初来乍到

Rank: 1

铜币
31
发表于 2016-3-3 17:00:36 | 显示全部楼层
感谢大家的帮助和指导
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-4 19:08 , Processed in 0.172829 second(s), 72 queries .

© 2020-2025 乐筑天下

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