2017-11-20 2 views
0

여러 도면에 적용 할 속성 탭 구분 텍스트 파일이 있습니다. AutoCAD가 팝업되지 않고 "하나 이상의 블록을 찾을 수 없으므로 대화식으로 데이터를 선택 하시겠습니까?"라고 말합니다. , 블록의 HANDLE 속성을 사용해야합니다. 주어진 도면에서 ATTOUT을 사용하여 내 블록의 핸들을 보면 '8B3F'와 같은 값을 얻을 수 있습니다. 핸들과 함께 ATTIN을 사용하면 효과가 있습니다. 이것을 다른 핸들이있는 여러 도면에 적용하면 각 도면마다 각 블록의 핸들을 얻어야합니다. 여기에 내 코드가있다 - 엑셀 문서에 핸들을 작성한다. 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)에 포함 된 블록 정의 (Block)가 혼란스러운 것 같습니다. 여기 (활성 도면 공간을 검색 할 도면 공간으로 ModelSpace를 대체 할 수있는 모형 공간에서 블록 참조 serac 테스트 된없는 조각입니다.

여기
 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

나는 그것이 작동되도록하기 위해 무슨 짓을했는지. 블록 참조 I 도면 공간에 있었다 원했다. 그 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 
관련 문제