SW二次开发-遍历装配
直接上代码,以下的代码使用了递归,遍历组件下所有部件:
void TraverseChildren(CComPtr<IComponent>pRoofComp,std::vector<CComQIPtr<IComponent>> &pComponents) { if(pRoofComp==NULL)return; int componentCout; pRoofComp->IGetChildrenCount(&componentCout); VARIANT vChildComp; pRoofComp->GetChildren(&vChildComp); SAFEARRAY *safeComp; safeComp=V_ARRAY(&vChildComp); LPDISPATCH *safeArraycomp; SafeArrayAccessData(safeComp,(void **)&safeArraycomp); for (int i=0;i<componentCout;i++) { CComQIPtr<IComponent>pChildComp=safeArraycomp[i]; TraverseChildren(pChildComp,pComponents); pComponents.push_back(pChildComp); } }
//测试调用代码
void CyuanzhuDialog::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 HRESULT retval; CString myString; CComPtr<IModelDoc2>pModel; retval = m_iSldWorks_dlg->get_IActiveDoc2(&pModel); if(pModel == NULL) { AfxMessageBox(_T( "获取活动文档失败")); return ; } CComBSTR title; pModel->GetTitle(&title); CString temp(title); myString=myString+temp+_T("\r\n"); CComPtr<IConfiguration>pConfig; pModel->IGetActiveConfiguration(&pConfig); ASSERT(pConfig); CComPtr<IComponent>pRoofComp; pConfig->IGetRootComponent(&pRoofComp); std::vector<CComQIPtr<IComponent>> pComponents; TraverseChildren(pRoofComp,pComponents); for (int i=0;i<pComponents.size();++i) { CComBSTR comName; pComponents[i]->get_Name(&comName); CString childTemp (comName); myString+=childTemp; myString+=_T("\r\n"); } AfxMessageBox(myString); }
//效果见下图
转载请注明出处: 芝麻开花
本文的链接地址: http://www.vmould.cn/?post=195
下一篇
SW二次开发-导入igs
您可能对以下文章感兴趣
发表评论 取消回复