Всем привет. Хочу понять, как такая проблема вообще может случится и кто виноват - автокад или плагин.
Суть такова - я в примитив записываю строковые данные, которые представляют собой 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"
Я уточнял у пользователя - во время работы в автокаде происходила фатальная ошибка. Возможно ли такое, что ошибка произошла ровно в тот момент, когда происходила фиксация транзакции?
Пытаюсь понять, как вообще такой эффект может произойти? И можно ли его вызвать самому?