[vba]CAD도면 작성-문자열 쓰기(DXF)

도면파일(DXF 파일)에 내가 원하는 문자열을 쓰기

작성의도 : 도면 작성 자동화

[vba] CAD도면 작성 – Line 그리기(DXF)

DXF를 사용하면 고품질의 CAD 파일을 출력할 수 있다. 즉 VBA를 통하여 자동으로 도면을 그릴 수 있다. DXF는 AutoCAD와 호환이 되도록 설계된 파일형식이다.

작성의도 : 도면 작성 자동화

아래의 코드는 여기에 있는 DXF파일을 출력하는 코드이다.

LINE명령어를 처리하는 함수는 다음과 같이 작성할 수 있다.

이와 같은 요령으로 AutoCAD의 line뿐만 아니라 circle, arc, pline 등 모든 도면 요소(drawing entities)를 그릴 수 있다.

DXF를 읽어오는 모듈을 정리

과거 동적배열로 된 변수들을 Generic.List와 Generic.Dictionary로 변경하였다. 파일 읽는 시간이 놀랍게 줄었다.
리스트와 딕셔너리도 마치 동적배열처럼 사용할 수 있다.

EnergyPlus의 입력을 DXF로 확인하자

텍스트로 멋진 CAD를 할 수 있는 방법은 DXF를 이용하는 것이다.

에너지플러스(EnergyPlus)는 건물의 에너지해석프로그램으로 최신의 해석기법이 담겨져 있고, 다른 프로그램과 협업이 가능하게 설계되어있다.
건물의 에너지해석이기 때문에 기본적으로 건물의 정보를 입력해야 한다.
건물 정보라는 것이 다들 살고 계시니까 알듯이 3차원의 기하학 정보이다. 정보의 속성상 3차원이다보니, 입력하는 것도 쉽지 않고, 입력이 정확한 지도 확인하기 어렵다.
어떻게 확인하게 할까?

문자로 입력된 정보들을 멋지게 표현하는 것은 바로 DXF이다.

Report개체 안에 다음의 것들을 입력하자.

EnergyPlus- Report Option
에너지플러스에서 입력한 내용을 확인하는 방법
위 그림에서처럼 “Name_of_Report”에서 “dxf:wireframe”을 선택한다.
그러면, 해당 프로젝트의 파일명과 동일하고, 확장자만 dxf인 파일이 생성된다.

DXF란

1) DXF는 Drawing Interchange Format 또는 Drawing Exchange Format의 약자로 AutoDesk사에서 개발한 CAD 호환용 파일 포맷이다.
2) ASCII 형식은, 다음과 같은 파일 구조로 되어 있다.

  • HEADER 섹션. 도면에 대한 일반
    정보가 들어 있다. 이 섹션은 AutoCAD 데이터베이스의 버전 번호와 여러 개의 시스템 변수로 구성된다. 각 매개변수는 변수 이름과
    연관된 값을 포함하고 있다.
  • CLASSES 섹션. 데이터베이스의 BLOCKS,
    ENTITIES 및 OBJECTS 섹션에 그의 복제가 나타나는 응용프로그램 정의 클래스에 대한 정보를 보유하고 있다. 클래스 정의는 클래스
    계층에 고정된다.
  • TABLES 섹션. 다음의 기호 테이블에
    대한 정의가 들어 있다.

APPID (응용프로그램 식별 테이블)

BLOCK_RECORD (블록 참조 테이블)

DIMSTYLE (치수 스타일 테이블)

LAYER (도면층 테이블)

LTYPE (선종류 테이블)

STYLE (텍스트 스타일 테이블)

UCS (사용자 좌표계 테이블)

VIEW (뷰 테이블)

VPORT (뷰포트 구성 테이블)

  • BLOCKS 섹션. 도면의 각 블록
    참조를 구성하는 블록 정의 및 도면요소가 들어 있다.
  • ENTITIES 섹션. 블록 참조(삽입
    도면요소)를 포함해 도면의 그래픽 객체(도면요소)가 들어 있다. ==> 프로그램을 작성할 때 제일 신경써야 하는 부분이다.
  • OBJECTS 섹션. 도면의 비그래픽 객체가 들어 있습니다.
    도면요소 또는 기호 테이블 레코드 또는 기호 테이블이 아닌 객체는 모두 이 섹션에 저장된다. OBJECTS 섹션에 표시되는 항목의 예로는
    다중선 스타일 및 그룹이 포함된 사전을 들 수 있다.
  • THUMBNAILIMAGE 섹션. 도면의 미리보기 이미지
    데이터가 들어 있다. 이 섹션은 선택 사항이다.

DXF를 활용하여 CAD수준의 출력물을 얻자

DXF 파일을 활용하면 CAD 수준의 출력물을 얻을 수 있다.
DXF 파일은 일반 텍스트 파일로 되어 있다.
손수 CAD수준의 그래픽 프로그램을 작성하지 않고, 단순히 텍스트 파일로 출력만 하면, CAD프로그램에서 인식하고 출력할 수 있다. 이 얼마나 놀라운 일인가!

다음과 같이 텍스트 파일[footnote]이것은 R12버전의 DXF이다. 이 버전의 특징은 ENTITIES 섹션만 있어도 개체들을 출력할 수 있다[/footnote]을 만들면 직선 하나가 생긴다.
[참고]
아래 파일을 출력하기 위한 VBA 코드는 여기에 있다.

 

위에서 보는 바와 같이 숫자와 정보가 한 쌍으로 이루어져 있다. 즉 0은 개체에 대하여 이미 예약된 숫자이고, LINE은 개체에 대한 정보이다. 10, 20, 30은 각각 시작점의 x, y, z좌표이며, 11, 21, 31은 끝점의 x, y, z좌표이다. 따라서 직선의 시점은 (12.5, 13.5, 0)이며, 직선의 종점은 (100.7, 101.7, 0)이다. 8은 레이어를 나타나는 숫자이다.
각 숫자에 대한 의미는 개체마다 약간 다르다. 이를 알기 위해서는 다음의 참고문헌을 참조하기 바란다.

DXF 엿보기 – LWPOLYLINE

LWPOLYLINE
– light weight polyline
– 가벼운 폴리라인? 가볍다. 저장할 정보량을 일반 폴리라인에 비하여 적게 만든 폴리라인이다.
– 2D polyline을 말하며, 3D polyline은 DXF상으로 볼 때 POLYLINE으로 저장한다.
– AutoCAD에서 pline명령어를 통해서 입력되며, 점을 입력할 때 z값을 임의로 할 수 없다.
– POLYLINE은 “3dpoly”라는 명령어를 통하여 입력되며, z값을 임의로 입력할 수 있다.
– POLYLINE은 VERTEX정보를 포함하고 있어 정보량이 LWPOLYLINE보다 많다.
– DXF 도움말 : Autodesk의 도움말
– R13[footnote]이 버전에서는 ENTITIES이외의 다른 섹션들이 있어야 한다.[/footnote]부터 지원한다. 즉, R12[footnote]ENTITIES 섹션만 있으면 된다.[/footnote]에서는 인식하지 못한다.