public static uint AssignHandles(DxfFile file) { var visitedItems = new HashSet <IDxfItemInternal>(); foreach (var item in file.GetFileItems()) { ClearPointers(item, visitedItems); } visitedItems.Clear(); uint nextPointer = 1u; foreach (var item in file.GetFileItems().Where(i => i != null)) { nextPointer = AssignHandles(item, nextPointer, 0u, visitedItems); foreach (var child in item.GetChildItems().Where(c => c != null)) { var parentHandle = GetParentHandle(item, child); nextPointer = AssignHandles(child, nextPointer, parentHandle, visitedItems); SetOwner(child, item, isWriting: true); } } return(nextPointer); }
public static void BindPointers(DxfFile file) { // gather all items by handle var handleMap = new Dictionary <uint, IDxfItemInternal>(); var visitedItems = new HashSet <IDxfItemInternal>(); foreach (var item in file.GetFileItems()) { GatherPointers(item, handleMap, visitedItems); } visitedItems.Clear(); var visitedChildren = new HashSet <IDxfItemInternal>(); // bind all pointers foreach (var item in file.GetFileItems()) { BindPointers(item, handleMap, visitedItems, visitedChildren); } }