【计算机图形学】实验: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.mzph.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,如…