Microsoft PowerPoint - 03-Points.pptx

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

Microsoft PowerPoint - 04-Lines.pptx

Microsoft PowerPoint - 06-Body Data Class.pptx

Microsoft PowerPoint - 07-Data Manipulation.pptx

Microsoft PowerPoint - 06-Pointer and Memory.pptx

Microsoft PowerPoint - 02-GUI Basics.pptx

Microsoft PowerPoint - 12-Custom Classes.pptx

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

PowerPoint Template

KNK_C_05_Pointers_Arrays_structures_summary_v02

윤성우의 열혈 TCP/IP 소켓 프로그래밍

; 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

歯MDI.PDF

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

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

윈도우시스템프로그래밍

슬라이드 1

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

Microsoft PowerPoint D View Class.pptx

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

Microsoft PowerPoint - Java7.pptx

C. KHU-EE xmega Board 에서는 Button 을 2 개만사용하기때문에 GPIO_PUSH_BUTTON_2 과 GPIO_PUSH_BUTTON_3 define 을 Comment 처리 한다. D. AT45DBX 도사용하지않기때문에 Comment 처리한다. E.

윈도우시스템프로그래밍

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

슬라이드 1

UI TASK & KEY EVENT

Chapter #01 Subject

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

01-OOPConcepts(2).PDF

chap8.PDF

MPLAB C18 C

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft PowerPoint - 02-Class Review.pptx

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

Something that can be seen, touched or otherwise sensed

PowerPoint 프레젠테이션

02장.배열과 클래스

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

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

C++ Programming

untitled

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

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

슬라이드 1

C# Programming Guide - Types

Microsoft PowerPoint - Chapter 6.ppt

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

C++ Programming

C프로-3장c03逞풚

윈도우시스템프로그래밍

歯처리.PDF

untitled

윈도우시스템프로그래밍

Week3

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

MVVM 패턴의 이해

untitled

K&R2 Reference Manual 번역본

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

Ext JS À¥¾ÖÇø®ÄÉÀ̼ǰ³¹ß-³¹Àå.PDF

PowerPoint Presentation

02 C h a p t e r Java

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

ISP and CodeVisionAVR C Compiler.hwp

PowerPoint Presentation

슬라이드 1

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

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

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

Microsoft PowerPoint - chap10-함수의활용.pptx

¾Ë·¹¸£±âÁöħ¼�1-ÃÖÁ¾

01....b

2007백서-001-특집

(291)본문7

00목차

Chapter 1

Interstage5 SOAP서비스 설정 가이드

OCW_C언어 기초

Microsoft PowerPoint - C++ 5 .pptx

슬라이드 1

1

유니티 변수-함수.key

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


PowerPoint Presentation

쉽게 풀어쓴 C 프로그래밍

鍮뚮┰硫붾돱??李⑤낯

Structure and Interpretation of Computer Programs: Assignment 3 Seung-Hoon Na October 4, George (아래 3개의 문제에 대한 구현이 모두 포함된 george.rkt파일을 제출하시오.

오버라이딩 (Overriding)

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

05-class.key

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

adfasdfasfdasfasfadf

PowerPoint 프레젠테이션

rmi_박준용_final.PDF

untitled

Transcription:

Development of Fashion CAD System 3. Points Sungmin Kim SEOUL NATIONAL UNIVERSITY Points Topics MDI 기반 프로그램 설계 Child 창에서 패턴을 설계 패턴 형상과 관련된 모든 데이터는 Child 창에서 관리 Event-driven 구조의 기초 Point 정의 및 화면 표시 x,y 좌표를 입력해서 점을 생성하고 화면에 표시 화면 좌표계와 실제 좌표계의 상호 변환 구조체 (Struct)사용을 통한 코드 개선 사용자와의 상호작용 화면 확대, 축소, 이동 등의 구현 마우스를 써서 복수의 점을 선택 선택된 점을 이용한 새로운 점의 정의 2

Framework MDI Structure 기본적인 MDI 구조만들기 Chapter 2 에서다룬방법으로 MDI 기본틀을제작 C++ Builder Projects\PatternCAD 폴더에 PatternCAD.bpr 로저장 Main Form 창에다음과같은메뉴를추가 Caption 변경 (Project-Options 의 Application-Title 도변경 ) Caption 에 &New Project 와같이 & 을추가하면밑줄이그어짐 ( 단축키 ) Caption 을 - 로하면가로줄이생김 (Separator) 3 Framework MDI Structure 기본적인 MDI 구조만들기 New Project 메뉴의 event handler 를다음과같이수정 void fastcall TMainForm::NewWindow1Click(TObject *Sender) new TChildForm(Application,"NewProject-"+AnsiString(MDIChildCount+1)+".Pattern"); Child창 (TChildForm 클래스 ) 을만들때창이름 (caption) 으로쓸문자열을전달 MDIChildCount 는 MainForm 의 property 중하나로, 열려있는 Child 창의수를나타냄.Pattern 는파일이름확장자 TChildForm.h 와 TChildForm.cpp 의소스를다음과같이수정 Source (cpp) 에서사용될함수, 변수, 클래스의모든정의는 header (h) 에서이루어져야함 header fastcall TChildForm(TComponent* Owner,AnsiString); source fastcall TChildForm::TChildForm(TComponent* Owner,AnsiString C) : TForm(Owner) Caption=C; 4

Point Definition 좌표입력을통한점의정의 다이얼로그박스를이용 File-New-Form 으로새로운폼을하나생성하고 property를변경 BorderIcons 모두 false BorderStyle bsdialog Caption Input Coordinate Name PointXYDialog Position poscreencenter TPointXYDialog.cpp 로 Save Control 들을올려놓고 property를변경 TEdit 의 Name 은 X, Y, Text=0 TButton 의 Caption 은 Ok 와 Cancel 5 Point Definition 좌표입력을통한점의정의 다이얼로그박스를이용 버튼의이벤트핸들러작성 void fastcall TPointXYDialog::Button1Click(TObject *Sender) Result=1; Close(); void fastcall TPointXYDialog::Button2Click(TObject *Sender) Result=0; Close(); TPointXYDialog.h 에 Result 변수를추가 fastcall TPointXYDialog(TComponent* Owner); int Result; 6

Point Definition 좌표입력을통한점의정의 다이얼로그박스부르기 TChildForm 에다음메뉴를추가 Event handler 추가 void fastcall TChildForm::AddXY1Click(TObject *Sender) PointXYDialog->ShowModal(); if (PointXYDialog->Result==1) X[PointNum]=PointXYDialog->X->Text.ToDouble(); Y[PointNum]=PointXYDialog->Y->Text.ToDouble(); PointNum++; 7 Point Definition 좌표입력을통한점의정의 다이얼로그박스부르기 TChildForm.h 소스수정 fastcall TChildForm(TComponent* Owner,AnsiString); int PointNum; float X[1000],Y[1000]; TChildForm.cpp 소스수정 시작할때점의갯수를 0 으로초기화 #include "TChildForm.h" #include "TPointXYDialog.h fastcall TChildForm::TChildForm(TComponent* Owner,AnsiString C) : TForm(Owner) Caption=C; PointNum=0; 8

Point Definition 점표시하기 좌표계의이해 +y 0 +x 0 +x +y Real world coordinate system Screen coordinate system 9 점표시하기 좌표변환 S S x y = SC = SC x y + ( R x ( R y O ) R x O y Point Definition ) R (x1, y1) (Ox,Oy) SC (Screen Center) (x2, y2) 10

Point Definition 점표시하기 좌표변환 창모양에무관하게표시가가능해야함 W = Screen Width, H w = x 2 x, 1 h = y 1 y 2 = Screen Height 1. If W H R = W / w If R h > H R = H/h 2. If W < H R = H / h If R w > W R = W/w 11 Point Definition 점표시하기 좌표변환 TChildForm.cpp 에다음코드를추가 void fastcall TChildForm::FitToWindow(float x1,float y1,float x2,float y2) OX=(x1+x2)/2; OY=(y1+y2)/2; float W=(float)ClientWidth; float H=(float)ClientHeight; SCx=W/2; SCy=H/2; float w=x2-x1; float h=y1-y2; if (W>H) R=W/w; if (R*h>H) R=H/h; else R=H/h; if (R*w>W) R=W/w; float fastcall TChildForm::GetSX(float rx) return SCx+(rx-OX)*R; float fastcall TChildForm::GetSY(float ry) return SCy-(ry-OY)*R; float fastcall FitToWindow(float,float,float,float); float fastcall GetSX(float rx); float fastcall GetSY(float ry); 필요한함수 / 변수는 TChildForm.h 에선언 ; float SCx,SCy,OX,OY,R; 12

Point Definition 점표시하기 화면에그리기 Windows 에서화면을갱신하는원리 O/S WM_SHOW WM_PAINT WM_RESIZE 13 Point Definition 점표시하기 화면에그리기 각각의 event handler 를작성 void fastcall TChildForm::FormPaint(TObject *Sender) Canvas->Pen->Color=clWhite; Canvas->Brush->Color=clWhite; Canvas->Rectangle(0,0,ClientWidth,ClientHeight); Canvas->Pen->Color=clLime; Canvas->Brush->Color=clYellow; float x,y; x=getsx(-500);y=getsy(0); Canvas->MoveTo(x,y); x=getsx(500);y=getsy(0); Canvas->LineTo(x,y); x=getsx(0);y=getsy(-500); Canvas->MoveTo(x,y); x=getsx(0);y=getsy(500); Canvas->LineTo(x,y); Canvas->Pen->Color=clBlack; int i; for(i=0;i<pointnum;i++) x=getsx(x[i]); y=getsy(y[i]); Canvas->Ellipse(x-3,y-3,x+3,y+3); void fastcall TChildForm::FormResize(TObject *Sender) FitToWindow(-500,500,500,-500); FormPaint(this); void fastcall TChildForm::FormShow(TObject *Sender) FormResize(this); 14

Point Definition 점표시하기 화면에그리기 점추가기능수정 void fastcall TChildForm::AddXY1Click(TObject *Sender) FormPaint(this); 15 Struct 구조체 (Struct) 서로연관있는데이터를하나로묶으면좋지않을까? Point 의좌표 x, y 변수가따로있어서여러모로귀챦음 관련된변수를모아서하나의 구조체 변수로선언할수있음 기본형변수와동일한논리로처리된다 TChildForm.h 에구조체를선언 struct ptpoint float x,y; ; class TChildForm : public TForm 16

Struct 구조체 TChildForm.h 에서변수를구조체로다시선언한다 int float void float float float PointNum; X[1000],Y[1000]; fastcall FitToWindow(float x1,float y1,float x2,float y2); fastcall GetSX(float rx); fastcall GetSY(float ry); SCx,SCy,OX,OY,R; int ptpoint void ptpoint PointNum; Point[1000]; fastcall FitToWindow(float x1,float y1,float x2,float y2); fastcall Screen(float rx,float ry); ptpoint SC,O; float R; 17 Struct 구조체 TChildForm.cpp 소스를수정 void fastcall TChildForm::FitToWindow(float x1,float y1,float x2,float y2) O.x=(x1+x2)/2; O.y=(y1+y2)/2; float W=(float)ClientWidth; float H=(float)ClientHeight; SC.x=W/2; SC.y=H/2; float w=x2-x1; float h=y1-y2; if (W>H) R=W/w; if (R*h>H) R=H/h; else R=H/h; if (R*w>W) R=W/w; ptpoint fastcall TChildForm::Screen(float rx,float ry) ptpoint P; P.x=SC.x+(rx-O.x)*R; P.y=SC.y-(ry-O.y)*R; return P; void fastcall TChildForm::AddXY1Click(TObject *Sender) PointXYDialog->ShowModal(); if (PointXYDialog->Result==1) Point[PointNum].x=PointXYDialog->X->Text.ToDouble(); Point[PointNum].y=PointXYDialog->Y->Text.ToDouble(); PointNum++; FormPaint(this); 18

Struct 구조체 TChildForm.cpp 소스를수정 void fastcall TChildForm::FormPaint(TObject *Sender) Canvas->Pen->Color=clWhite; Canvas->Brush->Color=clWhite; Canvas->Rectangle(0,0,ClientWidth,ClientHeight); Canvas->Pen->Color=clLime; Canvas->Brush->Color=clYellow; ptpoint P; P=Screen(-500,0); Canvas->MoveTo(P.x,P.y); P=Screen(500,0); Canvas->LineTo(P.x,P.y); P=Screen(0,-500); Canvas->MoveTo(P.x,P.y); P=Screen(0,500); Canvas->LineTo(P.x,P.y); Canvas->Pen->Color=clBlack; int i; for(i=0;i<pointnum;i++) P=Screen(Point[i].x,Point[i].y); Canvas->Ellipse(P.x-3,P.y-3,P.x+3,P.y+3); 19 User Interaction 관심영역설정 화면의확대 / 축소 / 이동 ChildForm의마우스입력 event handler 처리 TChildForm.h 에변수추가 bool ptpoint DragStart,Zooming; Start; TChildForm.cpp 에서변수초기화 fastcall TChildForm::TChildForm(TComponent* Owner,AnsiString C): TForm(Owner) DragStart=false; void fastcall TChildForm::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) if (!DragStart) DragStart=true; if (Button==mbRight) Zooming=true; else Zooming=false; Start.x=(float)X; Start.y=(float)Y; 20

User Interaction 관심영역설정 화면의확대 / 축소 / 이동 ChildForm 의마우스입력 event handler 처리 void fastcall TChildForm::FormMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) if (DragStart) float dx=(float)x-start.x; float dy=(float)y-start.y; if (Zooming==true) if (dy<0) R*=1.01; else R*=0.99; else O.x-=dx/R; O.y+=dy/R; Start.x=(float)X; Start.y=(float)Y; FormPaint(this); void fastcall TChildForm::FormMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) if (DragStart) DragStart=false; 21 User Interaction 관심영역설정 화면의확대 / 축소 / 이동 ChildForm 에초기화면으로돌리는메뉴를추가 void fastcall TChildForm::InitialView1Click(TObject *Sender) FormResize(this); 22

개체의선택 화면상의점을선택 Ctrl Key+Mouse 왼쪽클릭을써서선택 Shift 를누르고선택하면여러개를선택가능 선택된점은특이하게표시 User Interaction TChildForm.h 에변수와함수추가 int int ptpoint int SelPointNum; SelPoint[100]; fastcall Real(float sx,float sy); fastcall FindPoint(int x,int y); TChildForm.cpp 에서변수초기화 fastcall TChildForm::TChildForm(TComponent* Owner,AnsiString C) : TForm(Owner) SelPointNum=0; 23 User Interaction 개체의선택 TChildForm.cpp 의수정 Mouse event handler 수정및함수정의 void fastcall TChildForm::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) if (!DragStart) if (Shift.Contains(ssCtrl)) int p=findpoint(x,y); if (!Shift.Contains(ssShift)) SelPointNum=0; if (p!=-1) SelPoint[SelPointNum]=p; else SelPointNum++; FormPaint(this); DragStart=true; if (Button==mbRight) Zooming=true; else Zooming=false; Start.x=(float)X; Start.y=(float)Y; ptpoint fastcall TChildForm::Real(float sx,float sy) ptpoint P; P.x=(sx-SC.x)/R+O.x; P.y=O.y-(sy-SC.y)/R; return P; int fastcall TChildForm::FindPoint(int x,int y) ptpoint P=Real(x,y); int i,minp=-1; float d,mind=100; for(i=0;i<pointnum;i++) d=sqrt((point[i].x-p.x)*(point[i].x-p.x)+(point[i].y-p.y)*(point[i].y-p.y)); if (d<mind) MinD=d; MinP=i; return MinP; 24

User Interaction 개체의선택 TChildForm.cpp 의수정 FormPaint 함수의수정 void fastcall TChildForm::FormPaint(TObject *Sender) Canvas->Pen->Color=clRed; Canvas->Brush->Style=bsClear; for(i=0;i<selpointnum;i++) P=Screen(Point[SelPoint[i]].x,Point[SelPoint[i]].y); Canvas->Ellipse(P.x-5,P.y-5,P.x+5,P.y+5); Canvas->Brush->Style=bsSolid; 25 More Points 다양한점의정의 선택한점들을이동시켜서다른점들을생성 두개의점을내분하는위치에다른점을생성 ChildForm 의메뉴에명령을추가 26

More Points 다양한점의정의 선택한점들을이동시켜서만드는경우 Add Move Points 메뉴의 handler 를작성 void fastcall TChildForm::MovePoint1Click(TObject *Sender) if (SelPointNum==0) return; PointXYDialog->ShowModal(); if (PointXYDialog->Result==1) int i; float x=pointxydialog->x->text.todouble(); float y=pointxydialog->y->text.todouble(); for(i=0;i<selpointnum;i++) Point[PointNum].x=Point[SelPoint[i]].x+x; Point[PointNum].y=Point[SelPoint[i]].y+y; PointNum++; FormPaint(this); 27 More Points 다양한점의정의 두점의내분점에새점을만드는경우 내분비율을입력하는 dialog 를하나만든다 TDividePointDialog 로저장 Add Divide 2 Points 메뉴 handler 를작성 void fastcall TChildForm::AddDividePoint1Click(TObject *Sender) if (SelPointNum!=2) Application->MessageBox("Select two points","caution",mb_iconexclamation MB_OK); return; DividePointDialog->ShowModal(); if (DividePointDialog->Result) float m=dividepointdialog->m->text.todouble(); float n=dividepointdialog->n->text.todouble(); Point[PointNum].x=(m*Point[SelPoint[1]].x+n*Point[SelPoint[0]].x)/(m+n); Description Point[PointNum].y=(m*Point[SelPoint[1]].y+n*Point[SelPoint[0]].y)/(m+n); 세개의버튼 PointNum++; 버튼 FormPaint(this); 두개의버튼 두개의버튼 두개의버튼 세개의버튼 28