Группы пользователей Autodesk


Общее планирование реакторного процесса - часть 2


При первом стирании полилинии все работает правильно. Указатель на реактор хранится в gp:outline-erased. При вызове функции gp:command-ended удаляются все плитки, связанные с полилинией, к которой был прикреплен реактор. После этого пользователь решает удалить две дорожки. В результате приложение получает два вызова функции gp:outline-erased, по одному на каждую стираемую полилинию. Здесь возникают две потенциальные проблемы:

  • При выполнении функции setq для переменной *reactorsToRemove* необходимо добавить к этой переменной указатель на реактор, не стирая уже имеющихся в ней значений. Это означает, что переменная *reactorsToRemove* должна иметь структуру списка, в который можно добавлять указатели на реакторы. Таким образом, можно будет хранить несколько указателей на реакторы по количеству дорожек, удаляемых пользователем с помощью одной команды.
  • При каждом вызове функции gp:command-will-start, обозначающей начало новой последовательности команд, необходимо сбрасывать значение переменной *reactorsToRemove* в nil. Это необходимо, чтобы глобальная переменная не хранила указатели на реакторы после предыдущих команд "Стереть".
  • Невыполнение этих требований (корректная структура данных в виде списка и сброс значений глобальной переменной) может привести к непредсказуемому поведению программы. В случае реакторов непредвиденные результаты могут стать причиной неустранимой ошибки в сеансе AutoCAD.

Ниже приведена цепь событий при стирании пользователем двух парковых дорожек одной командой. Следует обратить внимание на глобальные переменные:

  • Вызвать команду стереть. Запускается функция gp:command-will-start. Переменной *reactorsToRemove* присваивается значение nil.
  • Выбрать две полилинии. Приложение еще не получило сигнала.
  • Нажать ENTER для стирания двух выбранных полилиний.
  • Приложение получает отклик на gp:outline-erased для одной из полилиний. Указатель на реактор добавляется в пустую глобальную переменную *reactorsToRemove*.

    Приложение получает отклик на gp:outline-erased для второй полилинии.


    Начало  Назад  Вперед