乐筑天下

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

是不是?NET API有ActiveX AcadEntity类的等价物吗?

[复制链接]

85

主题

404

帖子

7

银币

中流砥柱

Rank: 25

铜币
751
发表于 2019-5-3 12:17:07 | 显示全部楼层

Gile,非常感谢你的贡献,几乎所有的都有一颗宝石!
回复

使用道具 举报

21

主题

58

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
142
发表于 2019-5-7 03:34:01 | 显示全部楼层
你好,保罗,这可能相关,也可能不相关,但Acad数据库的问题是,在你可以使用它之前,它必须是“免费的”。也就是说,您不能擦除对象,除非它已被“提交”到数据库本身,因此您的事务必须完成,以使ObjectID可用于擦除实体。
原因在于Acad如何处理图形重绘和其他任务。比方说,当您平移或缩放时,会在整个数据库中查询视图截锥内的对象,并在每次重绘调用消息时重绘这些对象。
如果最后一个事务尚未提交,那么您可能会遇到相当于“竞争”的情况,即多个线程试图读取数据库,擦除对象也是如此,它们还不“正确”存在,因此会导致问题。在这种情况下,处理实体可能是一种解决方案,但是您仍然需要一些指向对象的指针(DBObjectCollection??).
我会将ObjectID存储在一个集合中,以便在提交创建临时对象的事务后使用,然后使用另一个事务来执行擦除工作。
使用存储的ObjectID列表来搜索绘图是最快的,请记住,您搜索的是内存数据库本身,而不是模型空间视图本身。迭代数据库,然后检查正确的肯定是缓慢的(额)。
事务在方案中并不昂贵,它们更像是一个“锁”包装对象,以确保您的方法对数据库具有完全访问权限,而其他人没有。
包装上述两个事务可能会导致相同的问题。即使您使用两个内部事务,主外部事务仍然控制着数据库,所以我猜您必须进行测试。
希望这能有所帮助,如果有任何明显的问题,我表示歉意,但这可能有助于其他人了解可能会出错的地方及其原因,干杯。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-4 08:55 , Processed in 0.141644 second(s), 54 queries .

© 2020-2025 乐筑天下

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