zoukankan      html  css  js  c++  java
  • 某机械设备CAD系统的构造与设计

    4.1系统开发目标

      建立一个集设计、选型、建模、出图为一体的某机械设备CAD系统。最终实现通过修改某机械设备的主要参数自动生成一套新的某机械设备三维实体模型和工程图的目的。 

    4.2 系统开发环境与工具

    硬件环境 :图形工作站,内存4G,要求配有图形加速卡,显示1024*768,USB接口、光驱和其他外部设备

    软件环境:操作系统为Windows XP/Win2000/NT 等。主流三维实体造型软件SolidWorks2011或更高版本,面向对象的Visual Basic6.0作为二次开发工具,Access 提供后台数据支持。

    4.3 系统架构及系统工作流程

    4.3.1 系统架构

                    过渡界面

                    主界面

    总体设计参数                    总体布置

            结构件        运行机构        起升机构        标准件  通用件

          桥架 小车架  设计选型模块 模型模块 设计选型模块 模型模块 

    4.3.2 系统工作流程

        设计模块

    总体布置  装配体设计  零件设计  更新零部件模型  更新装配体模型  更新工程图

         标准件 通用件

    4.4  系统设计

      某机械CAD系统对机械设备的设计是自上而下的,首先确定大的总体布置尺寸,再确定部件尺寸,最后确定零件尺寸。模型更新于此相反先要更新零件模型,最后才能更新部件模型。在上级窗口中确定了大的装配尺寸,将被引用到下级窗口,并且不允许在下级窗口修改,从而保证整机设计的系统性。

      历次设计记录表为全程支持的,只要系统运行,它就处于打开状态,用来存储主梁、通用件、标准件的记录号、及其他子窗口的界面数据。有了它的支持您的设计不必一次完成,每次从新打开系统都可以继续您上次未完成的设计,不必担心从新开始。

          标准件、通用件库的支持使得设计选型更加方便,在其他程序界面可以直接调用标准件和通用件界面,选取标准件或通用件。标准件和通用件界面同时可以完成数据库完善的功能,可以不断增加新的记录。

    4.4.1 程序启动界面设计及编程

          当主程序载入时,屏幕显示启动界面,下拉式探出,待整个主程序都载入内存,即消失。通过时钟控制窗口高度来实现下拉式弹出效果,根据判断主窗口显示状态决定是否卸载启动窗口。

     Option Explicit ‘强制变量声明

     Private Sub Form_Load()

     Timer1.Interval=10

     Timer1.Enabled=True

      guodu.Height=100

     End Sub

     Private Sub Timer1_Timer()

     If(guodu.Height<4395) Then

           guodu.Height=guodu.Height+65 ' 控制窗口的高度递增

     Else

            MDIForm1.Show

            If MDIForm1.WindowState=2 Then   '如果主程序加载完成,则卸载启动窗口

                     Timer1.Enabled=False

                      Unload Me

            End If

     End if 

     End Sub

     4.4.2 主界面设计及编程

    4.4.2.1 主界面设计

          主界面是机械CAD系统的最主要的人机接口,其友好程度将直接影响到该系统的使用性能。

          程序主窗口为MDI窗口,分四个区:菜单区、工具条区、视图区、状态栏区。由以下控件组成:菜单栏、工具栏、状态栏、Picture控件、按钮、eDrawing控件、Imagelist控件。

         1) 菜单栏主要内容主要实现各模块调用功能:

           总体设计   :系统设计,设计参数,总体布置,小车布置,预览模型,退出

      桥架结构:主梁,端梁,中间梁,轨道 

           运行机构:大车运行机构,小车运行机构-〉设计选型;模型与图纸

      起升机构:主起升机构,副起升机构->设计选型,机构布置,卷筒组,定滑轮装置,吊钩组

      小车架:总体布置,主起升主梁,小车架端梁

      标准件:轴承,联轴器,螺栓,螺母,平垫圈,弹簧垫圈

      通用件:轴承座,车轮、减速器、制动器、起升电机、运行电机

           帮助:帮助主题,关于

      2)工具栏共有7个快捷按钮,提供连接到主梁、端梁、中间梁、大车运行机构、小车运行机构、主起升机构、副起升机构模块的快捷方式。

      3)视图区主要完成模型预览的功能。由两个Picture 控件分成两部分,右边的部分分为模型显示区,左边部分为模型视图控制区,共有6个按钮完成主视、俯视、左视、等轴测、适应屏幕、关闭等视图转化控制。同时,可以通过鼠标动态旋转模型,通过鼠标中间滚轮放大缩小视图,通过鼠标右键菜单有更多试图选项,试区界面是共用界面,还可以被其他模块界面调用,以便观察模型生成后的效果,如运行机构,起升机构等都会调用此界面。

      视图区的功能在很大程度上依靠eDrawing控件。对eDrawing控件做简要说明。eDrawing应用程序是随同SolidWorks一同发行的应用软件,给您提供生成、观阅、及共享您的3D模型和2D工程图的威力。

      eDrawings应用程序编程接口(API)是一个针对eDrawings的OLE编程接口,作为MicrosoftActiveX控件来实现。可以使用eDrawingsAPI来自定义eDrawings Viewer. 创建交互式网页和转换文件。该API中包含可通过VisualBasic(VB)调用的函数。这些功能提供了到eDrawings环境的直接访问途径。在VB环境下将eDrawings Controls 引入,即可将eDrawings作为一个控件使用,并通过API函数来访问或直接控制eDrawins.

            视图区并非一直出现在程序主界面上,而是在有模型显示需要时才出现,同时又考虑到它将被不同的模块所调用所以由两个公共函数来控制视图区的出现和隐藏,分别是 printmodel(str) ,Closemodel(str) ,以公共函数的形式写在Moudle1模块里。

      4)状态栏用于显示操作提示和状态信息。

     4.4.2.2 主界面编程

      基本思路:

      程序分MDIForm1窗体程序代码和Model1模块程序代码。MDIForm1主窗体代码完成的主要功能是:建立系统数据库的连接;建立与SolidWorks主程序的连接;打开历次设计记录表;调整窗口中各部件的位置、初始化界面;指定菜单栏、工具栏的单击事件,指定状态栏的显示内容。Model1模块代码里主要存放整个系统软件共用的公共变量,公共函数等。

           1)主窗体MDIForm1的窗体代码:   

      Private Sub MDIForm_Load() '界面初始化

           Picture1.Visible=False

           Picture2.Visible=False

           Me.StatusBar1.Panels(1).Text="机械设计"

      Me.StatusBar1.Panels(2).Text="日期:"+Format(Date,“yyyy年mm月dd日”)

           Set swApp=CreateObject("Sldworks.Application")  '建立与SolidWorks主程序的连接

      Set conn=New ADODB.Connection   '建立系统数据库连接

      conn.ConnectingString="Provider=microsoft.jet.oledb.4.0;data source=" & App.Path &"\某机械设计.mdb"

           conn.Open

           Set rs=New ADODB.Recordset   '定义记录集对象

      rs.CursorLocation=adUseClient

           rs.Open "历次设计记录",conn,adOpenStatic,adLockOptimistic

           rs.MoveLast

      End Sub

           当窗口大小发生变化时应该自动调整主窗口内各控件的位置,以使各个控件都在窗口内,由MDIForm_Resize()函数完成这个功能。

      Private Sub MDIForm_Resize()

           Picture1.Width=Me.Width * 1/5

           Picture2.Width=Me.Width - Picture1.Width

           EModelViewControl1.Width=Picture2.Width

           EModelviewControl1.Height=Picture2.Height
            ....

           End Sub

           菜单栏是主要的程序入口,由他完成各个模块的调用,菜单栏组织的是否合理将直接影响系统的使用,当菜单项被单击时触发单击事件完成各模块的调用功能。

      Private Sub menu1_Click()   '系统设计

            xtsj.Show

      End Sub

           六个视图控制按钮,完成视图的转换,以便从各个角度观察模型。在按钮的单击事件里为eDrawing控件的ViewOrientation 项指定不同的值便可实现视图的转换,以左视图为例:

      Private Sub Command5_Click()   '左视图

           MDIForm1.EModelViewControl1.ViewOrientation=eMVOrientationLeft

      End Sub

           工具栏是指向各模块的快捷方式,可以在很大程度上增加系统的易用性,由Toolbar1_ButtonClick(ByVal Button As ComctlLib.Button)实现其功能。当工具拦的按钮被单击时,首先判断按钮的关键字,根据关键字决定要执行的语句,实现对其他模块的调用功能。

      Private Sub Toolbar1_ButtonClick(ByVal Button As ComctlLib.Button)

            Select Case Button.key

            Case "zl"

                     zl1.Show   '主梁模块

            end Select

           End Sub

           退出系统时,要关闭数据库,关闭SolidWorks应用程序,释放变量。由窗口卸载事件MDIForm_Unload(Cancel As Integer)完成这些功能。

           Private Sub MDIForm_Unload(Cancel As Integer)

           rs.Close ' 关闭历次设计记录表

           Set rs=Nothing

           conn.Close   '关闭系统数据库

           Set conn=Nothing

           swApp.exitapp   '退出SolidWorks应用程序

           Set swApp=Nothing

           End Sub

           2)Moudle1 模块主要代码。在Moudle1模块里主要完成整个系统公共变量、公共函数的定义。

             (1)定义公共变量

             Option Explicit

             Public conn As ADODB.Connection    '数据库连接对象

             Public rs AS ADODB.Recordset   '历次设计表记录对象

             Public rss As ADODB.Recordset    '主梁模型关键数据表记录对象

             Public swApp As Object                  'SolidWorks主程序连接对象

             ...

             (2) printmodel(str)  公共函数

             Str为字符型变量,用于传递要显示模型的存储目录。 

             功能:显示视区界面,表现模型重建后的效果。

      Public Sub printmodel(str As String)

           MDIForm1.menu1.Enabled=False

           MDIForm1.menu2.Enabled=False

           ....

           MDIForm1.EModelViewControl1.OpenDoc str,True,True,False,""

           End  Sub

           (3) closemodel(str)  公共函数

      str 为字符型变量,用于传递要关闭显示模型的目录。

      功能:关闭视区界面

            Public Sub closemodel(str As String)

            MDIForm1.menu1.Enabled=True

            ...

            MDIForm1.EModelViewControl1.CloseActiveDoc str

            MDIForm1.Picture1.Visible=False

            MDIForm1.Picture2.Visible=False

            End Sub

            (4)read(r1.r2.form) 公共函数

             r1为数据表的记录集

             r2整形变量,从第r2个字段读出内容;

            form为窗口指针变量,用于传递所要操作的窗口。

            功能:从数据表的第r1条记录的第r2个字段读出内容,按对应关系给form窗口的所有text控件赋值

            Public Sub read(r1 As ADODB.Recordset,r2 As Integer, Form As Form) 'r1记录 r2字段 form 窗口

            Dim i as single

            Dim j as single

            ...

            str1=r1.Fields(r2)

            j=1

            For i=1 to Len(str1)

                  If (Mid(str1,i,1)<>"#")Then

                        temp=temp+Mid(str1,i,1)

                  else

                        str(j)=temp

                        j=j+1

                        temp=""

                  End if

            Next

             ....

       End Sub

          (5)Save(r1,r2,form)

              r1 为数据表的记录集

       r2整形变量,从第r2个字段读出内容

       from为窗口指针变量,用于传递所要操作的窗口。

       功能:按时应关系将form窗口所有text控件的值连接成特定的字符串,存储到数据表的第r1条记录的第r2个字段

               说明:第r1条记录的第r2个字段的属性为备注类型,以便能存储较长额字符串。

              Public Sub save (r1 As ADODB.Recordset,r2 As Integer, Form as Form)  ' r1 记录,r2字段 ,form 窗口

              Dim i as single

              Dim j as single

              ...

              For Each txt in Form.Controls

                   If TypeOf txt Is TextBox Then

                          i=Mid(txt.Name,5,2)

                          if i>max Then 

                                  max=i

                          End if 

                         ....

                   End if 

              Next

              t1=StrComp(str1,r1.Fields(r2),vbTextCompare)

              If t1<>0 Then

                   t1=MsgBox("界面尺寸已经被更改,确实要保存数据吗?",1,“数据更新”)

                   ...

              Endif 

               End Sub

              (6)find(r1,r2,r3)

                r1为数据表的记录集

               r2整形变量,从第r2个字段读出内容

               r3整形变量,从字段中读出第r3个数值

               功能:从数据表的第r1条记录的第r2个字段读出第r3个数字内容

      Public Function find(r1 As ADODB.Recordset,r2 AS Integer, r3 As Integer) As string 

           Dim i as Single

           Dim j as Single

            ...

            temp=""

            str1=r1.Fields(r2)

            j=0

            if r3=1 then

                    i=1

                     while(Mid(str1,i,1)<>"#")

                             temp=temp+Mid(str1,i,1)

                             i=i+1

                     WEnd

             Else

                   for i=1 to Len(str1)

                   If (Mid(str1,i,1)="#")Then

                        j=j+1

                        If (i>=r3-1)Then

                             Exit For

                        Endif 

                   End if 

                    next

                    i=i+1

                    While(Mid(str1,i,1)<>"#")

                           temp=temp+Mid(str1,i,1)

                           i=i+1

                     Wend

            endif

             find=temp

           End function

            (7) find1(str1,r3)

             str1 字符串变量

       r3整形变量

       功能:从字符串str1中找出第r3个数字,作为函数返回。

            Public Function find1(str1 as String, r3 as Integer) As string

             Dim i as Single

             .....

             Dim temp as string 

             temp=""

              j=0

             If r3=1 then

                    i=1

                    while(Mid(str1,i,1)<>"#")

                           temp=temp+Mid(str1,i,1)

                           i=i+1

                    wend

              Else

               .....

            end if 

             find1=temp

            End function

  • 相关阅读:
    IfcDirection
    IfcPcurve
    IfcOffsetCurve3D
    IfcOffsetCurve2D
    IfcLine
    IfcEllipse
    IfcCircle
    IfcConic
    IfcTrimmedCurve
    QDockWidget设置为tab切换形式
  • 原文地址:https://www.cnblogs.com/leojun/p/2286988.html
Copyright © 2011-2022 走看看