ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:283.12KB ,
资源ID:29933410      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29933410.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机图形学期末作业基于C++的对Solidworks二次开发B5.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机图形学期末作业基于C++的对Solidworks二次开发B5.docx

1、计算机图形学期末作业基于C+的对Solidworks二次开发B51. 实验目的(1)了解SolidWorks二次开发的基本内容。(2)掌握SolidWorks二次开发的基本知识和基本方法。(3)理解SolidWorks二次开发的基本思路,能根据实际开发需求,查找SolidWorks API帮助中的相关函数,解决开发中实际问题。(4)用Microsoft Visual Studio 2005完成一次简单的SolidWorks 2012二次开发实例。2. 实验内容用Microsoft Visual Studio 2005对SolidWorks 2012进行二次开发,生成插件,实现长方体的参数化设计

2、。使用方法:(1)打开SolidWorks 2012,新建零件,激活并启动Changfangti插件;(2)输入长方体的长度(Length)、宽度(Width)、高度(Height)参数;(3)输入相应参数后,点击OK,生成一个长方体,如图2.1,图2.2所示图2.1 输入参数图2.2 生成长方体3. 实验步骤步骤1、安装Microsoft Visual Studio 2005 和SolidWorks2012。注意,Microsoft Visual Studio 2005要安装在C盘中。步骤2、安装SolidWorks2012 API_SDK。步骤3、运行Microsoft Visual St

3、udio 2005,选择【文件】|【新建】|【项目】命令,如图3.1所示,打开【新建项目】对话框,在“项目类型”中选择SolidWorks COM模板,在“名称”中输入Changfangti,然后单击【确定】按钮。图3.1 创建项目类型出现图3.2所示对话框,选择下一步,直到SwOptions项,勾选PartEvents,其他的默认,点击Finish。图3.2 创建项目步骤4、在stdafx.h中更改SolidWorks类型库的路径,将图3.3中第一行和第三行中红色部分改成本机上类型库的路径图3.3 更改SolidWorks类型库的路径步骤5、实现对话框与SolidWorks API的连接在C

4、ChangfangtiDialog.h文件中声明新的成员变量和成员函数,如图3.4所示图3.4 声明新的成员变量和成员函数在CChangfangti.cpp中定义getSW函数,如图3.5所示图3.5定义getSW函数在Changfangti.cpp中的ToolbarCallback0中调用对话框的getSW函数,如图3.6图3.6 调用getSW函数步骤6、对话框界面设计在资源窗口中点击Dialog,更改对话框界面,在对话框内添加编辑控件3个,静态文本控件3个,按钮控件1 个。更改后如图3.7图3.7 界面设计在图3.7中三个Edit Control中分别添加图3.8所示的变量图3.8 添加

5、键的尺寸变量步骤7、添加生成长方体的代码编好代码添加到CChangfangti.cpp中的OnBnClickedOk()函数中,如图3.9(部分代码)图3.9 生成长方体的代码(部分)4. 实验分析4.1 SolidWorks二次开发原理和关键技术SolidWorks 的API(Application Program Interface,应用程序接口)是一个基于OLE(Object Linking and Embedding,对象的嵌入与链接)Automation 或COM(Component Object Model,组件对象模型)的编程接口,其中包含了数以百计的功能函数,利用这些函数,用户

6、可以开发出所需要的SolidWorks 的专用模块。SolidWorks API是指SolidWorks 程序暴露给开发人员使用的接口,它为开发人员提供SolidWorks 软件本身的功能,如生成拉伸特征、生成草图等,开发人员可以通过在这些接口的基础上实现需要的功能。SolidWorks API是由组成SolidWorks 软件的COM组件提供的,每一个SolidWorks 2012对象都是采用COM技术构造的,因此有着与一般COM对象同样的性质,都是由接口、属性、方法与事件组成的。本次实验所用的SolidWorks API对象有(1)SldWorks对象,是所有其他对象的父类,提供了直接或间

7、接访问其他所有SolidWorks API接口的方法,在二次开发中访问其他接口都要通过它。他是所有SolidWorks API接口的基类。(2)ModelDoc2对象,是所有文档模型对象的父对象,它封装了不同文档模型通用的属性和方法,包括文档打开、关闭、打印和保存等。其中使用的ModelDoc2中的子对象有ModelDocExtension对象、Sketch对象、SketchManager对象FeatureManager对象。4.2 所使用的SolidWorks API中的函数(1)ISldWorks-get_IActiveDoc2(&IModelDoc2),该函数返回当前活动文档对象。(2)

8、IModelDoc2-get_Extension(&IModelDocExtension),该函数返回当前ModelDocEx-tension对象。(3)IModelDoc2-IGetActiveSketch2(&ISketch),该函数返回当前Sketch对象。(4)ModelDocExtension -SelectByID2(String Name, String Type, double X, double Y, double Z, bool Append, int Mark, Callout Callout, int SelectOption, & VARIANT_BOOL),该函数选

9、择草图中具体的实体。(5)IModelDoc2-InsertSketch2(VARIANT_TRUE),该函数新建一个草图。(6)IModelDoc2- get_SketchManager(&ISketchManager),该函数获得草图管理器。(7)ISketchManager - CreateLine(double X1, double Y1, double Z1, double X2, double Y2, double Z2, & ISketchSegment),该函数在草图中绘制一条直线。(8)IModelDoc2-get_FeatureManager(&IFeatureManage

10、r),该函数获得当前特征管理器。(9)IFeatureManager -FeatureExtrusion2(bool Sd, bool Flip, bool Dir, int T1, int T2, double D1, double D2, bool Dchk1, bool Dchk2, bool Ddir1, bool Ddir2, double Dang1, double Dang2, bool OffsetReverse1, bool OffsetReverse2, bool TranslateSurface1, bool TranslateSurface2, bool Merge,

11、bool UseFeatScope, bool UseAutoSelect, & IFeature),该函数用于拉伸草图。5. 程序代码/ Changfangti.cpp : Implementation of CChangfangti#include stdafx.h#include Changfangti.h#include SwDocument.h#include CChangfangtiDialog.h#include #include BitmapHandler.h/ CChangfangtivoid CChangfangti:AddCommandManager() CComPtr

12、icmdGroup; CComObject:CreateInstance(&iBmp); long cmdIndex0, cmdIndex1; const int numDocumentTypes = 3; int docTypesnumDocumentTypes; docTypes0 = swDocASSEMBLY, docTypes1 = swDocDRAWING, docTypes2 = swDocPART; CComBSTR title; title.LoadString(IDS_TOOLBAR_TITLE); CComBSTR hint; hint.LoadString(IDS_ME

13、NU_HINT); iCmdMgr-CreateCommandGroup(MAIN_CMD_GROUP_ID,title,title,hint,-1,&icmdGroup); CComBSTR smallImageFile; iBmp-CreateBitmapFileFromResource(IDB_TOOLBAR_SMALL, &smallImageFile); icmdGroup-put_SmallIconList(smallImageFile); CComBSTR largeImageFile; iBmp-CreateBitmapFileFromResource(IDB_TOOLBAR_

14、LARGE, &largeImageFile); icmdGroup-put_LargeIconList(largeImageFile); CComBSTR largeIconFile; iBmp-CreateBitmapFileFromResource(IDB_ICON_LARGE, &largeIconFile); icmdGroup-put_LargeMainIcon(largeIconFile); CComBSTR smallIconFile; iBmp-CreateBitmapFileFromResource(IDB_ICON_SMALL, &smallIconFile); icmd

15、Group-put_SmallMainIcon(smallIconFile); CComBSTR tip; CComBSTR callback; CComBSTR enable; VARIANT_BOOL cmdActivated; callback.LoadString(IDS_TOOLBAR_CALLBACK0); enable.LoadString(IDS_TOOLBAR_ENABLE0); tip.LoadString(IDS_TOOLBAR_TIP0); hint.LoadString(IDS_TOOLBAR_HINT0); icmdGroup-AddCommandItem2(tip

16、,-1,hint,tip,0,callback,enable,0,3,&cmdIndex0); icmdGroup-put_HasToolbar(true); icmdGroup-put_HasMenu(true); icmdGroup-Activate(&cmdActivated); for(int i=0; i numDocumentTypes; i+) CComPtr cmdTab = NULL; long TabCount, docType = docTypesi; iCmdMgr-GetCommandTabCount(docType, &TabCount); / check if t

17、ab exists iCmdMgr-GetCommandTab(docType, title, &cmdTab); if(cmdTab = NULL) / if not, add one iCmdMgr-AddCommandTab(docType, title, &cmdTab); CComPtr cmdBox; cmdTab-AddCommandTabBox(&cmdBox); / create 2 commands on this tab long CommandIDCount = 2; long CommandIDs2; long TextDisplayStyles2; long cmd

18、ID = 0; / the 2 command buttons have different text styles icmdGroup-get_CommandID(cmdIndex0, &cmdID); CommandIDs0 = cmdID; TextDisplayStyles0 = swCommandTabButton_TextHorizontal; icmdGroup-get_ToolbarId(&cmdID); CommandIDs1 = cmdID; TextDisplayStyles1 = swCommandTabButton_TextHorizontal; VARIANT_BO

19、OL vbResult = VARIANT_FALSE; cmdBox-IAddCommands(CommandIDCount, CommandIDs, TextDisplayStyles, &vbResult); CommandIDCount = 1; icmdGroup-get_ToolbarId(&cmdID); CommandIDs0 = cmdID; TextDisplayStyles0 = swCommandTabButton_TextBelow | swCommandTabButton_ActionFlyout; CComPtr cmdBox1; cmdTab-AddComman

20、dTabBox(&cmdBox1); cmdBox1-IAddCommands(CommandIDCount, CommandIDs, TextDisplayStyles, &vbResult); CComPtr cmdBoxNew1; cmdTab-AddSeparator(cmdBox1, cmdID, &cmdBoxNew1); /Clean up iBmp-Dispose(); iBmp-Release();void CChangfangti:RemoveCommandManager() VARIANT_BOOL cmdRemoved = VARIANT_FALSE; iBmp-Dis

21、pose(); iBmp-Release(); iCmdMgr-RemoveCommandGroup(MAIN_CMD_GROUP_ID,&cmdRemoved);STDMETHODIMP CChangfangti:OnDocChange(void) / TODO: Add your implementation code here return S_OK;/Called after a document is openedSTDMETHODIMP CChangfangti:OnFileOpenPostNotify(BSTR fileName) HRESULT hres = S_OK; hre

22、s = AttachEventsToAllDocuments(); return hres;/Called when a new document is created or a document is loadedSTDMETHODIMP CChangfangti:OnDocLoad(BSTR docTitle, BSTR docPath) return S_OK;VARIANT_BOOL CChangfangti:AttachEventHandlers() VARIANT_BOOL attached = VARIANT_TRUE; this-m_libid = LIBID_SldWorks

23、; this-m_wMajorVerNum = GetSldWorksTlbMajor(); this-m_wMinorVerNum = 0; CSldWorksEvents:_tih.m_wMajor = this-m_wMajorVerNum; / Connect to the SldWorks event sink HRESULT success = this-DispEventAdvise(iSwApp, &_uuidof(DSldWorksEvents); if (success != S_OK) return VARIANT_FALSE; / Connect event handl

24、ers to all previously open documents success = AttachEventsToAllDocuments(); if (success != S_OK) attached = VARIANT_FALSE; return attached;HRESULT CChangfangti:AttachEventsToAllDocuments() VARIANT_BOOL attached = VARIANT_TRUE; USES_CONVERSION; TMapIUnknownToDocument:iterator iter; CComPtr iModelDoc

25、2; iSwApp-IGetFirstDocument2(&iModelDoc2); while (iModelDoc2 != NULL) iter = openDocs.find(iModelDoc2); if (iter = openDocs.end() ATLTRACE(tCChangfangti:DocumentLoadNotify current part not foundn); attached = AttachModelEventHandler(iModelDoc2); if(!attached) return E_FAIL; CComPtr iNextModelDoc2; i

26、ModelDoc2-IGetNext(&iNextModelDoc2); iModelDoc2.Release(); iModelDoc2 = iNextModelDoc2; return S_OK;/Create an event handling object for this document and listen for the models eventsVARIANT_BOOL CChangfangti:AttachModelEventHandler(CComPtr iModelDoc2) VARIANT_BOOL attached = VARIANT_TRUE; if (iMode

27、lDoc2 = NULL) return VARIANT_FALSE; TMapIUnknownToDocument:iterator iter; iter = openDocs.find(iModelDoc2); if (iter = openDocs.end() /Cretae a new Document event handler CComObject *pDoc; CComObject:CreateInstance( &pDoc); pDoc-Init(CComObject*)this, iModelDoc2); /Listen for the docs events attache

28、d = pDoc-AttachEventHandlers(); if(!attached) return VARIANT_FALSE; /Add it to the map openDocs.insert(TMapIUnknownToDocument:value_type(iModelDoc2, pDoc); iModelDoc2.p-AddRef(); pDoc-AddRef(); return attached;/Stop listening for SolidWorks EventsVARIANT_BOOL CChangfangti:DetachEventHandlers() VARIA

29、NT_BOOL detached = VARIANT_TRUE; / Disconnect from the SldWorks event sink HRESULT success = this-DispEventUnadvise(iSwApp, &_uuidof(DSldWorksEvents); CSldWorksEvents:_tih.m_plibid = &GUID_NULL; if (success != S_OK) return VARIANT_FALSE; / Disconnect all event handlers TMapIUnknownToDocument:iterator iter; iter = openDocs.begin(); for (iter = openDocs.begin(); iter != openDocs.end(); /*iter+*/) /The iteration is performed inside the loop TMapIUnknownToDocument:value_type obj = *iter; iter+; CComObject *pDoc = (CComObj

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1