[vba]CAD도면 작성-문자열 쓰기(DXF)
도면파일(DXF 파일)에 내가 원하는 문자열을 쓰기
작성의도 : 도면 작성 자동화
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
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 ( &; )가 나타나는 위치에 문자가 있으면, 그 문자를 표시한다. 그렇지 않으면, 아무 것도 표시하지 않는다. 문자표시자를 우측부터 좌측으로 채워진다. 다만, 느낌표( ! )가 있으면, 좌측부터 우측으로 채운다. |
< | 소문자로 표시. 모든 문자를 소문자로 표시한다. |
> | 대문자로 표시. 모든 문자를 대문자로 표시한다. |
! | 문자표시자의 좌측부터 문자를 채움. 기본은 문자표시자의 우측부터 채운다. |
[예제]
세 칸 안에 숫자를 출력한다. 해당 자리에 숫자가 없으면 빈칸으로 처리한다. 오른쪽 정렬로 표시한다.
1 2 3 4 5 6 7 8 9 |
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", ">") |
위 예제의 출력 결과는 다음과 같다.
1 2 3 4 5 6 7 8 9 |
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파일을 출력하는 코드이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
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명령어를 처리하는 함수는 다음과 같이 작성할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
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 함수를 사용 (큰따옴표로 묶인 문자열)
자료의 문자열을 큰따옴표가 있는 텍스트 파일로 쓴다.
1 2 3 4 5 6 7 |
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 |
이 프로그램의 실행결과는 다음과 같다.
1 |
"Hello, World!" |
문자열을 큰따옴표로 묶인다는 점을 잊지 말자.
[해법2] Print 함수를 사용 (큰따옴표가 없는 문자열)
1 2 3 4 5 6 7 |
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 |
이 프로그램의 실행결과는 다음과 같다.
1 |
Hello, World! |
아마도 Print함수를 쓸 경우가 많을 것이다.
[참고]
Excerpted from http://analystcave.com/vba-write-file-vba/
[ubuntu]IP setup
[문제]
서버로 사용하던 컴퓨터를 교체하였다. 그 컴퓨터를 다른 네트워크에 물려서 검사하려 했다. 서버일 때는 고정 IP를 사용하였으나, 자동 IP를 사용해야 했다.
[해결]
ubuntu에서 IP 설정하기
1 2 3 4 5 6 7 8 9 10 |
$sudo ifdown eth0 $sudo vi /etc/network/interfaces auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp $sudo ifup eth0 |
How to know the size of a file, a directory, or a disk
ls -l, which only displays the size of the individual files in a directory, nor
df -h, which only displays the free and used space on my disks.
The command du “summarizes disk usage of each FILE, recursively for directories,” e.g.,
du -hs /path/to/directory
-h is to get the numbers “human readable”, e.g. get 140M instead of 143260 (size in KBytes)
-s is for summary (otherwise you’ll get not only the size of the folder but also for everything in the folder separately)
migration from ubuntu to mac mini
[문제1]
우분투 서버가 계속 문제를 일으켰다. 하드웨어 문제인 것으로 추정된다.
[해결1]
다른 하드웨어로 옮기기로 했다. 현재 보유중인 맥미니로 옮기기로 했다.
[문제2]
우분투 서버의 database를 백업하기
[해결2]
-ubuntu mysql설치 위치
1 |
/var/lib/mysql |
우분투 서버의 /home/mysql 폴더에 데이터파일들을 두고 실행 폴더 안에 링크를 걸어둔 상태였다.
혹시 내부적인 permission이 문제가 될까봐 sudo 명령으로 폴더를 아래와 같이 묶었다.
1 |
$sudo tar -cvf mysql.tar /home/mysql |
[문제3]
데이터베이스를 맥서버로 옮기기
[해결3]
1.맥서버에서 터미널을 통해서 scp로 복사를 한다. 복사할 곳에서 아래 명령어를 실행한다.
1 |
$scp archer@architecture.kunsan.ac.kr:/home/archer/mysql.tar . |
2.묶어둔 것을 푼다.
1 |
$sudo tar -xvf mysql.tar |
3.맥서버에는 mysql소유자가 _mysql이므로, 소유자를 변경한다.
1 |
$sudo chown -R _mysql /home/mysql |
4.macOS mysql설치 위치에 데이터베이스가 복사된 곳의 링크를 걸어둔다.
1 2 |
$cd /usr/local/mysql $sudo ln -s /Volumes/SolarData/home/mysql data |
[문제4]
웹문서를 맥서버로 옮기기
[해결4]
0.우분투서버에서 홈페이지를 tar로 묶는다.
1 |
$sudo tar -cvf www.tar /home/www |
1.맥서버에서 터미널을 통해서 scp로 복사를 한다. 복사할 곳에서 아래 명령어를 실행한다.
1 |
$scp archer@architecture.kunsan.ac.kr:/home/archer/www.tar . |
2.묶어둔 것을 푼다.
1 |
$sudo tar -xvf www.tar |
3.맥서버에는 웹문서소유자가 _www이므로, 소유자를 변경한다.
1 |
$sudo chown -R _www /home/www |
[ubuntu]boot log files
[문제]
서버에 자꾸 다운되면서 작동을 하지 않는다. 무엇이 문제인지 부팅과정부터 확인하고 싶다.
[해결]
부팅할 때 시스템 차원의 경고나 오류가 발생했는지 확인한다. 확인할 파일은 다음과 같다.
1 2 3 |
/var/log/boot.log --- System boot log /var/log/dmesg --- print or control the kernel ring buffer |
1 2 3 4 |
cat /var/log/boot.log | more ... ... cat /var/log/dmesg | more |
학생 졸업작품
지도학생들이 2017년 건축전에 ‘빛환경 개선’이라는 주제로 졸업작품을 냈다.
문제를 파악하고, 해석프로그램으로 개선안을 도출하는 과정을 거쳤다.
You must be logged in to post a comment.