//该函数从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;
}