乐筑天下

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

如何收集/爆炸AECC物体?

[复制链接]

129

主题

422

帖子

5

银币

中流砥柱

Rank: 25

铜币
936
发表于 2016-5-21 09:26:15 | 显示全部楼层 |阅读模式
我想使用API在绘图中爆炸所有民用3d对象......有没有一种有效的方法可以做到这一点,而无需遍历每个实体并检查“AEC”然后单独爆炸它们?或者至少有一种方法来限制我检查的数据?

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

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

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2016-5-21 15:00:27 | 显示全部楼层
使用{0,"AECC-*"}获取过滤器的选择集?
回复

使用道具 举报

129

主题

422

帖子

5

银币

中流砥柱

Rank: 25

铜币
936
发表于 2016-5-21 18:21:52 | 显示全部楼层
是的 :/希望有一个秘密的aecc.explodeeverything方法,我不知道哈哈
回复

使用道具 举报

129

主题

422

帖子

5

银币

中流砥柱

Rank: 25

铜币
936
发表于 2016-5-22 04:01:12 | 显示全部楼层
在我看来,迭代不是问题...例如,对数据库的 736 323 个对象(DWG 大小大于 50 Mb)进行迭代时,需要 00:00:00,2781968(即小于 1 秒)。public static ObjectId[] GetDBObjectIds(this Database db,。
Func filter) {。

检查参数。
if (null == db)。
throw new ArgumentNullException(“null == db”);。
如果(空 == 筛选器)。
抛出新的 ArgumentNullException(“null == filter”);。
如果 (db.已处置)。
throw new ArgumentException(“true == db.IsDisposed“);。

-------------------。
Int32 approxNum = db.近似值对象;。
列表 ids = new List();。

for (Int64 i = db.BlockTableId.Handle.Value;我。
&& approxnum > 0; ++i) {。

句柄 h = 新句柄(i);。
ObjectId id = ObjectId.Null;。

布尔解析结果 = db.TryGetObjectId(h, out id);。

if (parseResult) {。
--大约数;。
if (filter(id)) {。
ids.Add(id);。
}。
}。
}。
返回 id,ToArray();。
}我使用它来搜索,分解和删除数据库中的所有代理(通常为AutoCAD)。
回复

使用道具 举报

129

主题

422

帖子

5

银币

中流砥柱

Rank: 25

铜币
936
发表于 2016-5-22 16:38:52 | 显示全部楼层
但是一次一个地分解每个AEC对象
在我看来,迭代不是问题……例如,对736 323个数据库对象(DWG大小超过50 Mb)的迭代需要00:00:002781968(即不到一秒)
公共静态ObjectId[]getdbobjectid(此数据库数据库为
Func
filter){
//检查参数
如果(null==db)
抛出新的ArgumentNullException(“null==db”)
如果(null==filter)
抛出新的ArgumentNullException(“null==filter”)
如果(db.IsDisposed)
抛出新的ArgumentException(“true==db.IsDisposed”)
/------------
Int32:approxNum=db.ApproxNumObjects
<div>List<ObjectId>id=新列表<ObjectId>(a)
用于(Int64 i=db.BlockTableId.Handle.Value;i
&&approxNum>0++i) {
手柄h=新手柄(i)
ObjectId id=ObjectId.Null
布尔parseResult=db。TryGetObjectId(h,out id)
如果(parseResult){
——近似数
如果(过滤器(id)){
id.Add(id)
}
}
}
返回id.ToArray()
}
我使用它搜索、分解和删除数据库中的所有代理(常用AutoCAD)。
回复

使用道具 举报

14

主题

275

帖子

6

银币

后起之秀

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

铜币
331
发表于 2016-5-22 16:47:51 | 显示全部楼层
我不理解你。你什么意思?
回复

使用道具 举报

129

主题

422

帖子

5

银币

中流砥柱

Rank: 25

铜币
936
发表于 2016-5-22 20:31:06 | 显示全部楼层
我不理解你。你什么意思?

呃...我只是希望有一个我不知道的可用的allae objects . explode instant()方法。
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2016-5-23 05:12:35 | 显示全部楼层
爆炸对象将创建新的AutoCAD对象,之后您需要擦除原始对象。
擦除对象会影响其他对象的存在,如果您在爆炸后立即擦除对齐,所有配置文件和配置文件视图和部分等也将被删除。
所以您最好先爆炸所有对象,然后擦除所有原始对象在try-catch中。
或者,发送一个命令行字符串:“全部爆炸”。
回复

使用道具 举报

14

主题

275

帖子

6

银币

后起之秀

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

铜币
331
发表于 2016-5-23 05:49:01 | 显示全部楼层
谢谢慧兹和所有人
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-4 19:00 , Processed in 0.170608 second(s), 70 queries .

© 2020-2025 乐筑天下

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