您的位置:首页 > 其它

solidworks二次开发:驱动装配体的尺寸

2008-07-19 22:09 295 查看
原来在用SWizard.awx这个向导在VC++6.0上开发DLL插件,插入solidworks2006,一切都比较顺利,所有需要的主要代码也一一测试过,原来想,这下子可好了,剩下来的只是重要劳动,写代码就行了.谁知,客户要求把solidworks2006换成2008,查资料一下,2008彻底抛弃了SWizard.awx,只好用ATL向导,改代码,改了两天,松了口气.

又来了个问题,之前是零件驱动,现在建模的同学全部以装配体的形式来建军模,那就意味着,我的驱动全部要换成装配体驱动,应该没什么问题,按照驱动零件的思维方式驱动装配体的有关尺寸,通不了,获不了相关尺寸的指针.

上网查了一天,网上没点关于这方面的资料,郁闷死了,,,,,,

跟导师在研究parameter和setsystemvalue这二个API函数的功能,深入他们内部,了解他们的实现原理,一天过去了,无功而返,,,,,,,,,

正在我一看到这两个API函数就想吐的时候,突然想,既然零件可以驱动,装配体是由零件组装而成的,我可不可分别驱动各个零件,然后再驱动装配体呢?

一试,哈哈,,,成功,驱动各个零件之后,装配体都不要驱动了,自动问你要不要自动重建,,,,,,

一下是我试验的代码,只打开装配体的一个零件,驱动一个参数,如果有人有更好的方法,可以发上来,一起学习:

//驱动装配体参数

//打开装配体中的零件
CComPtr<IModelDoc2> modelDoc;
hRes = m_iSldWorks->get_IActiveDoc2 ( &modelDoc );
CComPtr<IAssemblyDoc> assemblyDoc;
hres = modelDoc->QueryInterface(IID_IAssemblyDoc, (LPVOID *)&assemblyDoc);
CComBSTR para4(L"扁尾-1@直槽铰刀");
CComBSTR para5(L"COMPONENT");
hres = modelDocExt->SelectByID2(para4,para5, 0, 0, 0, false,1, NULL,0,&retval);
hres = assemblyDoc->OpenCompFile();
CComBSTR para6(L"扁尾.SLDPRT");
long err;
CComPtr<IModelDoc2> modelDoc2;
hres = m_iSldWorks->IActivateDoc3(para6, false, &err, &modelDoc2);

//对零件的参数进行驱动
CComBSTR para7(L"D1@拉伸1");
CComPtr<IDimension> retvalDimen;
hRes = modelDoc2->IParameter(para7,&retvalDimen);
long retv1;
hRes = retvalDimen->ISetSystemValue3(0.05, swSetValue_InThisConfiguration, 1, 0, &retv1);
hRes = modelDoc2->EditRebuild3(&retval);
hRes = m_iSldWorks->CloseDoc ( para6 );

CComPtr<IModelDoc2> modelDoc3;
CComBSTR para8(L"直槽铰刀.SLDASM");
hres = m_iSldWorks->IActivateDoc3(para8, false, &err, &modelDoc3);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: