ObjectARX, AutoCAD. Среда программирования библиотеки C++

         

Данные " в документ "


Приложения не могут сохранять данные " в документ " в глобальных или статических переменных.

Это включает объекты AcDbDatabase, объекты AcDbObject, AcDbObjectId значения, значения переменной заголовка, значения переменной документа, наборы выбора, и другая документированная - определенная информация. Любое возникновение данных " в документ " в глобальных и статических переменных могло бы быть разрушено, если ваше приложение - работают в множественных параллельных сеансах редактирования.

Чтобы избегать коррупции данных, Вы можете формировать поведение команды и данные в классы. Образец класса может инициализироваться для каждого запроса к команде. Поскольку команда приобретает документированные - определенные данные, это сохраняет ее собственные копии " в случай " этого данными.

Другое решение состоит в том, чтобы формировать все глобальные и статические данные в структуру или класс. Копия данных инициализируется для каждого документа. Местный указатель на соответствующий образец установлен в каждой точке входа в приложении. Местный указатель тогда используется, чтобы обратиться к данным " в документ ".

Используйте documentActivated () реактор, чтобы переключить между образцами скрытых данных.

Вы можете создавать данные " в документ " на как - необходимом основании, или создавать это, когда приложение сначала загружено. Если создано на как - необходимом основании, поскольку зарегистрированные команды приложения или реакторы вызваны{*названы*}, текущий документ определен, и запрос сделан, чтобы получить данные документа. Если это не найдено, это создано в то время.

Создавать данные " в документ " когда приложение сначала загружено, использование AcApDocumentIterator в AcRx:: kInitAppMsg обработчик, чтобы получить список всех открытых документов. Тогда используйте AcApDocManagerReactor:: documentCreated () чтобы знать, когда создать дополнительные данные " в документ " для документов, открыл после того, как приложение загружено.

Какой бы ни метод используется, чтобы ассигновать{*разместить*} данные " в документ ", приложение должно использовать AcApDocManagerReactor::documentToBeDestroyed () реактор, чтобы знать, когда удалить данные. Приложения должны также удалить остающиеся данные в течение AcRx:: kUnloadAppMsg обработчик.



Содержание раздела