2017-11-20 15 views
0

複数の図面に適用する属性タブ区切りテキストファイルがあります。 AutoCADでポップアップが表示されず、「1つ以上のブロックが見つからない場合は、データをインタラクティブに選択しますか?ブロックのHANDLEプロパティを使用する必要があります。与えられた図面で、ATTOUTを使って私のブロックのハンドルを見ると、 '8B3F'のような値が得られます。そのハンドルでATTINを使用すると機能します。異なるハンドルを持つ複数の図面にこれを適用すると、各図面があれば各ブロックのハンドルを取得する必要があります。ここで私のコードです - Excelのドキュメントにハンドルを書く。今AutoCAD Block Handleを取得 - VB.NETを使用した異なる結果

  xlbook = xlapp.Workbooks.Open(attInText,, False) 
      xlsheet = xlbook.Worksheets(dwgName) 

      Dim Handle As String = "" 
      'get the handle to the CHS11x17TB title block 
      For Each blk As AutoCAD.AcadBlock In cadDOC.Blocks 
       If blk.Name.ToUpper = "CHS11X17TB" Then 
        Handle = blk.Handle 
        xlsheet.Cells(2, "A").value = Handle 
        Exit For 
       End If 
      Next 

、問題はハンドルがATTOUTを使用して生成されたものと同じではないということです - 私は、コードを使用して75B0」のような何かを得るでしょう。なぜATTOUTは私に図面のブロックをループするのとは違う扱いをすると思いますか?私はブロックがペーパースペースにあることに気づくでしょう。その質問に答えることができない場合は、私のブロックにハンドルを取得するための代替ソリューションに興味があります。

+1

あなたがブロック定義またはブロック参照をループしようとしている? 'AutoCAD.AcadBlock'が定義です。ブロックごとに一つの定義がありますブロックごとに複数のBlockReferencesがある可能性があります。 – braX

答えて

3

ModelSpaceまたはPaperSpaceに挿入されたブロックテーブル(ブロック)とブロック参照(BlockReference)に含まれるブロック定義(ブロック)が混乱しているようです。 ここでは(あなたがアクティブなペーパー空間を探索するためにペーパー空間とモデル空間を置き換えることができ、モデル空間内のブロック参照のシラクテストされていないスニペットです。

 xlbook = xlapp.Workbooks.Open(attInText,, False) 
     xlsheet = xlbook.Worksheets(dwgName) 

     Dim Handle As String = "" 
     'get the handle to the CHS11x17TB title block 
     For Each obj As AutoCAD.AcadObject In cadDOC.ModelSpace 
      If obj.ObjectName = "AcDbBlockReference" Then 
       If obj.EffectiveName.ToUpper = "CHS11X17TB" Then 
        Handle = obj.Handle 
        xlsheet.Cells(2, "A").value = Handle 
        Exit For 
       End If 
      End If 
     Next 
+0

応答ありがとう!ブロックやブロックの参照についての私の部分の理解の欠如。 –

0

ここで私はそれを動作させるためにやったことだ。ブロック参照は、私が欲しかったペーパー空間にあった。EntityType 7がAcadBlockReferenceであることに注意してください。

 Dim Handle As String = "" 
      Dim count As Integer 
      count = cadDOC.PaperSpace.Count 

      Dim newObjs(count) As AutoCAD.AcadEntity 
      Dim index As Integer 

      For index = 0 To count - 1 
       newObjs(index) = cadDOC.PaperSpace.Item(index) 
      Next 

      For i = 0 To count - 1 
       Try 
        If newObjs(i).EntityType = 7 Then 
         Dim blk As AutoCAD.AcadBlockReference = newObjs(i) 
         If blk.Name.ToUpper = "CHS11X17TB" Then 
          Handle = "'" & blk.Handle 
         End If 

        End If 
       Catch ex As Exception 

       End Try 


      Next 
関連する問題