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


Обработка нелинейных последовательностей реакторов - часть 2


Эти круги все еще открыты программой AutoCAD. Попытка удалить их с помощью функции отклика на окончание команды может привести к сбою в AutoCAD. Для того чтобы избежать этого, можно воспользоваться другой глобальной переменной, хранящей список указателей на объекты-плитки до тех пор, пока последние не будут удалены.

Для обработки нелинейной реакторной последовательности

  1. Добавьте в файл gpreact.lsp следующую функцию:
  2. (defun gp:erase-tiles (reactor / reactorData tiles tile)

    (if (setq reactorData (vlr-data reactor))

    (progn

    ;; Tiles in the path are stored as data in the reactor.

    (setq tiles (cdr (assoc 100 reactorData)))

    ;; Erase all the existing tiles in the path.

    (foreach tile tiles

    (if (and (null (member tile *Safe-to-Delete*))

    (not (vlax-erased-p tile))

    )

    (progn

    (vla-put-visible tile 0)

    (setq *Safe-to-Delete* (cons tile *Safe-to-Delete*))

    )

    )

    )

    (vlr-data-set reactor nil)

    )

    )

    )

    Эта функция будет использоваться на первом этапе удаления плиток. Обратите внимание, что что плитки в действительности не стираются: они становятся невидимыми и добавляются в глобальную переменную *Safe-to-Delete*.

  3. Добавьте в файл gpreact.lsp следующую функцию:
  4. (defun Gp:Safe-Delete (activeCommand)

    (if (not (equal

    (strcase (substr activeCommand 1 5))

    "GRIP_"

    )

    )

    (progn

    (if *Safe-to-Delete*

    (foreach Item *Safe-to-Delete*

    (if (not (vlax-erased-p Item))

    (vla-erase item)

    )

    )

    )

    (setq *Safe-to-Delete* nil)

    )

    )

    )

    Функция может быть вызвана, если неактивны команды перемещения или растягивания объектов с помощью ручек.

 




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