計(jì)算機(jī)圖形學(xué)_第1頁
計(jì)算機(jī)圖形學(xué)_第2頁
計(jì)算機(jī)圖形學(xué)_第3頁
計(jì)算機(jī)圖形學(xué)_第4頁
計(jì)算機(jī)圖形學(xué)_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

課程設(shè)計(jì)報(bào)告課程名稱計(jì)算機(jī)圖形學(xué)課題名稱交互式繪圖系統(tǒng)專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班級0902班學(xué)號200903010208姓名陳瑾指導(dǎo)教師劉長松曹燚2012年10月9日

湖南工程學(xué)院課程設(shè)計(jì)任務(wù)書課程名稱計(jì)算機(jī)圖形學(xué)課題交互式繪圖系統(tǒng)專業(yè)班級計(jì)算機(jī)0902學(xué)生姓名陳瑾學(xué)號200903010208指導(dǎo)老師劉長松曹燚審批任務(wù)書下達(dá)日期2012年9月15日任務(wù)完成日期2012年10月9日一、設(shè)計(jì)內(nèi)容與設(shè)計(jì)要求1.設(shè)計(jì)內(nèi)容:用橡皮法實(shí)現(xiàn)交互式繪圖系統(tǒng)。2.設(shè)計(jì)要求:在屏幕上可以選擇不同的命令、來實(shí)現(xiàn)不同基本圖形的繪制。完成橡皮筋直線,橡皮筋圓,橡皮筋矩形框,多邊形裁剪和3階B樣條曲線的作圖,且要有比較友好的界面。3.算法提示:首先在屏幕上畫出菜單和繪圖窗口,顯示鼠標(biāo)。點(diǎn)擊相應(yīng)菜單,點(diǎn)擊鼠標(biāo),移動(dòng)鼠標(biāo),獲取鼠標(biāo)移動(dòng)相對位置,畫出相應(yīng)圖形。相關(guān)變量定義:#define_MOUSE鼠標(biāo)

#defineCIRCLE1圓#defineLINE2直線

#defineRECTANGLE3矩形

#include"stdio.h"

#include"string.h"

#include"graphics.h"

#include"math.h"

#include<dos.h>

unionREGSinreg,outreg;

structSREGSsr;相關(guān)函數(shù):voidmeun(intx,inty,char*str)

{

setcolor(8);

outtextxy(x+5,28,str);

setcolor(15);

line(x,22,x,40);

line(x,22,y,22);

setcolor(8);

line(x,40,y,40);

line(y,22,y,40);

}voiddrawwindows()畫窗口

{

setbkcolor(7);/*7*/

setcolor(8);

rectangle(0,20,640,460);

rectangle(0,0,640,20);

setfillstyle(1,1);

floodfill(1,1,8);

rectangle(0,460,640,480);

setfillstyle(1,15);

floodfill(1,461,8);

setcolor(RED);

outtextxy(10,468,"FinishedByXuYuanFei.");

setcolor(15);

line(0,41,640,41);

line(0,459,640,459);

setcolor(8);

line(0,42,640,42);

setcolor(15);

rectangle(610,3,630,17);

setfillstyle(1,7);

floodfill(611,4,15);

setcolor(8);

line(610,17,630,17);

line(630,3,630,17);

line(611,4,628,16);

line(611,16,628,4);

rectangle(2,44,635,459);

setcolor(15);

rectangle(3,45,634,458);

line(611,3,628,15);

line(611,15,628,3);

meun(5,55,"line");

meun(65,165,"rectangle");

meun(175,250,"circle");

meun(260,330,"Bezer");

meun(340,400,"Cut");

}

int_cut()裁剪voidmycircle(doublex,doubley,doubler)畫圓

{

doublei;

for(i=0.0;i<360.0;i=i+4)

line(x+r*cos((i+1)/360*3.1415*2),y+r*sin((i+1)/360*3.1415*2),x+r*cos((i+4.0)/360*3.1415*2),y+r*sin((i+4.0)/360*3.1415*2));

}

void_Bezer(inta[3],intb[3],intm)Beizier曲線voidDisplayMouse()顯示鼠標(biāo){

inreg.x.ax=1;

int86(0x33,&inreg,&outreg);

}voidCloseMouse()關(guān)閉鼠標(biāo){

inreg.x.ax=2;

int86(0x33,&inreg,&outreg);

}unionREGSDisplayMouseStatus()顯示鼠標(biāo)狀態(tài){

inreg.x.ax=3;

int86(0x33,&inreg,&outreg);

returnoutreg;

}voidGetMouseXY(int*x,int*y)得到鼠標(biāo)位置{

DisplayMouse();

outreg=DisplayMouseStatus();

*x=outreg.x.cx;

*y=outreg.x.dx;

}響應(yīng)相應(yīng)函數(shù)void_mytreat(intoldx,intoldy,intx,inty)

{

if(num==1)

{

if(flag==LINE)

{

line(px,py,oldx,oldy);

line(px,py,x,y);

}

if(flag==CIRCLE)

{

mycircle(px,py,sqrt((double)((px-oldx)*(px-oldx)+(py-oldy)*(py-oldy))));

mycircle(px,py,sqrt((double)((px-x)*(px-x)+(py-y)*(py-y))));

}

if(flag==RECTANGLE)

{

rectangle(px,py,oldx,oldy);

rectangle(px,py,x,y);

}

}

}二、進(jìn)度安排第3周星期一8:00——12:00星期二8:00——12:00星期三8:00——12:00星期四8:00——12:00星期五8:00——12:00第4周星期一8:00——12:00附:課程設(shè)計(jì)報(bào)告裝訂順序:封面、任務(wù)書、目錄、正文、附件(A4大小的圖紙及程序清單)、評分。正文的格式:一級標(biāo)題用3號黑體,二級標(biāo)題用四號宋體加粗,正文用小四號宋體;行距為22。正文的內(nèi)容:一、課題的主要功能;二、課題的功能模塊的劃分(要求畫出模塊圖);三、主要功能的實(shí)現(xiàn)(至少要有一個(gè)主要模塊的流程圖);四、程序調(diào)試;五、總結(jié);六、附件(所有程序的原代碼,要求對程序?qū)懗霰匾淖⑨專?。正文總字?jǐn)?shù)要求在5000字以上(不含程序原代碼)。目錄概述……………1功能模塊的劃分………………2主要功能的實(shí)現(xiàn)………………3程序調(diào)試………4總結(jié)……………5附錄……………6概述交互式系統(tǒng):隨著計(jì)算機(jī)繪圖技術(shù)的廣泛應(yīng)用,交互處理已是必不可少的容。一個(gè)交互圖形系統(tǒng)使用戶能動(dòng)態(tài)的輸入坐標(biāo)位置,指定選擇功能,設(shè)置交換參數(shù),以及在圖形顯示期間能夠?qū)嫔系哪承┎糠诌M(jìn)行修改、刪除、增添、存儲(chǔ)和在顯示操作,且能全部徒手繪圖。交互式繪圖軟件系統(tǒng)都為用戶提供了一個(gè)交互工作環(huán)境,稱交互界面。通常在圖形顯示方式,把屏幕劃分為圖形區(qū),菜單區(qū)和提示區(qū)。交互式繪圖系統(tǒng)的基本功能一般可歸納為繪圖功能、圖形編輯、尺寸標(biāo)準(zhǔn)、作圖工具、顯示功能、詢問功能、信息轉(zhuǎn)換、和二次開發(fā)工具。橡皮筋技術(shù):橡皮筋技術(shù)是在平面上確定一條直線一般是先定下起點(diǎn)再定下終點(diǎn),最后把起點(diǎn)和終點(diǎn)連成直線。如果要求這條直線能通過平面上某一點(diǎn)或和一已知圓相切,上述方法便不易做得很準(zhǔn)確。所謂橡皮筋技術(shù)就是在起點(diǎn)確定后,光標(biāo)移出去定終點(diǎn)時(shí),在屏幕上始終顯示一條連接起點(diǎn)和光標(biāo)中心的直線,這條直線隨著光標(biāo)中心位置的變動(dòng)而變動(dòng),它就像在起點(diǎn)和光標(biāo)中心之間緊緊地拉著一根橡皮筋,有了這根橡皮筋便比較容易地找到通過一個(gè)點(diǎn)或和一個(gè)圓相切的直線的位置。功能模塊的劃分本程序是采用VC6.0編寫的一個(gè)繪圖系統(tǒng),在屏幕上可以選擇不同的命令、來實(shí)現(xiàn)不同基本圖形和顏色的繪制。通過該系統(tǒng)可以完成橡皮筋直線,橡皮筋圓,橡皮筋矩形框,多邊形裁剪和3階B樣條曲線的作圖,它的設(shè)計(jì)按軟件工程的方法進(jìn)行,系統(tǒng)具有良好的界面、必要的交互信息和簡易的菜單進(jìn)行操作,適合簡單的畫圖,對學(xué)習(xí)用一定的幫助。本程序的功能模塊劃分如下:1、畫點(diǎn):運(yùn)行程序后單擊“繪圖”菜單,選擇“點(diǎn)”后,用鼠標(biāo)在視圖中任意一個(gè)地方,點(diǎn)擊下鼠標(biāo)左鍵便可在視圖中出現(xiàn)一點(diǎn)。2、畫直線:運(yùn)行程序后單擊“繪圖”菜單,選擇“直線”后,用鼠標(biāo)左鍵在視圖框中任意一地方,用來確定直線的起始點(diǎn),點(diǎn)擊鼠標(biāo)左鍵不松,在視圖框中隨意拉動(dòng)鼠標(biāo)便可看見一直線隨鼠標(biāo)的變動(dòng)而變動(dòng),當(dāng)松去左鍵時(shí),便在視圖中畫出一條直線。3、畫矩形:運(yùn)行程序后單擊“繪圖”菜單,選擇“矩形”后,用鼠標(biāo)左鍵在視圖框中隨意點(diǎn)擊任意一個(gè)地方,用來確定矩形的起始點(diǎn),然后按住鼠標(biāo)左鍵不松,隨意改變鼠標(biāo)點(diǎn)的位置用鼠標(biāo),會(huì)有虛框顯示,松下鼠標(biāo)左鍵,即可在視圖中畫出一個(gè)矩形。4、畫圓:運(yùn)行程序后單擊“繪圖”菜單,選擇“圓”后,用鼠標(biāo)左鍵在視圖框中隨意點(diǎn)擊任意一個(gè)地方,用來確定圓的起始點(diǎn),然后,按住左鍵不松,在視圖框任意拉動(dòng)鼠標(biāo),便可看到隨鼠標(biāo)移動(dòng)的圓,當(dāng)松去左鍵時(shí),便可以在視圖框中確定圓行,這樣便畫出了一個(gè)圓。5、設(shè)置線型:運(yùn)行程序后單擊“繪圖”菜單,選擇“設(shè)置”后,跟據(jù)彈出的對話框和實(shí)際的需求選擇畫直線,畫矩形,畫圓的線型,有“實(shí)線”,“虛線”,和“點(diǎn)線”,選定后點(diǎn)擊確定即可。6、設(shè)置顏色:運(yùn)行程序后單擊“繪圖”菜單,選擇“顏色”后,根據(jù)彈出的調(diào)色板選擇自己想要的顏色,然后點(diǎn)擊確定即可。主要功能的實(shí)現(xiàn):編輯對話框:點(diǎn)擊ResourceView中的Menu,雙擊其內(nèi)部的IDR-MAINFRAME,如下圖:便可以編輯菜單選項(xiàng)了。右擊各個(gè)菜單,選擇ClassWizard…彈出對話框如下:對各個(gè)菜單添加功能后,點(diǎn)擊EditCode,便可以編寫函數(shù),其函數(shù)如下:voidCGraphicView::OnDot()//點(diǎn){ //TODO:Addyourcommandhandlercodehere m_nDrawType=1;}voidCGraphicView::OnLine()//直線{ //TODO:Addyourcommandhandlercodehere m_nDrawType=2;}voidCGraphicView::OnRectangle()//矩形{ //TODO:Addyourcommandhandlercodehere m_nDrawType=3;}voidCGraphicView::OnEllipse()//圓{ //TODO:Addyourcommandhandlercodehere m_nDrawType=4;}畫圖功能實(shí)現(xiàn):確定起始點(diǎn),確定圖形;voidCGraphicView::OnLButtonDown(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefaultm_ptOrigin=point;//?eμ?×?±ê m_endpoint=m_ptOrigin; linepointnum=1; CView::OnLButtonDown(nFlags,point);}voidCGraphicView::OnLButtonUp(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefault linepointnum=0; CClientDCdc(this);CPenpen(m_nLineStyle,0,m_clr);dc.SelectObject(&pen); CBrush*pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//í??÷μ??-?¢ dc.SelectObject(pBrush); switch(m_nDrawType){ case1: dc.SetPixel(point,m_clr); break; case2: dc.MoveTo(m_ptOrigin); dc.LineTo(point); break; case3: dc.Rectangle(CRect(m_ptOrigin,point)); break; case4: if(abs(point.y-m_ptOrigin.y)>abs(point.x-m_ptOrigin.x)) { if(point.y>m_ptOrigin.y){ dc.Ellipse(CRect(m_ptOrigin.x,m_ptOrigin.y,point.x,m_ptOrigin.y+abs(point.x-m_ptOrigin.x))); } else { dc.Ellipse(CRect(m_ptOrigin.x,m_ptOrigin.y,point.x,m_ptOrigin.y-abs(point.x-m_ptOrigin.x))); } } else { if(point.x>m_ptOrigin.x) { dc.Ellipse(CRect(m_ptOrigin.x,m_ptOrigin.y,m_ptOrigin.x+abs(point.y-m_ptOrigin.y),point.y)); } else { dc.Ellipse(CRect(m_ptOrigin.x,m_ptOrigin.y,m_ptOrigin.x-abs(point.y-m_ptOrigin.y),point.y)); } } // dc.Ellipse(CRect(m_ptOrigin.x,m_ptOrigin.y,point.x,point.y)); break; } CGraph*pGraph=newCGraph(m_nDrawType,m_ptOrigin,point,m_clr,m_nLineStyle); m_ptrArray.Add(pGraph);CView::OnLButtonUp(nFlags,point);}線條設(shè)置:voidCGraphicView::OnSetting(){ //TODO:Addyourcommandhandlercodehere CSettingDlgdlg; dlg.m_nLineStyle=m_nLineStyle;if(IDOK==dlg.DoModal()){ m_nLineStyle=dlg.m_nLineStyle; } }顏色設(shè)置:voidCGraphicView::OnColor(){ //TODO:Addyourcommandhandlercodehere CColorDialogdlg; dlg.m_cc.Flags|=CC_RGBINIT|CC_FULLOPEN;dlg.m_cc.rgbResult=m_clr; if(IDOK==dlg.DoModal()) { m_clr=dlg.m_cc.rgbResult; }}程序調(diào)試:1、畫點(diǎn)的實(shí)現(xiàn):在“繪圖”菜單中選擇“點(diǎn)”:操作結(jié)果如下顯示:2、畫點(diǎn)的實(shí)現(xiàn):在“繪圖”菜單中選擇“直線”:操作結(jié)果如下顯示:2、畫點(diǎn)的實(shí)現(xiàn):在“繪圖”菜單中選擇“矩形”:操作結(jié)果如下顯示:3、畫點(diǎn)的實(shí)現(xiàn):在“繪圖”菜單中選擇“圓”:操作結(jié)果如下顯示:4、線型實(shí)現(xiàn):在“繪圖”菜單中選擇“設(shè)置”:操作結(jié)果如下顯示:根據(jù)所需,選擇相對的線型。4、線型實(shí)現(xiàn):在“繪圖”菜單中選擇“設(shè)置”:操作結(jié)果如下顯示:選擇想要的顏色即可。選擇虛線和紅色,測試?yán)L圖如下:五、總結(jié):這次課程設(shè)計(jì)的課題是交互式繪圖系統(tǒng),通過這次課程設(shè)計(jì)初步了解了橡皮筋技術(shù)的基本概念以及它在交互式繪圖過程中的作用,使用橡皮筋技術(shù)構(gòu)造直線、矩形和圓的操作過程和方法。經(jīng)過這次課程設(shè)計(jì),不但鞏固了上學(xué)期在課堂上學(xué)的知識,而且還學(xué)到了一些上機(jī)的基本操作,提高了動(dòng)手能力。由于這門課程是上學(xué)期開的,經(jīng)過了一個(gè)暑假,對于這方面的相關(guān)知識有些不太熟悉了,這次課程設(shè)計(jì)給了我一個(gè)很好的溫習(xí)機(jī)會(huì),在做課程設(shè)計(jì)時(shí)不盡盡只是完成這個(gè)任務(wù),使得我重新找出了相關(guān)資料,又認(rèn)認(rèn)真真的將需要用到的一些知識鞏固了,加深了印象同時(shí)鍛煉了動(dòng)手的能力。在整個(gè)過程中,通過解決課程設(shè)計(jì)中出現(xiàn)的問題,提高了解決問題的能力。總之,在老師和同學(xué)的幫助下還算順利的完成了橡皮筋直線、橡皮筋圓、橡皮筋矩形框、多邊形裁剪和3階B 曲線作圖,并且有簡單的圖形界面。雖然只是一次短暫的課程設(shè)計(jì),但受益匪淺。附錄:1、參考文獻(xiàn):(1)唐澤圣周嘉玉李新友編著《計(jì)算機(jī)圖形學(xué)基礎(chǔ)》,北京清華大學(xué)出版社1995;(2)汝傳鄒北軟編著《計(jì)算機(jī)圖形學(xué)》,北京人名郵電出版社2002;(3)網(wǎng)絡(luò)資料。2、源代碼:CGraph類中的函數(shù):#if!defined(AFX_GRAPH_H__40F8ED15_A3A1_4BE2_84D1_949DCCACA01A__INCLUDED_)#defineAFX_GRAPH_H__40F8ED15_A3A1_4BE2_84D1_949DCCACA01A__INCLUDED_#if_MSC_VER>1000#pragmaonce#endif//_MSC_VER>1000classCGraph{public:CPointm_ptOrigin;CPointm_ptEnd; UINTm_nDrawType;COLORREFm_clr; intm_nLineStyle; CGraph(); CGraph(UINTm_nDrawType,CPointm_ptOrigin,CPointm_ptEnd,COLORREFm_clr,intm_nLineStyle); virtual~CGraph();};#endif//!defined(AFX_GRAPH_H__40F8ED15_A3A1_4BE2_84D1_949DCCACA01A__INCLUDED_)//Graph.cpp:implementationoftheCGraphclass.////////////////////////////////////////////////////////////////////////#include"stdafx.h"#include"Graphic.h"#include"Graph.h"#ifdef_DEBUG#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#definenewDEBUG_NEW#endif////////////////////////////////////////////////////////////////////////Construction/Destruction//////////////////////////////////////////////////////////////////////CGraph::CGraph(){}CGraph::CGraph(UINTm_nDrawType,CPointm_ptOrigin,CPointm_ptEnd,COLORREFm_clr,intm_nLineStyle){this->m_nDrawType=m_nDrawType;this->m_ptOrigin=m_ptOrigin;this->m_ptEnd=m_ptEnd;this->m_clr=m_clr;this->m_nLineStyle=m_nLineStyle;}CGraph::~CGraph(){}CGraphicView類中的函數(shù)://GraphicView.cpp:implementationoftheCGraphicViewclass//#include"stdafx.h"#include"Graphic.h"#include"SettingDlg.h"#include"GraphicDoc.h"#include"GraphicView.h"#include"Graph.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CGraphicViewIMPLEMENT_DYNCREATE(CGraphicView,CView)BEGIN_MESSAGE_MAP(CGraphicView,CView) //{{AFX_MSG_MAP(CGraphicView) ON_COMMAND(ID_DOT,OnDot) ON_COMMAND(IDM_LINE,OnLine) ON_COMMAND(IDM_RECTANGLE,OnRectangle) ON_COMMAND(IDM_ELLIPSE,OnEllipse) ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_COMMAND(IDM_SETTING,OnSetting) ON_COMMAND(IDM_COLOR,OnColor) ON_WM_MOUSEMOVE() //}}AFX_MSG_MAP //Standardprintingcommands ON_COMMAND(ID_FILE_PRINT,CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT,CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView::OnFilePrintPreview)END_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CGraphicViewconstruction/destructionCGraphicView::CGraphicView(){ //TODO:addconstructioncodeherem_nDrawType=0;m_ptOrigin=0;m_nLineStyle=0;m_clr=RGB(0,0,0);linepointnum=0;}CGraphicView::~CGraphicView(){}BOOLCGraphicView::PreCreateWindow(CREATESTRUCT&cs){ //TODO:ModifytheWindowclassorstylesherebymodifying //theCREATESTRUCTcs returnCView::PreCreateWindow(cs);}///////////////////////////////////////////////////////////////////////////////CGraphicViewdrawingvoidCGraphicView::OnDraw(CDC*pDC){ CGraphicDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); //TODO:adddrawcodefornativedatahere //CPenpen(m_nLineStyle,m_nLineWidth,m_clr);//pDC->SelectObject(&pen); CBrush*pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));pDC->SelectObject(pBrush); for(inti=0;i<m_ptrArray.GetSize();i++) { CPenpen(((CGraph*)m_ptrArray.GetAt(i))->m_nLineStyle,0,((CGraph*)m_ptrArray.GetAt(i))->m_clr);pDC->SelectObject(&pen); switch(((CGraph*)m_ptrArray.GetAt(i))->m_nDrawType) { case1: pDC->SetPixel(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd,RGB(0,0,0)); break; case2: pDC->MoveTo(((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin); pDC->LineTo(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd); break; case3: pDC->Rectangle(CRect(((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin, ((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd)); break; case4: //((CGraph*)m_ptrArray.GetAt(i))->m_ptEndpoint//((CGraph*)m_ptrArray.GetAt(i))->m_ptOriginm_ptOrigin if(abs(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.y-((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.y)>abs(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.x-((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.x)) { if(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.y>((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.y) { pDC->Ellipse(CRect(((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.x,((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.y,((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.x,((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.y+abs(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.x-((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.x))); } else { pDC->Ellipse(CRect(((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.x,((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.y,((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.x,((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.y-abs(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.x-((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.x))); } } else { if(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.x>((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.x) { pDC->Ellipse(CRect(((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.x,((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.y,((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.x+abs(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.y-((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.y),((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.y)); } else { pDC->Ellipse(CRect(((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.x,((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.y,((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.x-abs(((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.y-((CGraph*)m_ptrArray.GetAt(i))->m_ptOrigin.y),((CGraph*)m_ptrArray.GetAt(i))->m_ptEnd.y)); } } break; } }}///////////////////////////////////////////////////////////////////////////////CGraphicViewprintingBOOLCGraphicView::OnPreparePrinting(CPrintInfo*pInfo){ //defaultpreparation returnDoPreparePrinting(pInfo);}voidCGraphicView::OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/){ //TODO:addextrainitializationbeforeprinting}voidCGraphicView::OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/){ //TODO:addcleanupafterprinting}///////////////////////////////////////////////////////////////////////////////CGraphicViewdiagnostics#ifdef_DEBUGvoidCGraphicView::AssertValid()const{ CView::AssertValid();}voidCGraphicView::Dump(CDumpContext&dc)const{ CView::Dump(dc);}CGraphicDoc*CGraphicView::GetDocument()//non-debugversionisinline{ ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGraphicDoc))); return(CGraphicDoc*)m_pDocument;}#endif//_DEBUG///////////////////////////////////////////////////////////////////////////////CGraphicViewmessagehandlersvoidCGraphicView::OnDot(){ //TODO:Addyourcommandhandlercodehere m_nDrawType=1;}voidCGraphicView::OnLine(){ //TODO:Addyourcommandhandlercodehere m_nDrawType=2;}voidCGraphicView::OnRectangle(){ //TODO:Addyourcommandhandlercodehere m_nDrawType=3;}voidCGraphicView::OnEllipse(){ //TODO:Addyourcommandhandlercodehere m_nDrawType=4;}voidCGraphicView::OnLButtonDown(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefaultm_ptOrigin=point;//?eμ?×?±ê m_endpoint=m_ptOrigin; linepointnum=1; CView::OnLButtonDown(nFlags,point);}voidCGraphicView::OnLButtonUp(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefault linepointnum=0; CClientDCdc(this);CPenpen(m_nLineStyle,0,m_clr);dc.SelectObject(&pen); CBrush*pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//í??÷μ??-?¢ dc.SelectObject(pBrush); switch(m_nDrawType){ case1: dc.SetPixel(point,m_clr); break; case2: dc.MoveTo(m_ptOrigin); dc.LineTo(point); break; case3: dc.Rectangle(CRect(m_ptOrigin,point)); break; case4: if(abs(point.y-m_ptOrigin.y)>abs(point.x-m_ptOrigin.x)) { if(point.y>m_ptOrigin.y){ dc.Ellipse(CRect(m_ptOrigin.x,m_ptOrigin.y,point.x,m_ptOrigin.y+abs(point.x-m_ptOrigin.x))); } else { dc.Ellipse(CRect(m_ptOrigin.x,m_ptOrigin.y,point.x,m_ptOrigin.y-abs(point.x-m_ptOrigin.x))); } } else { if(point.x>m_ptOrigin.x) { dc.Ellipse(CRect(m_ptOrigin.x,m_ptOrigin.y,m_ptOrigin.x+abs(point.y-m_ptOrigin.y),point.y)); } else { dc.Ellipse(CRect(m_ptOrigin.x,m_ptOrigin.y,m_ptOrigin.x-abs(point.y-m_ptOrigin.y),point.y)); } } // dc.Ellipse(CRect(m_ptOrigin.x,m_ptOrigin.y,point.x,point.y)); break; } CGraph*pGraph=newCGraph(m_nDrawType,m_ptOrigin,point,m_clr,m_nLineStyle); m_ptrArray.Add(pGraph);CView::OnLButtonUp(nFlags,point);}voidCGraphicView::OnSetting(){ //TODO:Addyourcommandhandlercodehere CSettingDlgdlg; dlg.m_nLineStyle=m_nLineStyle;if(IDOK==dlg.DoModal()){ m_nLineStyle=dlg.m_nLineStyle; } }voidCGraphicView::OnColor(){ //TODO:Addyourcommandhandlercodehere CColorDialogdlg; dlg.m_cc.Flags|=CC_RGBINIT|CC_FULLOPEN;dlg.m_cc.rgbResult=m_clr; if(IDOK==dlg.DoModal()) { m_clr=dlg.m_cc.rgbResult; }}voidCGraphicView::OnMouseMove(UINTnFlags,CPointpoint){ //TODO:Addyourmessagehandlercodehereand/orcalldefault CClientDCdc(this); dc.SetROP2(R2_NOT); //?e?¤????ê???í?// CPenpen(m_nLineStyle,0,m_clr);//dc.SelectObject(&pen); CBrush*pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//í??÷μ??-?¢ dc.SelectObject(pBrush); switch(m_nDrawType) { case2: { if(linepointnum==1) { dc.MoveTo(m_ptOrigin);//2á3y dc.LineTo(m_endpoint); m_endpoint=poi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論