【計算機圖形學】實驗:VB.net環境下的綜合繪圖與交互技術案例教程

一、實驗目的

掌握在.net環境下的繪圖軟件界面設計與交互技術。

二、實驗準備

學習在.net環境下的界面設計的一般原理與交互技術等基本知識。

三、實驗內容

將前7個實驗內容集成到一個界面下,如直線段、圓、矩形與曲線的繪制填充,以及對圖像的處理,并能利用交互技術實現對圖元的選取、修改和交互。

四、實驗過程及步驟

1、程序界面設計

2 、控件屬性說明

添加mainmnue控件,屬性如:左添加2panel控件,設置panel1.name=P,panel2作為一個調色板

3 、程序代碼

Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Math 
--------------------------------------------------------------------------------------------
Public Class Form1Dim f1 As Integer = 0Dim lp(100, 20) As PointDim lf As BooleanDim ln(100) As IntegerDim lleft As BooleanDim cp1(100) As PointDim cp2(100) As PointDim cr(100) As SingleDim cf As BooleanDim rp1(100) As PointDim rp2(100) As PointDim rf As BooleanDim l As IntegerDim c As Integer
Dim r As IntegerDim Pencolor As ColorDim lc(100) As ColorDim cc(100) As Color
Dim rc(100) As Color
--------------------------------------------------------------------------------------------Private Sub Init()Dim i, j As IntegerFor i = 0 To 100ln(i) = 0Nextlf = Truelleft = Truecf = Truerf = Truel = 0c = 0r = 0End Sub
--------------------------------------------------------------------------------------------Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadP.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3DP.Dock = DockStyle.FillP.BackColor = Color.WhiteGroupBox1.Dock = DockStyle.Right '該控件停靠在其包含控件的右邊緣lRed.Text = "R"lRed.BackColor = Color.Red '獲取控件的背景顏色為紅色lGreen.Text = "G"lGreen.BackColor = Color.Green '獲取控件的背景顏色為綠色lBlue.Text = "B"lBlue.BackColor = Color.Blue   '獲取控件的背景顏色為藍色pColor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSinglepColor.BackColor = Color.BlacktrRed.Maximum = 255trRed.Minimum = 0trRed.LargeChange = 17trRed.SmallChange = 1trRed.TickFrequency = 17trRed.TickStyle = TickStyle.BottomRight '刻度線位于水平控件的底部或者垂直控件的右部trRed.Value = 0  '剛開始設置為0trGreen.Maximum = 255trGreen.Minimum = 0trGreen.LargeChange = 17trGreen.SmallChange = 1trGreen.TickFrequency = 17trGreen.TickStyle = TickStyle.BottomRighttrGreen.Value = 0 '剛開始設置為0trBlue.Maximum = 255trBlue.Minimum = 0trBlue.LargeChange = 17trBlue.SmallChange = 1trBlue.TickFrequency = 17trBlue.TickStyle = TickStyle.BottomRighttrBlue.Value = 0 '剛開始設置為0Init()Pencolor = Color.BlackEnd Sub
--------------------------------------------------------------------------------------------Private Sub mLine_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mLine.Clickf1 = 1End Sub
--------------------------------------------------------------------------------------------Private Sub mCircle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mCircle.Clickf1 = 2End Sub
--------------------------------------------------------------------------------------------Private Sub mRectangle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mRectangle.Clickf1 = 3End Sub
--------------------------------------------------------------------------------------------Private Sub mClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mClear.Clickf1 = 4P.Invalidate()Init()End Sub
--------------------------------------------------------------------------------------------Private Sub P_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles P.MouseDownSelect Case f1Case 1If e.Button = MouseButtons.Left ThenIf lf Thenlc(l) = Pencolorlp(l, ln(l)) = New Point(e.X, e.Y)lf = FalseElseIf Not lf Thenln(l) = ln(l) + 1End IfElseIf e.Button = MouseButtons.Right Thenlleft = FalseP.Invalidate()End IfCase 2If cf Thencc(c) = Pencolorcp1(c) = New Point(e.X, e.Y)cf = FalseElseIf Not cf Thencf = TrueP.Invalidate()End IfCase 3If rf Thenrc(r) = Pencolorrp1(r) = New Point(e.X, e.Y)rf = FalseElseIf Not rf Thenrf = TrueP.Invalidate()End IfEnd SelectEnd Sub
--------------------------------------------------------------------------------------------Private Sub P_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles P.MouseMoveSelect Case f1Case 1If lleft ThenIf Not lf Thenlp(l, ln(l) + 1) = New Point(e.X, e.Y)P.Invalidate()End IfEnd IfCase 2If Not cf Thencp2(c) = New Point(e.X, e.Y)P.Invalidate()End IfCase 3If Not rf Thenrp2(r) = New Point(e.X, e.Y)P.Invalidate()End IfEnd SelectEnd Sub
--------------------------------------------------------------------------------------------Private Sub P_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles P.PaintDim rect1 As RectangleDim rect2 As RectangleDim i, j As IntegerDim g As Graphics = e.Graphicsg.SmoothingMode = SmoothingMode.AntiAliasIf l > 0 ThenFor i = 0 To l - 1For j = 0 To ln(i) - 1g.DrawLine(Pens.White, lp(i, j), lp(i, j + 1))g.DrawLine(New Pen(lc(i), 3), lp(i, j), lp(i, j + 1))NextNextEnd IfIf c > 0 ThenFor i = 0 To c - 1rect1 = New Rectangle(cp1(i).X - cr(i), cp1(i).Y - cr(i), cr(i) * 2, cr(i) * 2)rect2 = New Rectangle(cp1(i).X - cr(i), cp1(i).Y - cr(i), cr(i) * 2, cr(i) * 2)g.DrawEllipse(Pens.White, rect1)g.DrawEllipse(New Pen(cc(i), 3), rect2)NextEnd IfIf r > 0 ThenFor i = 0 To r - 1rect1 = New Rectangle(Min(rp1(i).X, rp2(i).X), Min(rp1(i).Y, rp2(i).Y), Abs(rp1(i).X - rp2(i).X), Abs(rp1(i).Y - rp2(i).Y))rect2 = New Rectangle(Min(rp1(i).X, rp2(i).X), Min(rp1(i).Y, rp2(i).Y), Abs(rp1(i).X - rp2(i).X), Abs(rp1(i).Y - rp2(i).Y))g.DrawRectangle(Pens.White, rect1)g.DrawRectangle(New Pen(rc(i), 3), rect2)NextEnd IfSelect Case f1Case 1If ln(l) >= 1 ThenFor j = 0 To ln(l) - 1g.DrawLine(Pens.White, lp(i, j), lp(i, j + 1))g.DrawLine(New Pen(lc(l), 3), lp(i, j), lp(i, j + 1))NextEnd IfIf lleft ThenIf Not lf Theng.DrawLine(Pens.White, lp(l, ln(l)), lp(l, ln(l) + 1))g.DrawLine(New Pen(lc(l), 3), lp(l, ln(l)), lp(l, ln(l) + 1))End IfElseIf ln(l) > 0 Thenl = l + 1End Iflf = Truelleft = TrueEnd IfCase 2If Not cf Thencr(c) = Sqrt((cp2(c).X - cp1(c).X) * (cp2(c).X - cp1(c).X) + (cp2(c).Y - cp1(c).Y) * (cp2(c).Y - cp1(c).Y))rect1 = New Rectangle(cp1(c).X - cr(c), cp1(c).Y - cr(c), cr(c) * 2, cr(c) * 2)rect2 = New Rectangle(cp1(c).X - cr(c), cp1(c).Y - cr(c), cr(c) * 2, cr(c) * 2)g.DrawLine(Pens.White, cp1(c), cp2(c))g.DrawLine(New Pen(cc(c), 3), cp1(c), cp2(c))g.DrawLine(Pens.Black, cp1(c), cp2(c))g.DrawEllipse(Pens.White, rect1)g.DrawEllipse(New Pen(cc(c), 3), rect2)Elsecr(c) = Sqrt((cp2(c).X - cp1(c).X) * (cp2(c).X - cp1(c).X) + (cp2(c).Y - cp1(c).Y) * (cp2(c).Y - cp1(c).Y))rect1 = New Rectangle(cp1(c).X - cr(c), cp1(c).Y - cr(c), cr(c) * 2, cr(c) * 2)rect2 = New Rectangle(cp1(c).X - cr(c), cp1(c).Y - cr(c), cr(c) * 2, cr(c) * 2)g.DrawEllipse(Pens.White, rect1)g.DrawEllipse(New Pen(cc(c), 3), rect2)c = c + 1End IfCase 3If Not rf Theng.DrawLine(Pens.White, cp1(r), cp2(r))g.DrawLine(Pens.Black, cp1(r), cp2(r))rect1 = New Rectangle(Min(rp1(r).X, rp2(r).X), Min(rp1(r).Y, rp2(r).Y), Abs(rp1(r).X - rp2(r).X), Abs(rp1(r).Y - rp2(r).Y))rect2 = New Rectangle(Min(rp1(r).X, rp2(r).X), Min(rp1(r).Y, rp2(r).Y), Abs(rp1(r).X - rp2(r).X), Abs(rp1(r).Y - rp2(r).Y))g.DrawRectangle(Pens.White, rect1)g.DrawRectangle(New Pen(rc(r), 3), rect2)Elserect1 = New Rectangle(Min(rp1(r).X, rp2(r).X), Min(rp1(r).Y, rp2(r).Y), Abs(rp1(r).X - rp2(r).X), Abs(rp1(r).Y - rp2(r).Y))rect2 = New Rectangle(Min(rp1(r).X, rp2(r).X), Min(rp1(r).Y, rp2(r).Y), Abs(rp1(r).X - rp2(r).X), Abs(rp1(r).Y - rp2(r).Y))g.DrawRectangle(Pens.White, rect1)g.DrawRectangle(New Pen(rc(r), 3), rect2)r = r + 1End IfCase 4g.FillRectangle(Brushes.White, P.ClientRectangle)f1 = 0End Select
--------------------------------------------------------------------------------------------
Private Sub tr_Scroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles trRed.Scroll, trGreen.Scroll, trBlue.ScrollPencolor = Color.FromArgb(trRed.Value, trGreen.Value, trBlue.Value)pColor.BackColor = PencolorEnd Sub
End Class

5 、程序運行

劉一哥GIS:專注測繪地理信息教育,探索地理奧秘,分享GIS價值!

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287599.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287599.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287599.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IE8 兼容background-size的解決辦法

.bgpic { background-image:url(); background-size:cover; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src,sizingMethodscale); } 注意progid里面的src路徑是絕對路徑或是相對于頁面的路徑。? div class"bgpic"style"width:200px;height:1…

從頭開始敲代碼之《從BaseApplication/Activity開始》

轉載請注明出處王亟亟的大牛之路 其安易持,其未兆易謀;其脆易泮,其微易散。為之于未有,治之于未亂。合抱之木,生于毫末;九層之臺,起于壘土;千里之行,始于足下。為者敗之…

查缺補漏系統學習 EF Core 6 - 原始 SQL 查詢

推薦關注「碼俠江湖」加星標,時刻不忘江湖事這是 EF Core 系列的第五篇文章,上一篇文章盤點了 EF Core 中的幾種數據查詢方式。但是有有時候,我們可能無法用標準的 LINQ 方法完成查詢任務。或者編譯后的 LINQ 查詢,沒有我們想要的…

【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭讀取

一、學習目標 了解圖片的結構屬性了解如何捕獲視頻了解waitkey的使用方法 目錄 [python opencv 計算機視覺零基礎到實戰] 一、opencv的helloworld [【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭讀取] 一、opencv的helloworld [[python opencv 計…

python冒泡排序代碼完整_用Python寫冒泡排序代碼

python代碼實現冒泡排序代碼其實很簡單,具體代碼如下所示:代碼Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 def bubbleSort(numbers):for j in xrange(len(numbers),-1,-1):for i in xra…

[C++]VS2005(VC8) 使用 Boost

測試環境:[1] Widnows XP Professional[2] Visual Studio 2005 Team Studio(VC8.0)[3] WinCvs 1.31. 下載 Boost透過 CVS 下載最新版 cvs -d:pserver:anonymousboost.cvs.sourceforge.net:/cvsroot/boost login [詢問密碼時,直接輸入 Enter 略過] cvs …

Android之編譯提示error: Apostrophe not preceded by

1 問題 as編譯提示錯誤如下 error: Apostrophe not preceded by 2 原因 字符串資源文件里面value包含一個單引號 <string name"key">Don t ....</string> 2 解決辦法 1) 加雙引號 <string name"key">"Don t ...."</s…

【ArcObject開發】實驗:ArcGIS Desktop開發方式入門基礎教程

一、實驗目的: 熟練掌握ArcGIS Desktop開發方式。 二、實驗準備: 學習ArcGIS Desktop定制步驟;熟悉VBA編程環境、Active DLL和Active EXE開發一般過程。 三、實驗內容: (1)描述在ArcGIS Desktop環境下定制窗體界面的一般步驟;(2)在VBA環境下編寫宏,實現圖層視圖…

C# WPF后臺動態添加控件(經典)

概述在Winform中從后臺添加控件相對比較容易&#xff0c;但是在WPF中&#xff0c;我們知道界面是通過XAML編寫的&#xff0c;如何把后臺寫好的控件動態添加到前臺呢&#xff1f;本節舉例介紹這個問題。這里要用到UniformGrid布局&#xff0c;UniformGrid 是一種橫向的網格分割、…

Android Button監聽的方式

Android Button的幾種監聽方式 1、一個Button對應一個監聽 1&#xff09;xml文件中綁定監聽 <Buttonandroid:id"id/btn_test"android:layout_width"match_parent"android:layout_height"wrap_content"android:text"test listener"a…

hdu 5441 (并查集)

題意&#xff1a;給你n個點&#xff0c;m條邊構成無向圖。q個詢問&#xff0c;每次一個值&#xff0c;求有多少條路&#xff0c;路中的邊權都小于這個值 a->b 和 b->a算兩種 思路&#xff1a;把權值從小到大排序&#xff0c;詢問從小到大排序&#xff0c;如果相連則用并查…

【Envi風暴】Envi 5.4遙感影像鑲嵌原來如此簡單!

圖像鑲嵌指是在一定的數學基礎控制下,把多景相鄰的遙感圖像拼接成一個大范圍、無縫圖像的過程。 Envi的圖像鑲嵌功能提供交互式的方式將沒有地理坐標或者地理坐標的多幅圖像合并,生成一幅單一的合成圖像。鑲嵌功能提供了透明處理、勻色、羽化等功能。 下面演示基于地理坐標(…

[python opencv 計算機視覺零基礎到實戰] 三、numpy與圖像編輯

一、學習目標 了解圖片的通道與數組結構了解使用numpy創建一個圖片了解使用numpy對圖片的一般操作方法 目錄 [python opencv 計算機視覺零基礎到實戰] 一、opencv的helloworld [【python opencv 計算機視覺零基礎到實戰】二、 opencv文件格式與攝像頭讀取] 一、opencv的hel…

java 常用類庫_JAVA(三)JAVA常用類庫/JAVA IO

成鵬致遠 |lcw.cnblog.com|2014-02-01JAVA常用類庫1.StringBufferStringBuffer是使用緩沖區的&#xff0c;本身也是操作字符串的&#xff0c;但是與String類不同&#xff0c;String類的內容一旦聲明之后則不可改變&#xff0c;改變的只是其內存地址的指向&#xff0c;而StringB…

Error: package or namespace load failed for ‘rJava’:

https://stackoverflow.com/questions/30738974/rjava-load-error-in-rstudio-r-after-upgrading-to-osx-yosemite 安裝好的“xlsx”不能正常加載 library("xlsx") 報錯&#xff1a; 載入需要的程輯包&#xff1a;rJava Error: package or namespace load failed for…

Android之國際化部分文字生效而部分文字沒有生效的坑

1 問題 Android國際化我們知道只要在res目錄下面&#xff0c;創建不同國家的文件夾然后&#xff0c;把不同國家對于的語言以鍵值對的方式寫進strings.xml文件就行&#xff0c;這是一個非常簡單的操作&#xff0c;但是今天遇到了一個很奇葩的問題&#xff0c;在部分手機&#x…

【中間件】c#/.net使用GZY.Quartz.MUI搭建可視化的定時任務面板

GZY.Quartz.MUI是在github上開源的aspnetcore項目, 它旨在幫助開發人員通過面板來設置定時任務&#xff0c;主要想做的就是:像swaggerUI一樣,項目入侵量小,僅需要在Startup中注入的UI組件官方地址:https://www.cnblogs.com/GuZhenYin/p/15745002.html主要功能1.增加本地json持久…

Python學習筆記之字典

一、創建和使用字典 1、創建字典 phonebook{Alice:2341,Beth:9102,Cecil:3258} 2、dict,通過映射創建字典 >>> items[(name,Gumby),(age,34)] >>> ddict(items) >>> d 顯示&#xff1a;{name:Gumby,age:34} dict&#xff0c;通過關鍵字創建字典 >…

iOS UI基礎-7.0 UIScrollView

概述 移動設備的屏幕大小是極其有限的&#xff0c;因此直接展示在用戶眼前的內容也相當有限.當展示的內容較多&#xff0c;超出一個屏幕時&#xff0c;用戶可通過滾動手勢來查看屏幕以外的內容,普通的UIView不具備滾動功能&#xff0c;不能顯示過多的內容。UIScrollView是一個能…

【ArcGIS風暴】緩沖區分析、疊置分析綜合實驗案例:購房區域的選擇

實驗平臺:ArcGIS 9.3實驗目的:熟練掌握A rcGIS緩沖區分析和疊置分析操作,綜合利用各項空間分析工具解決實際問題。實驗要求:對每個條件進行緩沖區分析,運用空間疊置分析對多個圖層疊加,并分等級,確定合適的區域。實驗數據:ArcEx8實驗步驟打開ArcMap,加載數據ArcEx8,如…