Сообщество программистов Autodesk в СНГ
ADN Club => AutoCAD .NET API => Тема начата: Алексей Терно от 19-04-2019, 15:18:52
-
Как известно, команда Audit обрезает строки в XData до 255 символов. Есть ли какие-нибудь способы обезопасить XData в своих объектах от обрезки (кроме дробления длиной строки на более короткие)?
-
Создать для своих данных класс-провайдер и хранить данные как бинарные
-
Как известно, команда Audit обрезает строки в XData до 255 символов. Есть ли какие-нибудь способы обезопасить XData в своих объектах от обрезки (кроме дробления длиной строки на более короткие)?
Только дробить и ни в коем случае не использовать длинные строки!!!
-
Только дробить и ни в коем случае не использовать длинные строки!!!
К сожалению, уже поздно ((( Я забыл про эту особенность и реализовал длинные строки, а переделывать уже поздно - модулем уже пользуются.
Есть шальная мысль: перед выполнением команды Audit запомнить XData для всех своих объектов, а после завершения - записать обратно.
-
Есть шальная мысль: перед выполнением команды Audit запомнить XData для всех своих объектов, а после завершения - записать обратно.
Она совершенно шальная. Представь себе, что AUDIT выполнят без твоего загруженного модуля??? Кстати есть еще команда _RECOVERY, которая проверяет файл перед загрузкой его в AutoCAD. Что ты с ней будешь делать?
Совет - объясниться с пользователями и переделать модуль.
-
Я забыл про эту особенность и реализовал длинные строки, а переделывать уже поздно - модулем уже пользуются.
Добрый день!
Кроме обрезания AUDIT и RECOVER, какие были проблемы из-за превышения длины строк?
Утрата данных? Порча файлов? Помехи работе команд? Вылеты AutoCAD? Или др.?
-
какие были проблемы из-за превышения длины строк?
Никаких. По личному опыту - все прекрасно работает. Пользовался длительное время и сейчас не ограничиваю принудительно строки - сколько пользователь хочет, столько пусть и хранит. В документации только написал предупреждение.
Но я конечно не призываю так делать. Рано или поздно кто-то вызовет Audit.
-
А как обстоит дело с ограничением длины названий Apps?
В документации она ограничена 31 символом-байтом:
Application names can be up to 31 bytes long (the 32nd byte is reserved for the null character)
NoteDo not add a 1001 group into your extended data because AutoCAD assumes it is the beginning of a new application extended data group
- http://docs.autodesk.com/ACD/2011/ENU/filesDXF/WS1a9193826455f5ff18cb41610ec0a2e719-7943.htm
Или:
1001 (also a string value). Application names can be up to 31 bytes long (the 32nd byte is reserved for the null character) and must adhere to the rules for symbol table names (such as layer names). An application name can contain letters, digits, and the special characters $ (dollar sign), - (hyphen), and _ (underscore). It cannot contain spaces.
- https://help.autodesk.com/view/ACD/2022/ENU/?guid=GUID-3481BF7B-73CB-4FD5-B421-C25BE92C6D56
В другом же месте:
Application name Текстовая строка ASCII длиной до 255 байт (код группы 1000).
- https://knowledge.autodesk.com/ru/support/autocad/learn-explore/caas/CloudHelp/cloudhelp/2019/RUS/AutoCAD-Core/files/GUID-F0299B36-232F-446E-9F81-98F300B36991-htm.html
В хелпах 2012-2019 это повторяется.
Я сначала решил, что это описка-случайно.
Но та же XDATA из Express позволяет создавать названия длиннее 32 символов-байт.
Я пробовал и 40, и 250, и 300 символов. Ни AUDIT, ни RECOVER не реагируют на длинные названия Apps вообще. COPY тоже их полностью сохраняет.
Вероятно, больше 255 не стоит.
Но все-таки 31 или 255?
-
В другом же месте:
Цитировать
Application name Текстовая строка ASCII длиной до 255 байт (код группы 1000).
Код группы 1000 - это просто строка, а не имя приложения. Так что там ошибка. Имя приложения - это группа 1001.
Но все-таки 31 или 255?
31.
-
Почитай https://knowledge.autodesk.com/ru/support/autocad-lt/learn-explore/caas/CloudHelp/cloudhelp/2021/RUS/AutoCAD-LT/files/GUID-8EC065EC-D551-4E02-9C5A-A33D1DB80B05-htm.html
Это относится и к именам приложений. Т.е. теоретически возможно и 255, но достаточно пользователю (или программе) переключить EXTNAMES в 0, или сохранить в старой версии AutoCAD, как имена приложений посыпятся. Так что не вижу смысла рисковать. Ну и кроме того 31 символа вполне достаточно для создания уникального имени приложения.
-
Почитай https://knowledge.autodesk.com/ru/support/autocad-lt/learn-explore/caas/CloudHelp/cloudhelp/2021/RUS/AutoCAD-LT/files/GUID-8EC065EC-D551-4E02-9C5A-A33D1DB80B05-htm.html
Это относится и к именам приложений. Т.е. теоретически возможно и 255, но достаточно пользователю (или программе) переключить EXTNAMES в 0, или сохранить в старой версии AutoCAD, как имена приложений посыпятся.
Спасибо дважды!
И за EXTNAMES. (У AutoCAD на каждую букву и символ есть переменные? :D)
И за большую определенность в понимании что есть "старые версии".
Т.е. водораздел - R2000, R14?
Я создал Apps с названиями в 100 и в 150 символов, установил EXTNAMES в 0. В т.ч. при EXTNAMES в 0 создал командой XDATA из Express названия в 150 символов.
Но ничего не заметил.
Ни XDLIST не показывает никаких изменений-урезаний.
Ни AUDIT с RECOVER ничего не изменяют, не видят ошибок. Ни даже COPY не урезает.
Что бы должно происходить, где смотреть, искать потери-нарушения?
-
Что бы должно происходить, где смотреть?
Недокументировано. Поэтому происходить может что угодно.