Skip to content

기글하드웨어기글하드웨어

인터넷 / 소프트웨어 : 윈도우즈, 리눅스, 기타 운영체제, 각종 어플리케이션, 프로그램, 소프트웨어, 인터넷, 인터넷 서비스에 대한 이야기, 소식, 테스트, 정보를 올리는 게시판입니다.

Extra Form

AutoCAD를 사용하는 많은 사람들이 AutoCAD 프로그래밍 하면 보통 LISP를 많이 떠올립니다. 하지만 AutoCAD에는 VBA 또한 내장되어 있기 때문에, VBA를 아는 사람이라면 여러 가지 도면 작업들을 자동화할 수 있지요.
 

제가 이 이야기를 왜 하느냐 하면, 오늘, 아니, 이제 자정이 지났으니 어제, 회사에서 보유하고 있는 약 5만 7천여장의 AutoCAD 도면 중 특정한 것 하나를 찾아내라는 특명(?)을 받았기 때문입니다. 비교적 희미한 저화질 그림 외에는 아무런 단서가 없는 상황이라 난감한지라, 정보 검색 범위를 줄이기 위해 먼저 DWG 파일에서 텍스트 데이터만 추출할 방도가 없을까 궁리하게 되었습니다.
 

먼저 이런 목적으로 나온 프로그램이 있나 검색해 보았습니다. 있긴 있었습니다. 근데 죄다 유료거나, 무료인 것은 실행 중 버그로 인해 종료되거나 하는 등의 상황으로 도저히 쓸 수가 없더군요. 그래서 직접 쓸 목적으로 조잡하게나마 직접 만들어 보았습니다.
 

먼저 입력 파일을 만들었습니다. cmd에서 간단하게 DIR *.dwg /s /b > DWGlist.txt 명령을 내려 각 DWG 파일의 경로가 줄 단위로 구분된 파일을 만들었지요. 그 다음에는 시행착오를 거쳐 VBA 코드를 짰습니다. AutoCAD에서 VBA를 쓰는 건 처음이라 좀 힘들었지만, 의외로 생각보다 도움말이 잘 되어 있더군요.
 

제가 짠 코드는 다음과 같습니다.

Option Explicit

Function loadFileToList(filePath)
'지정된 텍스트 파일을 1줄씩 읽어 배열로 반환한다.
    Dim line As String
    Dim fileNum As Integer
    Dim element As Variant
    Dim list() As String '동적 배열 선언
    Dim i As Long: i = 0
    
    fileNum = FreeFile()
    Open filePath For Input Access Read As #fileNum
    
    Do While Not EOF(fileNum)
        Line Input #fileNum, line
        If line <> "" Then
            ReDim Preserve list(i)
            list(i) = line
            i = i + 1
        End If
    Loop
    
    Close #fileNum
    loadFileToList = list
End Function

Function allDwgTextToList()
'DWG 파일 안의 모든 텍스트 데이터를 배열에 저장한다.
    Dim mSpaceObj As AcadObject
    Dim count As Integer: count = ThisDrawing.ModelSpace.count
    Dim i As Long
    Dim j As Long: j = 0
    Dim text As String
    Dim textList() As String '동적 배열 선언
    
    For i = 0 To count - 1
        Set mSpaceObj = ThisDrawing.ModelSpace.Item(i)
        On Error Resume Next '텍스트 속성이 없으면 그냥 무시
        text = mSpaceObj.TextString
        If text <> "" Then
            ReDim Preserve textList(j)
            textList(j) = text
            j = j + 1
        End If
    Next

    allDwgTextToList = textList
End Function

Sub listToFile(textList, filePath)
'배열을 받아, 그 배열의 내용을 지정된 파일에 기록한다.
    Dim fileNum As Integer
    Dim element As Variant
    
    fileNum = FreeFile()
    Open filePath For Append As #fileNum
    
    For Each element In textList
        Print #fileNum, Chr(9); element
    Next
    
    Write #fileNum, '빈 줄 추가
    Close #fileNum
    
End Sub

Sub main()
    '여기서 각 필요 파일 이름을 수동으로 지정
    Dim dwgFileListPath As String: dwgFileListPath = "Z:\WORK\DWGlist.txt"
    Dim resultFilePath As String: resultFilePath = "Z:\WORK\DWGtext.txt"
    
    Dim fileList() As String
    Dim element As Variant
    Dim fileNum As Integer
    Dim ReadOnly As Boolean
    
    '파일 목록 불러오기
    fileList = loadFileToList(dwgFileListPath)
    
    For Each element In fileList
        On Error Resume Next 'DWG 파일 열다가 에러가 나도 그냥 다음 파일로 넘어가기
        AutoCAD.Documents.Open element, ReadOnly = True
        
        '텍스트 내용이 있는 파일 이름 적어주기
        fileNum = FreeFile()
        Open resultFilePath For Append As #fileNum
        Write #fileNum, element
        Close #fileNum
        
        '파일을 실제로 열어, 그 중 텍스트 부분을 추출한다
        listToFile allDwgTextToList, resultFilePath
        
        AutoCAD.Documents.Close
    Next
End Sub

이걸 짜는데 모두 5시간쯤 걸렸군요. 이제 가서 좀 쉬어야겠습니다. 으헤헤헤.
 

p.s.
근데, 이걸 돌려도 과연 5만 7천장의 도면 중에서 과연 원하는 것을 찾을 수 있을지는 잘 모르겠군요.



  • profile
    순딩sheep      회사에서 살아남기 2016.10.01 11:35
    오토캐드에 VBA있는건 이 글 보고 첨 알았네요.
  • profile
    쮸쀼쮸쀼 2016.10.01 15:52
    네. 오토캐드에도 VBA가 있습니다. 근데 자세히 알아보니 2014버전인가 2015버전부터는 빠져 있어서 별도로 설치해야 하는 모양이네요.
  • profile
    쮸쀼쮸쀼 2016.10.02 04:15
    참고 : https://gigglehd.com/gg/soft/382230
  • profile
    곰양 2016.10.04 23:34
    눈팅 모드 가 많은 저로서는 쮸쀼님 글이 많이 도움이 되었네요.
    이 자리를 빌어 감사드립니다.

작성된지 4주일이 지난 글에는 새 코멘트를 달 수 없습니다.


  1. 등록된 글이 없습니다.
목록
Board Pagination Prev 1 2 3 4 5 Next
/ 5

MSI 코리아
더함
한미마이크로닉스
AMD

공지사항        사이트 약관        개인정보취급방침       신고와 건의


기글하드웨어는 2006년 6월 28일에 개설된 컴퓨터, 하드웨어, 모바일, 스마트폰, 게임, 소프트웨어, 디지털 카메라 관련 뉴스와 정보, 사용기를 공유하는 커뮤니티 사이트입니다.
개인 정보 보호, 개인 및 단체의 권리 침해, 사이트 운영, 관리, 제휴와 광고 관련 문의는 이메일로 보내주세요. 관리자 이메일

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소