/// <inheritdoc /> public override void OnGripStatusChanged(ObjectId entityId, Status newStatus) { try { // При начале перемещения запоминаем первоначальное положение ручки // Запоминаем начальные значения if (newStatus == Status.GripStart) { _gripTmp = GripPoint; } // При удачном перемещении ручки записываем новые значения в расширенные данные // По этим данным я потом получаю экземпляр класса LevelMark if (newStatus == Status.GripEnd) { using (var tr = AcadUtils.Database.TransactionManager.StartOpenCloseTransaction()) { var blkRef = tr.GetObject(SecantNodalLeader.BlockId, OpenMode.ForWrite, true, true); using (var resBuf = SecantNodalLeader.GetDataForXData()) { blkRef.XData = resBuf; } tr.Commit(); } SecantNodalLeader.Dispose(); } // При отмене перемещения возвращаем временные значения if (newStatus == Status.GripAbort) { if (_gripTmp != null) { switch (GripName) { case GripName.InsertionPoint: SecantNodalLeader.InsertionPoint = _gripTmp; break; case GripName.LeaderPoint: SecantNodalLeader.EndPoint = _gripTmp; break; } } } base.OnGripStatusChanged(entityId, newStatus); } catch (Exception exception) { if (exception.ErrorStatus != ErrorStatus.NotAllowedForThisProxy) { ExceptionBox.Show(exception); } } }