Microsoft PowerPoint - 06-Body Data Class.pptx

Similar documents
Microsoft PowerPoint - 07-Data Manipulation.pptx

Microsoft PowerPoint - 09-Object Oriented Programming-3.pptx

Microsoft PowerPoint - 03-Points.pptx

Microsoft PowerPoint D View Class.pptx

Microsoft PowerPoint - 06-Pointer and Memory.pptx

Microsoft PowerPoint - 12-Custom Classes.pptx

Microsoft PowerPoint - 04-Lines.pptx

Microsoft PowerPoint - 04-Model Class.pptx

Microsoft PowerPoint - 02-GUI Basics.pptx

PowerPoint Template

Microsoft PowerPoint - 02-Class Review.pptx

윈도우시스템프로그래밍

歯MDI.PDF

쉽게 풀어쓴 C 프로그래밍

윈도우시스템프로그래밍

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

제8장 자바 GUI 프로그래밍 II

04_오픈지엘API.key

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

Open GL

윈도우시스템프로그래밍

PowerPoint 프레젠테이션

Çмú´ëȸ¿Ï¼º

2012³â8¿ùÈ£˙ȸš

PowerPoint Presentation

슬라이드 1

PowerPoint 프레젠테이션

슬라이드 1

슬라이드 1

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

목 록( 目 錄 )

02-1기록도전( )

03-1영역형( )

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 )

Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일

C 언어 프로그래밊 과제 풀이

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

Chapter #01 Subject

서강대학교 공과대학 컴퓨터공학과 CSE4170 기초 컴퓨터 그래픽스 중간고사 (1/8) [CSE4170: 기초 컴퓨터 그래픽스] 중간고사 (담당교수: 임 인 성) 답은 연습지가 아니라 답안지에 기술할 것. 있는 변환 행렬은 일반적으로 어떤 좌표계 에서 어떤 좌표계로의

Microsoft PowerPoint - lecture2-opengl.ppt [호환 모드]

Microsoft Word - cg07-midterm.doc

歯Lecture2.PDF

EMBARCADERO TECHNOLOGIES (Humphery Kim) RAD Studio : h=p://tech.devgear.co.kr/ : h=p://blog.hjf.pe.kr/ Facebook : h=p://d.com/hjfactory :

Javascript

Microsoft PowerPoint - lecture15-ch6.ppt

C++-¿Ïº®Çؼ³10Àå

UI TASK & KEY EVENT

Microsoft PowerPoint - Java7.pptx

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

UI TASK & KEY EVENT

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - lecture19-ch8.ppt

C 프로그래밊 개요

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

Ver 1.0 마감하루전 Category Partitioning Testing Tool Project Team T1 Date Team Information 김강욱 김진욱 김동권

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

PowerPoint Presentation

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

03장

13주-14주proc.PDF

10장.key

<B9CCB5F0BEEE20C1A4BAB8C3B3B8AE2E687770>

11강-힙정렬.ppt

adfasdfasfdasfasfadf

untitled

신림프로그래머_클린코드.key

PowerPoint Template

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

설계란 무엇인가?

유니티 변수-함수.key

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

MATLAB and Numerical Analysis

chap8.PDF

PowerPoint 프레젠테이션

제품 특징 PC에서 마우스/키보드로 사용 Motion Ring은 사용자의 동작을 인식하는 3D 공간 인식 센서 가 장착되어 있어 정해진 제스처를 사용하여 마우스나 키보드 로 사용할 수 있습니다. - 일반적인 마우스와 키보드 없이 인터넷 웹 페이지를 사용하 거나 프레젠테

Microsoft Word - cg08-final-answer.doc

Chap04(Signals and Sessions).PDF

DLL(Dynamic Linked Library)

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt

Microsoft PowerPoint - additional08.ppt [호환 모드]

캐빈의iOS프로그램팁01

untitled

02 C h a p t e r Java

01-OOPConcepts(2).PDF

PowerSHAPE 따라하기 Calculate 버튼을 클릭한다. Close 버튼을 눌러 미러 릴리프 페이지를 닫는다. D 화면을 보기 위하여 F 키를 누른다. - 모델이 다음과 같이 보이게 될 것이다. 열매 만들기 Shape Editor를 이용하여 열매를 만들어 보도록

gnu-lee-oop-kor-lec06-3-chap7

그래픽 프로그래밍

<4D F736F F F696E74202D20C1A63139C0E520B9E8C4A120B0FCB8AEC0DA28B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

PowerPoint Presentation

Promise for Safe & Comfortable Driving

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

Chapter_02-3_NativeApp

C++ Programming

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

슬라이드 1

1장. 유닉스 시스템 프로그래밍 개요

Transcription:

Digital 3D Anthropometry 6. Body Data Class Sungmin Kim SEOUL NATIONAL UNIVERSITY Body Data Class 의설계 Body Model 의관리 인체데이터입출력 데이터불러오기 인체모델그리기 TOpenGL의확장 프로젝트관리 프로젝트저장 / 불러오기 추가기능구현 좌표축정렬 Face, Wireframe, Translucent 보기 GUI 이슈 화면일부에 TOpenGL 구현 Introduction 2

Class 의설계 생성자와파괴자 class public: (); ~(); ; TModel3D void *Model; LoadModel(AnsiString); ::() Model=0; ::~() if (Model) delete Model; Model=0; 3 Class 의설계 인체모델불러오기 void ::LoadModel(AnsiString N) if (Model) delete Model; Model=new TModel3D; AnsiString E=ExtractFileExt(N).UpperCase(); if (E==".PLY") Model->LoadFromASCIIPLY(N); if (E==".STL") Model->LoadFromBinarySTL(N); 4

인체데이터의표시 테스트프로그램제작 기본 SDI 프로그램제작 BodyAnalyzer.bpr 로저장 메뉴와 TOpenDialog 를추가 Filter 를설정 DefaultExt=ply Name=LOADBODY InitialDir=. Options 중 ofoverwriteprompt, ofhidereadonly, ofextensiondifferent, ofpathmustexist, offilemustexist, ofcreateprompt, ofshareaware = true 5 인체데이터의표시 테스트프로그램제작 TMainForm.h #include ".h" class TMainForm : public TForm TOpenGL *GL; *Body; ; TMainForm.cpp fastcall TMainForm::TMainForm(TComponent* Owner) : TForm(Owner) GL=0; Body=0; void fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action) if (GL) delete GL; GL=0; if (Body) delete Body; Body=0; Action=caFree; 6

인체데이터의표시 테스트프로그램의제작 Begin New Project Handler 작성 void fastcall TMainForm::BeginNewProject1Click(TObject *Sender) LOADBODY->FileName=""; if (LOADBODY->Execute()) if (Body) delete Body; Body=new ; Body->LoadModel(LOADBODY->FileName); FormPaint(this); 7 인체데이터의표시 테스트프로그램의제작 FormPaint 에서인체데이터를그리기 void fastcall TMainForm::FormPaint(TObject *Sender) if (GL) GL->BeginDraw(Canvas->Handle); if (Body) Body->Draw(GL); GL->EndDraw(Canvas->Handle);.h #include "TOpenGL.h" class public: void Draw(TOpenGL*); ;.cpp void ::Draw(TOpenGL *GL) if (Model) GL->Draw(Model); 8

인체데이터의표시 TOpenGL 클래스에 TModel3D 를그리는함수를추가 TOpenGL.h #include "TModel3D.h" // TPoint3D.h 대신 class TOpenGL Draw(TModel3D*); ; TOpenGL.cpp void TOpenGL::Draw(TModel3D *M) int i,j; glbegin(gl_triangles); for(i=0;i<m->elemnum;i++) for(j=0;j<3;j++) int e=m->elem[i*3+j]; glnormal3f(m->normal[e].x,m->normal[e].y,m->normal[e].z); glcolor3f(m->color[e].x,m->color[e].y,m->color[e].z); glvertex3f(m->node[e].x,m->node[e].y,m->node[e].z); glend(); 9 인체데이터의표시 인체데이터불러오기 ASCII Ply 기본시점을 100 에서 2000 으로변경 Binary STL 10

프로젝트관리 프로젝트저장 / 불러오기함수구성 메뉴및다이얼로그박스구성 표준적인파일저장하기 / 불러오기용으로설정 파일확장자는 prj 정도로 11 프로젝트관리 메뉴핸들러작성 void fastcall TMainForm::LoadProject1Click(TObject *Sender) LOADPROJECT->FileName=""; if (LOADPROJECT->Execute()) if (Body) delete Body; Body=new ; Body->LoadFromFile(LOADPROJECT->FileName); FormPaint(this); void fastcall TMainForm::SaveProject1Click(TObject *Sender) if (Body) SAVEPROJECT->FileName=""; if (SAVEPROJECT->Execute()) Body->SaveToFile(SAVEPROJECT->FileName); 12

프로젝트관리 프로젝트저장 / 불러오기함수작성 void ::SaveToFile(AnsiString N) TNewFileStream *F=new TNewFileStream(N,fmCreate); F->WInt(1); // yyyy-mm-dd (date) Model->SaveToFileStream(F); delete F; void ::LoadFromFile(AnsiString N) TNewFileStream *F=new TNewFileStream(N,fmOpenRead); int Version; F->RInt(&Version); Model=new TModel3D; Model->LoadFromFileStream(F); delete F; 13 추가기능구현 좌표축정렬 모델을 X, Y, Z 축으로회전시키는기능이필요함 일단좌표축을그려야함 void TOpenGL::DrawAxis(float l) gldisable(gl_lighting); glbegin(gl_lines); glcolor3f(1,0,0); glvertex3f(0,0,0); glvertex3f(l,0,0); glcolor3f(0,1,0); glvertex3f(0,0,0); glvertex3f(0,l,0); glcolor3f(0,0,1); glvertex3f(0,0,0); glvertex3f(0,0,l); glend(); glenable(gl_lighting); void fastcall TMainForm::FormPaint(TObject *Sender) if (GL) GL->BeginDraw(Canvas->Handle); GL->DrawAxis(1000); if (Body) Body->Draw(GL); GL->EndDraw(Canvas->Handle); 14

추가기능구현 좌표축정렬 다이얼로그박스만들기 void fastcall TRotateModelDialog::Button1Click(TObject *Sender) Result=1; Close(); void fastcall TRotateModelDialog::Button2Click(TObject *Sender) Result=0; Close(); 15 추가기능구현 좌표축정렬 메뉴추가및핸들러작성 void fastcall TMainForm::RotateModel1Click(TObject *Sender) if (Body) RotateModelDialog->ShowModal(); if (RotateModelDialog->Result) int axis; if (RotateModelDialog->X->Checked) axis=0; if (RotateModelDialog->Y->Checked) axis=1; if (RotateModelDialog->Z->Checked) axis=2; Body->RotateModel(axis,RotateModelDialog->ANGLE->Text.ToDouble()); FormPaint(this); 16

추가기능구현 좌표축정렬 모델을회전하는함수작성 void ::RotateModel(int axis,float angle) angle=angle*m_pi/180.0f; TPoint3D O; O.Set(0,0,0); if (axis==0) Model->Rotate(O,angle,0,0); if (axis==1) Model->Rotate(O,0,angle,0); if (axis==2) Model->Rotate(O,0,0,angle); 17 추가기능구현 Face, Wireframe, Translucent 보기 메뉴추가 void fastcall TMainForm::FaceWireframe1Click(TObject *Sender) if (Body) Body->ViewFace=1-Body->ViewFace; FormPaint(this); void fastcall TMainForm::OpaqueTranslucent1Click(TObject *Sender) if (Body) Body->Opaque=1-Body->Opaque; FormPaint(this); 18

추가기능구현 Face, Wireframe, Translucent 보기.h 와 TModel3D.h 에 ViewFace,Opaque 변수를추가 ::() Model=0; ViewFace=1; Opaque=1; void ::Draw(TOpenGL *GL) if (Model) Model->ViewFace=ViewFace; Model->Opaque=Opaque; GL->Draw(Model); TModel3D::TModel3D() NodeNum=0; Node=Color=Normal=0; ElemNum=0; Elem=0; ViewFace=1; Opaque=1; 19 추가기능구현 Face, Wireframe, Translucent 보기 TOpenGL 의 Draw 함수를수정 void TOpenGL::Draw(TModel3D *M) int i,j,e; float o; TPoint3D *N,*C,*P; N=M->Normal; C=M->Color; P=M->Node; if (M->ViewFace) glbegin(gl_triangles); if (M->Opaque) o=1.0f; else o=0.5f; for(i=0;i<m->elemnum;i++) for(j=0;j<3;j++) e=m->elem[i*3+j]; glnormal3f(n[e].x,n[e].y,n[e].z); glcolor4f(c[e].x,c[e].y,c[e].z,o); glvertex3f(p[e].x,p[e].y,p[e].z); glend(); else for(i=0;i<m->elemnum;i++) glbegin(gl_line_loop); for(j=0;j<3;j++) e=m->elem[i*3+j]; glnormal3f(n[e].x,n[e].y,n[e].z); glcolor3f(c[e].x,c[e].y,c[e].z); glvertex3f(p[e].x,p[e].y,p[e].z); glend(); 20

추가기능구현 Face, Wireframe, Translucent 보기 Translucent 표현을위해 BeginDraw 를수정 void TOpenGL::BeginDraw(HDC DC) glenable(gl_color_material); glenable( GL_BLEND); glblendfunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 21 GUI 이슈 화면일부에 TOpenGL 구현 화면일부에 TOpenGL을구현하고나머지에 UI 를구성하려면? 여러개의 TOpenGL 을하나의창에구현하려면? PFD_DRAW_TO_BITMAP? 의외로잘작동하지않음 Panel과 Timer를써서해결가능 22

GUI 이슈 화면일부에 TOpenGL 구현 LEFT RIGHT 23 GUI 이슈 화면일부에 TOpenGL 구현 void fastcall TMainForm::FormCreate(TObject *Sender) GL=new TOpenGL(GetDC(RIGHT->Handle),0,0,RIGHT->Width,RIGHT->Height); void fastcall TMainForm::FormResize(TObject *Sender) if (GL) delete GL; GL=new TOpenGL(GetDC(RIGHT->Handle),0,0,RIGHT->Width,RIGHT->Height); Redraw(); FormPaint 를 Redraw 로교체 모든 FormPaint(this) 를 Redraw() 로교체 void fastcall TMainForm::Redraw() if (GL) GL->BeginDraw(GetDC(RIGHT->Handle)); GL->DrawAxis(1000); if (Body) Body->Draw(GL); GL->EndDraw(GetDC(RIGHT->Handle)); 24

GUI 이슈 화면일부에 TOpenGL 구현 Timer event 에서 Redraw 를호출해서화면을강제갱신 void fastcall TMainForm::Timer1Timer(TObject *Sender) Redraw(); Form 의 mouse event handler 를 RIGHT 의 mouse event handler 로교체 void fastcall TMainForm::RIGHTMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) if (GL) GL->MouseDown(Button,Shift,X,Y); void fastcall TMainForm::RIGHTMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) if (GL) if (GL->MouseMove(Shift,X,Y)) Redraw(); void fastcall TMainForm::RIGHTMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) if (GL) GL->MouseUp(Button,Shift,X,Y); 25 GUI 이슈 화면일부에 TOpenGL 구현 26

GUI 이슈 화면일부에 TOpenGL 구현 UI 구성 메뉴와직접관련된버튼들은 OnClick 이벤트에메뉴의이벤트핸들러를연결 27 GUI 이슈 화면일부에 TOpenGL 구현 Rotate 버튼의 handler 구현 void fastcall TMainForm::Button4Click(TObject *Sender) if (Body) Body->RotateModel(AXIS->ItemIndex,ANGLE->Text.ToDouble()); Redraw(); 부분 OpenGL 렌더링을써서 Dialog box 보다더간단한 UI 구성이가능 28