21
И еще мне непонятно зачем преобразовывать json в BinaryChank. Это же чисто текстовые данные, а не двоичные.Я пытался сначала через Asciistring, но по неведомой причине при обратном извлечении из xrecord у меня постоянно не возвращались два последних знака json. На разных json. Загадка.
А кто сказал, что построение систем лёгкое и весёлое занятие? Я сейчас занимаюсь разработкой под продукты другого разработчика. И архитектура AutoCAD и его API это верх совершенства.Нет более правильного способа?Если задача считать все свойства у объекта, и куда-то записать то наверное try catch самый простой способ.
программа будет работать медленнее. Но возможно скорость будет на приемлемом уровне.
В каких-то случаях try catch может не спасти от вылета автокада.
Если без try, то в ряде случаев будут ошибки, придется хорошо изучить объект, прочитать документацию, провести тестирование.
На объектах с кучей свойств может уйти много времени.
Например BlockTableRecord может быть ссылкой, и логично проверить, является ли он ссылкой IsFromExternalReference, а потом считывать путь к файлу PathName.
Да в API Автокада каждое первое свойство и метод могут вызвать исключения. А то и фатал Автокада. Надо по аккуратнее. Анализировать наиболее важные свойства прежде чем пытаться извлекать другие. Если IsInvalid, то зачем вы пытаетесь читать другие свойства? Transparency вроде не фаталит, но зачем? Зачем читать Alpha, если и так известно что IsClear, IsSolid, ByLayer или ByBlock ? Отлов исключений программу точно не ускорит.Можно тогда узнать значение свойства IsInvalid?
public TransparencyDto Map()
{
Document acDoc = Application.DocumentManager.MdiActiveDocument;
if (_transparency.IsInvalid)
{
acDoc.Editor.WriteMessage($"\nTransparency is invalid");
return new TransparencyDto
{
Alpha = 255,
IsByAlpha = false,
IsByBlock = false,
IsByLayer = false,
IsClear = false,
IsInvalid = true,
IsSolid = false
};
}
else
{
acDoc.Editor.WriteMessage($"\nTransparency is valid:");
}
var transparencyDto = new TransparencyDto();
try { transparencyDto.Alpha = _transparency.Alpha; } catch { acDoc.Editor.WriteMessage($"\nException 1"); }
;
try { transparencyDto.IsByAlpha = _transparency.IsByAlpha; } catch { acDoc.Editor.WriteMessage($"\nException 2"); }
;
try { transparencyDto.IsByBlock = _transparency.IsByBlock; } catch { acDoc.Editor.WriteMessage($"\nException 3"); }
;
try { transparencyDto.IsByLayer = _transparency.IsByLayer; } catch { acDoc.Editor.WriteMessage($"\nException 4"); }
;
try { transparencyDto.IsClear = _transparency.IsClear; } catch { acDoc.Editor.WriteMessage($"\nException 5"); }
;
try { transparencyDto.IsInvalid = _transparency.IsInvalid;} catch { acDoc.Editor.WriteMessage($"\nException 6"); }
try { transparencyDto.IsSolid = _transparency.IsSolid; } catch { acDoc.Editor.WriteMessage($"\nException 7"); }
;
return transparencyDto;
}
Transparency is valid:
Exception 1
Exception 5
Exception 7
Нет более правильного способа?Если задача считать все свойства у объекта, и куда-то записать то наверное try catch самый простой способ.
Но почему так ума не приложу1. Попробуй добавить блокировку документа. Она нужна, если редактируешь Database.