Write DXF Line

Option Explicit

Type Point3D '3차원 점의 좌표를 위한 사용자정의자료형
    X As Double
    Y As Double
    Z As Double
End Type


Public Sub WriteLineDXF(fileNo As Integer, StartPoint As Point3D, EndPoint As Point3D)

 Dim DXFCode As Integer 'DXF Group Code
 Dim DXFValue As Variant 'DXF value
 '
 DXFCode = 0
 Print #fileNo, Format(DXFCode, "@@@")
 DXFValue = "LINE"
 Print #fileNo, DXFValue
 '
 DXFCode = 8
 Print #fileNo, Format(DXFCode, "@@@")
 DXFValue = 0
 Print #fileNo, DXFValue
 '
 DXFCode = 62
 Print #fileNo, Format(DXFCode, "@@@")
 DXFValue = 4
 Print #fileNo, DXFValue
 '
 DXFCode = 10
 Print #fileNo, Format(DXFCode, "@@@")
 DXFValue = StartPoint.X
 Print #fileNo, DXFValue
 '
 DXFCode = 20
 Print #fileNo, Format(DXFCode, "@@@")
 DXFValue = StartPoint.Y
 Print #fileNo, DXFValue
 '
 DXFCode = 30
 Print #fileNo, Format(DXFCode, "@@@")
 DXFValue = StartPoint.Z
 Print #fileNo, DXFValue
 '
 DXFCode = 11
 Print #fileNo, Format(DXFCode, "@@@")
 DXFValue = EndPoint.X
 Print #fileNo, DXFValue
 '
 DXFCode = 21
 Print #fileNo, Format(DXFCode, "@@@")
 DXFValue = EndPoint.Y
 Print #fileNo, DXFValue
 '
 DXFCode = 31
 Print #fileNo, Format(DXFCode, "@@@")
 DXFValue = EndPoint.Z
 Print #fileNo, DXFValue
End Sub
Sub TestFile()
 Dim fileName As String, textData As String, fileNo As Integer
 '
 Dim DXFCode As Integer 'DXF Group Code
 Dim DXFValue As Variant 'DXF value
 '
 
 fileName = "C:\MyChair.DXF" ' for Mac
 fileNo = FreeFile 'Get first free file number
 '
 '
 Open fileName For Output As #fileNo
 '
 DXFCode = 999
 Print #fileNo, Format(DXFCode, "@@@")
 DXFValue = "Created by SolarView"
 Print #fileNo, DXFValue
 '
 DXFCode = 10
 Print #fileNo, Format(DXFCode, "@@@")
 DXFValue = 12.5
 Print #fileNo, DXFValue
 '
 Close #fileNo
End Sub

[.net]네임스페이스와 데이터 타입에 별명 붙이기

길고 복잡한 이름을 갖고 있는 네임스페이스(namespace)나 데이터 타입(data type)에 간단한 별명을 붙여서 사용하면 편리하다. 닷넷에서도 이런 기능을 제공한다.

VB.Net에서 별명을 선언하기

Imports MyInt = System.Int32

선언된 별명을 사용하기

Dim myVariable As MyInt = 4

다음은 Vertex2D를 항목으로 하는 목록을 정의한 것이다.

Imports Path = System.Collections.Generic.List(Of GpcWrapper.Vertex2D)

사용할 때는 다음과 같이 한다.

Public myPath As Path = New Path()

[참고문헌]

https://pietschsoft.com/post/2007/11/26/net-how-to-alias-namespaces-and-data-types

Compile Error

심각도 코드 설명 프로젝트 파일 줄 비표시 오류(Suppression) 상태
경고 기본 참조 “gpc, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL”이(가) 현재 대상 프레임워크에서 확인할 수 없는 프레임워크 어셈블리 “System.Runtime.Serialization.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”에 간접적으로 종속되어 있기 때문에 확인할 수 없습니다. “.NETFramework,Version=v4.0”. 이 문제를 해결하려면 참조 “gpc, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL”을(를) 제거하거나 응용 프로그램의 대상을 “System.Runtime.Serialization.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”이(가) 포함된 프레임워크 버전으로 변경하세요. wraptest

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

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

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

Sub WriteDXFText(FileNumber As Integer, myText As String, Layer As String, x As Double, y As Double, z As Double, TextHeight As Double, Color As Integer, Optional Style As String = "Standard")
    '
    'How to use this subprocedure:
    'WriteDXFText(FileNumber , "my  story goes here.", "0", 10, 15, 0, 3, 1)
    
    '"Text" entity
    Print #FileNumber, Format(0, "@@@")
    Print #FileNumber, "TEXT"
    '
    Print #FileNumber, Format(1, "@@@")
    Print #FileNumber, myText
    '
    'Style Name
    Print #FileNumber, Format(7, "@@@")
    Print #FileNumber, Style
    '
    'Layer Name
    Print #FileNumber, Format(8, "@@@")
    Print #FileNumber, Layer
    '
    '
    'x coordinate of start point
    Print #FileNumber, Format(10, "@@@")
    Print #FileNumber, x
    '
    'y coordinate of start point
    Print #FileNumber, Format(20, "@@@")
    Print #FileNumber, y
    '
    'z coordinate of start point
    Print #FileNumber, Format(30, "@@@")
    Print #FileNumber, z
    '
    'Text Height
    Print #FileNumber, Format(40, "@@@")
    Print #FileNumber, TextHeight
    '
    'Text Color
    Print #FileNumber, Format(62, "@@@")
    Print #FileNumber, Color
    '
End Sub

[vba]Format Function

[문제]
변수를 사용자가 원하는 형식으로 문자열로 출력하기

[설명]
User-Defined String Formats (Format Function) You can use any of the following characters to create a format expression for strings:

Excerpted and translated from Format Function (Visual Basic for Applications)

Character Description
@ 문자 표시자. 문자를 표시하거나, 아니면 공백을 표시한다. 문자열 중에서 골뱅이 ( @ )가 나타나는 위치에 문자가 있으면, 그 문자를 표시한다. 그렇지 않으면 그 자리에 공백을 표시한다. 문자표시자를 우측부터 좌측으로 채워진다. 다만, 느낌표( ! )가 있으면, 좌측부터 우측으로 채운다.
&; 문자 표시자. 문자를 표시하거나, 아니면 아무것도 표시하지 않는다. 문자열 중에서 앰퍼샌드ampersand ( &; )가 나타나는 위치에 문자가 있으면, 그 문자를 표시한다. 그렇지 않으면, 아무 것도 표시하지 않는다. 문자표시자를 우측부터 좌측으로 채워진다. 다만, 느낌표( ! )가 있으면, 좌측부터 우측으로 채운다.
< 소문자로 표시. 모든 문자를 소문자로 표시한다.
> 대문자로 표시. 모든 문자를 대문자로 표시한다.
! 문자표시자의 좌측부터 문자를 채움. 기본은 문자표시자의 우측부터 채운다.

[예제]
세 칸 안에 숫자를 출력한다. 해당 자리에 숫자가 없으면 빈칸으로 처리한다. 오른쪽 정렬로 표시한다.

Print #FileNumber, Format(0, "@@@")
Print #FileNumber, "LINE"
Print #FileNumber, Format(99, "@@@")
Print #FileNumber, Format(999, "@@@")
Print #FileNumber, Format(5459.4, "##,##0.00")
Print #FileNumber, Format(334.9, "###0.00")
Print #FileNumber, Format(5, "0.00%")
Print #FileNumber, Format("HELLO", "<")
Print #FileNumber, Format("This is it", ">")

위 예제의 출력 결과는 다음과 같다.

  0
LINE
 99
999
5,459.40
334.90
500.00%
hello
THIS IS IT

[FYI]
String.Format Method

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

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

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

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

Sub WriteDXFFileTest()
    Dim fileNum As Integer
    Dim fileName As String
    '
    fileNum = FreeFile
    fileName = "C:\DXFTest.dxf"
    '
    Open fileName For Output As #fileNum
    '
    Print #fileNum, Format(999, "@@@")
    Print #fileNum, "Created by SolarView"
    '
    Print #fileNum, Format(0, "@@@")
    Print #fileNum, "SECTION"
    '
    Print #fileNum, Format(2, "@@@")
    Print #fileNum, "ENTITIES"
    '
    Call WriteDXFLine(fileNum, 0, 4, 12.5, 13.5, 0, 100.7, 101.7, 0)
    '
    Print #fileNum, Format(0, "@@@")
    Print #fileNum, "ENDSEC"
    '
    Print #fileNum, Format(0, "@@@")
    Print #fileNum, "EOF"
    '
    Close #fileNum
    '
End Sub

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

Sub WriteDXFLine(FileNumber As Integer, Layer As String, Color As Integer, _
                 X1 As Double, Y1 As Double, Z1 As Double, _
                 X2 As Double, Y2 As Double, Z2 As Double)
    '
    '"Line" entity
    Print #FileNumber, Format(0, "@@@")
    Print #FileNumber, "LINE"
    '
    'Layer Name
    Print #FileNumber, Format(8, "@@@")
    Print #FileNumber, Layer
    '
    'Line Color
    Print #FileNumber, Format(62, "@@@")
    Print #FileNumber, Color
    '
    'x coordinate of start point
    Print #FileNumber, Format(10, "@@@")
    Print #FileNumber, X1
    '
    'y coordinate of start point
    Print #FileNumber, Format(20, "@@@")
    Print #FileNumber, Y1
    '
    'z coordinate of start point
    Print #FileNumber, Format(30, "@@@")
    Print #FileNumber, Z1
    '
    'x coordinate of end point
    Print #FileNumber, Format(11, "@@@")
    Print #FileNumber, X2
    '
    'y coordinate of end point
    Print #FileNumber, Format(21, "@@@")
    Print #FileNumber, Y2
    '
    'z coordinate of end point
    Print #FileNumber, Format(31, "@@@")
    Print #FileNumber, Z2
    '
End Sub

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

[VBA]파일 쓰기

[문제]
-엑셀에서 계산 결과를 텍스트 파일로 저장하고 싶다.

[해법1] Write 함수를 사용 (큰따옴표로 묶인 문자열)

자료의 문자열을 큰따옴표가 있는 텍스트 파일로 쓴다.

Dim fileName As String, textData As String, textRow As String, fileNo As Integer
fileName = "C:\test.txt"
fileNo = FreeFile '사용하지 않는 파일 번호를 가져온다.  
textData ="Hello World!"
Open fileName For Output As #fileNo
Write #fileNo, textData
Close #fileNo

이 프로그램의 실행결과는 다음과 같다.

"Hello, World!"

문자열을 큰따옴표로 묶인다는 점을 잊지 말자.

[해법2] Print 함수를 사용 (큰따옴표가 없는 문자열)

Dim fileName As String, textData As String, textRow As String, fileNo As Integer
fileName = "C:\test.txt"
fileNo = FreeFile '사용하지 않는 파일 번호를 가져온다.    
textData ="Hello World!"
Open fileName For Output As #fileNo
Print #fileNo, textData
Close #fileNo

이 프로그램의 실행결과는 다음과 같다.

Hello, World!

아마도 Print함수를 쓸 경우가 많을 것이다.

[참고]
Excerpted from http://analystcave.com/vba-write-file-vba/

[dxf]AutoCAD DXF Reference

Product Version Size Format
AutoCAD® 2014 v.u.28.1.01 1,114 KB PDF
AutoCAD® 2013 v.u.27.1.01 1,114 KB PDF
AutoCAD® 2012 v.u.26.1.01 1,112 KB PDF
AutoCAD® 2011 v.u.25.1.01 844 KB PDF
AutoCAD® 2010 v.u.24.1.01 842 KB PDF
AutoCAD® 2009 v.u.23.1.01 1.72 MB PDF
AutoCAD® 2008 v.u.22.1.01 1.80 MB PDF
AutoCAD® 2007 v.u.21.1.01 1.07 MB PDF
AutoCAD® 2006 v.u.20.1.01 1.73 MB PDF
AutoCAD® 2005 v.u19.1.01 1.65 MB PDF
AutoCAD® 2004 v.u18.1.01 1502 KB PDF
AutoCAD® 2002 v.u16.1.01 1627 KB PDF
494 KB ZIP
AutoCAD® 2000 v.u15.0.02 n/a HTML
205 KB EXE
204 KB ZIP
AutoCAD® Release 14 v.u14.1.04 n/a HTML
159 KB EXE
161 KB ZIP
AutoCAD® Release 13 v.u13.1.01 97 KB EXE
AutoCAD® Release 12 n/a HTML
AutoCAD® Release 11 n/a HTML
AutoCAD® Release 10 n/a HTML

이상의 내용은 아래 사이트에 한꺼번에 정리되어 있다.
Excerpted from AutoCAD DXF Reference