




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
課程設計報告課程名稱計算機圖形學課題名稱交互式繪圖系統專業計算機科學與技術班級0902班學號200903010208姓名陳瑾指導教師劉長松曹燚2012年10月9日
湖南工程學院課程設計任務書課程名稱計算機圖形學課題交互式繪圖系統專業班級計算機0902學生姓名陳瑾學號200903010208指導老師劉長松曹燚審批任務書下達日期2012年9月15日任務完成日期2012年10月9日一、設計內容與設計要求1.設計內容:用橡皮法實現交互式繪圖系統。2.設計要求:在屏幕上可以選擇不同的命令、來實現不同基本圖形的繪制。完成橡皮筋直線,橡皮筋圓,橡皮筋矩形框,多邊形裁剪和3階B樣條曲線的作圖,且要有比較友好的界面。3.算法提示:首先在屏幕上畫出菜單和繪圖窗口,顯示鼠標。點擊相應菜單,點擊鼠標,移動鼠標,獲取鼠標移動相對位置,畫出相應圖形。相關變量定義:#define_MOUSE鼠標
#defineCIRCLE1圓#defineLINE2直線
#defineRECTANGLE3矩形
#include"stdio.h"
#include"string.h"
#include"graphics.h"
#include"math.h"
#include<dos.h>
unionREGSinreg,outreg;
structSREGSsr;相關函數: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()顯示鼠標{
inreg.x.ax=1;
int86(0x33,&inreg,&outreg);
}voidCloseMouse()關閉鼠標{
inreg.x.ax=2;
int86(0x33,&inreg,&outreg);
}unionREGSDisplayMouseStatus()顯示鼠標狀態{
inreg.x.ax=3;
int86(0x33,&inreg,&outreg);
returnoutreg;
}voidGetMouseXY(int*x,int*y)得到鼠標位置{
DisplayMouse();
outreg=DisplayMouseStatus();
*x=outreg.x.cx;
*y=outreg.x.dx;
}響應相應函數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);
}
}
}二、進度安排第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附:課程設計報告裝訂順序:封面、任務書、目錄、正文、附件(A4大小的圖紙及程序清單)、評分。正文的格式:一級標題用3號黑體,二級標題用四號宋體加粗,正文用小四號宋體;行距為22。正文的內容:一、課題的主要功能;二、課題的功能模塊的劃分(要求畫出模塊圖);三、主要功能的實現(至少要有一個主要模塊的流程圖);四、程序調試;五、總結;六、附件(所有程序的原代碼,要求對程序寫出必要的注釋)。正文總字數要求在5000字以上(不含程序原代碼)。目錄概述……………1功能模塊的劃分………………2主要功能的實現………………3程序調試………4總結……………5附錄……………6概述交互式系統:隨著計算機繪圖技術的廣泛應用,交互處理已是必不可少的容。一個交互圖形系統使用戶能動態的輸入坐標位置,指定選擇功能,設置交換參數,以及在圖形顯示期間能夠對花面上的某些部分進行修改、刪除、增添、存儲和在顯示操作,且能全部徒手繪圖。交互式繪圖軟件系統都為用戶提供了一個交互工作環境,稱交互界面。通常在圖形顯示方式,把屏幕劃分為圖形區,菜單區和提示區。交互式繪圖系統的基本功能一般可歸納為繪圖功能、圖形編輯、尺寸標準、作圖工具、顯示功能、詢問功能、信息轉換、和二次開發工具。橡皮筋技術:橡皮筋技術是在平面上確定一條直線一般是先定下起點再定下終點,最后把起點和終點連成直線。如果要求這條直線能通過平面上某一點或和一已知圓相切,上述方法便不易做得很準確。所謂橡皮筋技術就是在起點確定后,光標移出去定終點時,在屏幕上始終顯示一條連接起點和光標中心的直線,這條直線隨著光標中心位置的變動而變動,它就像在起點和光標中心之間緊緊地拉著一根橡皮筋,有了這根橡皮筋便比較容易地找到通過一個點或和一個圓相切的直線的位置。功能模塊的劃分本程序是采用VC6.0編寫的一個繪圖系統,在屏幕上可以選擇不同的命令、來實現不同基本圖形和顏色的繪制。通過該系統可以完成橡皮筋直線,橡皮筋圓,橡皮筋矩形框,多邊形裁剪和3階B樣條曲線的作圖,它的設計按軟件工程的方法進行,系統具有良好的界面、必要的交互信息和簡易的菜單進行操作,適合簡單的畫圖,對學習用一定的幫助。本程序的功能模塊劃分如下:1、畫點:運行程序后單擊“繪圖”菜單,選擇“點”后,用鼠標在視圖中任意一個地方,點擊下鼠標左鍵便可在視圖中出現一點。2、畫直線:運行程序后單擊“繪圖”菜單,選擇“直線”后,用鼠標左鍵在視圖框中任意一地方,用來確定直線的起始點,點擊鼠標左鍵不松,在視圖框中隨意拉動鼠標便可看見一直線隨鼠標的變動而變動,當松去左鍵時,便在視圖中畫出一條直線。3、畫矩形:運行程序后單擊“繪圖”菜單,選擇“矩形”后,用鼠標左鍵在視圖框中隨意點擊任意一個地方,用來確定矩形的起始點,然后按住鼠標左鍵不松,隨意改變鼠標點的位置用鼠標,會有虛框顯示,松下鼠標左鍵,即可在視圖中畫出一個矩形。4、畫圓:運行程序后單擊“繪圖”菜單,選擇“圓”后,用鼠標左鍵在視圖框中隨意點擊任意一個地方,用來確定圓的起始點,然后,按住左鍵不松,在視圖框任意拉動鼠標,便可看到隨鼠標移動的圓,當松去左鍵時,便可以在視圖框中確定圓行,這樣便畫出了一個圓。5、設置線型:運行程序后單擊“繪圖”菜單,選擇“設置”后,跟據彈出的對話框和實際的需求選擇畫直線,畫矩形,畫圓的線型,有“實線”,“虛線”,和“點線”,選定后點擊確定即可。6、設置顏色:運行程序后單擊“繪圖”菜單,選擇“顏色”后,根據彈出的調色板選擇自己想要的顏色,然后點擊確定即可。主要功能的實現:編輯對話框:點擊ResourceView中的Menu,雙擊其內部的IDR-MAINFRAME,如下圖:便可以編輯菜單選項了。右擊各個菜單,選擇ClassWizard…彈出對話框如下:對各個菜單添加功能后,點擊EditCode,便可以編寫函數,其函數如下:voidCGraphicView::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; }}程序調試:1、畫點的實現:在“繪圖”菜單中選擇“點”:操作結果如下顯示:2、畫點的實現:在“繪圖”菜單中選擇“直線”:操作結果如下顯示:2、畫點的實現:在“繪圖”菜單中選擇“矩形”:操作結果如下顯示:3、畫點的實現:在“繪圖”菜單中選擇“圓”:操作結果如下顯示:4、線型實現:在“繪圖”菜單中選擇“設置”:操作結果如下顯示:根據所需,選擇相對的線型。4、線型實現:在“繪圖”菜單中選擇“設置”:操作結果如下顯示:選擇想要的顏色即可。選擇虛線和紅色,測試繪圖如下:五、總結:這次課程設計的課題是交互式繪圖系統,通過這次課程設計初步了解了橡皮筋技術的基本概念以及它在交互式繪圖過程中的作用,使用橡皮筋技術構造直線、矩形和圓的操作過程和方法。經過這次課程設計,不但鞏固了上學期在課堂上學的知識,而且還學到了一些上機的基本操作,提高了動手能力。由于這門課程是上學期開的,經過了一個暑假,對于這方面的相關知識有些不太熟悉了,這次課程設計給了我一個很好的溫習機會,在做課程設計時不盡盡只是完成這個任務,使得我重新找出了相關資料,又認認真真的將需要用到的一些知識鞏固了,加深了印象同時鍛煉了動手的能力。在整個過程中,通過解決課程設計中出現的問題,提高了解決問題的能力。總之,在老師和同學的幫助下還算順利的完成了橡皮筋直線、橡皮筋圓、橡皮筋矩形框、多邊形裁剪和3階B 曲線作圖,并且有簡單的圖形界面。雖然只是一次短暫的課程設計,但受益匪淺。附錄:1、參考文獻:(1)唐澤圣周嘉玉李新友編著《計算機圖形學基礎》,北京清華大學出版社1995;(2)汝傳鄒北軟編著《計算機圖形學》,北京人名郵電出版社2002;(3)網絡資料。2、源代碼:CGraph類中的函數:#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類中的函數://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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版貨車個人運輸合同范例
- 車輛掛靠單位協議書二零二五年
- 二零二五未成年工保護規定
- 二零二五版辦公用品采購協議合同
- 二零二五版金融債券抵押合同范例
- 個人轉讓單位合同樣本
- 法律咨詢服務協議合同書
- 從化區叉車租賃合同標準文本
- 買路合同樣本
- 二零二五版家裝公司施工安全免責的協議書
- 生產經理季度工作計劃
- 化肥利用率研究
- GB/T 30595-2024建筑保溫用擠塑聚苯板(XPS)系統材料
- 病歷書寫(門急診病歷)
- 【基于單片機的電子密碼鎖設計(論文)10000字】
- 湖南省長沙市2024年中考地理試題
- 電磁場與電磁波(第五版)完整全套教學課件
- 蜘蛛開店第二課時 教案
- 模擬試卷:2023-2024學年八年級下學期語文期中模擬考試(考試版A4)【測試范圍:1-3單元】(廣東深圳專用)
- 零星維修工程投標方案(技術方案)
- DBJ04∕T 390-2019 基坑工程裝配式鋼支撐技術標準
評論
0/150
提交評論