ADN Club > ObjectARX
Проблема с осмыслением AcDbIdMapping при копировании-вставке
Mihanpan:
Спасибо за подсказку.
При форматировании строки возвращается одно и то же число - и для idPair.key(), и для idPair.key().asOldId(), но это большая удача, что mId лежит в нужном месте памяти, чтобы получился такой результат.
--- Код: ---OutputDebugFormatedString(_T("pair Id's: %016llx (mId=%016llx) [%x] --> %016llx (mId=%016llx) [%x]\n"),
idPair.key(),idPair.key().asOldId(),MyGetHandleValue(hKey),
idPair.value(),idPair.value().asOldId(),MyGetHandleValue(hVal));
протокол:
13:44:22pair Id's: 000007ffff609ba0 (mId=000007ffff609ba0) [242] --> 000007ffff60ddb0 (mId=000007ffff60ddb0) [5b]
--- Конец кода ---
Александр Ривилис:
Подумал я еще немного и понял, что таким способом получить цепочку преобразований невозможно. Чтобы это понять достаточно сделать следующее:
1) Запустить AutoCAD, открыть Чертеж1
2) Выделить всё и выполнить команду _COPYCLIP
3) Завершить AutoCAD и запустить его повторно.
4) Выполнить команду _PASTECLIP
Очевидно, что в разных сеансах работы AutoCAD эту цепочку проследить нельзя, т.к. AcDbObjectId живут в пределах одного сеанаса работы AutoCAD.
Теперь по поводу работы в одном сеансе работы с AutoCAD. При операции _COPYCLIP:
1) создается новая пустая база (AcDbDatabase)
2) в неё выполняется WBLOCK все что выбрано в текущей базе
3) эта база сохраняется во временный файл с именем вида A$XXXXXXXX.DWG (например, A$C203F465E.DWG) и параллельно в буфер обмена (если файл удалить, то всё-равно можно вставить - файл будет создан заново из буфера обмена и из него будет производится вставка) и (!!!) база закрывается, т.е. соотвественно все её AcDbObjectId становятся невалидными. Конечно возможно, что при следующем открытии этой же базы (в операции _PASTECLIP) они будут иметь те же значения, но вероятность этого не велика. Думаю, что как раз на этот вариант вы и наткнулись, когда из трех цепочек две получились нормальными. Кстати, если бы это были не вставки блока, а например отрезки, то вероятность сохранения цепочек увеличивается. Во всяком случае у меня они сохранялись. Почему именно так происходит можно лишь догадываться.
Если включить реакторы в ARXDBG (команда REACTORS) то можно еще много чего интересного увидеть. Как-то так.
Mihanpan:
Значит, совпадение (адресов). Жаль. Придется искать другие пути.
Спасибо за помощь!
PS. Я запускал ARXDBG, но заблудился в результатах.
Навигация
Перейти к полной версии