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位应用程序的“编辑并继续”支持的添加。不幸的是,在本文中,我们将看到为什么在AutoCAD中调试64位.NET模块时,尽管等待,E&C还是不能工作。

从VS2013调试器运行AutoCAD时的主要问题表现为字体加载问题。如果从vs2013启动autocad以调试64位类库(即使没有实际加载模块),则当运行诸如style(尝试在对话框中显示字体信息)等命令时,autocad将崩溃。这对于我测试过的所有版本的AutoCAD都是正确的;可以追溯到AutoCAD 2013,但对于之前的版本,这可能也是正确的。

感谢Samir Bittar让我注意到这个问题。这个问题似乎也在论坛上进行了详细讨论。在AutoCAD工程团队中,我们上海办事处的工程师丁亚瑟(Arthur Ding)对这个问题进行了非常深入的研究。在调试.NET模块时,Arthur发现了VS2013与VS2012的工作方式不同,并使在AutoCAD中所做的核心假设失效。

当VS2013启动AutoCAD(至少通过启用“编辑并继续”的调试代码路径)时,会创建一个附加线程,用于在退出前将基本模块(如acdb*.dll)加载到进程中。对于VS2012,情况并非如此:它是AutoCAD的主线程加载基本模块,就像在调试器外部运行时一样。我们的ACDB模块自然希望由AutoCAD的主线程加载,因此缓存加载线程的ID以供以后使用。

当前遇到的主要问题是访问某些字体时:加载这些字体失败,因为加载尝试是从ACDB不识别为主线程的线程进行的(为了安全起见,这是ACDB不允许的–它不是线程安全的,因此阻止了从ARbit访问数据库操作线程)。然后访问字体时(例如,在样式对话框或多行文字编辑器中),这会导致(最多)错误或(最多)崩溃。

好消息是,使用VS2013有两种简单的方法可以避免此问题,这两种方法都可以防止AutoCAD崩溃(无论如何,由于这个特定的问题)。

通过工具–>选项–>调试打开“使用托管兼容性模式”。
从项目–>属性–>调试中打开“启用本机代码调试”。
后者会带来性能损失,因为它显然需要更多的工作来关注autocad中的非托管代码和底层操作系统(其中相当一部分)。

坏消息是这两个选项都禁用了64位应用程序的“编辑并继续”。因此,虽然可以利用VS2013使用上述方法之一调试64位.NET模块,但在这样做时,您将无法使用VS2013最期待的新功能之一。

[似乎在使用VS2013调试REVIT时也存在问题。有关更多信息,请参阅杰里米博客上的这篇文章。]

包围盒获取出错2 eNullExtents

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

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

相关阅读

cad.net vs调试问题

cad.net 文字宽度获取

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

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