實驗三 交互式繪制多邊形


visual studio2019實現交互式繪制多邊形

這個實驗······在網上找不到。孔令德的實驗代碼下載下來有密碼,暴力破解沒希望,只能自己寫了。
這個和實驗二是緊密相連的。

實驗實現的目標

在屏幕上點擊一個點,松開移動鼠標,線就會跟着鼠標進行延長,再次點擊就會形成新的點,兩點之間形成線段,然后新的線繼續跟着鼠標跑。
當鼠標經過起點的時候,直線自動連到起點,形成閉合多邊形,並且完成顏色的填充。
所以相對實驗二,我們要實現直線的動態顯示(橡皮筋繪制技術)和填充多邊形。其中填充多邊形用到了雙緩沖機制,避免繪圖的過渡(瞬間上色)。

橡皮筋技術和用戶交互

直線在鼠標的移動下像橡皮筋那樣拉伸,就是橡皮筋技術。實現這個技術同樣需要雙緩沖機制。

下面的代碼是網上找來的。來源

int isPress=0;
CPoint start;
CPoint end;

//將上述代碼放在***View.cpp里面的開頭部分(只要能在***View.cpp里面起控制全局的作用就行,例如放在#endif后面)
//在***View.cpp里面用添加類向導將單擊鼠標左鍵,鼠標移動映射為相應的函數。並且添加以下代碼

void CXiangpijinView::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    isPress=1;
    start=point;
    end=start;
    CView::OnLButtonDown(nFlags, point);
}

void CXiangpijinView::OnMouseMove(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    CDC *pDC=this->GetWindowDC();
    if (isPress)
    {
        pDC->SetROP2(R2_NOT);
        pDC->MoveTo(start);
        pDC->LineTo(end);
        pDC->MoveTo(start);
        pDC->LineTo(point);
        end=point;
    }
    CView::OnMouseMove(nFlags, point);
}

以上代碼實現了畫線的橡皮筋功能,效果類似於實驗二,但是是系統調用的方法。

實現繪制多邊形

可以在屏幕上畫線了,就要繪制多邊形。

當鼠標左擊一次,就創建一個點,鼠標移動顯示橡皮筋拉伸的線。再次點擊,生成第二個點,線段生成,並生成新的橡皮筋線。

我們需要保存畫的點和線。

//在view.h中建立一個CPoint
CPoint point[100];

如果要保存邊,就要創建新的類,AET和Bucket類

雖然孔令德的實驗代碼沒辦法得到,但是他的課本課后習題的代碼在網上有,其中就有“多邊形有效邊表填充算法”的實驗,里面實現了AET和Bucket

文件我就不發出來了,最后看我的代碼就可以。

使用AET和Bucket保存邊,並且進行填充。

最后實現畫圖的功能,vs2019工程文件,代碼不方便一一展示,就放在后面供大家下載參考吧。

程序剛啟動的時候不要着急點,等待程序加載,不然你會發現點不出直線。
左鍵用來畫線,右鍵用來繪制,切記!!

代碼:https://share.weiyun.com/5iIVZUq


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM