2017-06-29 6 views
0

ModelSpaceのエンティティを確実に処理しようとしていますが、COMオブジェクトなので問題が何もないというヒントは得られません。誰かが私が間違っていることを知っていますか?私がその行(とズームのエクステント行)を取り除くと、残りのコードはうまく動作するので、ドキュメントオブジェクトが正しく設定されていることがわかります。AutoCAD ActiveSpaceをModelSpaceに設定する

 Dim acDWG As AutoCAD.AcadDocument 
     ' open the drawing 
     acDWG = acApp.Documents.Open(dgvr.Cells("FullName").Value.ToString) 
     ' ensure the drawing has the modelspace tab activated (doesnt work) 
     acDWG.ActiveSpace = AutoCAD.AcActiveSpace.acModelSpace 
     ' zoom to extents (sometimes works, sometimes not)    ' 
     acApp.ZoomExtents() 
     ' build a selectionset of all blocks named 'Solid1' and then delete them all 
     Dim ss As AutoCAD.AcadSelectionSet = acDWG.SelectionSets.Add("DELETE") 
     Dim gpCode(1) As Int16 
     Dim dataValue(1) As Object 
     gpCode(0) = 0 : dataValue(0) = "Insert" 
     gpCode(1) = 2 : dataValue(1) = "Solid1" 
     ss.Select(AutoCAD.AcSelect.acSelectionSetAll,,, gpCode, dataValue) 
     ss.Erase() 
     ss.Delete() 
     ss = Nothing 

アップデート:エラーが発生する理由を発見しました。コードは正しいですが、問題は図面がまだ開かれていないことです。 Open行の直後に「5秒待つ」コード行を置くとうまくいきます。だから私の質問は、図面を開き、VB.Netは、COMオブジェクトからの信号を待って "続ける"準備ができているようですか? (どのように言葉にそれをするかわからない)

+0

をあなたはこのコードを実行しているから? –

+0

内部Visual Studio .NET 2017 – Joe

+0

もっと具体的には... WinForms – Joe

答えて

0

このように「待つ」ことDo...LoopTry...Catchブロックの組み合わせを使用します。

  Dim acDWG As AutoCAD.AcadDocument 
      acDWG = acApp.Documents.Open(dgvr.Cells("FullName").Value.ToString) 
      Dim bOpen As Boolean = False 
      Do Until bOpen = True 
       Try 
        acDWG.ActiveSpace = AutoCAD.AcActiveSpace.acModelSpace 
        bOpen = True 
       Catch ex As Exception 
        ' ignore the error and try again until it is open 
       End Try 
      Loop 
+0

魅力のような作品、brax !!本当にありがとう! – Joe

関連する問題