Every object is referenced by one or more INodes. To find the first INode in the dependency graph that references an object by sending a reference message REFMSG_GET_NODE_HANDLE to its dependents using ReferenceTarget::NotifyDependents(). This will retrieve a handle of the first node that references the object. Using the method Interface::GetINodeByHandle() a node can then be retrieved.
INode* GetNodeFromObject(BaseObject* obj) {
ULONGhandle = 0;
rm->NotifyDependents(FOREVER, (PartID)&handle, REFMSG_GET_NODE_HANDLE);
INode *node = GetCOREInterface()->GetINodeByHandle(handle);
returnnode;
}
ITo find all of the nodes that reference an object use the instancemanager's IInstanceMgr::GetInstances() method passing it the INode thatyou have acquired. A pointer to a global instance of IInstanceMgr can be retrieved using the static member function: IInstanceMgr::GetInstanceMgr().
void GetAllReferencingNodes(BaseObject* obj, INodeTab& nodes) {
INode* node = GetNodeFromObject(obj);
DbgAssert(node != NULL); // should never be NULL
IInstanceMgr::GetInstanceMgr()->GetInstamces(*node, nodes);
}