freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

圖形建模與虛擬現(xiàn)實技術在仿真中的應用研究(編輯修改稿)

2024-09-03 11:17 本頁面
 

【文章內(nèi)容簡介】 tView返回指定位置的視圖,并將rPositon的值設置為列表中下一個視圖的POSITION值。如果找到的視圖為列表中的最后一個,則將rPosition置為NULL。函數(shù)原型為:Virtual POSITION GetFirstViewPosition()const。Virtual CViw*GetNextView(POSITIONamp。rPosition)cosnt。當在文檔上新增或刪除一個視圖時,MFC會調(diào)用OnChangeViewList函數(shù)。如果被刪除的視圖是該文檔的最后一個視圖,則刪除該文檔。(5)一個視圖只能對應一個文檔。在視圖中,調(diào)用CView::GetDocument可以獲得一個指向該視圖的文檔的指針。函數(shù)原形為:CDocument*GetDocument()const。如果該視圖不與任何文檔相,則返回NULL.(6)MDI框架窗口通過調(diào)用CFrameWnd::GetActiveDocument可以獲得與當前活動的視圖相關聯(lián)的CDocument指針。函數(shù)原形為:virtual CDocument*GetActiveDocument()。(7)通過調(diào)用CFrameWnd::GetActiveView可以獲得指向與CFrameWnd框架窗口連接的活動視圖的指針,如果是被CMDIFrameWnd框架窗口調(diào)用,則返回NULL。MDI框架窗口可以首先調(diào)用MDIGetActive找到活動的MDI子窗口,然后找到對應于子窗口的活動視圖。函數(shù)原形為:virtual Cdocument*GetActiveDocument()。(8)MDI框架窗口通過調(diào)用CFrameWnd::GetActiveFrame,可以獲得一個指向MDI框架窗口的活動多文檔界面子窗口的指針。(9)CMDIChildWnd調(diào)用GetMDIFrame獲得MDI框架窗口(CMDIFrameWnd)。(10)CWinApp調(diào)用AfxGetMainWnd得到指向應用程序的活動主窗口的指針。下面一段代碼說明了如何利用CDocTemplate、CDocument和CView之間的存取關系,遍歷整個文檔模板、文檔以及視圖。CMyApp*pMyApp=(CMyApp*)AfxGetApp()。POSITION p=pMyAppGetFirstDocTemplatePosition()。while(p!=NULL){CDocTemplate*pDocTemplate=pMyAppGetNextDocTemplate(p)。POSITION p1=pDocTemplateGetFirstDocPosition()。while(p1!=NULL){CDocument*pDocument=pDocTemplateGetNextDoc(p1)。POSITION p2=pDocumentGetFirstViewPosition()。while(p2!=NULL){CView*pView=pDocumentGetNextView(p2)。}}}在MFC程序設計中,利用文檔類來保存系統(tǒng)的數(shù)據(jù)。遵循這個原則,本系統(tǒng)中在CGEngineerDoc文檔類中存儲并維護一個圖形對象鏈表。當用戶在工作區(qū)建立圖標或者搭建仿真模型時,每當在工作區(qū)中畫入一個圖元或圖標(圖標由基本圖元或其他的圖標構成),都會將其加入到圖形對象鏈表中來。圖形對象鏈表的定義如下:typedef CTypedPtrListCObList,CDrawObj*CDrawObjList。CDrawObjList*m_pObjects。視圖是對文檔中存儲的數(shù)據(jù)的一種直觀表現(xiàn),利用CGEngineerView類中的OnDraw(CDC*pDC)函數(shù),能把文檔中存儲的圖形對象列表中的所有圖形對象繪制在用戶工作區(qū)中。 圖形建模的技術難點實現(xiàn)在開發(fā)圖形建模系統(tǒng)的過程中,不可避免的遇到了很多難點問題,這里選擇了幾個具有代表性的難點解決方案,這些方案并不見得是最佳的解決方案,但經(jīng)過作者的驗證都取得了令人滿意的效果。 連接線形狀自適應功能的實現(xiàn)在進行圖形建模的時候,圖標之間的搭接是構建仿真模型過程中非常重要的一個步驟。利用連接線工具對工作區(qū)中的圖標進行搭接時,如果連接線的形狀能夠自適應,將會給用戶帶來很大的方便。連接線形狀自適應即是根據(jù)兩個圖標的相對位置以及圖標中連接點的相對位置自動調(diào)整自身的形狀,自動繞開所連接的兩個圖標,而不會壓在圖標上面。當然用戶在需要的時候還可以任意調(diào)整連接線的形狀。解決這個問題時,根據(jù)連接點在圖標外圍矩形中的相對位置,以及連接線兩端的起始連接點和終止連接點的相對位置,對它們進行判斷處理,在需要的時候要增加新的轉折點,重新計算折線中轉折點的位置,并重新繪制連接線。為此,定義了枚舉類型:enum Location{CloseToLeft,CloseToRight,CloseToTop,CloseToBottom,AtCenter,None},并在連接線類CLinkLine中定義了兩個成員變量,來標志連接點在圖標中的相對位置:LocationInfo m_StartLocationInfo。LocationInfo m_EndLocationInfo。連接線除了可以自動調(diào)整自身的形狀以外,用戶還可以手動的調(diào)整它的形狀,并且可以根據(jù)需要增加連接線中的轉折點。這些對于連接線形狀的調(diào)整功能都是由CLinkLine類中的AdjustLinkLine函數(shù)完成的,該函數(shù)的定義如下:void CLinkLine::AdjustLinkLine(CGEngineerView*pView)另外還有一些相關的函數(shù),如函數(shù)AddOneTurning(…)以及函數(shù)AddTurningPoint(…)負責增加連接線的轉折點,重新分配存儲空間,并調(diào)整各個轉折點在數(shù)組中的位置,函數(shù)DelTurningPoint(…)負責當用戶把兩個轉折點調(diào)整到同一位置的時候,需要將它們合并為一個轉折點。以上函數(shù)的定義如下。void CLinkLine::AddOneTurning(int i)。void CLinkLine::AddTurningPoint(int i)。void CLinkLine::DelTurningPoint(int i)。 圖標嵌套的實現(xiàn)前面已經(jīng)介紹過,代表設備單元的圖標是由一些基本的圖元或者其他圖標組合而成的。當一個圖標當中包含其它圖標的時候,就產(chǎn)生了圖標之間的嵌套關系。雖然圖標可能具有嵌套關系,但是一層一層的追根到底,處于最內(nèi)層的圖標最終還是由基本的圖元構成的。但是這里有一個主要問題是,無論是嵌套在哪一級的圖標,構成它的圖元(包含在CDrawUnit::CDrawObjList m_lstDsp鏈表中)中記錄的自身的位置與大小等信息(記錄在CDrawObj::m_position變量中)都是在最早繪制該圖元的窗口中的數(shù)據(jù)信息,即是在利用該圖元建立圖標時的那個窗口中的數(shù)據(jù)信息。如果仍然利用這個信息來繪制被嵌套在內(nèi)部的圖標的話,必然會出現(xiàn)混亂。對該問題的解決方法是:構造一個函數(shù),用于計算圖標中包圍所有圖形對象的外圍矩形,如(a)圖中的虛線框所示為圖標1的外圍矩形,(b)圖中的虛線框所示為圖標1’的外圍矩形。在繪制圖標2時,分別計算出圖標1和圖標1’的外圍矩形。根據(jù)兩個不同的外圍矩形計算出圖標1到圖標1’的縮放比例和偏移量,然后重新計算圖標1’中的各個圖元在圖標2中的正確位置。這也就是為什么圖標類CDrawUnit中會聲明如下的成員變量:float m_scalex。//記錄圖標在x方向的縮放比例float m_scaley。//記錄圖標在y方向的縮放比例int m_offsetx。//記錄圖標在x方向的偏移量int m_offsety。//記錄圖標在y方向的偏移量 圖形渲染效果的實現(xiàn)可以對圖形對象設置邊框顏色,邊框線形,填充顏色等常見的屬性。除了這些常規(guī)的屬性外,還可以設置其渲染效果,利用顏色漸變產(chǎn)生的光影作用,可以使圖標具有一種三維立體的視覺效果,從而更加形象和美觀。,分別為利用本系統(tǒng)制作的沒有設置渲染效果和設置了渲染效果的圖標。顯而易見,設置了渲染效果的圖標要比沒有設置渲染效果的圖標更加美觀。 (a)沒有設置渲染效果 (b)設置了渲染效果設置渲染效果時,用戶在屬性對話框中選擇渲染的起始顏色與終止顏色,并要選擇渲染的方式,如顏色是從上到下漸變,或是從兩邊向中間漸變。最后根據(jù)用戶的設定,調(diào)用相應的函數(shù)來進行處理。進行渲染的基本原理是:根據(jù)用戶設定的終止顏色與起始顏色的差值,以及需要渲染的區(qū)域的范圍,計算出平均每個單位區(qū)域顏色的變化值,然后從渲染區(qū)域的起始位置開始循環(huán),每向終止位置的方向增加一個單位區(qū)域,則用上一個單位區(qū)域的填充顏色值加上前面計算出來的顏色變化值,得到新的填充顏色值來填充現(xiàn)在這個單位區(qū)域。則最終就可以得到具有立體感的渲染效果。例如,顏色由一側向另一側漸變的處理函數(shù)為:void ShineOneEdge(CDC*pDC,CRectamp。ObjRect,const BOOL bFromSmall,const COLORREF StartClr,const COLORREF EndClr,const BOOL bHorizontal,CDrawRect::Shape ShapeFlag,CPoint roundness)。在ShineOneEdge函數(shù)的形參中CRectamp。ObjRect表示所渲染的圖形對象所在的矩形區(qū)域;const BOOL bFromSmall標志是從坐標小的一側向坐標大的一側進行顏色漸變,還是反過來進行;const COLORREF StartClr表示漸變的起始顏色;constCOLORREF EndClr表示漸變的終止顏色;const BOOL bHorizontal表示是水平方向漸變還是垂直方向漸變;CDrawRect::Shape ShapeFlag表示圖形對象具體是哪一種形狀(如矩形、圓角矩形、橢圓等)
點擊復制文檔內(nèi)容
外語相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1