Слишком длинная строка в dxf файле
По какому принципу фомируются метки объектов под кодами 5 и 330?
Thượng Tá Quân Đội Nhân Dân Việt Nam
По какому принципу фомируются метки объектов под кодами 5 и 330? |
По принципам, указанным в DXF Reference. Его надо долго изучать, чтобы понять, что этим не стоит заниматься с помощью "обычного блокнота".
Когда DXF генерирует AutoCAD, он знает, как присваивать handle. Когда DXF генерирует человек, он должен знать как это делать. Если еще хочется помучиться, можно почитать старую книгу Джампа, в которой он утверждал, что настоящие программисты работают с DXF, и только мазохисты с DWG. Вся книга про то, как писать на C DXF. И только в конце автор обнаружил, что есть и другие способы для работы (Автолисп, например).
Гы про i+1 ты это правильно определил.
ток фишка в том что Handle раздаются не только в блоке Entities но и в ряде других(практически во всех, на сколько помню).
Вообщем, что я делаю - сначала выборку по файлу, в поисках наибольшего Handle, а потом к нему прибавляем еще 50, что б точняк совпадающих не получить.
и дальше как и сказал i+1 в шеснадцатеричной системе.
Хотя вроде как в описании dxf`а Handle по идее необязательное поле, насколько я понял из Описания dxf формата. Но отвязаться от него так и не удалось.
Вообщем как то так.
А вообще я чаз от Dxf`а ухожу на ActiveX элементы черчения. Уж очень удобно и проработанно в Аутодеске по это этой теме хелпу сделали. Запускаешь автокад программой, и в нем же отрисовываешь все.
Гы апдейт
Про Dxf смотреть в Акаде(2007, в прочих версиях врочем это тоже есть, там же или почти там же)
Help\Additional Resources \Developer Help
Про ActiveX смотреть там же
про поля выдержки из хелпа
5
Handle (тобишь 16ти указатель. добавляется по принципу i+1)
330:
Soft-pointer ID/handle to owner dictionary (optional) честно хз что. я его статичным оставляю. в проге у меня идет ко всем поликам значение - 1F, Акад спокойно хавает.
Пытаюсь сделать экспорт из своей проги в акад, невыходит. постоянно вылетает "INTERNAL ERROR: !dbutil.cpp@826: EHandleInUse". хэндлы все разные, связи сохранены. Может ктонибудь сталкивался?
Вылечилось редактированием переменной HANDSEED. Спасибо.
А что за переменная? Можно подробнее?
В dxf файле, в разделе переменных, в документации про нее ниче ненашел, походу автокад от нее придумывает по какомуто алгоритму следующий handle. У меня в файле хэндлы нчинались с 8 и перли дальше с +1. в handseed было 92, при загрузке автокад вываливался ничего путнего не сообщая. Прописал в хандсеед 2, теперь грузится, в комадной строке при этом ругается чтото вроде "Updating handle seed". Да, проверяю на акад2004, формат dxf тоже 2004.
Из ObjectARX Help-а. ? The HANDSEED is a counter which maintains the next available handle number. Handles are 64-bit integers represented in DXF and LISP/ADS in hexadecimal form as a string. In hexadecimal, a 64-bit integer can be up to 16 digits.
и все таки как определить величину HANDSEED
9
$HANDSEED
5
XXXXX
> Evgeny
Уточни вопрос. Что ты имеешь в виду под "определить"? В приведенном тобой куске кода HANDSEED равно XXXXX. Если ты сам формируешь dxf файл то его значение должно быть больше, чем самый большой handle внутри dxf-файла (шестнадцатиричное представление).
Я формирую файл сам. Как определить самый большой handle?
> Evgeny
Самый большой handle - это самое большое значение группы 5 в dxf-файле. Так как ты сам формируешь файл, то и значение группы 5 для кажого объекта/примитива прописываешь сам - так что ты его должен знать.
Еще один достаточно простой вариант - посчитай количество строк в DXF-фале, переведи это число в шестнадцатиричное и присвой его HANDSEED. Это будет заведома большее число, чем максимальный handle - это допустимо.
у меня с кодом 5 всего 76 значений, строк 4416 (1140h), а в HANDSEED после исправлений В10
Как быть?
> Evgeny
Как угодно. Еще раз повторяю - если значение которое ты поместишь в поле HANDSEED больше любой самой большой метки (handle) из файла, то это совершенно нормально. Просто в нумерации меток после добавления к чертежу новых примитивов будет "дырка", но это AutoCAD допускает.
Спасибо! Поставлю по максимуму FFF.
У меня сформированный файл открывается нормально, только информация с него через буфер не копируется
> Evgeny
Если через буфер не копируется - значит что-то сформировано не вполне корректно. А почему ты решил, что FFF - это максимум?
не максимум конечно, пусть будет 65535 (FFFFh), это не принципиально (не видел большего числа).
Сформировано некорректно только из-за этих вот кодов.
> Evgeny
Только что из спортивного интереса откыл в AutoCAD 2006 первый попавшийся под руку чертеж, сохранил в его в DXF, изменил HANDSEED на FFFF (было меньшее значение). Открыл его в AutoCAD и все нормально копируется/вставляется через буфер обмена. Что не так? :)
Так что копай в другую сторону.
в какую сторону копать? таже проблема. автокад грузит джф не ругнувшись, клипбоард не работает, сохраняешь в двг - работает
> zub
Для начала попробуй загрузить свой dxf-файл в AutoCAD и сохрани его тоже в формате dxf. Ну и сравни эти файлы.
Клипбоард начинает работать только после сохранения в dwg, если сохранить в dxf2000 из автокада и заново открыть неработает.
формирую DXF2000 так - читаю пустой автокадный dxf2000 файл построчно и сохраняю в новый файл. в секции блоков, слоев, примитивов вписываю свои объекты. запоминаю старые хендлы, вместо них подставляю новые , инкриментируемые с каждым объектом, храню соответствие старый-новый хэндл. если в автокадовском файлевстречается ссылка на старыйхендл подставляю вместо него новый. на выходе получаю DXF с возрастающими хэндлами и сохраненными ссылками по хэндлам. обрабатываю 5,320,330,340,350,1005,390,360,105 dxf группы может какую забыл?
Я написал метод, позволяющий создать файл dxf с некоторыми графическими объектами: линиями, многоугольниками, текстами . Все работает отлично, и мой dxf можно прочитать из любой программы, которую я пробовал.
Проблема
Теперь я хочу добавить новую сущность: текст, ограниченный прямоугольником. Как и другие сущности, я искал подходящий эквивалент dxf и следил за эта таблица кодов группы. Этот МТЕКСТ правильно отображается в каждой онлайн-программе чтения dxf, которую я пробовал, но не в AutoCad: когда я пытаюсь открыть свой dxf с помощью МТЕКСТА, возникает ошибка и ничего не отображается. В чем может быть проблема?
Моя попытка
Вот часть MText моего файла dxf. Чтобы было понятнее, я добавил комментарии, отмеченные // (которых, конечно, нет в файле):
Я также пытался добавить все необязательные теги, но результат тот же .
Выход
Стандартный просмотрщик dxf:
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно.
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей.
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то.
Ответы 1
DXF R13 + требует уникальная ручка для каждого объекта (групповой код 5)
DXF R2000 + требует ручка владельца (групповой код 330). DXF R13 / 14 может не нуждаться в ручке владельца. Дескриптор владельца - это дескриптор БЛОЧНОЙ ЗАПИСИ макета, в котором находится объект. Для DXF R13 + ЗАПИСЬ БЛОКА является центральной структурой для управления блоками и макетами, потому что ЗАПИСЬ БЛОКА «владеет» всеми объектами, а не БЛОК или МАКЕТ.
DXF R13 + разделяет данные разных подклассов (внутреннее C++ AutoCAD) с помощью маркеры подкласса. Отсутствуют два маркера подкласса, первый (100, "AcDbEntiy"), который отмечает начало общих свойств DXF, таких как слой и тип линии. Второй - создатель (100, «AcDbMText») для начала специальных атрибутов MTEXT.
Ваш код (до MTEXT) мог работать, потому что вы использовали только объекты DXF R12, а AutoCAD игнорировал функции из более поздних версий DXF.
Спасибо! Я действительно верю, что обновлю код до более новой версии DXF.
Ответы 1
DXF R13 + требует уникальная ручка для каждого объекта (групповой код 5)
DXF R2000 + требует ручка владельца (групповой код 330). DXF R13 / 14 может не нуждаться в ручке владельца. Дескриптор владельца - это дескриптор БЛОЧНОЙ ЗАПИСИ макета, в котором находится объект. Для DXF R13 + ЗАПИСЬ БЛОКА является центральной структурой для управления блоками и макетами, потому что ЗАПИСЬ БЛОКА «владеет» всеми объектами, а не БЛОК или МАКЕТ.
DXF R13 + разделяет данные разных подклассов (внутреннее C++ AutoCAD) с помощью маркеры подкласса. Отсутствуют два маркера подкласса, первый (100, "AcDbEntiy"), который отмечает начало общих свойств DXF, таких как слой и тип линии. Второй - создатель (100, «AcDbMText») для начала специальных атрибутов MTEXT.
Ваш код (до MTEXT) мог работать, потому что вы использовали только объекты DXF R12, а AutoCAD игнорировал функции из более поздних версий DXF.
Спасибо! Я действительно верю, что обновлю код до более новой версии DXF.
Пока удалось заметить разницу в изменении цвета (была 255,255,255 стала "белая" со значком черно-белая) штриховки во вложенных и просто блоках
Вопрос очень непраздный. Данная операция помогает в избавлении от штемпеля "учебная версия" в одном конкретном случае. При "классическом способе" dxf файл не открывается Вываливается ошибка "При чтении из XRECORD, начиная со строки 9876080, была обнаружена
следующая ошибка:
Преждевременный конец объекта
Испорченный или неполный входной DXF-файл -- импорт чертежа не выполнен"
СПДС и проксиобъектов в файле вроде нет, отсутствующих shx файлов тоже нет.
Под "ненужным" я имею в виду, например, элементы из пространства листа; или настройки стилей объектов вертикалок типа АА / МЕР / Civil etc.
Не найдены неиспользуемые блоки.
Не найдены неиспользуемые слои.
Не найдены неиспользуемые типы линий.
Не найдены неиспользуемые текстовые стили.
Не найдены неиспользуемые файлы форм.
Не найдены неиспользуемые размерные стили.
Не найдены неиспользуемые стили мультилиний.
Не найдены неиспользуемые стили печати.
Не найдены неиспользуемые стили таблиц.
Не найдены неиспользуемые материалы.
Не найдены неиспользуемые визуальные стили.
Не найдены неиспользуемые стили мультивыносок.
Не найдены неиспользуемые группы.
Снова выполнить все свои действия.
ИМХО можно и сам файл предоставить. Если файло секретное, скинь мне на мыло (в ком.строке выполни код:
(strcat (apply 'strcat (mapcar 'chr (reverse '(108 105 97 109 103 64 48 48 48 50 99 108 98 112 107)))) ".com")
При открытии dwg AutoCAD сильно ругался на отсутствующие файлы шрифтов. Кстати, 90% типов линий у меня тоже нет. Мне кажется, что это может быть одной из причин "неоткрывания" dxf (хотя и не уверен).
У моей коллеги на работе возникла проблема.
При любой операции (перемещение, копирование и др.) AutoCAD 2011 требует нажатия Enter.
Сброс / импорт другого профиля не помогает.
А можно скрин с тем как он предлагает?
Значит на стационаре стоит какой нибудь фаервол или инет он получает по другому в отличии от notebook
Я написал метод, позволяющий создать файл dxf с некоторыми графическими объектами: линиями, многоугольниками, текстами . Все работает отлично, и мой dxf можно прочитать из любой программы, которую я пробовал.
Проблема
Теперь я хочу добавить новую сущность: текст, ограниченный прямоугольником. Как и другие сущности, я искал подходящий эквивалент dxf и следил за эта таблица кодов группы. Этот МТЕКСТ правильно отображается в каждой онлайн-программе чтения dxf, которую я пробовал, но не в AutoCad: когда я пытаюсь открыть свой dxf с помощью МТЕКСТА, возникает ошибка и ничего не отображается. В чем может быть проблема?
Моя попытка
Вот часть MText моего файла dxf. Чтобы было понятнее, я добавил комментарии, отмеченные // (которых, конечно, нет в файле):
Я также пытался добавить все необязательные теги, но результат тот же .
Выход
Стандартный просмотрщик dxf:
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно.
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей.
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то.
Читайте также: