Сообщество программистов Autodesk в СНГ
ADN Club => ObjectARX => Тема начата: Debalance от 17-11-2020, 11:14:24
-
Бэкграунд:
1. Итерирую содержимое записи от позиции start() до позиции done().
2. Нахожу последний (предшествующий позиции done()) валидный итератор записи.
3. Сохраняю этот итератор в переменной LastIter.
4. Далее осуществляю добавление в запись неких новых объектов.
Задача:
Хочу считать из записи все последние добавленные объекты начиная с позиции ++LastIter.
Вопросы:
1. Сохранит ли валидность итератор LastIter после добавления в запись новых объектов?
2. Будет ли корректным такой вариант считывания всех новых данных с позиции ++LastIter до позиции done()?
-
Вопросы:
1. Сохранит ли валидность итератор LastIter после добавления в запись новых объектов?
2. Будет ли корректным такой вариант считывания всех новых данных с позиции ++LastIter до позиции done()?
Нет. Но есть значительно более надежный способ:
1. Запоминаешь AcDbObjectId idLast последнего.
2. После добавления новых создаёшь новый итератор и используешь AcDbBlockTableRecordIterator::seek(idLast), т.е. позиционируешься на старый последний.
-
2. После добавления новых создаёшь новый итератор и используешь AcDbBlockTableRecordIterator::seek(idLast), т.е. позиционируешься на старый последний.
Понял. Т.е. все последующие новые Id будут гарантированно располагаться за последним старым?
-
Debalance,
Есть одно исключение, но оно не должно тебя интересовать. Это когда вызывается метод обмена AcDbHandle у двух примитивов.