Microsoft PowerPoint - 07-Data Manipulation.pptx

Similar documents
Microsoft PowerPoint - 06-Body Data Class.pptx

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

Microsoft PowerPoint - 03-Points.pptx

Microsoft PowerPoint - 12-Custom Classes.pptx

Microsoft PowerPoint - 04-Lines.pptx

Microsoft PowerPoint - 06-Pointer and Memory.pptx

Microsoft PowerPoint - 04-Model Class.pptx

Microsoft PowerPoint - 02-GUI Basics.pptx

Microsoft PowerPoint - 02-Class Review.pptx

PowerPoint Template

윈도우시스템프로그래밍

유니티 변수-함수.key

C++ Programming

Microsoft PowerPoint D View Class.pptx

쉽게 풀어쓴 C 프로그래밍

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

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

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

01-OOPConcepts(2).PDF

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

13주-14주proc.PDF

슬라이드 1

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

K&R2 Reference Manual 번역본

untitled

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

Microsoft PowerPoint - 09-CE-5-윈도우 핸들

쉽게 풀어쓴 C 프로그래밍

歯9장.PDF

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

; struct point p[10] = {{1, 2, {5, -3, {-3, 5, {-6, -2, {2, 2, {-3, -3, {-9, 2, {7, 8, {-6, 4, {8, -5; for (i = 0; i < 10; i++){ if (p[i].x > 0 && p[i

윈도우시스템프로그래밍

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

슬라이드 1

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

PowerPoint 프레젠테이션

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

설계란 무엇인가?

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

C++ Programming

C프로-3장c03逞풚

歯처리.PDF

chap10.PDF

어댑터뷰

UNIST_교원 홈페이지 관리자_Manual_V1.0


PowerPoint 프레젠테이션

adfasdfasfdasfasfadf

ThisJava ..

PowerPoint 프레젠테이션

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

Data structure: Assignment 3 Seung-Hoon Na December 14, 2018 레드 블랙 트리 (Red-Black Tree) 1 본 절에서는 레드 블랙 트리를 2-3트리 또는 2-3-4트리 대한 동등한 자료구조로 보고, 두 가지 유형의 레

untitled

PowerPoint 프레젠테이션

04_오픈지엘API.key

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

(8) getpi() 함수는정적함수이므로 main() 에서호출할수있다. (9) class Circle private double radius; static final double PI= ; // PI 이름으로 로초기화된정적상수 public

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt

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

Microsoft PowerPoint - 04-UDP Programming.ppt

PowerPoint Presentation

C 프로그래밊 개요

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

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

chap8.PDF

슬라이드 1

Microsoft PowerPoint - Chapter 6.ppt

슬라이드 1

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

rmi_박준용_final.PDF

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

윈도우시스템프로그래밍

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

intro

3. 1 포인터란 3. 2 포인터변수의선언과사용 3. 3 다차원포인터변수의선언과사용 3. 4 주소의가감산 3. 5 함수포인터

B _01_M_Korea.indb


설계란 무엇인가?

슬라이드 1

슬라이드 1

PowerPoint Template

Microsoft PowerPoint - C++ 5 .pptx

PowerPoint Template

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

ȸº¸115È£

11강-힙정렬.ppt

PowerPoint Presentation

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

Microsoft PowerPoint - hci2-lecture12 [호환 모드]

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

UML

Modern Javascript

05-class.key

Microsoft PowerPoint - IP11.pptx

<4D F736F F F696E74202D2034C5D8BDBAC6AEC6C4C0CFC0D4C3E2B7C2312E505054>

비긴쿡-자바 00앞부속

080629_CFP °ø°³¿ë.hwp

JUNIT 실습및발표

오버라이딩 (Overriding)

Transcription:

Digital 3D Anthropometry 7. Data Analysis Sungmin Kim SEOUL NATIONAL UNIVERSITY Body 기본정보표시 Introduction 스케일조절하기 단면형상추출 단면정보관리 3D 단면형상표시 2

기본정보표시및스케일조절 UI 및핸들러구성 void fastcall TMainForm::BeginNewProject1Click(TObject *Sender) LOADBODY->FileName=""; if (LOADBODY->Execute()) SetInformation(); TListBox INFO TEdit SCALE void fastcall TMainForm::LoadProject1Click(TObject *Sender) LOADPROJECT->FileName=""; if (LOADPROJECT->Execute()) SetInformation(); void fastcall TMainForm::SetInformation() if (Body) Body->GetInformation(INFO); 3 기본정보표시 void TBodyData::GetInformation(TListBox *L) Model->GetSize(); L->Items->Clear(); L->Items->Add("Width = "+AnsiString((int)(Model->Mx-Model->mx))); L->Items->Add("Height = "+AnsiString((int)(Model->My-Model->my))); L->Items->Add("Depth = "+AnsiString((int)(Model->Mz-Model->mz))); 스케일변경 void fastcall TMainForm::Button5Click(TObject *Sender) if (Body) Body->Scale(SCALE->Text.ToDouble()); SetInformation(); void TBodyData::Scale(float r) Model->Scale(r); 4

단면위치표시하기 class TBodyData bool TModel3D float ; ShowPlane; *Plane; PlaneHeight; TCheckBox SHOWPLANE TEdit HEIGHT TBodyData::TBodyData() Plane=new TModel3D; Plane->FormPlane(1000,1000,1,1,0,255,0); Plane->Opaque=0; PlaneHeight=0; TBodyData::~TBodyData() delete Plane; Plane=0; 5 단면위치를표시하기 void fastcall TMainForm::Redraw() if (GL) GL->BeginDraw(GetDC(RIGHT->Handle)); GL->DrawAxis(1000); if (Body) Body->ShowPlane=SHOWPLANE->Checked; Body->Draw(GL); GL->EndDraw(GetDC(RIGHT->Handle)); void TBodyData::Draw(TOpenGL *GL) if (Model) Model->ViewFace=ViewFace; Model->Opaque=Opaque; GL->Draw(Model); if (ShowPlane) GL->Draw(Plane,0,PlaneHeight,0); // offset 6

단면위치표시하기 void TOpenGL::Draw(TModel3D *M) Draw(M,0,0,0); void TOpenGL::Draw(TModel3D *M,float x,float y,float z) if (M->ViewFace) glvertex3f(p[e].x+x,p[e].y+y,p[e].z+z); glend(); else glvertex3f(p[e].x+z,p[e].y+y,p[e].z+z); glend(); 7 단면위치표시하기 Set Plane 버튼의핸들러작성 Up/Down 버튼을만들어서더편리하게할수도있음 (Homework) void fastcall TMainForm::Button6Click(TObject *Sender) if (Body) Body->PlaneHeight=HEIGHT->Text.ToDouble(); 8

주어진위치에서단면을추출하기 삼각형요소와단면의교점들을모두찾기 단면을리스트로관리하기 SHOWSECTION S_NAME S_LIST 9 단면형상을저장할 TBodySection 클래스설계 #include class TBodySection public: ; "TPoint3D.h" TBodySection(); ~TBodySection(); AnsiString int TPoint3D Name; PointNum; *Point; TBodySection::TBodySection() Name=""; PointNum=0; Point=0; TBodySection::~TBodySection() if (Point) delete[]point; Point=0; PointNum=0; 10

Get 버튼의이벤트핸들러구성 void fastcall TMainForm::Button7Click(TObject *Sender) if (Body) AnsiString N=S_NAME->Text; if (N=="") return; if (Body->FindSection(N)!=-1) Application->MessageBox("Section already exists","caution",mb_iconexclamation MB_OK); return; Body->AddSection(N,Body->PlaneHeight); S_LIST->Items->Add(N); void fastcall TMainForm::SetInformation() if (Body) Body->GetInformation(INFO); S_LIST->Items->Clear(); for(i=0;i<body->sectionnum;i++) S_LIST->Items->Add(Body->Section[i]->Name); 11 TBodyData 클래스수정 #include class TBodyData public: "TBodySection.h" TBodyData::TBodyData() SectionNum=0; Section=0; ; bool int TBodySection int void ShowSection; SectionNum; **Section; FindSection(AnsiString N); AddSection(AnsiString N,float y); TBodyData::~TBodyData() if (Section) for(i=0;i<sectionnum;i++) delete Section[i]; free(section); Section=0; SectionNum=0; 12

FindSection 함수 이름으로 Section 을검색 해당하는 Section 이없으면 -1 을리턴 int TBodyData::FindSection(AnsiString N) for(i=0;i<sectionnum;i++) if (Section[i]->Name==N) return i; return -1; // not found 13 단면과모델의교차점갯수세기 void TBodyData::AddSection(AnsiString N,float y) TPoint3D O,NM,p1,p2; O.Set(0,y,0); NM.Set(0,1,0); int i,j,k,num=0; float d; int *is=new int[model->elemnum*3]; // 교차하는점의갯수를계산 for(i=0;i<model->elemnum;i++) for(j=0;j<3;j++) k=(j==2)? 0 : j+1; p1=model->node[model->elem[i*3+j]]-o; p2=model->node[model->elem[i*3+k]]-o; d=(p1*nm)*(p2*nm); if (d<=0) is[i*3+j]=1; num++; else is[i+j]=0; 14

Section 을추가하기 TBodySection* TBodyData::AddSection(AnsiString N) Section=(TBodySection**)realloc(Section,sizeof(TBodySection*)*(SectionNum+1)); Section[SectionNum]=new TBodySection; Section[SectionNum]->Name=N; return Section[SectionNum++]; Section 삭제하기 Delete 버튼핸들러구현 void fastcall TMainForm::Button8Click(TObject *Sender) if (Body) int n=s_list->itemindex; if (n!=-1) Body->DeleteSection(n); SetInformation(); 15 Section 삭제하기 void TBodyData::DeleteSection(int s) delete Section[s]; for(i=s;i<sectionnum-1;i++) Section[i]=Section[i+1]; SectionNum--; if (!SectionNum) free(section); Section=0; else Section=(TBodySection**)realloc(Section,sizeof(TBodySection*)*SectionNum); 16

교차점을찾아 Section 에추가하기 void TBodyData::AddSection(AnsiString N,float y) TBodySection *S=AddSection(N); S->Point=new TPoint3D[num]; for(i=0;i<model->elemnum;i++) for(j=0;j<3;j++) k=(j==2)? 0 : j+1; if (is[i*3+j]) // 교차한다면 p1=model->node[model->elem[i*3+j]]-o; p2=model->node[model->elem[i*3+k]]-o; S->Point[S->PointNum++]=GetIntersection(NM,p1,p2)+O; delete []is; 17 교차점찾기 TPoint3D TBodyData::GetIntersection(TPoint3D &V,TPoint3D &A,TPoint3D &B) TPoint3D D=A.Direction(B); if (!(V*D)) if (A.Length()<B.Length()) return A; else return B; float k=-(v*a)/(v*d); TPoint3D R; R=D*k+A; return R; float TPoint3D::Length() return sqrt(x*x+y*y+z*z); 18

교차점 3D 표시하기 void fastcall TMainForm::Redraw() if (GL) GL->BeginDraw(GetDC(RIGHT->Handle)); GL->DrawAxis(1000); if (Body) Body->ShowPlane=SHOWPLANE->Checked; Body->ShowSection=SHOWSECTION->Checked; Body->Draw(GL); GL->EndDraw(GetDC(RIGHT->Handle)); 19 교차점 3D 표시하기 void TBodyData::Draw(TOpenGL *GL) if (Model) Model->ViewFace=ViewFace; Model->Opaque=Opaque; GL->Draw(Model); if (ShowPlane) GL->Draw(Plane,0,PlaneHeight,0); // offset if (ShowSection) for(i=0;i<sectionnum;i++) GL->DrawPoints(Section[i]->PointNum,Section[i]->Point,3,255,0,0); 20

교차점 3D 표시하기 DrawPoints 함수정의 void TOpenGL::DrawPoints(int num,tpoint3d *p,int s,float r,float g,float b) gldisable(gl_lighting); glcolor3f(r,g,b); glpointsize(s); glbegin(gl_points); for(i=0;i<num;i++) glvertex3f(p[i].x,p[i].y,p[i].z); glend(); glenable(gl_lighting); 21 TOpenGL 에점그리는함수정의 void fastcall TMainForm::SHOWPLANEClick(TObject *Sender) void fastcall TMainForm::SHOWSECTIONClick(TObject *Sender) 22