您好,欢迎来到易妖游戏网。
搜索
您的当前位置:首页Catia二次开发QueryInterface的操蛋问题

Catia二次开发QueryInterface的操蛋问题

来源:易妖游戏网

Catia二开很痛苦,明明已经找到接口类,但是却不知道怎么获得这个接口类的对象。

例如获得一个部件的体积,找到相关接口CATIAAnalyze,但是这个部件的CATIAAnalyze的对象不知道如何获取。一般是这样获取一个对象:

CATIAAnalyze* pAnalyze = NULL;
XXX->QueryInterface(IID_CATIAAnalyze, (void**)&pAnalyze);

但是QueryInterface左边的这个XXX不知道是什么鬼,找了一下CATIAAnalyze的文档,也没有看出什么玩意儿!真服了达索这些傻逼,文档不给全。

探索了很久,尝试录制宏,打开部件属性窗口,然后随意设置一些属性(必须改变一些东西才能录制成功,否则不会录制到任何东西),再看录制的结果,发现原来CATIAAnalyze是从Product那里来的

发现有一个Product关键字,猜想 QueryInterface左边的这个XXX应该就是一个Product对象吧,玛德全靠猜。尝试一下在VBA里点一下

好像是的,写C++代码:

    CATFrmEditor* pFrmEditor = NULL;
	pFrmEditor = CATFrmEditor::GetCurrentEditor();
	if (NULL == pFrmEditor)
	{
		return;
	}

	//获取当前编译器对应的CATDocument
	CATDocument* pDoc = NULL;
	pDoc = pFrmEditor->GetDocument();

	//获得Editor、获得Document、获得DocumentRoot
	CATIDocRoots* pDocRootsOnDoc = NULL;
	CATBaseUnknown_var spBaseTemp = NULL;
	HRESULT rc = E_FAIL;
	rc = pDoc->QueryInterface(IID_CATIDocRoots, (void**) &pDocRootsOnDoc);
	if (!pDocRootsOnDoc)
		return;
	
	CATListValCATBaseUnknown_var* pRootProducts = pDocRootsOnDoc->GiveDocRoots();
	if (NULL != pRootProducts)
	{
		if (pRootProducts->Size())
		{
			spBaseTemp = (*pRootProducts)[1];
		}
		delete pRootProducts;
		pRootProducts = NULL;
	}
	pDocRootsOnDoc->Release();
	pDocRootsOnDoc=NULL;
	if (!spBaseTemp)
		return;
	CATIProduct_var prd = spBaseTemp;
	CATIAAnalyze* pAnalyze = NULL;
	prd->QueryInterface(IID_CATIAAnalyze, (void**)&pAnalyze);

总结一下,写Catia二开代码,就像漂亮国那款《莫里秀》 又名《爸爸死哪了》的综艺节目,大部分时间都是在找爸爸!玛德去死吧。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- vipyiyao.com 版权所有 湘ICP备2023022495号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务