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);
            }
        }