Documents referenced by a 2d view in an IDW

Top  Previous  Next

A (2D) drawing view obviously referenced documents (3D assemblies and 3D parts), how do you get hold of the referenced documents. Here a code fragment to help you do it:

 

   CComPtr<DrawingView> pThisView = nullptr ;

   ...

   // What main document does this view look at? (Here I assume it is an assembly)

   CComPtr<DocumentDescriptor> pDocDesc = nullptr;

   pThisView->get_ReferencedDocumentDescriptor(&pDocDesc);

   CComQIPtr<AssemblyDocument>pDoc = pDocDesc->ReferencedDocument;

 

   // Get the definition of the referenced assembly....

   CComPtr<AssemblyComponentDefinition> pAsmCompDef = nullptr;

   pDoc->get_ComponentDefinition(&pAsmCompDef);

 

   // Get the list of components (usually parts) in the assemly...

   CComPtr<ComponentOccurrences> pOccList = nullptr;

   pAsmCompDef->get_Occurrences(&pOccList);

 

 

   CComQIPtr<PartComponentDefinition> pPartDef = nullptr;

   CComPtr<PartDocument> pOccDoc = nullptr;

 

   // Loop over all the parts writing out the name of the part...

   for (long o = 1; o <= pOccList->Count; o++) {

       CComPtr<ComponentOccurrence> pOcc = nullptr;

       pOccList->get_Item(o, &pOcc);

 

       CComPtr<ComponentDefinition> pDef = nullptr ;

       pOcc->get_Definition(&pDef);

       pPartDef = pDef ;

       pPartDef->get_Document((IDispatch**)&pOccDoc);

 

       const CString kcsOccFullFileName(BSTR(pOccDoc->FullFileName));

 

       pOccDoc = nullptr;

 

       TRACE L"Found part doc <%s>", kcsOccFullFileName);

   }

 

 

Text, images and diagrams © 2021 Owen F. Ransen. All rights reserved. (But copy the source code as much as you want!)