[MFC :: OpenGL] DXF :: Part 3 (옮김)

심플디 2014.04.25 12:47 조회 수 : 1466



clPoint2.h

DXF&EXE.alz

DXF_01.alz

DXF_02.zip


Part 2를 통해 만들어 본, 




DXF 클래스의 대부분 기능에 대한 삭제 및 개선을 통해 




사용 가능한 클래스로 탈바꿈하는 작업을 한다.
























Intro

사실 말하자면 이 게시물을 기점으로 Point data I/O를 시작했어야 옳았다.

하지만, 이는 신중해야 한다.


필자는 그리는것에만 포커스를 맞추지 않고, Edit (편집)에도 포커스를 맞추었기 때문이다.


이를 위해서는 각각의 포인트를 '인식'시켜야 한다.


왜냐하면 '인식'을 통해서 포인트를 '선택' 할 수 있고, '선택'을 통해 '편집'을 할 수 있기 때문이다.


즉, 포인트 하나하나를 인식시켜야 한다.




이것을 어떻게 해야 하는가. 란 생각으로 2틀을 허비했지만, 답이 나오지 않았다.


인덱스 처리를 어떻게 해야 하는가로 시작해서 의문이 꼬리에 꼬리를 물자, 결국 '일단 그려내고 보자.' 란 생각으로 방향을 바꾸었다.


즉, 원래대로라면 Data Type의 소개는 훨씬 이후에 소개했어야 옳다는 것이다.




----------------------------------------------------------------------------------------------------------------------




<그림 1 :: Project OpenGL의 View 클래스의 선언부(.h)의 좌표 변수>


<그림 1>은 이전에 진행했던 ProjectOpenGL 프로젝트의 View클래스 선언부의 U, V를 저장하는 배열에 관련된 변수를 보여주고 있다.

NurbsPoint 배열의 첫번째 인자는 u의 수를, 두번째 인자는 v의 수를, 세번째 인자는 x,y,z (3개)의 수를 나타낸다.


여기서 세번째 인자는 당연히 3이고, 가변변수는 u, v 인자인데, 

불특정 u, v의 값을 정의하는 방법은 이전 게시물을 통해 (파일 긁어오기) 그 방법을 소개했다.

영향력 변수(Knots)의 배열 개수 또한 u, v값의 2배 특성을 갖고 있으므로, 그리기에 필요한 대부분의 모든 조건은 갖추어진 셈이다.


일단 그리기를 위해서 3차 배열을 동적할당해야하는데, 

그것은 첨부파일과 같은 클래스 (clPoint2.h)를 새로 생성시켜서 DXF 프로젝트에 포함시키는 방법으로 해결했다.


clPoint2 클래스는 제 3차 배열을 동적할당하여 사용하고, 해제하기 때문에 그 내용이 다소 길다.

그래서 그림파일로 올리지 못하므로 양해를 구한다.

단, 첨부파일로 올려놓았다.


3차원 동적할당에 대한 문제가 없음을 확인하였으므로, clPoint를 clPoint2로 대체하여 쓸 것이다.


<그림 2 :: clPoint2 클래스 사용을 전역에 선언>


<그림 2>는 clPoint2 클래스의 전역선언을 보여주고 있다.

clPoint 원본과 같은 방식으로 선언되었다.

따라서 이것은 상속의 영향을 받지 않는다.


<그림 3 :: Doc 클래스에 clPoint2 변수 선언>


<그림 3>은 Doc' (문서) 클래스에 clPoint2 변수를 vlPoint2로 선언한 모습을 보여준다.

바로 이것이 중요하다!!!

우리는 Doc 클래스에 변수를 선언하고 View 클래스에서 끌어다 쓸 것이기 때문에, 언젠가는 Doc 클래스에 변수를 선언해야 했다.


이전 게시물까지 기능의 검증을 위해 이리저리 돌려서 프로그래밍을 했기 때문에, 독자의 심기가 심히 불편할것은 알겠는데

어쩔 수 없다. 필자가 알면서 이 프로젝트를 진행하고 있는게 아니라, 모르는 상태에서 하나씩 알아가며 진행하고 있는거라...



<그림 4 :: Doc 클래스의 구현부(.cpp) 수정>


<그림 4>는 clInputManager 클래스의, 메서드 선언을 수정한 모습을 보여주고 있다.

대부분 짐작하겠지만, 이 선언 한큐에 clInputManager 클래스 내부에서 상속된 clPoint계열 클래스들이 전부 무효화 됨 을 알 수 있다.

이것은 매우 중요하다.

왜냐하면 clPoint에서 사용된 모든 기능적인 method 까지 clPoint2로 옮겨야 함을 의미하기 때문이다.


따라서 이전에는 clInputManager 클래스 내부에서 좌표값을 저장했지만,

이제는 그러지 않고 Doc 클래스변수의 좌표를 직접 조작할 수 있다.


<그림 5 :: 오버로딩 메서드 추가>



<그림 5>는 clInputManager 클래스의 메서드 수정모습을 보여준다.

텍스트(코드)를 굳이 고치지 않고 하나 더 선언함으로써, 오버로딩을 도모했다.

clPoint 를 사용하지 않는다고 관련 메서드를 낼름 지우지않는 이유는, 언젠간 사용할 수도 있기 때문이다.

호환성을 생각해서 살려둔것이니, 독자의 입장에서는 굳이 살려둘 이유가 없다.

아무튼 <그림 5>과 같은 방식으로 대부분의 메서드를 수정해 주어야 한다.


<그림 6 :: 수정된 클래스 계열도 (첨부파일 : DXF_01.alz  ) >


<그림 6>은 수정된 클래스 계열도를 보여주고 있다.

물론, clPoint2클래스가 등장하면서 clPoint가 유명무실해졌기 때문에 clPointMana에 관련된 클래스의 삭제도 감행 할 수 있다.


<그림 7 :: 수정된 클래스 계열도 (첨부파일 : DXF_02.zip ) >


그래서 곧 바로 <그림 7>처럼 바꿨다. (<그림 6>에서 <그림 7>로 바꾸는데 160개 이상의 ERROR를 잡아야 했다.)

호환성을 생각해서는 냅두고 싶었지만, 단순함을 추구하자면 냅둘 수 없는 긴 코드여서 그냥 삭제해버렸다.


자 여기까지 했다면 dxf 파일과 exe파일을 갖고, 곧바로 실습에 착수해 보자. (첨부파일 : DXF&EXE.alz )


<그림 8 :: DXF.exe 파일 실행 모습>


<그림 8>은 DXF.exe 파일을 실행시킨 화면이다.

'열기'를 눌러보자.


<그림 9 :: scanning data 파일 열기!!>


<그림 9>는 DXF.exe 실행 중, 파일 열기를 실행시킨 모습이다.

DXF&EXE.alz 압축을 풀었다면 Create DXF(Polylines).dxf 파일이 보일것이다.

그놈을 열기 바란다.

만약 열었다면, 각 단계별로 메시지 박스를 출력하는 모습을 볼 수 있을 것이다.

프로그래스바(진행막대)가 없어서 답답하겠지만, 

프로그램은 오류가 있을때, 즉시즉시 오류 메시지를 출력 하도록 프로그래밍 되어 있으므로 프로그램이 멈추어 있다고 렉먹은양 끄지 않기를 바란다.

(계산 처리량이 컴퓨터가 순간적으로 감당 할 수 없을 때, 계산은 진행되지만 프로그램은 멈추는 현상이 일어난다.)


<그림 10 :: 임시 파일 생성 메시지>

 

<그림 11 :: cal.dat>


<그림 10>과 같은 메시지박스를 보았다면, exe 파일이 있는 폴더에 <그림 11>과 같은 'cal.dat' 파일이 생성된 것이다.

 

 <그림 12 :: cal.dat 내부 모습>


<그림 12>는 cal.dat의 내부 모습이다.


특히 INTRO에 기재된 파일의 내용은 매우 중요하다.

점의 실제 개수는 173,452 개이다. 하지만 배열에 넣어야 하므로 배열상의 점의 개수는 허수까지 합쳐서 852,147, 약 5배가 된다.

또한 float 형이므로 그것의 4배인 3,408,588 바이트가 소모됨을 알 수 있다.

그리고 배열의 u, v, a 개수도 알 수 있다.

x_max, x_min, y_max, y_min, z_max, z_min 의 변수는 돼지저금통의 각축에 대한 최대 최소값을 나타낸다.

Auto CAD 2010으로 x축만 재 보았는데, 같은 결과가 나왔다.

(y, z축을 안한 이유는 노트북이 너무 느리기 때문이다. 이 프로젝트는 노트북으로 진행되고 있다.)


사실 cal.dat 출력은 주석 처리해도 상관 없다.

그래도 cal.dat 출력을 해보는 이유는 vlPoint2 변수에 점 데이타가 무사히 들어갔는지 확인해보기 위해서다.

무사히 들어갔음을 알았다면 정말로 주석 처리해도 상관 없다.


번호 제목 글쓴이 날짜 조회 수
공지 본 게시글의 첨부파일 권한 심플디 2014.08.22 2401
47 [MFC :: OpenGL] 컴공 수업 발표 자료 (옮김) [2] 심플디 2014.04.25 2899
46 [MFC :: OpenGL] Project 시즌 2 후기 (옮김) 심플디 2014.04.25 1585
45 [MFC :: OpenGL] File output (옮김) 심플디 2014.04.25 1519
44 [MFC :: OpenGL] Tool bar(툴바) 편집방법 (옮김) 심플디 2014.04.25 1840
43 [MFC :: OpenGL] IntroPage (옮김) file 심플디 2014.04.25 1518
42 [MFC :: OpenGL] IPC 적용 (옮김) file 심플디 2014.04.25 1574
41 MFC :: OpenGL] ProjectMFCReport 와꾸짜기 (옮김) 심플디 2014.04.25 1734
40 [MFC :: OpenGL] Data Dialog 와꾸짜기 (옮김) 심플디 2014.04.25 1728
39 [MFC :: OpenGL] 시즌 2 개요 (옮김) file 심플디 2014.04.25 1515
38 [MFC :: OpenGL] Project 시즌 2 시작 (옮김) [1] 심플디 2014.04.25 1522
37 [MFC :: OpenGL] Project 시즌 1 후기 (옮김) file 심플디 2014.04.25 1584
36 [MFC :: OpenGL] Mesh :: Part 2 (옮김) [1] file 심플디 2014.04.25 1551
35 [MFC :: OpenGL] Mesh :: Part 1 (옮김) file 심플디 2014.04.25 1600
34 [MFC :: OpenGL] DXF :: Part 5 (옮김) file 심플디 2014.04.25 1592
33 [MFC :: OpenGL] DXF :: Part 4 (옮김) file 심플디 2014.04.25 1490
» [MFC :: OpenGL] DXF :: Part 3 (옮김) file 심플디 2014.04.25 1466
31 [MFC :: OpenGL] DXF :: Part 2 (옮김) file 심플디 2014.04.25 1523
30 [MFC :: OpenGL] DXF :: Part 1 (옮김) file 심플디 2014.04.25 1566
29 [MFC :: OpenGL] Proposal 및 앞으로의 계획 (옮김) 심플디 2014.04.25 1557