Time of Update: 2018-12-07
在學校沒事,所以開發一個具有準系統的二維CAD,具有畫線,畫矩形,畫圓,有撿選,平移,旋轉,鏡像,刪除,即時放大,縮小,序列化的功能 首先談架構,架構採用流行的MVC架構,也就是模型,視圖,控制器的架購,模型包括資料和對資料的操作,而視圖則是對模型的顯示,控制器則是根據介面的操作. (1)為了開發方便,首先開發了兩個數學工具類,以便於使用點類和包圍盒類 class CBox2D;class CPosition {public: CPosition(); CPosition(float x,
Time of Update: 2018-12-07
(1)滑鼠在進行操作的時候,要用到各種命令,而各種命令和實體圖形的互動,實際就是滑鼠的移動,按下,抬起等對於不同的命令,如畫線,平移等都與滑鼠的動作相關,因此有必要抽像出一個基類,而各種命令具體實現滑鼠的各種操作,具體如下 class CComand {public: CComand(){}; virtual ~CComand(){};public: virtual void OnLButtonDown(UINT nFlags, CPosition pos){};
Time of Update: 2018-12-07
學習了下OGRE中文網上的那篇中級教程後,跟據自己的情況封了一個滑鼠選擇類。Selection.h //============================================================================= //class: 框選矩形類 //Desc: 顯示滑鼠框選矩形 //day: 2008/06/30 //author: 苗琳 //================================================
Time of Update: 2018-12-07
17.1、幀緩衝 螢幕上所繪的圖形都是由象素組成的,每個象素都有一個固定的顏色或帶有相應點的其它資訊,如深度等。因此在繪製圖形時,記憶體中必須為每個象素均勻地儲存資料,這塊為所有象素儲存資料的記憶體區就叫緩衝區,又叫緩衝(buffer)。不同的緩衝可能包含每個象素的不等數位的資料,但在給定的一個緩衝中,每個象素都被賦予相同數位的資料。存貯一位象素資訊的緩衝叫位面(bitplane)。系統中所有的緩衝統稱為幀緩衝(Framebuffer),可以利用這些不同的緩衝進行顏色設定、隱藏面消除、情境反走
Time of Update: 2018-12-07
inline void pushStateSet(const osg::StateSet* ss) { _currentStateGraph = _currentStateGraph->find_or_insert(ss);// if (_numberOfEncloseOverrideRenderBinDetails==0 && ss->useRenderBinDetails()
Time of Update: 2018-12-07
inline void State::applyModeList(ModeMap& modeMap,const StateSet::ModeList& modeList)//對每一個渲染葉都調用一次{ StateSet::ModeList::const_iterator ds_mitr = modeList.begin(); ModeMap::iterator this_mitr=modeMap.begin(); while
Time of Update: 2018-12-07
我們可以使用一個剪裁空間來控制允許繪圖的空間地區。在OpenGL當中一般允許同時定義這樣的6個空間。要使用剪裁空間我們需要首先用GL_CLIP_PLANE調用glEnable來開啟狀態,然後用glClipPlane函數來設定空間方程。我們知道一個方程Ax+By+Cz+D =
Time of Update: 2018-12-07
lClearColor(1.0,1.0,1.0,0.1);//僅僅設定清屏顏色,並不實際執行操作,是一個狀態值glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//把顏色緩衝清為glClearColor()設定的顏色,顏色緩衝指的是整個螢幕,不是指的視口,是一個動作glViewport(0, 0, 100, 100);glBegin(GL_LINES);glColor3f(0.0, 0.0, 1.0);glVertex3d(-500.0, -50
Time of Update: 2018-12-07
vtkTransform* form = vtkTransform::New(); form->Identity();//單位化 form->RotateZ(45); sphere1->AddPosition(3.0, 0.0, 0.0); form->RotateZ(45);
Time of Update: 2018-12-07
鏡像和平移只要使用實體集中相關的函數即可,同時利用鏡像類和平移類實現class CMirror : public CComand{public: CMirror(); virtual ~CMirror();public: void OnLButtonDown(UINT nFlags, CPosition pos); void OnMouseMove(UINT nFlags, CPosition pos); void OnRButtonDown(UINT nFlags,
Time of Update: 2018-12-07
如果是直接從網上下載的dll檔案則不需要編譯就可以直接用,如果提示找不到QtDir變數,則直接在系統變數加上即可同時重新啟動電腦,使之生效。 然後把dll檔案拷入system32目錄下,同時把證可證檔案拷入系統管理員帳戶下。 然後直接開啟一個qt工程,運行即可得到結果。 以上不需要自己編譯,即可以使用別人已經編譯好的qt庫.
Time of Update: 2018-12-07
庫分兩種,靜態庫和動態庫,而動態庫的載入方法又分兩種,動態載入和靜態載入做為外部庫,這兩種庫的載入都不需要包含標頭檔,因為相關的資訊已經在匯入庫了假設匯入函數如下:add(int x, int y); 標頭檔如下:extern "C" int __declspec(dllexport)add(int x, int y);extern "C"代表c風格的,同時如果用不同的語言,則必需用相同的匯入或者匯出源檔案如下: #include "test.h"int add(int x, int y){
Time of Update: 2018-12-07
vc序列化讀寫 序列化讀寫需要 用CArchive做中介,首先產生一個CFile類,然後在CFile類的基礎上產生CArchive,然後直接用>>或者<<讀寫 下面是讀檔案的過程,檔案中有四個變數值x1,x2,y1,y2CFile *file = NULL; file = new CFile("D://ae", CFile::modeRead);//產生CFile檔案 CArchive arr(file, CArchive::load);//產生CArchive
Time of Update: 2018-12-07
1. 圖形學基本問題(15分)在右手座標系A內,P點的座標是(1, 1, 1 ), M點座標是(3, 4, 5), N點座標是(6, 7, 8)a) 求P點一M點為中心,繞Y軸旋轉30°,再繞Z軸旋轉-- 60°後的座標點Qb) 求P點以MN為軸,旋轉—45°所獲得的座標點。c) 假設B座標系是有A座標系經過如下步驟變換獲得: i. 繞X軸旋轉α°
Time of Update: 2018-12-07
如果vtk程式開發完畢後想要在沒有安裝vc6.0的程式上運行,則必需打包有時候會出現debug版正常,而release版本找不到標頭檔的情況debug版本打包的方法如下,打包完成後,可以在沒有安裝vc6.0的機器上運行 1.最好把vtk所有的lib,dll檔案直接放在exe檔案下2.同時還包括幾個vc所需要的dll檔案,也必需放在exe目錄下3.同時選擇Debug版本發布
Time of Update: 2018-12-07
以以上三個標記為例,三個捕捉標記表現形式都不同,但本質上是一樣的都可以歸結為矩形標記,所以在探測點是否落在標記內,都可以測試是否落在矩形內,如果實體的端點落在矩形內,則就用矩形的中心點替換滑鼠點擊的點,就實現了捕捉 同時由有三個標記本質上一樣,都可以從矩形標記派生,只要改寫一下畫標記的虛函數即可,可以用模版的設計模式實現捕捉 class CMyrect//端點,使用模版設計模式,直接僅僅需要改寫畫矩形的函數即可{public: CMyrect(){ m_br =
Time of Update: 2018-12-07
首先產生CBitamp和記憶體cd,然後拷備到螢幕上 CRect rect; GetClientRect(&rect); CBitmap bitmap; bitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());//產生空間的記憶體位元影像 CDC me; me.CreateCompatibleDC(pDC);//產生記憶體cd me.SelectObject(&bitmap); CPen pen;
Time of Update: 2018-12-07
要對模型的操作中,為了實現不現的命令,可以用簡單工廠+策略模式,這個也是實現mvc架構的一個重要的設計模式具體代碼如下 class CContext//使用原則模式加簡單工廠{public: CContext(){m_pCmd = new CComand(), m_pEx = new CExplan(),m_pMove = new CMove();};//實現即時平移 virtual ~CContext(){ if(m_pCmd) {delete m_pCmd; }
Time of Update: 2018-12-07
#include "iostream.h"class CHandle{public: CHandle(){} virtual ~CHandle(){}public: virtual void SetHandle(CHandle *handle){}; virtual void ProcessHandle(int a){} ;public: CHandle *m_hand;};class CHandle1 : public CHandle{public: CHandle1(){}
Time of Update: 2018-12-07
模型資料的變化會引起視圖的變化,這個可以用觀察者模式實現,而多視圖之間的關係可以用組合模式實現 class CSubject//觀察者模式{public: CSubject(tagCArray *solid, tagCArray *select){m_solid = solid, m_select = select;} virtual ~CSubject(){} void SetObserver(CMcadView *view){m_view = view;}//設定觀察者 void