Сообщество программистов Autodesk в СНГ
ADN Club => AutoCAD .NET API => Тема начата: Алексей Терно от 02-05-2019, 22:00:05
-
У моих объектов есть выноска с абсолютными координатами и она не зависит от положения самого объекта. При создании копии этого объекта, координата выноски остается на месте выноски исходного объекта. Чтобы это исправить я добавил в объект два свойства - "Дельта X" и "Дельта Y", которые пересчитываются при перестроении объекта. Таким образом у меня есть всегда актуальные значения смещения метки относительно самого объекта. Далее в событии Document.Database.ObjectAppended я сохраняю id всех объектов, которые были добавлены с помощью команды PASTE и в событии Document.Editor.EnteringQuiescentState по этим id я обновляю координаты выноски с учетом смещения. В результате, при копировании объекта, выноска строится с таким же смещением, как и в исходном объекте, что мне и нужно было.
Но вот после команды PASTE, когда объект еще под курсором и не добавлен в чертеж, выноска улетает куда-то в сторону, а после вставки в чертеж она занимает правильное положение. Как мне отловить этот момент, чтобы и во временной графике перестроить выноску?
-
Но вот после команды PASTE, когда объект еще под курсором и не добавлен в чертеж, выноска улетает куда-то в сторону, а после вставки в чертеж она занимает правильное положение. Как мне отловить этот момент, чтобы и во временной графике перестроить выноску?
При выполнении команды PASTE создаётся блок с именем A$XXXXXXXX, он вставляется и висит на курсоре. Вот его и нужно отслеживать.
-
При выполнении команды PASTE создаётся блок с именем A$XXXXXXXX, он вставляется и висит на курсоре
При обработке события Document.CommandWillStart нет блока с таким именем. Наверное, он создается позже? Он же в БД создается?
-
При обработке события Document.CommandWillStart нет блока с таким именем. Наверное, он создается позже? Он же в БД создается?
Конечно он создаётся позже. После того, как команда запущена, но перед тем, как на курсоре висит вставка. Создаётся в текущей базе. Запусти в MGDDBG отслеживание событий и сам всё увидишь.
-
Я выбрал наиболее простой для себя вариант - я пересчитываю значения смещения метки каждый раз при перемещении самого объекта или метки. Этот вопрос решен.
По теме:
Я вроде бы нашел подходящее событие - Document.Database.BeginDeepClone, но пока не было возможности полноценно проверить.