Всем привет. Хочу понять, как такая проблема вообще может случится и кто виноват - автокад или плагин.
Суть такова - я в примитив записываю строковые данные, которые представляют собой json. Сам json получается так:
var resultBuffer = new ResultBuffer();
Dictionary<string, object> propertiesDataDictionary = new Dictionary<string, object>();
// заполнение данными....
using (MemoryStream stream = new MemoryStream())
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Dictionary<string, object>),
new DataContractJsonSerializerSettings() { UseSimpleDictionaryFormat = true });
serializer.WriteObject(stream, propertiesDataDictionary);
byte[] bytes = stream.ToArray();
string json = Encoding.UTF8.GetString(bytes, 0, bytes.Length);
AcadHelpers.WriteMessageInDebug($"Length of json: {json.Length}");
resultBuffer.Add(new TypedValue((int)DxfCode.ExtendedDataAsciiString, json));
}
return resultBuffer;
Добавление в XData выглядит так:
using (var tr = AcadHelpers.Database.TransactionManager.StartTransaction())
{
var ent = tr.GetObject(axis.BlockId, OpenMode.ForWrite);
ent.XData = axis.GetDataForXData();
tr.Commit();
}
Результат должен быть примерно таким:
{"LineType":"осевая","LineTypeScale":1,"TextStyle":"Standard","MarkersPosition":"Bottom","Fracture":10,"BottomFractureOffset":0,"TopFractureOffset":0,"MarkersDiameter":10,"MarkersCount":1,"FirstMarkerType":"Type1","SecondMarkerType":"Type1","ThirdMarkerType":"Type1","BottomOrientMarkerVisible":false,"TopOrientMarkerVisible":false,"OrientMarkerVisibilityDependency":false,"OrientMarkerType":"Type1","ArrowsSize":3,"TextHeight":3.5,"FirstTextPrefix":"","FirstText":"1","FirstTextSuffix":"","SecondTextVisibility":false,"SecondTextPrefix":"","SecondText":"","SecondTextSuffix":"","ThirdTextVisibility":false,"ThirdTextPrefix":"","ThirdText":"","ThirdTextSuffix":"","BottomOrientText":"","TopOrientText":"","BottomLineAngle":0,"TopLineAngle":0,"EndPoint":"0$-642.494183297735$0","LayerName":"По умолчанию","Scale":"1:30","StyleGuid":"00000000-0000-0000-0000-000000000000"}
Да, строка длинная, но долго тестировал - проблем не было.
Сегодня мне скинули чертеж, в котором в примитиве вот такие данные:
{"LineType":"осевая","LineTypeScale":1,"TextStyle":"_ГОСТ","MarkersPosition":"Bottom","Fracture":10,"BottomFractureOffset":0,"TopFractureOffset":0,"MarkersDiameter":10,"MarkersCount":1,"FirstMarkerType":"Type1","SecondMarkerType":"Type1","ThirdMarkerType"
Я уточнял у пользователя - во время работы в автокаде происходила фатальная ошибка. Возможно ли такое, что ошибка произошла ровно в тот момент, когда происходила фиксация транзакции?
Пытаюсь понять, как вообще такой эффект может произойти? И можно ли его вызвать самому?