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

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

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

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

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

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

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

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

//驱动装配体参数


 //打开装配体中的零件
 CComPtr modelDoc;
 hRes = m_iSldWorks->get_IActiveDoc2 ( &modelDoc );
 CComPtr 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 modelDoc2;
 hres = m_iSldWorks->IActivateDoc3(para6, false,  &err, &modelDoc2);


 //对零件的参数进行驱动
 CComBSTR para7(L"D1@拉伸1");
 CComPtr 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 modelDoc3;
 CComBSTR para8(L"直槽铰刀.SLDASM");
 hres = m_iSldWorks->IActivateDoc3(para8, false,  &err, &modelDoc3);

你可能感兴趣的:(solidworks二次开发)