- 0
- 0
- 约2.77千字
- 约 5页
- 2021-06-09 发布于湖北
- 举报
工程建筑学相关资料ENGINEERING ARCHITECTURE RELATED INFORMATION
工程建筑学相关资料
ENGINEERING ARCHITECTURE RELATED INFORMATION
PAGE
PAGE 1
基于网络环境的CAD系统的设计与实现
引 言 目前许多CAD软件厂商都注重于完善面向专业领域的具体设计的功能.以机械CAD软件为例,AutoCAD,Pro/E等注重于相应的二维、三维的设计,有些还集成了CAE、CAM等,但是对于网络协同的支持方面还比较薄弱.本文介绍的网络CAD系统利用网络技术,通过分布协同的工作方式使产品设计合理有序,设计资源广泛共享,从而保证CAD产品的低成本和短周期。 1 系统的构成 系统采用客户机/服务器模式(C/S模式).将各个用户的CAD部件设计以CAD文件(后缀为dwg)的形式传输到网络平台上,在网络平台上将各个CAD文件组合到一起,然后把组合后的CAD文件传输给各个用户,从而实现CAD设计的整体共享.图1为系统设计示意图。 2 数据传输部分的实现 在网络平台与用户机上都建立起两种程序,即服务器程序和客户机程序.在CAD文件的传输过程中,利用W indows Sockets实现了文件在服务器和客户端之间的无差错快速传输,使用了MFC的CSocket类来实现两台机器之间的文件传输过程。 2.1 服务器程序的实现过程 图2是服务器程序的示意图。 1)创建套接字.首先调用CSocket的构造函数来创建一个CSocket的对象;其次调用Create()函数来创建底层套接字.Create函数的调用方法如下: BOOL C reate(U INT nSocketPort=0,int nSocket Type=SOCK_STREAM, long lEvent=FD_READ|FD_WR ITE|FD_OOB|FD_ACCEPT|FD_CONNECT|FD_CLOSE, LPCTSTR lp szSocketAddress=NULL); 2)套接字的监听与连接.对于服务器应用程序,为了能够获得客户机的请求,必须创建一个专门的服务器套接字来监听是否有连接请求.在创建了套接字对象后,可以调用listen()成员函数来监听是否有连接请求。 当服务器监听到客户机的请求时,服务器可以调用Accept()成员函数来接受客户机的请求,建立服务器与客户机之间的连接。 virtual BOOL Accep t(CA syncSocketrConnectedSocket,SOCKADDR* lpSockAddr=NULL, int* lpSockAddrLen=NULL); 3)接收数据.当服务器和客户机之间建立起连接后,数据就可以通过套接字传递了.服务器接收数据时使用CAsynSocket类的Receive()成员函数: virtual int Receive(void* lpBuf,int nB ufLen,int nFlags=0); 4)关闭套接字.数据传输结束后,在关闭应用程序之前,调用Close()成员函数来释放与套接字有关的系统资源。 2.2 客户端程序的实现过程 1)创建套接字.首先调用CSocket的构造函数来创建一个CSocket的对象;其次调用Create()函数来创建底层套接字,为该套接字绑定一个地址。 2)套接字请求连接.客户机应用程序的流式套接字使用Connect()成员函数向服务器发出连接请求.如果被服务器接受,则建立连接;如果连接请求得不到响应,那么连接就无法建立.如果在发出连接请求后服务器接受了请求,即调用函数成功,它将返回TRUE。 3)发送数据.服务器和客户机之间建立连接后,数据就可以通过套接字传递了.发送数据使用CA synSocket类的Send()成员函数: virtual int Send(const vo id*lpBuf,int nB ufLen,int nFlags=0); 4)关闭套接字.数据传输结束后,应该调用Close()成员函数来释放与套接字有关的系统资源。 3 整体组合部分的实现 网络平台接收到用户传输过来的CAD部件文件,利用AutoCAD软件加载ObjectARX程序,实现CAD文件的整体组合.AutoCAD提供的二次开发平台ObjectARX,是以VC++为开发语言,采用了面向对象的编程方法,并支持MFC编程的强有力的开发工具[7].利用ObjectARX编程可以将面向对象的程序设计方法引入到CAD软件的二次开发中,实现网络平台上CAD部件的整体组合.图3是整体组合的实现过程。 1)在AutoCAD中加载ObjectARX.在AutoCAD2000环境下打开一个空文件,在菜单中选择“Tools”,在其中选
原创力文档

文档评论(0)