VB023用Visual Basic 开发交互式CAD系统
收藏
资源目录
压缩包内文档预览:(预览前20页/共26页)
编号:6894999
类型:共享资源
大小:799.77KB
格式:RAR
上传时间:2018-01-02
上传人:专业****设计
认证信息
个人认证
葛**(实名认证)
江苏
IP属地:江苏
20
积分
- 关 键 词:
-
定做请加QQ:
1060741974
参考网站
http://www.bysj360.com/
http://www.bylw520.ne
- 资源描述:
-
VB023用Visual Basic 开发交互式CAD系统,定做请加QQ:,1060741974,
,参考网站
,/
,http://www.bylw520.ne
- 内容简介:
-
用VisualBasic开发交互式CAD系统1内容提要在交互式CAD系统中,不仅可以实现用鼠标绘图,还可以选择图元,并对选中的图元进行缩放、缩小、等操作。在众多的交互式CAD开发工具中,VisualBasic是使用最简单、应用最广泛、使用者最多的一种开发工具,VisualBasic语言具备一定的绘图功能。本设计的主要内容是在学习VisualBasic语言和交互式CAD技术的基础上,运用VisualBasic语言来开发交互式CAD系统。本系统具有交互绘图功能。能实现鼠标绘图,能对图形进行各种形式的缩放操作。本文中的缩放主要包括图形的放大、缩小和局部放大与全屏显示。关键词:VisualBasic交互式CAD缩放用VisualBasic开发交互式CAD系统2AbstractIninteractiveCADsystem,notonlymayrealizewiththemousecartography,butalsomaychoosethechartYuan,andtothechartYuanwhichselectscarriesonthereproducebypantograph,reduces,andsoontheoperation.InthemultitudinousinteractiveCADdevelopmentkit,VisualBasicistheusesimple,theapplicationismostwidespread,theusermostonekindofdevelopmentkit,VisualBasiclanguagehasthecertaincartographyfunction.ThisdesignmaincontentisinstudiesVisualtheBasiclanguageandintheinteractiveCADtechnologyfoundation,languagedevelopstheinteractiveCADsystemusingVisualBasic.Thissystemhasthealternatelycartographyfunction.Canrealizethemousecartography,cancarryoneachkindofformtothegraphthereproducebypantographoperation.Inthisarticlereproducebypantographmainlyincludesthegraphtheenlargement,reduceswiththefractionatedgainandtheentirescreendemonstration.Keywords:VisualBasicinteractiveCADzooming用VisualBasic开发交互式CAD系统3目录一、绪言4二、开发基础5(一)交互式CAD简介5(二)VisualBasic的简介.5三、系统分析6(一)可行性研究.6(二)需求分析6四、系统总体设计8五、详细设计8(一)界面制作.8(二)绘图.9(三)缩放.11六、用户手册16七、结束语.17八、致谢18九、参考文献19用VisualBasic开发交互式CAD系统4一、绪言在众多的交互式CAD开发工具中,VisualBasic是使用最简单、应用最广泛、使用者最多的一种开发工具。VisualBasic功能强大是毫无疑问的,所以本文采用VisualBasic进行了交互式CAD系统的开发。本文结合VisualBasic语言介绍了交互式CAD系统的开发技术,剖析了构造系统的思路和技巧。本文的第一部分为开发基础部分,比较简单的介绍了交互式CAD和VisualBasic语言。第二部分为系统定义时期部分,介绍了系统的可行性研究与系统的硬件需求。第三部分主要分为两部分:一个是总体设计部分,大略的介绍了所要开发的交互式CAD系统的主要组成部分。另一部分是详细设计部分,这也是本文的主要核心部分。详细的介绍了绘图及图形的缩放功能。第四是用户手册。第五部分为后记部分。最后是第六部分参考文献。用VisualBasic开发交互式CAD系统5二、开发基础(一)交互式CAD简介对大多数人来说交互式CAD技术是一个熟悉而又陌生的概念。那么,什么是交互式CAD技术呢?简单得打个比方来说:用鼠标在屏幕上画一条直线段,选种它时,会在端点处显示方形的手柄,移动手柄,可以改变直线段的方位和长度。由于采用这种技术绘图具有方便、直观、高效等特点,所以在各种专业软件,数据处理软件、AutoCAD、SolidWork、Flash、Visio、PowerPoint、Word等很多软件里面有着广泛的应用。交互式CAD技术比一般的计算机绘图技术要复杂一些。在交互式CAD系统中,不仅可以实现用鼠标绘图,还可以选择图元,并对选中的图元进行缩放、缩小、等操作。交互式CAD技术是相对于一般技术而言的。交互设计的任务包括定位、定向、定量和移动等等。交互设计的目的在于尽可能地站在用户的角度考虑问题,解决问题。交互式设计应该遵循的基本原则有以下七种:(1)尽量减少用户输入数据的工作量,尽可能提供缺省值。(2)容错功能要强。(3)数据输入方便,并提供与其他软件的数据交换接口。(4)比较完善的帮助系统,包括联机帮助、上下文帮助等。(5)操作过程记忆,包括恢复操作功能和重复操作功能。(6)绘图过程的可见性。利用橡皮线功能可以显示图元绘制的过程。(7)指令反馈速度快。如图元拾取时,系统必须比较快地做出反应;如果运算比较费时,则可以在一定精度内进行近似计算。交互式CAD技术不仅在办公软件如:Word、PowerPoint等软件中均有大量的应用而且在绘图软件如:AutoCAD、CoralDraw等大量使用了交互式CAD技术。(二)VisualBasic的简介VisualBasic是一种功能非常强大的编程语言。一种在计算机技术发展史上应用得最为广泛的语言。自从Basic语言诞生以来,就一直以其简单易学性而闻名于世,因而受到了广大初学者的青睐。然而,由于它是非结构化的编程语言,而且速度慢、灵活性差,为此也受到了许多人的指责。很多人认为,Basic语言是一种游戏语言或数学语言,不能用来开发应用程序。随着VisualBasic系列开发环境的出现,这一现象已经成为过去。VisualBasic保留了Basic早期的一些特性。VisualBasic在原有的BASIC语言的基础上进一步发展,至今包含了数百条语句、函数及关键词,其中很多和WindowsGUI有直接关系。在计算机领域,图形编程是一个很重要的内容。VisualBasic作为一门功能强大的计算机语言,为用户提供了一系列的属性、方法和控件,利用它们,可以轻松地实现一般的图形绘制。所以对于一般的图形绘制任务而言,VisualBasic是完全可以胜任的。用VisualBasic开发交互式CAD系统6三、系统分析(一)可行性研究在问题定义阶段的结论进一步复查和确认之后,仔细分析了系统的处理过程,以后,更进一步的了解到本系统应具体解决的问题。整个系统的流程是在用户的要求下进行的,利用鼠标事件所绘制的图片显示出来。并以用户需求把它们随意放大或缩小。Windows消息与VB事件的转换:VB的模块化结构:(二)需求分析在需求分析的基本任务是准确地回答“系统必须做什么?”这个问题。这一阶段是对系统认识最为全面、准确、清晰、得体的一个比较关键的时期。需求分析的结果是系统开发的基础,也应该是用户基本上确定自己的最终要求阶段,为下一步的总体设计打好基础。一旦结束需求分析,整个系统的框架基本上就不应该改变了,它关系到整个系统的成败。.硬件运行要求:为了让交互式CAD系统能够正常运行,至少要具备以下的硬件要求具有48666MHz处理器(或更高档处理器)的IBMPC兼容机Windows窗口程序事件对象消息VisualBasic对象资源文件类模块标准模块窗体代码窗体用VisualBasic开发交互式CAD系统7一个鼠标足够的硬盘空间,最好2GB的空间16MB内存VGA或更高分辨率的监视器软件运行要求:Windows98操作系统或Windows2000操作系统Vb6.0系统盘VB系统的工作流程图:获得数据是退出吗处理信息启动退出是否用VisualBasic开发交互式CAD系统8四、系统总体设计交互式CAD系统的总体设计设计交互式CAD系统首先应该具备一个控制系统的主控窗口,就是交互式CAD的界面。主控模块分绘图、编辑、缩放三个子模块。我做的系统虽说主要围绕缩放功能,但也是以绘图模块所绘制的图形来实现,所以也是系统中必不可少的部分。第一个子模块为绘图部分,主要有直线、多义线、圆、圆弧。第二个子模块为编辑部分。第三个子模块为图形的缩放部分,也是本系统所要重点设计的部分。所以在本论文当中主要围绕图元的放大、缩小、局部放大、全屏显示这四个部分。图3-1系统的总体设计五、详细设计(一)界面制作界面制作首先要想一想要设计一个什么样的界面,而且还要遵循很多原则。比如有美学方面的,也有习惯方面的。在总体设计原则的指导下,充分考虑细节问题。(1)制作启动窗口实现交互绘制图元,首先需要创建图形的界面,然后再窗体模块中添加事件代码。在创建界面之前我在设计里添加了启动窗口。制作启动窗口:单击工程菜单的添加窗体点击添加窗体中的展示屏幕。屏幕上的内容可以在属性窗口中修改。(2)菜单设计我的设计里主要有绘图、编辑、缩放等菜单。如总体设计中所示的这些菜单还有各自的子菜单。制作菜单首先在窗体中添加图片框,在工具栏中打开“菜单编辑器”,利用“菜单编辑器”可以很方便的实现菜单的制作。绘图菜单包括:“直线”“多义线”“圆弧”“圆”,它们的标题分别系统界面局部放大全屏显示编辑绘图缩放缩小放大直线多义线圆弧圆用VisualBasic开发交互式CAD系统9是“Line”“Polyline”“Circle”“Arc”和“Text”。缩放菜单包括:“放大”“缩小”“局部放大”“全屏显示”,它们的标题为“ZoomOut”“ZoomIn”“LocalZoomOut”和“Extent”。(3)工具栏的设计工具条不仅使程序界面更加美观,利用工具条上的工具按钮,还能提高工作效率。状态栏可以给出当前命令的状态、操作信息、提示和反馈信息,是计算机与用户交互的一个重要窗口。所以要先创建工具条和状态栏。创建工具条可以利用VB提供的Toolbar控件和ImageList控件,利用Statusbar控件可以创建状态栏。在工具箱中单击ImageList控件,在窗体中添加控件ImageList打开属性页对话框。对话框有三个对象分别是通用,图像,颜色。在图像选项卡中,打开的对话框中选择图片的路径和名称,图片将会显示到图片栏中(就如图3-2所示)。图3-2图像选项(4)代码设计制作菜单,工具条,状态栏后,就给VB-CAD程序添加。首先给窗体添加ImageList控件ImageList1,添加Toolbar控件,用自定义属性的“属性页”对话框建立与ImageList1控件的联系。添加这些控件之后,添加控件的事件代码。系统运行后的界面如图3-3和图3-4图3-3主界面图3-4窗口模板(二)绘图代码设计用VisualBasic开发交互式CAD系统10图3-5“绘图”菜单绘图在CAD系统是必不可少的。我只做了直线、多义线、圆、圆弧四个选项。绘图离不开坐标系统。因为在VB中,只有缺省坐标和自定义坐标两个概念。其中,缺省坐标的原点在于窗口的左上角,横坐标向右为正;纵坐标向下为正。交互式CAD系统可以实现用鼠标交互式地输入数据。采用面向对象的编程技术,需要首先创建一个图元系列类和一个命令系列类。定义绘图时的交互过程。定义好类以后,再定义类的属性及调用类的方法就可以进行交互绘图了。交互式鼠标的绘图行为,可以在屏幕上移动鼠标光标,并根据光标处的坐标进行绘图。这样整个绘图过程就简单多了,而且也可以随用户的意愿来决定绘图的大小或长度等。用鼠标事件,单击鼠标左键时,开始绘图:PublicSubLeftButton(XAsSingleAsSingle);bolDraw=True单击鼠标右键时,取消绘图:PublicSubLeftButtonDown(XAsSingle,YAsSingle);bolDraw=False(1)直线用Line方法绘制语法:Object.LineStep(x1,y1)Step(x2,y2),color,BF其中,object:(可选)对象表达式。如果object省略,具有焦点的窗体作为object。Stept:(可选)是关键字,指定起点坐标,相对于CuttentX和CurrentY所提供的的当前图标坐标。x1,y1:(可选)Single,直线的起点坐标。ScaleMode属性决定了使用的度量单位。如果省略,线起始于由CurrentX和CurrentY指定的位置。(2)多义线是由多条直线组成,所以与绘制直线是同一个道理。多义线用Line方法将多义线的各个顶点一次连线。(3)绘制圆形使用Circle函数。语法:object.CircleStept(x,y),radius,color,start,end,aspect其中,object:(可选)对象表达式。如果object省略,具有焦点的窗体作为object。Stept:(可选)是关键字,指定圆的中心,相对于object的CuttentX和CurrentY所提供的坐标。x,y:(必须写)Single圆的中心坐标。Object的ScaleMode属性决定使用的度量单位。radius:(必须选)Single,圆的半径。Object的ScaleMode属性决定使用的度量单位。Start,end:(可选)SingleAspect:(可选)Single,圆的纵横尺寸比。缺省值为1.0(4)圆弧用VisualBasic开发交互式CAD系统11绘圆弧比起绘圆要复杂一点,本系统采用圆心起点和终点绘制圆弧,除了需要知道圆心以外,还要知道圆弧的起点的终点的坐标。语法:object.CircleStept(x,y),radius,color,start,end,aspect用Circle方法绘圆弧时,需要知道圆弧的起点和终点与圆心连接和X轴正向所成的角度。圆弧的半径可以根据圆心与起点的距离得到。Start和end分别指定弧的起点和终点相对于中心点的连线与X轴正向所成的角度,用弧度表示。范围在-2*pi()到2*pi()之间,缺省时为0。返回点pBegin到点pEnd的连线与X轴正向的夹角,用弧度表示。如果重点坐标大于、等于起点坐标。并且终点坐标大于、等于起点坐标IfpEnd.x=pBegin.xAndpEnd.y=pBegin.yThenGetAngle=sita如果终点横坐标小于、等于起点横坐标,并且终点纵坐标大于、等于起点纵坐标ElseIfpEnd.x=pBegin.yThenGetAngle=PI-sita如果终点横坐标小于、等于起点横坐标,并且终点纵坐标小于、等于起点纵坐标ElseIfpEnd.x=pBegin.xAndpEnd.y=pBegin.yThenGetAngle=PI+sita如果终点横坐标大于、等于起点横坐标,并且终点纵坐标小于、等于起点纵坐标ElseIfpEnd.x=pBegin.xAndpEnd.y=pBegin.yThenGetAngle=2*PI-sitaEndif计算圆弧的起始点:Angle1=GetAngle(m_pCenter,m_pBegin)计算圆弧终止角:Angle2=GetAngle(m_pCenter,m_pEnd)(三)缩放代码设计图3-6“缩放”菜单在绘图和审图过程中,常常有对图形进行缩小或放大的要求。实现各种方式的缩小和放大功能通过调节绘图环境的ScaleLeft,ScalaTop,ScaleWidth和ScaleHeight属性或者利用Scale方法可以实现图形画面的缩小、放大。缩放菜单项中各项的标题为“ZoomOut”,“ZoomIn”,“LocalZoomOu”和“Extent”。(1)全局缩放通过放大或缩小Scale方法的参数来实现。原理:就是将视口矩形4个角点的坐标放大一定的倍数,视口内的图形将以相应的倍数缩小。相反,将视口用VisualBasic开发交互式CAD系统12矩形4个角点的坐标缩小一定倍数,视口内的图形以相应的倍数放大。全局图形缩小或放大都由改变坐标系统来实现。全局缩小图形PrivateSubZoomIn_Click()SLeft=sLeft*1.2以120%的比例放大sRight=sRight*1.2sTopic=sTopic*.2sBottom=sBottom*1.2修改坐标系统CallCoordinateEndSub全局放大图形PrivateSubZoomOut_Click()sLeft=sLeft*0.8以80%的比例缩小sRight=sRight*0.8sTopic=sTopic*0.8sBottom=sBottom*0.8改变坐标系统CallCoordinateEndSub上面两个过程中都要调用Coordinate过程,该过程利用坐标参数Scale方法修改坐标系统,并通过控制视口范围来实现图形的缩放操作。Coordinate过程的代码:PublicSubCoordinate()利用Scale方法修改坐标系统DrawMain.picDraw.Scale(sLeft,sTopic)-(sRight,sBottom)更新绘图环境DrawMain.picDraw.RefreshEndSub图3-7原始图形用VisualBasic开发交互式CAD系统13图3-8全局放大和全局缩小结果(2)局部放大当希望更清楚地了解图形的某个细节部位时,可以采用局部放大技术,把包含该部位的一个矩形范围放大到整个绘图环境。如图3-9所示,要把E点和G点确定的矩形放大到整个绘图环境,需要把E点与屏幕左上角A点对齐,然后按照一定比例放大图形,使矩形内的图形正好全部显示在视口内。放大的比例包括X方向的比例和Y方向的比例,若不改变图元的形状,并且矩形EFGH内的所有图元能在矩形ABCD中显示,放大比例只能取X方向比例和Y方向比例中的小者。ABAEBFEFGHCDCGDH图3-9局部放大的原理图示实现局部放大先选取用户所要放大的部分,那么这个部分就用矩形来选取,用Line方法绘矩形;而且无论放大或缩小都要计算新坐标系与逻辑坐标系的缩放比例因子;然后重新设置视口范围之后,就是局部放大的效果了;创建CviewLocalZoomOut类,并添加一些相关的代码。然后像处理前面各绘图类一样,在窗体模块中添加相对应的鼠标事件处理代码。在该类中主要实现选取局部放大的功能。选取行为在移动鼠标的过程中产生,放大行为在鼠标左键第二次击下的那一时刻才产生。就像图3-10和3-11所示EFGH用VisualBasic开发交互式CAD系统14图3-10用矩形窗口选择所要放大的局部范围图3-11局部放大的效果(3)全屏显示全屏显示是要在绘图环境中刚好显示所有图元。实际上,它是局部放大的一个特例。就如图(3-12)所示,把矩形EFGH中的图形元素正好全部显示在ABCD矩形区域中。所有图元的包围矩形可以通过比较所有图元各自的包围矩形得到。所有图元包围矩形对角定点的最小横坐标和最小纵坐标可以确定一个点,最大横坐标和最大纵坐标可以确定另一个点,由两点所确定的矩形就是要求的包围矩形。图3-12显示全图的原理矩形窗口ABEDCAFHGADCBEHGF用VisualBasic开发交互式CAD系统15图3-13原图图3-14全屏显示的结果用VisualBasic开发交互式CAD系统16六、用户手册运行系统,会出现一个界面就如下面所示的图-用户界面。分别有菜单栏、工具栏、状态栏就是显示窗口。那么这个系统应该如何使用?首先在执行缩放功能之前,要在窗口中利用四个绘图工具中四个工具按钮任意绘制几个图。本系统用的是交互式的绘图技术,所以在窗体中用鼠标绘制图形。而且其他功能都使用的是鼠标事件,所以直接用鼠标点击所需要的工具来执行其功能。若要使用放大工具,就直接点击工具栏中的放大工具按钮。并在窗口中点击,就会把已绘制好的图形放大。缩小工具的使用和放大工具一致。全屏显示的原理虽然和局部放大原理差不多,但是使用方法和放大、缩小是一样的。使用局部放大工具,就在用户想要放大的部位拖动鼠标就会出现矩形,第二次单击鼠标就执行它的功能了。其中矩形里面的部分就是用户所要放大的部分。菜单工具栏窗口绘图区绘图工具放大缩小局部放大全屏显示用VisualBasic开发交互式CAD系统17七、结束语经过大概三个月的时间,我的毕业设计终于完成了。回顾整个设计过程,不论是定义时期还是开发时期都尝到了不少的酸甜苦辣。在这次设计中明显感觉到自己的实践经验不足,因此很多方面都有不足与不便之处,而且遇到问题总是不能得心应手的解决。在设计本系统时,因为本人的知识、技术水平有限,在好多地方都有不足和不便之处敬请您多指教。通过这次设计,我还发现查阅资料的重要性。由于我是VB的新手,所以应用起来不是很顺当,这样,大量的书籍资料给了我很大的帮助。而且每一位出书的作者对语言的人士都有各自不同的角度,所以即使是同一水平的书也会有不同的收获。鉴于此我觉得要学好一门语言,就要做到多查、多看、多练、多用。取人之长,补己之短。这样才能少走弯路。另外,平时就养成良好的学习习惯也是非常重要的。遇到什么自认为比较有价值的东西就应及时地记下来,以免以后遇到同样的问题挠头。总之,一次毕业设计,我的受益匪浅。不论从理论上,技术上还是从经验方法上都使自己有了一定的升华,这在我今后的工作中无不是最宝贵的财富。用VisualBasic开发交互式CAD系统18八、致谢在本次毕业设计中,我从指导老师徐善针老师身上学到了很多东西。徐老师认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我收益非浅。他无论在理论上还是在实践中,都给与我很大的帮助,使我得到不少的提高,这对于我以后的工作和学习都有一种巨大的帮助,感谢他耐心的辅导,没有他的悉心帮助和指导就没有这次毕业设计的完成。某医疗部门总务信息管理系统(物品管理)能及时开发完成,还有同组的李国珍同学的热心帮助,再次向尊敬的老师和同学表示深深的谢意.用VisualBasic开发交互式CAD系统19九、参考文献1作者:周爱武汪海威出版社:清华大学出版社书名:VisualBasic程序设计2作者:叶佳出版社:中国水利水电出版社书名:中文VisualBasic60.编程实用教程3作者:姜晓铭出版社:北京工业大学出版社书名:VisualBasic6.0程序设计应用短期培训教程4作者:孙家广出版社:清华大学出版社书名:计算机图形学5作者:魏海涛出版社:电子工业出版社书名:计算机图形学6作者:周培德出版社:清华大学出版社书名:计算几何-算法分析与设计用Visual Basic 开发交互式CAD系统(图形的缩放部分),作 者:朴顺今 指导教师:张云秋,内容提要,在交互式CAD系统中,不仅可以实现用鼠标绘图, 还可以选择图元,并对选中的图元进行缩放、缩小等操作。在众多的交互式CAD开发工具中,Visual Basic是使用最简单、应用最广泛、使用者最多的一种开发工具,Visual Basic语言具备一定的绘图功能。我的设计的主要内容是在学习Visual Basic 语言和交互式CAD技术的基础上,运用Visual Basic语言来开发交互式CAD系统。本系统具有绘图功能,能实现鼠标绘图,能对图形进行各种形式的缩放操作。我的设计中的缩放功能主要包括图形的放大、缩小和局部放大与全屏显示。,交互式CAD的界面,VB系统的工作流程图,系统开发总设计图,在绘图和审图过程中,常常有对图形进行缩放要求。全局缩放原理:就是将视口矩形4个角点的坐标放大一定的倍数,视口内的图形将以相应的倍数缩小。相反,将视口矩形4个角点的坐标缩小一定倍数,视口内的图形以相应的倍数放大。,全局缩放原理:,局部放大原理,当希望更清楚地了解图形的某个细节部位时,可以采用局部放大技术,把包含该部位的一个矩形范围放大到整个绘图环境。把E点和G点确定的矩形放大到整个绘图环境,需要把E点与屏幕左上角A点对齐,然后按照一定比例放大图形,使矩形内的图形正好全部显示在视口内。放大的比例包括X方向的比例和Y方向的比例,若不改变图元的形状,并且矩形EFGH内的所有图元能在矩形ABCD中显示 。,局部放大原理图如下:,局部放大的效果,用矩形窗口选择所要放大的局部范围,全屏显示原理,全屏显示是要在绘图环境中刚好显示所有图元。实际上它是局部放大的一个特例。把矩形EFGH中的图形元素正好全部显示在ABCD矩形区域中。所有图元的包围矩形可以通过比较所有图元各自的包围矩形得到。所有图元包围矩形对角定点的最小横坐标和最小纵坐标可以确定一个点,最大横坐标和最大纵坐标可以确定另一个点,由两点所确定的巨形就是要求的包围矩形。,全屏显示的原理图:,总 结,经过大概三个月的时间,我的毕业设计终于完成了。回顾整个设计过程,不论是定义时期还是开发时期都尝到了不少的酸甜苦辣。在这次设计中明显感觉到自己的实践经验不足,因此很多方面都有不足与不便之处,而且遇到问题总是不能得心应手的解决。在设计本系统时,因为本人的知识、技术水平有限,在好多地方都有不足和不便之处敬请您多指教。通过这次设计,我还发现查阅资料的重要性。由于我是VB的新手,所以应用起来不是很顺当,这样,大量的书籍资料给了我很大的帮助。而且每一位出书的作者对语言的人士都有各自不同的角度,所以即使是同一水平的书也会有不同的收获。鉴于此我觉得要学好一门语言,就要做到多查、多看、多练、多用。取人之长,补己之短。这样才能少走弯路。另外,平时就养成良好的学习习惯也是非常重要的。遇到什么自认为比较有价值的东西就应及时地记下来,以免以后遇到同样的问题挠头。总之,一次毕业设计,我的受益匪浅。不论从理论上,技术上还是从经验方法上都使自己有了一定的升华,这在我今后的工作中无不是最宝贵的财富。 最后,我向我的指导教师张云秋老师表示衷心的感谢!,延边大学本科毕业论文用VisualBasic开发交互式CAD系统(图形的缩放部分)作者:朴顺今院系:理工学院计算机科学与技术系专业:计算机专业年级:2001级学号:2014010204指导教师:张云秋职称:副教授答辩日期:2005年6月11日成绩:OptionExplicitGlobalConstPI=3.1415926绘图模式PublicEnumGEDrawModeedmNormal=1edmSelect=2edmDelete=3EndEnum线型PublicEnumLineStylevbSolid=0vbDash=1vbDot=2vbDashDot=3vbDashDotDot=4vbInvisible=5vbInsideSolid=6EndEnum命令类型PublicEnumGECommandTypeecUnknown=0ecCreatePoint=1ecCreateLine=2ecCreatePolyLine=3ecCreateCircle=4ecCreateArc=5ecCreateText=6ecSelOnebyOne=11ecSelLines=12ecSelPolylines=13ecSelCircles=14ecSelArcs=15ecSelTexts=16ecSelAll=17ecSelNone=18ecMove=21ecRotate=22ecMirror=23ecviewzoomin=31ecViewZoomOut=32ecViewLocalZoomOut=33ecViewPan=34ecViewExtent=35EndEnumPublicTypePOINTAPIxAsLongyAsLongEndTypePublicTyperectLeftAsLongTopAsLongRightAsLongBottomAsLongEndTypePublicsLeftAsDoublePublicsTopicAsDoublePublicsRightAsDoublePublicsBottomAsDoublePublicScalAsDoublePublicptLineBeginAsNewPositionPublicptLineEndAsNewPositionPublicptPLPoints(1To100,1To100)AsNewPositionPublicPLPoints(1To100,1To100)AsNewPositionPublicintPLPointNumAsIntegerPublicptCircleCenterAsNewPositionPublicptCircleRAsNewPositionPublicptArcCenterAsNewPositionPublicptArcBeginAsNewPositionPublicptArcEndAsNewPositionPublicCommandAsGECommandTypePublicGElementsAsNewCGElementsPubliclinesAsNewCLinesPublicpolylinesAsNewCPolylinesPubliccirclesAsNewCCirclesPublicarcsAsNewCArcsPublictextsAsNewCTextsPublicSelLinesAsNewCLineSelPublicSelPLinesAsNewCPLineSelPublicSelCirclesAsNewCCircleSelPublicSelArcsAsNewCArcSelPublicSelTextsAsNewCTextsPublicintmStepAsIntegerPublicPickRadiusAsDoublePublicbolMirrorAsBooleanPublicintArcMirrorNumAsIntegerPublicptBasePosAsNewPositionPublicptDesPosAsNewPositionPublicpBasePosAsNewPositionPublicpDesPosAsNewPositionPublicscale1AsDoublePublicsinOriginXAsDoublePublicsinOriginYAsDoublePublicgeNumAsIntegerPublicentCountAsIntegerPublicDeclareFunctionRectangleLibgdi32(ByValhdcAsLong,ByValx1AsLong,ByValy1AsLong,ByValx2AsLong,ByValy2AsLong)AsLongPublicDeclareFunctionGetClientRectLibuser32(ByValhwndAsLong,lpRectAsrect)AsLongPublicDeclareFunctionGetBkColorLibgdi32(ByValhdcAsLong)AsLongFunctiondistPtoP(Pos1AsPosition,Pos2AsPosition)AsDoubleDimdisxAsDouble,disyAsDouble,distAsDoubleWithPos1disx=.x-Pos2.xdisy=.y-Pos2.yEndWithdistPtoP=Sqr(disx*disx+disy*disy)distPtoP=(disx+disy+2*max(disx,disy)/3EndFunction计算点到直线的距离FunctiondistPtoL(posAsPosition,CLine1AsCLine)AsDoubleDimkAsDoubleDimCAsDoubleDimpxAsDouble,pyAsDoubleDimdistXAsDouble,distYAsDoubleWithpospx=.xpy=.yEndWithCallCLine1.LineKX(k,C)Ifk=0ThendistX=10000distY=Abs(py-CLine1.pLineBegin.y)ElseIfk=10000ThendistX=Abs(px-CLine1.pLineBegin.x)distY=10000ElsedistX=Abs(px-(py-C)/k)distY=Abs(py-(k*px+C)EndIfdistPtoL=min(distX,distY)EndFunctionFunctionGetAngle(pBeginAsPosition,pEndAsPosition)AsDoubleDimtansitaAsDoubleDimsitaAsDoubleDimsubEBxAsDoublesubEBx=Abs(pEnd.x-pBegin.x)IfpEnd.x=pBegin.xThensubEBx=0.0001tansita=(Abs(pEnd.y-pBegin.y)/subEBxsita=Atn(tansita)如果终点横坐标大于起点横坐标,并且终点纵坐标大于起点纵坐标IfpEnd.x=pBegin.xAndpEnd.y=pBegin.yThenGetAngle=sita如果终点横坐标小于起点横坐标,并且终点纵坐标大于起点纵坐标ElseIfpEnd.x=pBegin.yThenGetAngle=PI-sita如果终点横坐标小于起点横坐标,并且终点纵坐标小于起点纵坐标ElseIfpEnd.x=pBegin.xAndpEnd.yBox.minXAndcurpos.yBox.minY_Andcurpos.xlbThenmax=laElsemax=lbEndIfEndFunctionPublicSubReDraw(dmodeAsGEDrawMode)DimpLineAsNewCLineDimpPLineAsNewCPolyLineDimpCircleAsNewCCircleDimpArcAsNewCArcDimpTextAsNewCTextDimpGElementAsCGElementDimiAsInteger按指定绘图模式重绘所有图元ForEachpLineInlinesSetpGElement=pLinepGElement.Draw(dmode)NextForEachpPLineInpolylinesSetpGElement=pPLinepGElement.Draw(dmode)NextForEachpCircleIncirclesSetpGElement=pCirclepGElement.Draw(dmode)NextForEachpArcInarcsSetpGElement=pArcpGElement.Draw(dmode)NextForEachpTextIntextsSetpGElement=pTextpGElement.Draw(dmode)NextEndSubPublicSubSelDraw()DimpLineAsNewCLineDimpPLineAsNewCPolyLineDimpCircleAsNewCCircleDimpArcAsNewCArcDimpTextAsNewCTextDimpGElementAsCGElementDimiAsInteger按指定绘图模式重绘所有图元ForEachpLineInSelLinesSetpGElement=pLinepGElement.Draw(edmDelete)pGElement.Draw(edmSelect)NextForEachpPLineInSelPLinesSetpGElement=pPLinepGElement.Draw(edmDelete)pGElement.Draw(edmSelect)NextForEachpCircleInSelCirclesSetpGElement=pCirclepGElement.Draw(edmDelete)pGElement.Draw(edmSelect)NextForEachpArcInSelArcsSetpGElement=pArcpGElement.Draw(edmDelete)pGElement.Draw(edmSelect)NextForEachpTextInSelTextsSetpGElement=pTextpGElement.Draw(edmDelete)pGElement.Draw(edmSelect)NextEndSubPublicFunctionSelEntityNum()AsIntegerSelEntityNum=SelLines.Count+SelPLines.Count+SelCircles.Count+SelArcs.CountEndFunction删除所有选择集中的图元PublicSubSelRemove()DimiAsIntegerDimintLCountAsIntegerDimintPLCountAsIntegerDimintCCountAsIntegerDimintACountAsIntegerintLCount=SelLines.CountintPLCount=SelPLines.CountintCCount=SelCircles.CountintACount=SelArcs.CountWithSelLinesFori=intLCountTo1Step-1.Remove(i)NextiEndWithWithSelPLinesFori=intPLCountTo1Step-1.Remove(i)NextiEndWithWithSelCirclesFori=intCCountTo1Step-1.Remove(i)NextiEndWithWithSelArcsFori=intACountTo1Step-1.Remove(i)NextiEndWithEndSub彻底删除所有选择集中的图元PublicSubAllSelRemove()DimiAsIntegerDimintLCountAsIntegerDimintPLCountAsIntegerDimintCCountAsIntegerDimintACountAsIntegerDimintTCountAsIntegerintLCount=SelLines.CountintPLCount=SelPLines.CountintCCount=SelCircles.CountintACount=SelArcs.CountintTCount=SelTexts.Count删除直线图元选择集中的所有图元并从直线段集合类中删除对应图元WithSelLinesFori=intLCountTo1Step-1lines.Remove(Str(.Item(i).ID_Line).Remove(i)NextiEndWith删除多义线图元选择集中的所有图元并从多义线集合类中删除对应图元WithSelPLinesFori=intPLCountTo1Step-1polylines.Remove(Str(.Item(i).ID_PLine).Remove(i)NextiEndWith删除圆类图元选择集中的所有图元并从圆集合类中删除对应图元WithSelCirclesFori=intCCountTo1Step-1circles.Remove(Str(.Item(i).ID_Circle).Remove(i)NextiEndWith删除圆弧图元选择集中的所有图元并从圆弧集合类中删除对应图元WithSelArcsFori=intACountTo1Step-1arcs.Remove(Str(.Item(i).ID_Arc).Remove(i)NextiEndWith删除文本图元选择集中的所有图元并从文本集合类中删除对应的图元WithSelTextsFori=intTCountTo1Step-1texts.Remove(Str(.Item(i).ID_Text).Remove(i)NextiEndWithEndSub根据不同的选择方式选择图元PublicSubSelectGEs(SelTypeAsGECommandType)DimpGElementAsNewCGElementDimpLineAsNewCLineDimpPLineAsNewCPolyLineDimpCircleAsNewCCircleDimpArcAsNewCArcDimpTextAsNewCTextDimPLPoints(1To100,1To100)AsPositionDimiAsIntegerDrawMain.picDraw.DrawMode=13SelectCaseSelTypeCaseecSelLinesReDraw(edmNormal)SelRemoveIflines.Count0ThenForEachpLineInlinesSetpGElement=pLineWithpGElement.Draw(edmDelete).Draw(edmSelect)用选择模式绘图元EndWith将图元添加到选择集SelLines中WithpLineCallSelLines.Add(.geLineWidth,.geLineStyle,.geColor,.ID_Line,.pLineBegin,.pLineEnd)EndWithNextEndIfCaseecSelPolylinesReDraw(edmNormal)SelRemoveIfpolylines.Count0ThenForEachpPLineInpolylinesWithpPLineFori=1TPLinePointNumSetPLPoints(.ID_PLine,i)=.pPLPoints(.ID_PLine,i)NextiEndWithSetpGElement=pPLineWithpGElement.Draw(edmDelete).Draw(edmSelect)EndWithWithpPLineCallSelPLines.Add(.intPLinePointNum,PLPoints(),.geLineWidth,.geLineStyle,.geColor,.ID_PLine)EndWithNextEndIfCaseecSelCirclesReDraw(edmNormal)SelRemoveIfcircles.Count0ThenForEachpCircleIncirclesSetpGElement=pCircleWithpGElement.Draw(edmDelete).Draw(edmSelect)EndWithWithpCircleCallSelCircles.Add(.geLineWidth,.geLineStyle,.geColor,.pCircleR,.pCenter,.ID_Circle)EndWithNextEndIfCaseecSelArcsReDraw(edmNormal)SelRemoveIfarcs.Count0ThenForEachpArcInarcsSetpGElement=pArcWithpGElement.Draw(edmDelete).Draw(edmSelect)EndWithWithpArcCallSelArcs.Add(.geLineWidth,.geLineStyle,.geColor,.pCenter,.pBegin,.pEnd,.ID_Arc)EndWithNextEndIfCaseecSelTextsReDraw(edmNormal)SelRemoveIftexts.Count0ThenForEachpTextIntextsSetpGElement=pTextWithpGElement.Draw(edmSelect)EndWithWithpTextCallSelTexts.Add(.x,.y,.Height,.Wide,.Content,.geColor,.ID_Text)EndWithNextEndIfCaseecSelAllReDraw(edmNormal)IfGElements.Count0ThenForEachpLineInlinesSetpGElement=pLineWithpGElement.Draw(edmDelete).Draw(edmSelect)用选择模式绘图元EndWith将图元添加到选择集SelLines中WithpLineCallSelLines.Add(.geLineWidth,.geLineStyle,.geColor,.ID_Line,.pLineBegin,.pLineEnd)EndWithNextEndIfIfpolylines.Count0ThenForEachpPLineInpolylinesWithpPLineFori=1TPLinePointNumSetPLPoints(.ID_PLine,i)=.pPLPoints(.ID_PLine,i)NextiEndWithSetpGElement=pPLineWithpGElement.Draw(edmDelete).Draw(edmSelect)EndWithWithpPLineCallSelPLines.Add(.intPLinePointNum,PLPoints(),.geLineWidth,.geLineStyle,.geColor,.ID_PLine)EndWithNextEndIfIfcircles.Count0ThenForEachpCircleIncirclesSetpGElement=pCircleWithpGElement.Draw(edmDelete).Draw(edmSelect)EndWithWithpCircleCallSelCircles.Add(.geLineWidth,.geLineStyle,.geColor,.pCircleR,.pCenter,.ID_Circle)EndWithNextEndIfIfarcs.Count0ThenForEachpArcInarcsSetpGElement=pArcWithpGElement.Draw(edmDelete).Draw(edmSelect)EndWithWithpArcCallSelArcs.Add(.geLineWidth,.geLineStyle,.geColor,.pCenter,.pBegin,.pEnd,.ID_Arc)EndWithNextEndIfIftexts.Count0ThenForEachpTextIntextsSetpGElement=pTextWithpGElement.Draw(edmSelect)EndWithWithpTextCallSelTexts.Add(.x,.y,.Height,.Wide,.Content,.geColor,.ID_Text)EndWithNextEndIfCaseecSelNoneReDraw(edmNormal)CallSelRemoveEndSelectEndSubPublicSubCoordinate()DrawMain.picDraw.Scale(sLeft,sTopic)-(sRight,sBottom)DrawMain.picDraw.RefreshEndSubOptionExplicitPrivateDeclareFunctionSetWindowPosLibuser32(ByValhwndAsLong,ByValhWndInsertAfterAsLong,ByValxAsLong,ByValyAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsAsLong)AsLongPrivateConstSWP_NOSIZE=&H1PrivateConstSWP_NOMOVE=&H2PrivateConstHWND_TOPMOST=-1PrivateConstHWND_NOTOPMOST=-2DimX01AsDouble,Y01AsDouble,X02AsDouble,Y02AsDouble,BXAsDouble,BYAsDoublePrivatebolHandleShowAsBooleanPrivatebolEntitySizingAsBooleanPrivateSubAbout_Click()frmAbout.ShowEndSubPrivateSubArc_Click()Command=ecCreateArcEndSubPrivateSubCircle_Click()Command=ecCreateCircleEndSubPrivateSubDelete_Click()删除被选中的所有图元AllSelRemove更新图片框中的内容DrawMain.picDraw.RefreshEndSubPrivateSubExtent_Click()DimminXAsDoubleDimminYAsDoubleDimmaxXAsDoubleDimmaxYAsDoubleDimrcAsrectDimrcLBAsNewPositionDimrcRTAsNewPositionDimscalexAsDouble,scaleyAsDoubleCallGetClientRect(DrawMain.picDraw.hwnd,rc)WithrcLB.x=rc.Left*Screen.TwipsPerPixelX.y=rc.Bottom*Screen.TwipsPerPixelYEndWithWithrcRT.x=rc.Right*Screen.TwipsPerPixelX.y=rc.Top*Screen.TwipsPerPixelYEndWithCallGetExtentBox(minX,minY,maxX,maxY)计算新坐标系与逻辑坐标的比例因子scalex=Abs(rcRT.x-rcLB.x)/(maxX-minX)scaley=Abs(rcRT.y-rcLB.y)/(maxY-minY)scale1=min(scalex,scaley)重新设置视口大小sLeft=minXsTopic=maxYIfscalex0ThenForEachpLineInSelLinesSetpGElement=pLineWithpGElement.Draw(edmDelete)清除原来位置上的图元Call.ScaleTransform(scalex,scaley).Draw(edmSelect)EndWithWithpLinelines.Remove(Str(.ID_Line)Calllines.Add(.geLineWidth,.geLineStyle,.geColor,.ID_Line,.pLineBegin,.pLineEnd,Str(.ID_Line)EndWithNextForEachpPLineInSelPLinesSetpGElement=pPLineWithpGElement.Draw(edmDelete)Call.ScaleTransform(scalex,scaley).Draw(edmSelect)EndWithWithpPLineDimPLPoints(1To100,1To100)AsPositionFori=1TPLi
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。