cad.net GeometricExtents出错了 调试看不到文字

包围盒获取出错1

飞诗:

难道块不能取GeometricExtents

GeometryExtentsBestFit 用这个解决

GeometryExtentsBestFit 对动态块也不准

com方式也出错; 错误: Automation 错误。 范围无效

福萝卜:

进到块里面去,一个一个获取范围

块里面如果有不能显示的对象,比如缺字体,也会获取不到

解决方案

其实是飞诗的cad调试时候无法看到字体,所以要用以下的链接:

http://through-the-interface.typepad.com/through_the_interface/2013/11/debugging-autocad-using-visual-studio-2013.html

下面是翻译:

使用 Visual Studio 2013 进行 AutoCAD 调试的探索
自从 Visual Studio 2013 问世以来,许多开发者便迫不及待地想要利用这款新工具来开发和调试 AutoCAD 的 .NET 模块。其中一个备受期待的功能便是对64位应用程序支持的“编辑并继续”(Edit & Continue)。然而,本文将揭示一个令人失望的事实:尽管我们期待已久,但在调试 AutoCAD 中的64位 .NET 模块时,这一功能却无法发挥作用。
当通过 Visual Studio 2013 的调试器启动 AutoCAD 时,一个主要问题浮现出来——字体加载问题。如果你尝试从 VS2013 启动 AutoCAD 来调试一个64位的类库项目,哪怕实际上并未加载该模块,AutoCAD 在执行如 STYLE(该命令尝试在对话框中显示字体信息)等命令时仍会崩溃。这一问题在我测试的所有 AutoCAD 版本中均有出现,包括 AutoCAD 2013 及更早的版本。
特别感谢 Samir Bittar 对此问题的提醒。此外,这个问题在讨论论坛上也引起了广泛讨论。AutoCAD 工程团队中的 Arthur Ding,一位位于我们上海办公室的工程师,对这个问题进行了深入研究。Arthur 发现,与 VS2012 相比,VS2013 在调试 .NET 模块时的工作机制有所不同,这破坏了 AutoCAD 内部的一个核心假设。
当 VS2013 启动 AutoCAD 时,会通过调试代码路径创建一个额外的线程,该线程用于加载如 acdb*.dll 等基础模块,然后退出。而在 VS2012 中,加载这些基础模块的任务是由 AutoCAD 的主线程完成的,这与在调试器外部运行时的情况一致。我们的 AcDb 模块自然期望由 AutoCAD 的主线程来加载,并缓存加载线程的 ID 以备后续使用。
目前,这个问题主要出现在访问特定字体时。由于字体加载尝试是由 AcDb 不认为是主线程的线程发起的(出于安全考虑,AcDb 不允许从任意线程访问数据库操作,因为它本身不是线程安全的),这导致了加载失败。当字体随后被访问,比如在 STYLE 对话框或 MTEXT 编辑器中,这可能导致错误或 AutoCAD 的崩溃。
幸运的是,有两种简单的方法可以避免在使用 VS2013 时遇到这个问题,这两种方法都能防止 AutoCAD 因这个特定问题而崩溃。
1. 通过“工具” -> “选项” -> “调试”,启用“使用托管兼容性模式”。
2. 在“项目” -> “属性” -> “调试”中,启用“启用原生代码调试”。
需要注意的是,第二种方法会因为需要处理更多的非托管代码和底层操作系统相关任务而带来性能上的损失。
不幸的是,这两种方法都会禁用64位应用程序的“编辑并继续”功能。因此,虽然你可以使用上述任一方法来使用 VS2013 调试64位 .NET 模块,但你将无法享受到 VS2013 最受期待的新特性之一。
[另外,使用 VS2013 调试 Revit 时也存在一些问题。有关更多细节,请参阅 Jeremy 博客上的这篇文章。]

包围盒获取出错2 eNullExtents

AttributeDefinition(属性定义) 没有Bounds,所以GeometricExtents 报错,
AttributeReference(属性参照) 有.
我喜欢跳过.

同时一些xline,ray等等也是没有,它只能获取Position.

相关阅读

cad.net vs调试问题

cad.net 文字宽度获取

cad.net 反射调用包围盒
(完)

posted @ 2019-04-30 10:47  惊惊  阅读(2080)  评论(0编辑  收藏  举报