SolidWorks机械工程师网——最大的SolidWorks学习平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

好品数字
好品数字
查看: 2557|回复: 11
打印 上一主题 下一主题

SolidWorks 二次开发 求助

[复制链接]

13

主题

71

帖子

92

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
205
QQ
跳转到指定楼层
楼主
发表于 2016-2-4 10:25:10 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
请问有没有哪位大哥大姐对用c++对SolidWorks进行二次开发比较熟悉的,比如下面这个轮毂怎么用C++程序画出来



这是轮毂源文件
奥迪轮毂.rar (1.33 MB, 下载次数: 131)
各位大哥大姐如有其他三维建模程序的,能不能传给小弟我学习学习,感激不尽了!小弟这边也有些机械方面的资料可以和大家共享。
下面是小弟编的一个程序,新建文件——创建圆柱。
/* NOTE: You will need to add the -GX flag to your Project Options in Project->Settings->C/C++*/
// swobj.cpp : Implementation of Cswobj
#include "stdafx.h"
#include "111.h"
#include "swobj.h"
/////////////////////////////////////////////////////////////////////////////
// Cswobj
void Cswobj::AddUserInterface()
{
AddToolbar();
AddMenus();
}
void Cswobj::RemoveUserInterface()
{
RemoveMenus();
RemoveToolbar();
}
void Cswobj::AddMenus()
{
long retval = 0;
VARIANT_BOOL ok;
long type;
long position;
CComBSTR menu;
CComBSTR method;
CComBSTR update;
CComBSTR hint;
// Add menu for main frame
type = swDocNONE;
position = 3;
menu.LoadString(IDS_MY1_MENU);
m_iSldWorks->AddMenu(type, menu, position, &retval);
position = -1;
menu.LoadString(IDS_MY1_START_NOTEPAD_ITEM);
method.LoadString(IDS_MY1_START_NOTEPAD_METHOD);
hint.LoadString(IDS_MY1_START_NOTEPAD_HINT);
m_iSldWorks->AddMenuItem2(type, m_swCookie, menu, position, method, update, hint, &ok);
position = -1; //wb
menu.LoadString(IDS_111_ITEM);
method.LoadString(IDS_111_METHOD);
hint.LoadString(IDS_111_HINT);
m_iSldWorks->AddMenuItem2(type, m_swCookie, menu, position, method, update, hint, &ok);
// Add menu for part frame
type = swDocPART;
position = 5;
menu.LoadString(IDS_MY1_MENU);
m_iSldWorks->AddMenu(type, menu, position, &retval);
position = -1; //wb
menu.LoadString(IDS_111_ITEM);
method.LoadString(IDS_111_METHOD);
hint.LoadString(IDS_111_HINT);
m_iSldWorks->AddMenuItem2(type, m_swCookie, menu, position, method, update, hint, &ok);
position = -1; //wb
menu.LoadString(IDS_111_ITEM2);
method.LoadString(IDS_111_METHOD2);
hint.LoadString(IDS_111_HINT2);
m_iSldWorks->AddMenuItem2(type, m_swCookie, menu, position, method, update, hint, &ok);
position = -1;
menu.LoadString(IDS_MY1_START_NOTEPAD_ITEM);
method.LoadString(IDS_MY1_START_NOTEPAD_METHOD);
hint.LoadString(IDS_MY1_START_NOTEPAD_HINT);
m_iSldWorks->AddMenuItem2(type, m_swCookie, menu, position, method, update, hint, &ok);
// Add menu for assembly frame
type = swDocASSEMBLY;
position = 5;
menu.LoadString(IDS_MY1_MENU);
m_iSldWorks->AddMenu(type, menu, position, &retval);
position = -1;
menu.LoadString(IDS_MY1_START_NOTEPAD_ITEM);
method.LoadString(IDS_MY1_START_NOTEPAD_METHOD);
hint.LoadString(IDS_MY1_START_NOTEPAD_HINT);
m_iSldWorks->AddMenuItem2(type, m_swCookie, menu, position, method, update, hint, &ok);
// Add menu for drawing frame
type = swDocDRAWING;
position = 5;
menu.LoadString(IDS_MY1_MENU);
m_iSldWorks->AddMenu(type, menu, position, &retval);
position = -1;
menu.LoadString(IDS_MY1_START_NOTEPAD_ITEM);
method.LoadString(IDS_MY1_START_NOTEPAD_METHOD);
hint.LoadString(IDS_MY1_START_NOTEPAD_HINT);
m_iSldWorks->AddMenuItem2(type, m_swCookie, menu, position, method, update, hint, &ok);
}
void Cswobj::RemoveMenus()
{
VARIANT_BOOL ok;
CComBSTR menu;
menu.LoadString(IDS_MY1_MENU);
m_iSldWorks->RemoveMenu(swDocNONE, menu, NULL, &ok);
m_iSldWorks->RemoveMenu(swDocPART, menu, NULL, &ok);
m_iSldWorks->RemoveMenu(swDocASSEMBLY, menu, NULL, &ok);
m_iSldWorks->RemoveMenu(swDocDRAWING, menu, NULL, &ok);
}
void Cswobj::AddToolbar()
{
VARIANT_BOOL stat = VARIANT_FALSE;
VARIANT_BOOL ok;
HRESULT hres;
CComBSTR title;
CComBSTR callback;
CComBSTR update;
CComBSTR tip;
CComBSTR hint;
if (m_lToolbarID == 0)
{
title.LoadString(IDS_MY1_TOOLBAR_TITLE);
callback.LoadString(IDS_MY1_TOOLBAR_CALLBACK);
update.LoadString(IDS_MY1_TOOLBAR_UPDATE);
tip.LoadString(IDS_MY1_TOOLBAR_TIP);
hint.LoadString(IDS_MY1_TOOLBAR_HINT);
hres = m_iSldWorks->AddToolbar3(m_swCookie, title, IDR_TOOLBAR_SMALL, IDR_TOOLBAR_LARGE, -1,
swDocTemplateTypeNONE|swDocTemplateTypePART|swDocTemplateTypeASSEMBLY|swDocTemplateTypeDRAWING, &m_lToolbarID);
m_iSldWorks->AddToolbarCommand2(m_swCookie, m_lToolbarID, 0, callback, update, tip, hint, &ok);
m_iSldWorks->AddToolbarCommand2(m_swCookie, m_lToolbarID, 1, callback, update, tip, hint, &ok);
m_iSldWorks->AddToolbarCommand2(m_swCookie, m_lToolbarID, 2, callback, update, tip, hint, &ok);
}
}
void Cswobj::RemoveToolbar()
{
if (m_lToolbarID != 0)
{
VARIANT_BOOL stat;
HRESULT hres = m_iSldWorks->RemoveToolbar2( m_swCookie, m_lToolbarID, &stat);
m_lToolbarID = 0;
}
}
/////////////////////////////////////////////////////////////////////////////
// ISwAddin implementation
STDMETHODIMP Cswobj::ConnectToSW(IDispatch * ThisSW, LONG Cookie, VARIANT_BOOL * IsConnected)
{
VARIANT_BOOL status;
if (IsConnected == NULL)
return E_POINTER;

m_swCookie = Cookie;
m_iSldWorks = CComQIPtr(ThisSW);
if (m_iSldWorks != NULL)
{
m_iSldWorks->SetAddinCallbackInfo((long)_Module.GetModuleInstance(), static_cast(this), m_swCookie, &status);
AddUserInterface();
}
return S_OK;
}
STDMETHODIMP Cswobj:isconnectFromSW(VARIANT_BOOL * IsDisconnected)
{
if (IsDisconnected == NULL)
return E_POINTER;
if (m_iSldWorks != NULL)
{
RemoveUserInterface();
m_iSldWorks.Release();
}
return E_NOTIMPL;
}
/////////////////////////////////////////////////////////////////////////////
// DSldWorksEvents implementation
/////////////////////////////////////////////////////////////////////////////
// Iswobj implementation
STDMETHODIMP Cswobj::StartNotepad()
{
// TODO: Add your implementation code here
::WinExec("Notepad.exe", SW_SHOW);
return S_OK;
}
STDMETHODIMP Cswobj::ToolbarUpdate(long *status)
{
HRESULT retval = S_OK;
*status = 1;
return S_OK;
}
STDMETHODIMP Cswobj::first()//新建文件
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
// TODO: Add your implementation code here
HRESULT retval;

CComPtrpPartDoc = NULL;
retval = m_iSldWorks->NewPart((IDispatch**)&pPartDoc);
if(pPartDoc == NULL)
{
AfxMessageBox(_T("新建零件文件失败"));
return S_FALSE;
}
return S_OK;
}
STDMETHODIMP Cswobj::second()//创建圆柱
{
AFX_MANAGE_STATE(AfxGetStaticModuleState())
// TODO: Add your implementation code here
VARIANT_BOOL bRetval = VARIANT_FALSE;
CComPtr swDoc;//定义ModelDoc对象
CComPtr swDocExt;//定义ModelDocExtension对象
CComPtr swFeatMgr;//定义FeatureManager对象
m_iSldWorks->get_IActiveDoc2(&swDoc);///获得当前活动文档对象
swDoc->get_Extension(&swDocExt);///获得当前ModelDocExtension对象
swDoc->get_FeatureManager(&swFeatMgr);///获得当前特征管理器对象
CComPtr swSketch;//定义Sketch对象
swDoc->IGetActiveSketch2(&swSketch);///获得当前激活的草图对象
if (swSketch == NULL)///如果当前没有激活的草图对象
{
swDocExt->SelectByID2(L"Front Plane", L"LANE", 0.0, 0.0, 0.0, VARIANT_FALSE, 0, NULL, swSelectOptionDefault, &bRetval);///选择前视基准面
swDoc->InsertSketch2(VARIANT_TRUE);///添加草图
}
CComPtr swSkSeg;//定义SketchSegment对象
swDoc->ICreateCircle2(0.0, 0.0, 0.0, 0.050, 0.0, 0.0, &swSkSeg);///新建一个圆
CComPtr swFeat;//定义Feature对象
swFeatMgr->FeatureExtrusion2(VARIANT_FALSE, VARIANT_FALSE, VARIANT_FALSE,0, 0, 0.100, 0.100,///拉伸
VARIANT_FALSE, VARIANT_FALSE, VARIANT_FALSE, VARIANT_FALSE, 0.0, 0.0,
VARIANT_FALSE, VARIANT_FALSE, VARIANT_FALSE, VARIANT_FALSE,
VARIANT_TRUE, VARIANT_FALSE, VARIANT_TRUE, 0, 0.0, VARIANT_FALSE, &swFeat);
return S_OK;
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享教程|习题|模型|技巧 点赞点赞13026 拍砖拍砖3303
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复

使用道具 举报

16

主题

72

帖子

132

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
279
QQ
沙发
发表于 2016-2-4 10:29:37 | 只看该作者
还要学习高级编程语言,搞这么复杂,主要用在什么方面?
SolidWorks机械工程师网
提示:建议使用谷歌浏览器浏览本网站!如单击这里下载!否则,可能无法下载附件文件!(支持大多数版本的谷歌浏览器,支持360和QQ浏览器的极速模式,即谷歌内核模式,使用IE和Edge浏览器,浏览个别网页以及下载文件时,会误报“***不安全”,此时需要单击“继续访问此不安全站点(不推荐)”才可以继续下载,另外,本网站不含任何不安全的文件,已联系微软公司解决,纯属IE和Edge浏览器误报)
回复 支持 反对

使用道具 举报

14

主题

70

帖子

121

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
285
QQ
板凳
发表于 2016-2-4 10:30:02 | 只看该作者
看的眼都花了
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

16

主题

61

帖子

83

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
234
QQ
地板
发表于 2016-2-4 10:31:22 | 只看该作者
尤记  哪年哪月学过c语言 c++  好像成绩还不错 现在这 扎一看 不明觉厉a 
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

16

主题

75

帖子

103

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
267
QQ
5#
发表于 2016-2-4 10:31:33 | 只看该作者

   经典案例图书
二次开发对复杂装配体的变型设计才有用吧,单个零件拿来干嘛,做重构库?
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

11

主题

78

帖子

70

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
223
QQ
6#
发表于 2016-2-4 10:35:52 | 只看该作者
额,我做过VB的SolidWorks二次开发。C++的不会,跟你说一下VB下的SolidWorks二次开发大致思路吧,希望对你有些帮助。我当时做的时候,是通过录制及查阅API的help文档做的,单个零件建模的话,其实就是不断的草图绘制和特征建立,而这里面最难的就是草图、基准面什么的选取,找准ID就好了,你可以录制macro文件之后看看。至于你说的这个轮毂的建模,难度应该不大,就只是工作量的问题。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

10

主题

74

帖子

57

金币

天使

Rank: 2Rank: 2

积分
192
QQ
7#
发表于 2016-2-4 10:39:53 | 只看该作者

   经典案例图书
弱弱的问一句,为啥要用二次开发画呢?这玩意不是能直接画出来吗?好像也不是特别难得样子啊。。。小白我完全不会用二次开发,但是感觉好像也能画出来。
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

7

主题

60

帖子

39

金币

天使

Rank: 2Rank: 2

积分
156
QQ
8#
发表于 2016-2-4 10:40:04 | 只看该作者
这个好搞零件库
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

11

主题

57

帖子

68

金币

天使

Rank: 2Rank: 2

积分
182
QQ
9#
发表于 2016-2-4 10:41:31 | 只看该作者
要弄零件库,和各种轮胎装配
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

17

主题

71

帖子

162

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
332
QQ
10#
发表于 2016-2-4 10:44:35 | 只看该作者
初学小弟感觉很难啊
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

12

主题

79

帖子

66

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
213
QQ
11#
发表于 2016-2-4 10:47:41 | 只看该作者
差不多吧
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

17

主题

75

帖子

110

金币

侠客

Rank: 3Rank: 3Rank: 3

积分
289
QQ
12#
发表于 2016-2-4 10:48:19 | 只看该作者
你在画图的时候,用SolidWorks录制文件,录制的语言是VBA的,你看看那个就能知道个大概
SolidWorks机械工程师网
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭 卷起
关闭 卷起

手机版|小黑屋| GMT+8, 2024-5-7 07:40 , Processed in 0.164320 second(s), 36 queries .

SolidWorks机械工程师网 ( 鲁ICP备14025122号-2 ) 鲁公网安备 37028502190335号

声明:本网言论纯属发表者个人意见,与本网立场无关。
如涉版权,可发邮件: admin@swbbsc.com

快速回复 返回顶部 返回列表