Всем привет. Пытаюсь сделать ручку удаления вершины в моем объекте (внутри полилиния).
В GripData в методе OnGripStatusChanged удаляю вершину примерно так:
public override void OnGripStatusChanged(ObjectId entityId, Status newStatus)
{
try
{
if (newStatus == Status.GripStart)
{
if (GripIndex != 0)
{
GroundLine.MiddlePoints.RemoveAt(GripIndex - 1);
}
GroundLine.UpdateEntities();
GroundLine.BlockRecord.UpdateAnonymousBlocks();
using (var tr = AcadHelpers.Database.TransactionManager.StartOpenCloseTransaction())
{
var blkRef = tr.GetObject(GroundLine.BlockId, OpenMode.ForWrite);
using (var resBuf = GroundLine.GetParametersForXData())
{
blkRef.XData = resBuf;
}
tr.Commit();
}
GroundLine.Dispose();
}
}
catch (Exception exception)
{
ExceptionBox.Show(exception);
}
}
При клике по ручке автокад падает с фатальной ошибкой.
При отладке проверил - все работает на ура - вершина удаляется и мой объект перерисовывается как надо. Затем сразу срабатывает метод GetGripPoints() в котором вроде все проходит нормально - ручки добавляются в коллекцию ручек и когда я дохожу до конца метода, то появляется ошибка:
Приложение не поддерживает оперативную (JIT)
отладку. Подробная информацию приводится в конце данного сообщения.
************** Текст исключения **************
System.ArgumentException: Элемент с тем же ключом уже был добавлен.
в System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
в System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
в AcMgGripOverrule.getGripPoints(AcMgGripOverrule* , AcDbEntity* pSubject, AcArray<AcDbGripData \*\,AcArrayMemCopyReallocator<AcDbGripData \*> >* grips, Double curViewUnitSize, Int32 gripSize, AcGeVector3d* curViewDir, Int32 bitflags)
Посмотрел GripDataCollection - она не использует Dictionary. Тогда вопрос - где происходит ошибка?