CAA V6获取CATIMmiPrtContainer

本文介绍了一个从CATIPLMNavOccurrence获取机械容器的函数实现,通过迭代器遍历实例,获取代表引用,并切换到编辑模式,最终在3D形状流中检索应用容器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//该函数从CATIPLMNavOccurrence中得到Container
HRESULT MyStateCommand::GetMechanicalContainer (CATBaseUnknown * ipOccurrence, CATIMmiPrtContainer ** opiPrtContainer)
{
    HRESULT rc = E_INVALIDARG;

    // Check input parameters
    if (NULL != ipOccurrence && NULL != opiPrtContainer)
    {
        // Initializations
        *opiPrtContainer = NULL;
        rc = S_OK;

        // Get iterator on occurences
        CATIPrdIterator * piIteratorOnOccurrence = NULL;
        CATIPLMRepInstances_var spRepInstOnOccurrence = ipOccurrence;      
        if (NULL_var != spRepInstOnOccurrence)
            rc = spRepInstOnOccurrence -> Iterator (piIteratorOnOccurrence);
        else rc = E_UNEXPECTED;         

        // Get the mechanical container
        CATIMmiPrtContainer * piPrtContainer = NULL;
        if (SUCCEEDED(rc) && NULL != piIteratorOnOccurrence) 
        {
            CATBaseUnknown * piBUonRepInstance = NULL;
            if (SUCCEEDED(piIteratorOnOccurrence -> Next(piBUonRepInstance)) && NULL != piBUonRepInstance && NULL == piPrtContainer)
            {
                // Get the representation reference
                CATIPsiRepresentationReference_var spRepReference;
                CATIPLMNavRepReference * piNavRepReference = NULL;
                CATIPLMNavRepInstance_var spNavRepInstance = piBUonRepInstance;
                if (NULL_var != spNavRepInstance)
                {
                    rc = spNavRepInstance -> GetRepReferenceInstanceOf (piNavRepReference);
                    if (SUCCEEDED(rc))
                    {
                        spRepReference = piNavRepReference;
                        if (NULL_var == spRepReference) rc = E_UNEXPECTED;
                    }
                }
                else  rc = E_UNEXPECTED;

                // Switch the representation to "EditMode"
                if (SUCCEEDED(rc))
                {
                    CATIPsiRepresentationLoadMode_var spRepresentationLoadMode = spRepReference;
                    if (NULL_var != spRepresentationLoadMode)
                        spRepresentationLoadMode -> ChangeLoadingMode (CATIPsiRepresentationLoadMode::EditMode);  
                    else  rc = E_UNEXPECTED;
                }

                // Get the mechanical container in the 3DShape stream
                if (SUCCEEDED(rc) && NULL != piNavRepReference)
                {
                    CATUnicodeString usMainDataType;
                    rc = spRepReference -> GetMainDataType(usMainDataType);
                    if (SUCCEEDED(rc) && usMainDataType == "CATPart")
                        rc = piNavRepReference -> RetrieveApplicativeContainer ("CATPrtCont", IID_CATIMmiPrtContainer, (void**) opiPrtContainer);
                }
                if (NULL != piNavRepReference)  {piNavRepReference -> Release(); piNavRepReference = NULL;}
            }
        }

        if (NULL != piIteratorOnOccurrence)  {piIteratorOnOccurrence -> Release(); piIteratorOnOccurrence = NULL;}
    }

    return rc;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值