|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Экспорт в DXF из своего ПО
Регистрация: 18.09.2012
Сообщений: 23
|
||
Просмотров: 13564
|
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811
|
Посмотри здесь:
http://www.codeproject.com/Articles/...D-Format-Files |
|||
![]() |
|
||||
Цитата:
![]()
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
Цитата:
|
|||
![]() |
|
||||
Регистрация: 18.12.2010
Сообщений: 5,107
|
Нет
Цитата:
Код:
|
|||
![]() |
|
||||
Цитата:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
Почему, они являются полными)) Всё расписано по отдельности, но когда начинаешь всё это увязывать вместе - общая структура файла не очень понятна, что на что ссылается не ясно. А в документации по этому поводу сухие строки, например:
Цитата:
|
|||
![]() |
|
||||
Цитата:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
Всё что мне попадалось в свободном доступе находится на уровне
Цитата:
dxf хоть и называется "обменным", но его структура повторяет внутренние "автокадовские" структуры данных, что очень плохо для "универсального" стандарта Последний раз редактировалось zamtmn, 16.08.2013 в 20:35. |
|||
![]() |
|
||||
Регистрация: 18.09.2012
Сообщений: 23
|
Цитата:
А вот у автокадаhwd, любое стороннее ПО не имеет особого смысла рассматривать. Подходы сильно отличаются - кроме ACAD'а никому нет дела до его указателей. Видимо, это просто бессмысленная коммерческая уловка. К тому же наши файлы должны читаться автокадом на стороне заказчика. P.S. trir, вот и попробуй скорми это CAD'у ![]() Олег (jr.), тема - экспорт. Чтение интересует крайне мало - с ним проблем не бывало пока. Плюс, умеющий писать - читать сумеет ![]() -------------------------- На текущий момент был взят более-менее кастрированный вариант от стороннего ПО, которое хорошо дружит с acad'ом. Читаемость acad'ом стала 100%. Но итого пара тысяч лишних строк в файле. (раз в 10 меньше, чем "пустой" dxf от самого acad'а) Может, кто-то может предложить ещё более "чистые" (короткие) варианты? Как альтернатива, есть ли ещё более удобные способы передачи данных из/в CAD, кроме dxf? (сам CAD на рабочей машине отсутствует, работа сугубо по подгрузке нужных данных, собственной обработке и выгрузке в читаемый формат) Последний раз редактировалось Аркос, 16.08.2013 в 21:39. Причина: дополнение |
|||
![]() |
|
||||
Вспомнился один мой старый фокус, который проделывал ещё в 9-14 автокадах... А текстовые данные для передачи должны быть обязательно в формате DXF? Приложения из которых\в которые производится экспорт\импорт, оба умеют выполнять код, написанный на AutoLISP?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Регистрация: 18.09.2012
Сообщений: 23
|
Нет. Просто первый пришедший в голову и на практике опробованный способ.
Как-никак довольно открытый формат с хорошей документацией на чтение. Цитата:
Если есть предложения, как можно обучить autolisp'у - с удовольствием почитаю. |
|||
![]() |
|
||||
Жаль. Во времена DOS'овских версий AutoCAD, когда файлы передавались дискетами и каждый байт был на счету, я сжимал чертежи, программно генерируя исходный LISP код, воссоздающий содержимое этих чертежей. Поскольку исходный код имел текстовый формат, то такой файл сжимался весьма сильно (в отличие от DWG файла), как минимим на порядок. На сжатый файл ставил пароль, если требовалось. Т.о. там, где у других на дискету едва помещался один файл, у меня помещалось 4-5 файлов. В то время это была охренительная экономия. Причём сам LISP код, генерировавший мой LISP файл, был прост до безобразия. Сейчас под рукой нет справочника Полещука, но насколько я помню, в AutoLISP есть команда, называется entmake, которая на основе заданного списка пар воссоздаёт примитив. Т.е. к примеру, при помощи (entget(car(entsel))) получаешь список, удаляешь из него идентификаторы (так же программно) и результат подсовываешь entmake в качестве параметра. Ну и такую команду генерируешь для каждого примитива. Получается текстовый файл исходника LISP, который сжимаешь архиватором. В своё время эта штука у меня в универе (конец 90-х) была очень востребована. Вот подумал, может быть тебе можно было бы по похожему пути пойти. Реализация проста как пять копеек, даже несмотря на то, что я лисп уже не помню лет адцать, но думаю что смог бы вспомнить при желании. Тем более с этим могут справиться те, кто на лиспе пишет сейчас.
Попробовал, что-то получилось: Например, в чертеже есть линия, упрощённо (на пальцах) получаем её коды так: Код:
Цитата:
Код:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: Последний раз редактировалось hwd, 16.08.2013 в 22:56. |
||||
![]() |
|
||||
Регистрация: 18.09.2012
Сообщений: 23
|
Хм... идея неплохая. Осталось придумать, как автоматизировать запуск скрипта, а так же добавить нужные размерные стили и пр.
Боюсь, что это будет в разы сложнее. Если бы не текстовые и т.п. стили... а так придётся устроить фабрику из несвязанных приложений, одно из которых не планируется покупать ![]() или нанять бригаду телепатов для обучения заказчика хитростям исполнения appload. (т.к. стили и т.п. можно задать через (COMMAND "_...") Говоря проще, решение хорошее. Жаль, что не для нашего случая. P.S. к тому же, самые "тяжёлые" файлы наверняка в итоге будут "открываться" в разы медленнее, чем из "готового" файла. А некоторые наши файлы даже в cad'е открывались за полминуты... Опишу ситуацию подробнее. Есть наше рабочее место (ПК), на котором нет acad'а. На него приходят исходные данные в dxf из acad'а. Нужно эти данные считать, обработать в своём ПО и отдать в dxf, который бы понял acad на стороне заказчика. С acad'ом напрямую взаимодействовать никак нельзя. Его просто нет. Ни dll, ни plugin, ни autolisp. Если только их можно косвенно задействовать на стороне заказчика, где, для упрощения, сидит "бабушка", которая понимает только "двойной клик - открыть", не больше.\ acad ------> наше ПО, нет acad'а ------> acad При условии максимально неумных обезьян на обоих концах (дуракоустойчивость). pps. с entmake entupd и пр. - знаком. ---------------------------- Где-то на форуме читал, что файл dxf-файл пополнялся нужными данными "в блокноте" следующим образом: находился максимальный указатель под индексом "5", к нему прибавлось для запаса 50 и дальше новые данные шли с указателем i+1. Под "330" там же всегда ставили 1F. Кто-нибудь имел подобный опыт? Всегда ли прокатывало? Последний раз редактировалось Аркос, 16.08.2013 в 22:16. Причина: правка для ответа на правку hwd |
|||
![]() |
|
||||
подправил предыдущее своё сообщение, добавив простой пример.
Цитата:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
Аркос
>>Может, кто-то может предложить ещё более "чистые" (короткие) варианты? а смысл гонки за укорачиванием? Имхо лучше лделать "универсально" чтоб можно было вписывать что надо и в короткие-сторонние и в длинные-"родные". да еще и любых версий. >>Может, кто-то может предложить ещё более "чистые" (короткие) варианты? dwg? ![]() hwd >>то такой файл сжимался весьма сильно (в отличие от DWG файла) Думаю только за счет того что в нем было фактически гораздо меньше информации чем в dwg. Старые dwg были очень экономными, впрочем и сейчас "координатная" информация там хранится очень компактно, со множеством хитростей для экономии места. Это не нынешние xml)) |
|||
![]() |
|
||||
Регистрация: 18.09.2012
Сообщений: 23
|
Цитата:
Цитата:
Цитата:
В любом случае уже были выиграны полметра и пара десятков тысяч строк. Думаю, дальше уже не критично. Ориентировка же идёт на 2004 в целях совеместимости со старыми версиями. Последний раз редактировалось Аркос, 16.08.2013 в 22:25. Причина: ответ zamtmn |
|||
![]() |
|
||||
Цитата:
Хрен там! Как раз таки старые DWG сжимались гораздо хуже, чем современные. Во всяком случае, насколько я помню, старый DWG не всегда сжимался даже в 2 раза, из-за этого и пришлось такого коня изобретать, ибо дискеты стоили денег и часто дохли, особенно в метро. Цитата:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: Последний раз редактировалось hwd, 16.08.2013 в 22:38. |
||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
Аркос
>>Сугубо в целях читаемости и компактности. думаю самым верным вариантом будет найти гденибудь старенький autocad2000\2004 БЕЗ ВСЯКИХ СТОРОННИХ НАШЛЕПОК и записать файлы в нем hwd >>Генерируемый мною LISP файл по объёму получался в 3-5 раз больше я думаю он всяко не содержал всего того что есть в dwg, а только то что нужно. вот за счет этого и выигрышь. |
|||
![]() |
|
||||
Регистрация: 18.09.2012
Сообщений: 23
|
старые dwg сжимались старыми архиваторами, а современные...
Цитата:
Цитата:
Дуракоустойчивость, как известно, один из основных параметров. Вы же не проводите хим.анализ заливаемого бензина и уже позабыли, что такое кривой стартёр. Мало кто из вас знает, какие побеги надо обрывать, чтобы урожай был выше. И какой катализатор используется при окраске вашего любимого телефона... Так почему эксперт должен уметь за вас преобразовывать файл, программист учить все ГОСТы, а домохозяйка энергетические уровни орбит электрона? ------------------------------------ Не все не столько могут, но не все хотят/обязаны учиться в данной области. Кто в более "выгодном" положении - вы или тот, кому вы должны выдать готовый материал? Поэтому философию в другой раз. А сегодня актуальная проблема экспорта/импорта более-менее основных данных acad'а без его специфики. Последний раз редактировалось Аркос, 16.08.2013 в 22:48. Причина: очетяпочка |
|||
![]() |
|
||||
Цитата:
@Аркос, ты уж определись, тебе шашечки или ехать?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Регистрация: 18.09.2012
Сообщений: 23
|
Мне dxf-писалку, пожалуйста
![]() Цитата:
Всем хороших солнечных (любите пасмурные - тогда пасмурных, с личной тучкой) прибрежных выходных. |
|||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
>>Под "330" там же всегда ставили 1F.
а что под 1F в исходном файле? имхо ерунда. кроме 330 еще много ссылочных групп. вот мой вариант писалки\читалки http://svn.shamangrad.net/zcad/trunk...mats/iodxf.pas код конечно говно, для личного использования, писался давно и много раз правился не вникая в суть. Но структурных проблем с dxf не имеет. Принцип - парсит исходный файл, в нужные места вставляя что надо, ловит ссылочные группы, перенумеровывает их сохраняя соответствие старый-новый, все перекрестные ссылки сохраняются |
|||
![]() |
|
||||
Регистрация: 18.09.2012
Сообщений: 23
|
Вести с полей доносят печальные известия.
Информация по листам (layout) (а также модели) валяется аж в трёх местах. Кто-нибудь вникал в эту область? Код на паскале уже дюже непривычен. Пока особо к нему не обращался, но благодарю за отзывчивость. |
|||
![]() |
|
||||
Регистрация: 18.09.2012
Сообщений: 23
|
Собственно, прогресс на лицо.
Но проблема с layout'ами всё так же висит в воздухе. Во-первых, насколько я понял, layout'у нужен owner-словарь. Причём просто скопипастить его недостаточно... Кто-нибудь может подсказать, что требуется для корректной записи layout'а? // блоки пока не реализованы - может, из-за них, конечно... На текущий момент при открытии файла вкладок модель/лист попросту нету. А pspaсe отказывается работать =) P.S. может, кто-нибудь может поделиться официальными утилитками для ознакомления? |
|||
![]() |
|
||||
Регистрация: 18.09.2012
Сообщений: 23
|
Да, когда запускаешь bedit, есть блок, содержащий всю модель.
Но Layout - это объект. Цитата:
... ... ... ... ... 0 SECTION 2 OBJECTS 0 DICTIONARY 5 C 330 0 100 AcDbDictionary 281 1 ... 3 ACAD_LAYOUT 350 1A 3 ... 0 DICTIONARY 5 D 102 {ACAD_REACTORS 330 C 102 } 330 C 100 AcDbDictionary 281 1 0 DICTIONARY 5 1A 102 {ACAD_REACTORS 330 C 102 } 330 C 100 AcDbDictionary 281 1 3 Layout1 350 1E 3 Layout2 350 26 3 Model 350 22 ... ... ... 100 AcDbLayout 1 Layout1 ... 0 LAYOUT 5 22 102 {ACAD_REACTORS 330 1A 102 } 330 1A 100 AcDbPlotSettings ... 100 AcDbLayout 1 Model ... 0 MLINESTYLE ... 0 ENDSEC 0 EOF Другое дело, что все визуальные его потроха лежат по адресу: Цитата:
И по логике, ACAD мог бы отображать вкладки, а при попытке их открыть - глючить или открывать пустые. В конце концов, выдавать ошибки, как он обычно это делает. Но ACAD молчит в тряпочку и убивает закладки модель/листы. Ежели никто не подскажет/поделится, то следующее оповещение после реализации блоков =) Последний раз редактировалось Аркос, 11.09.2013 в 09:53. Причина: наведение словесной красоты |
|||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
Автокад при любых даже "несущественных" ошибках отказывается открывать-восстанавливать, выводя минимум инфы. При существенных вообще молча падает. Проверять надо в клонах, вот что выдал брикс:
Цитата:
>>// блоки пока не реализованы - может, из-за них, конечно... Скорее всего так и есть. на модель и листы должны присутствовать описания блоков ИМХО >>Ежели никто не подскажет/поделится, то следующее оповещение после реализации блоков =) Автодеск или ОДА с радостью поделятся за $. Возможно стоить покопаться в исходниках qcad(недавно вышла свежая комьюнити версия), librecad и т.п. - может что и прояснится trir >>Сказали блок - значит блок, читай спецификацию!!! Типичный ответ для этого форума)) вы ее сами та читали? пробовали чтонить по ней записать? Автодесковская документация (как собственно и формат dwg) - образец того как надо вставлять бревна в колеса сторонним разработчикам - вроде всё есть, начинаешь копать, а ничего оказывается нет)) Последний раз редактировалось zamtmn, 11.09.2013 в 10:05. |
|||
![]() |
|
||||
Регистрация: 18.09.2012
Сообщений: 23
|
Да я уже заметил, я профукал в словаре инфу про листы.
Сейчас поправлю - посмотрим, прокатит ли без блоков. >> Автокад при любых даже "несущественных" ошибках отказывается открывать-восстанавливать, выводя минимум инфы. >> При существенных вообще молча падает. При несущественных, вроде разбега указателей - он прекрасно правит, в остальных случаях мне пока хватало его инфы. Он указывает, в какой строке споткнулся и в двух словах почему. А вот про клоны - благодарю, что-то в руках не держал, так и не было мыслей. |
|||
![]() |
|
||||
Регистрация: 18.12.2010
Сообщений: 5,107
|
В BLOCKS записаны все примитивы layout'а. В спецификации написано BLOCKS - не обязательная секция, если нет описания блоков, но layout'ы - это блоки, а значит с ними секция BLOCKS - обязательная
Что бы разобраться с dxf - нужен AcAd, в нём через entmake создать нужный примитив -> сохранить в dxf -> смотреть, что получилось -> читать спецификацию... |
|||
![]() |
|
||||
Регистрация: 18.09.2012
Сообщений: 23
|
trir, я приводил цитатку из спецификации. И там таки ничего не сказано про обязан/не обязан. Там вообще мало что детализированно. Общие наброски.
Т.е. да, сам раздел блоков - необязателен. А обязателен ли блок для layout'а или нет - остаётся узнавать эмпирически. Offtop: Понятно, что на практике он нужен. Иначе зачем он вообще? Но сейчас интересует - будет ли всё остальное без блока работать. Потому что заниматься сразу всем - мозга не хватает, хочется идти последовательно. А насчёт entmake не совсем понял. Можно разве создать объект и изолировать его в файл? В противном случае, я, видимо, так и делаю. 1.dxf - файл, созданный ACAD'ом. 1.dxf.dxf - то, что получается после прогонки через мою софтину. |
|||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
>>При несущественных, вроде...
Для меня всегда было загадкой почему автокад не хочет открыть (а главное восстановить!) файл если слой дефпоинтс сделан печатаемым и таких примеров куча. знаю что это прописано в спецификации, но восстановить та можно совсем без проблем)). Сообщения об ошибках типа файлтакойта.cpp@строкатакаято тоже очень помогают в копаниях)) |
|||
![]() |
|
||||
Регистрация: 18.09.2012
Сообщений: 23
|
Цитата:
Цитата:
А так, конечно, номер строки в недоступном исходнике помогает как припарка от гангрены. Сейчас пошаманил в словаре - вернулся на круги своя, ошибка в начале словаря, идите лесом. Кто что понимает в словарях?) |
|||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
я ниче не понимаю в словарях, но с учетом того что в файле проблемы с блоками, думаю ошибку в словаре можно вполне списать на них. (кстати ошибка в словаре начинающемся тамто, а не в начале словаря)
лог драфтсигта: Цитата:
|
|||
![]() |
|
||||
Цитата:
Announcement: AutoCAD® 2014 debug symbols now available on the public server
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ищу коллег-пользователей TEKLA | PiP | Tekla | 6018 | 27.08.2015 16:13 |
LISP. Пакетный экспорт настроек слоев | TararykovDG | Готовые программы | 4 | 03.04.2012 10:03 |
Подскажите - экспорт файла в Tekla 15 | Ozzz | Tekla | 1 | 10.03.2010 14:07 |
Экспорт спецификации из MechaniCS 4.5 в OpenOffice | TAL | ПО от CSoft | 2 | 28.03.2007 20:18 |