C++实现SolidWorks二次开发第一步:画一个方块
SolidWorks是一款很强大的机械设计建模软件,同其他同类型软件一样,它也提供二次开发的接口。
一个二次开发入门的很好的方法就是,利用宏录制来生成代码,再将其用到程序里。但如果要用C++来做二次开发,较VB和C#还需费些周折。
俺用的是SolidWorks2016版本,如果需要宏录制生成C#代码,需要在安装的时候选择“ Microsoft Visual Studio Tools for Applications (VSTA)”,否则宏录制生成的代码只有VB代码。
看到这里,不知有没有人发现了一个问题,没错,宏录制是不生成C++代码的。至少SolidWorks2016不会生成。更过分的是,api文档中的C++实例文档也很少,很多都只给出了VB和C#的。嗯,有人说C++是最难的一门编程语言,可能宏录制也觉得难吧~
宏录制之后的代码是不能直接用的,因为宏录制是记录操作的过程,会产生很多冗余的代码。正确的方式是参考宏录制生成的代码,了解画图,今天这篇文章画的是方,我们就用他来举例。参考宏录制生成的代码,了解画一个方需要调用那些接口,再参考api文档中的说明,了解用C++语言做二次开发,需要做什么准备工作,用什么类和函数。
以下是宏录制生成的C#代码,我已经将冗余部分删得7788了。
SldWorks.SldWorks swApp;SldWorks.ModelDoc2 Part;swApp = new SldWorks.SldWorks();//创建一个SldWorks实例swApp.NewDocument("C:\\ProgramData\\SOLIDWORKS\\SOLIDWORKS 2016\\templates\\gb_part.prtdot", 0, 0, 0);//新建一个零件类型的文档Part = swApp.ActiveDoc;//ModelDoc2包含了一些常用的对文档的操作,例如绘制,保存等。ActiveDoc返回一个在用的文档,如果没有的话,返回的是nullPart.SketchManager.InsertSketch(true);//插入一个草图Part.Extension.SelectByID2("前视基准面", "PLANE", -5.51688046000562E-02, 6.20552978418983E-02, -1.37730216225479E-03, false, 0, null, 0);//选择前视基准面Part.ClearSelection2(true);Part.SketchManager.CreateCenterRectangle(0, 0, 0, -2.56018390836871E-02, 2.57775321181576E-02, 0);//画一个方形Part.ShowNamedView2("*上下二等角轴测", 8);Part.ClearSelection2(true);Part.FeatureManager.FeatureExtrusion2(true, false, false, 0, 0, 0.032, 0.01, false, false, false, false, 1.74532925199433E-02, 1.74532925199433E-02, false, false, false, false, true, true, true, 0, 0, false);//特征操作Part.SaveAs3("D:\\desktopfiles\\三维示意图\\lingjian10.SLDPRT", 0, 2);//保存绘制的图纸swApp.ExitApp();//退出swApp = null;
让我们看看,将上述C#代码转换为C++代码是什么样纸的。
在写代码之前,先要引入相关的包。
#import "D:\\solidworks_install_file\\SOLIDWORKS\\sldworks.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
#import "D:\\solidworks_install_file\\SOLIDWORKS\\swconst.tlb" raw_interfaces_only, raw_native_types, no_namespace, named_guids
_COM_SMARTPTR_TYPEDEF(ISldWorks,__uuidof(ISldWorks));
_COM_SMARTPTR_TYPEDEF(IModelDoc2, __uuidof(IModelDoc2));
_COM_SMARTPTR_TYPEDEF(IFeature, __uuidof(IFeature));CoInitialize(NULL);//use smart pointersISldWorksPtr swApp;IModelDoc2Ptr Part;IModelViewPtr myModelView;long* i=0;//create an instance of soldworksHRESULT hres = swApp.CreateInstance(__uuidof(SldWorks),NULL, CLSCTX_LOCAL_SERVER);if (hres == S_OK) {IDispatchPtr retval;IDispatchPtr retval5;VARIANT_BOOL retval2=false;IModelDocPtr imodeldoc_re;HRESULT hres1=swApp->INewDocument(_com_util::ConvertStringToBSTR("C:\\ProgramData\\SOLIDWORKS\\SOLIDWORKS 2016\\templates\\gb_part.prtdot"), 0, 0, 0, &(IModelDocPtr)Part);HRESULT hres3=swApp->get_IActiveDoc2(&Part);Part->InsertSketch();Part->SelectByID(_com_util::ConvertStringToBSTR("前视基准面"), _com_util::ConvertStringToBSTR("PLANE"), -5.51688046000562E-02, 6.20552978418983E-02, -1.37730216225479E-03, &retval2);Part->ClearSelection2(true);_COM_SMARTPTR_TYPEDEF(ISketchManager, __uuidof(ISketchManager));ISketchManagerPtr ISMg;Part->get_SketchManager(&ISMg);VARIANT retval3;ISMg->CreateCenterRectangle(0, 0, 0, -2.56018390836871E-02, 2.57775321181576E-02, 0, &retval3);Part->ShowNamedView2(_com_util::ConvertStringToBSTR("*上下二等角轴测"), 8);Part->ClearSelection2(true);_COM_SMARTPTR_TYPEDEF(IFeatureManager, __uuidof(IFeatureManager));IFeatureManagerPtr myFmg;IFeaturePtr IFretval;Part->get_FeatureManager(&myFmg);myFmg->FeatureExtrusion2(true, false, false, 0, 0, 0.032, 0.01, false, false, false, false, 1.74532925199433E-02, 1.74532925199433E-02, false, false, false, false, true, true, true, 0, 0, false, &IFretval);HRESULT hres5 = Part->SaveAs(_com_util::ConvertStringToBSTR("D:\\desktopfiles\\三维示意图\\lingjian12.SLDPRT"),&retval2);swApp->ExitApp();
}swApp=NULL;CoUninitialize();
懂C++的人看得出来,俺写的代码很烂。求不喷。毕竟成长空间很足。对于一个C++小白来说,把C#的代码转换为C++的代码是很不容易的。
几乎是一行一行地出bug,一行一行地改。期间还因为无知而碰到各种奇奇怪怪的问题。
C++相比C#更为严格,有些转换必须显式地强制转换,而有些转换压根不能做。方法地调用也颇费周章。
以上代码俺是放在button地click事件中执行地,点击按钮,就可以生成一个画了方地文件了。
C++实现SolidWorks二次开发第一步:画一个方块相关推荐
- SolidWorks二次开发的研究
三维机械设计软件SolidWorks是一套基于Windows的CAD/CAE/CAM/PDM桌面集成系统,是由美国SolidWorks公司在总结和继承大型机械CAD软件的基础上,在Windows环境下 ...
- 路由器二次开发一步一步把工业路由器变成一个高端的可指定出网、节点和链路的路由器,包含详细过程及快捷脚本(四)
路由器二次开发一步一步把工业路由器变成一个高端的可指定出网.节点和链路的路由器,包含详细过程及快捷脚本(四). 如果没有 路由器 可以采用 废旧的电脑,详细环境部署参考第(一)篇文章,这里采用800米 ...
- SOLIDWORKS 二次开发 VC++
需要理解的知识 * com组件原理及应用1. IUnknown , IDiapatch ...2. 接口的指针指向接口这个结构,接口里面保存一个虚函数表指针,指向接口里的函数.3. 接口的使用+ 通过 ...
- windows phone开发第一步:搭建软件开发环境
2019独角兽企业重金招聘Python工程师标准>>> windows phone开发第一步:搭建软件开发环境:http://www.cnblogs.com/hanjun/archi ...
- sw二次开发 python_基于C#的SolidWorks二次开发.doc
摘要: 气动电阻点焊钳已经被各大汽车制造厂商广泛运的用于汽车焊接工艺中.它以无污染.压力稳定.动作敏捷等优点逐步替代了国内常见的液压传动焊钳,改变了液压传动滞缓的现象,从而达到了焊接循环的要求.本次毕 ...
- 微信公众开放平台开发07---java servlet 实现微信开发第一步:微信服务器验证
微信公众开放平台开发07---java servlet 实现微信开发第一步:微信服务器验证 技术qq交流群:JavaDream:251572072 ------------------------- ...
- Solidworks二次开发平台 --- RyS.SwWorks [2015-09-18更新]
RyS.SwWorks 是一款基于.NET的Solidworks二次开发平台,该平台封装了插件注册.菜单.工具栏.侧边栏.Document接口,使得Solidworks开发和部署简单高效. 安装程序中 ...
- C# SolidWorks二次开发 干涉检查
总体思路 基于.NET Framework控制台应用程序进行SolidWorks二次开发,选中输入零件,实现干涉检查功能. 使用SelectByID2方法,选中待检查零件,然后使用ToolsCheck ...
- C# Solidworks二次开发 输入零件名选中零件
实现功能 基于.NET Framework控制台应用程序进行SolidWorks二次开发,实现输入零件名,在软件中选中零件. 注意:(1)进行SolidWorks控制台程序二次开发不能使用.NET C ...
最新文章
- java 同步包_Java并发程序设计(四)JDK并发包之同步控制
- C#控制台程序生成文件分析
- 压缩文件拷到服务器损坏,压缩文件导致无法拷贝共享
- 三点弯曲弹性模量怎么计算公式_?怎么计算弯管的尺寸和弯管的张力
- Leetcode: Single Number
- 程序员修神之路--简约而不简单的分布式通信基石
- e站app改内置hosts_米家踢脚线电暖器E评测:符合现代家居审美 全屋取暖“小钢炮”...
- 在线民宿满意度测评项目[开源]
- 计算空间中点到直线的距离
- 极域电子教室解除控制
- 基于JAVA高校信息资源共享平台计算机毕业设计源码+系统+mysql数据库+lw文档+部署
- IE11浏览器清空缓存
- MTK6577+Android之GPIO驱动简介
- 基于AM5728核心板的户外工作站可靠性和便捷性设计
- 【PC工具】更新微信语音转mp3保存备份方法及工具,微信语音备份方法,silk转mp3工具...
- luatos的一些说明
- 华为eNsp 配置ospf协议
- python list 求平均
- 三本计算机的专业需要考研嘛,三本计算机考研难吗
- jsp如何使用layerui