飛詩:
難道塊不能取GeometricExtents
GeometryExtentsBestFit 用這個解決
GeometryExtentsBestFit 對動態塊也不准

com方式也出錯; 錯誤: Automation 錯誤。 范圍無效
萊昂納多·胖子:
進到塊里面去,一個一個獲取范圍
塊里面如果有不能顯示的對象,比如缺字體,也會獲取不到
其實是飛詩的cad調試時候無法看到字體,所以要用以下的鏈接:
下面是機器翻譯:
使用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時也存在問題。有關更多信息,請參閱傑里米博客上的這篇文章。]