Всем привет! Эта проблема не дает мне покоя уже оооочень много времени!
Иногда пишет просто фатальную ошибку, иногда - недостаточно памяти
Основных загвоздок две:
1. Ошибка происходит во время Jig, поэтому не могу использовать отладку
2. (
ВАЖНО) Ошибка происходит только в некоторых файлах! Причем, чем они отличаются от других - так сразу и не поймешь
Краткие действия функции:
1. Из файла на жестком диске копируется таблица в текущий чертеж
2. Пользователь указывает точку и таблица туда перемещается
В общем - банальная вставка таблицы
После долгих мучений и всяческих переделок я добавил в функцию возможность отключения динамической отрисовки таблицы на курсоре. Иными словами - без использования Jig. В этом случае - проблем не наблюдается
Сам метод примерно такой:
private void InsertTable(string pointAligin, ContentControl selectedItem, bool dynamicInsert)
{
var doc = AcApp.DocumentManager.MdiActiveDocument;
var db = doc.Database;
// Блокируем документ
using (doc.LockDocument())
{
using (var tr = doc.TransactionManager.StartTransaction())
{
// Копируем таблицу из файла ресурсов - для вопроса не важно
// Масштабируем до перемещения для правильного отображения
var mat = Matrix3d.Scaling(Scale(CbScales.SelectedItem.ToString()), tbl.Position);
tbl.TransformBy(mat);
if (dynamicInsert)
{
// Перемещаем с джигой
var jig = new TableDrag();
var jigresult = jig.StartJig(tbl, pointAligin);
if (jigresult.Status != PromptStatus.OK)
{
tbl.Erase();
return;
}
tbl.Position = jig.TablePositionPoint();
doc.TransactionManager.QueueForGraphicsFlush();
}
// Потом настройка таблицы - для вопроса не важно
tr.Commit();
}
}
}
Ну и "джига":
Извините, вам запрещён просмотр содержимого спойлеров.
Изначально в коде использовался EntityJig. Потом я изменил на DrawJig - случаи возникновения ошибок стали реже
Единственная надежда которая осталась - что более опытные разработчики "на глаз" смогут выдвинуть правильное предположение
Важное замечание: Ошибка возникает при работе в AutoCad 2016. Попробовал - "больной" файл пересохранил в 2010 и проверил - ошибки нет. 2011-2015 не пробовал. В 2017 автокаде ошибки тоже нет!