public class BreakLineGrip : MPCOGrips.MPCOGripData
{
// Ссылка на ObjectId блока
public ObjectId BlkRef { get; set; }
// Экземпляр класса, связанный с этим блоком
public BreakLine breakLine { get; set; }
// Имя ручки
public BreakLineGripName GripName { get; set; }
// Временное значение первой ручки
private Point3d _startGripTmp;
// временное значение последней ручки
private Point3d _endGripTmp;
public override void OnGripStatusChanged(ObjectId entityId, Status newStatus)
{
try
{
// Запоминаем начальные значения
if (newStatus == Status.GripStart)
{
if (GripName == BreakLineGripName.StartGrip)
_startGripTmp = GripPoint;
if (GripName == BreakLineGripName.EndGrip)
_endGripTmp = GripPoint;
if (GripName == BreakLineGripName.MiddleGrip)
{
_startGripTmp = breakLine.StartGrip;
_endGripTmp = breakLine.EndGrip;
}
}
// Сохраняем данные в расширенные данные примитива
if (newStatus == Status.GripEnd)
{
using (var tr = AcadHelpers.Database.TransactionManager.StartTransaction())
{
var blkRef = tr.GetObject(breakLine.BlockId, OpenMode.ForWrite);
using (var resBuf = breakLine.GetParametersForXData())
{
blkRef.XData = resBuf;
}
tr.Commit();
}
}
// При отмене перемещения возвращаем временные значения
if (newStatus == Status.GripAbort)
{
if (_startGripTmp != null & GripName == BreakLineGripName.StartGrip)
breakLine.EndPoint = GripPoint;
if (GripName == BreakLineGripName.MiddleGrip & _startGripTmp != null & _endGripTmp != null)
{
breakLine.InsertionPoint = _startGripTmp;
breakLine.EndPoint = _endGripTmp;
}
}
base.OnGripStatusChanged(entityId, newStatus);
}
catch (Exception exception)
{
MpExWin.Show(exception);
}
}
}