wustguangh |分类标签:CAA 2014-11-13

CAA如何得到指定产品对应的CATPathment?

Ctrl+Enter直接提交

回答(2)

wustguangh 19级 2014-11-14 07:54:11

CATIBuildPath *piBuildPath = NULL;
HRESULT rc = spTempObject->QueryInterface( IID_CATIBuildPath, (void**) &piBuildPath );

if ( SUCCEEDED(rc) )
{
      CATFrmEditor *pEditor = CATFrmEditor::GetCurrentEditor(); 
      CATPathElement Context = pEditor->GetUIActiveObject();
      CATPathElement *pPathElement = NULL ;
      rc = piBuildPath->ExtractPathElement(&Context,&pPathElement);
}

可以试试这个获取全路径的方法

wustguangh 19级 2014-11-13 16:58:54

BOOL UCEGetPathElementFromSpecObject(CATPathElement* &pPathElement,const CATISpecObject_var spSpecObject,CATPathElement* pFatherPathElement)
{
	pPathElement=NULL;
	if(spSpecObject==NULL_var)
	{
		return FALSE;
	}
	//
	//////////////////////////////////////////////////////////////////////////////////////////////
	CATPathElement * pInputContext;

	if(pFatherPathElement==NULL)
	{
		//获得当前editor
		CATFrmEditor * editor = CATFrmEditor::GetCurrentEditor ();
		if (NULL == editor)
		{
			UCEErrorMsgBox("
error: failed to get current editor");
			return FALSE;
		}
		CATPathElement FatherPathElement=editor->GetUIActiveObject();
		if(FatherPathElement.GetSize()==0)
		{
			UCEErrorMsgBox("
error: failed to get current path");
			return FALSE;
		}
		pInputContext = new CATPathElement(FatherPathElement);
	}
	else
	{
		pInputContext = new CATPathElement(*pFatherPathElement);
	}
	if (pInputContext==NULL)
		return FALSE;
	//
	CATIBuildPath_var spiBuildPathAccess = spSpecObject;
	if(spiBuildPathAccess==NULL_var)
	{
		UCEErrorMsgBox("
error: failed to get build path access");
		return FALSE;
	}
	//
	HRESULT rs=spiBuildPathAccess -> ExtractPathElement (pInputContext, &pPathElement);
	pInputContext -> Release();
	pInputContext = NULL;

	if(FAILED(rs))
	{
		UCEErrorMsgBox("
error: 由于装配上下文变化,无法根据路径获取对象全路径!");
		return FALSE;
	}
	//
	return TRUE;
}
BOOL UCEGetPathElementFromSpecObject(CATPathElement* &pPathElement,const CATISpecObject_var spSpecObject,CATIProduct_var spPrdInstance)
{
	pPathElement=NULL;
	if(spSpecObject==NULL_var || spPrdInstance==NULL_var)
	{
		return FALSE;
	}
	if(SUCCEEDED(spPrdInstance->IsReference()))
	{
		UCEErrorMsgBox("
错误:不是一个产品实例");
		return FALSE;
	}
	//
	CATIProduct_var spRootProduct;
	if(UCEGetRootProduct(spRootProduct,TRUE)==FALSE)
	{
		return FALSE;
	}

	CATIBuildPath_var spiBuildPathAccess = spPrdInstance;
	if(spiBuildPathAccess==NULL_var)
	{
		UCEErrorMsgBox("
error: failed to get build path access");
		return FALSE;
	}

	CATPathElement * pInputContext = new CATPathElement();
	if (pInputContext==NULL)
		return FALSE;

	pInputContext -> AddChildElement (spRootProduct);

	CATPathElement* pFatherPathElement;
	HRESULT rs=spiBuildPathAccess -> ExtractPathElement (pInputContext, &pFatherPathElement);
	pInputContext -> Release();
	pInputContext = NULL;

	if(FAILED(rs))
	{
		return FALSE;
	}
	//
	BOOL bState=UCEGetPathElementFromSpecObject(pPathElement,spSpecObject,pFatherPathElement);
	//
	pFatherPathElement->Release();
	pFatherPathElement=NULL;
	//
	return bState;
}


相关知识

相关文章更多