Экспорт в DXF из своего ПО
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Экспорт в DXF из своего ПО

Экспорт в DXF из своего ПО

Ответ
Поиск в этой теме
Непрочитано 16.08.2013, 11:07 #1
Экспорт в DXF из своего ПО
Аркос
 
Регистрация: 18.09.2012
Сообщений: 23

Доброго всем времени суток.

Встал простейший до выноса мозга вопрос.

Есть тестовый dxf-файл, созданый своей программкой.
Автокад его кушать отказывается, в то время как стороннее ПО ест за милую душу.
А разгадка одна, полагаю, - handle/point'ы со всеми их словарями и т.п.
Код:
[Выделить все]
0
SECTION
2
ENTITIES
0
LINE
8
0
10
5
20
10
30
0
11
105
21
60
31
0
0
LINE
8
0
10
5
20
60
30
0
11
105
21
10
31
0
0
LINE
8
0
10
55
20
10
30
0
11
55
21
60
31
0
0
LINE
8
0
10
5
20
35
30
0
11
105
21
35
31
0
0
LWPOLYLINE
8
0
90
4
38
3135
10
5
20
10
40
0.2
41
0.5
42
-0.15
10
105
20
10
40
0.1
41
0.1
42
0
10
105
20
60
40
0.1
41
0.1
42
0
10
5
20
60
40
0.1
41
0.1
42
0
0
ENDSEC
0
EOF

Причём если выкинуть из него lwpolyline, то AutoCAD его тоже съест.

Подскажите, люди добрые, что делать.



В целом стоит задача импорта/экспорта простейших примитивов - линий (line, lwpoly, poly3d), дуг(circle,arc,ellipse), 3dface и текста.
Т.е. весь dxf с блоками, реакторами, словарями и пр. на текущий момент не представляет интереса.

К сообщению прикреплён файл, прогонка которого осуществляется через "импорт-экспорт" - с помощью чего и был получен тестовый файл.


--------------------------------------------

На седьмой странице поиска нашлось-таки что-то вразумительное:
http://forum.dwg.ru/printthread.php?t=54876&pp=1000
Цитата:
Сообщение от zamtmn
если опустить все секции, оставмв только ENTITIES - автокад будет считать что это DXF12, соответственно будет ругаться на все примитивы не входящие в этот формат. IMAGE не в курсе, а LWPOLYLINE вроде появился только с DXF2000. Соответственно либо используй POLYLINE, либо пиши полноценный DXF2000, но там многое не опустить
В т.ч. там писано:
Цитата:
Сообщение от Штурман
использовать подставной пустой файл, но это крайний вариант.
А чем он крайний?


Успех определённый достигнут.
Не воспринимаются пока блоки, shape'ы и пр.

Актуальный вопрос - layout'ы - листы.
Что, как, почему?

Вложения
Тип файла: dwg 1.dxf.dwg (218.8 Кб, 5141 просмотров)
Тип файла: dwg 1.dxf.dxf.dwg (14.8 Кб, 5112 просмотров)


Последний раз редактировалось Аркос, 11.09.2013 в 09:32. Причина: Прикрепление dxf не прокатило, не заметил.
Просмотров: 13564
 
Непрочитано 16.08.2013, 14:08
#2
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Посмотри здесь:
http://www.codeproject.com/Articles/...D-Format-Files
Олег (jr.) вне форума  
 
Непрочитано 16.08.2013, 16:33
#3
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>А чем он крайний?
Ничем не крайний. Нормальный вариант. Но даже в нем имеется куча заморочек - dxf хорошо документированный формат для чтения, с записью всё довольно расплывчато((
zamtmn вне форума  
 
Непрочитано 16.08.2013, 17:12
#4
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от zamtmn Посмотреть сообщение
dxf хорошо документированный формат для чтения, с записью всё довольно расплывчато((
Это как? Формат документа (в данном случае DXF) либо хорошо документирован, либо плохо. Нет отдельно "формата для записи" или "формата для чтения"
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 16.08.2013, 18:21
#5
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Цитата:
Это как?
Вот так. Прочитать уже сформированный файл по мануалу легко. Сформировать с нуля dxf>=2000 c парой стилей линий, текста, несколькими блоками - не выйдет (в смысле автокад его валидным не посчитает), много "белых" пятен, которые придется выяснять эксперементальным путем
zamtmn вне форума  
 
Непрочитано 16.08.2013, 18:54
#6
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Нет
Цитата:
100
Subclass marker (AcDbPolyline)
http://www.autodesk.com/techpubs/aut.../dxf/index.htm

Код:
[Выделить все]
  0
LWPOLYLINE
  5
57B5
330
1F
100
AcDbEntity
  8
0
100
AcDbPolyline
 90
        6
 70
   128
 43
0.0
 10
370807.5526267851
 20
311130.9854127853
 10
371315.6103796044
 20
311360.0925125328
 10
370790.0671416614
 20
311414.4571016569
 10
370473.3812355983
 20
311252.3342995942
 10
370528.7525048581
 20
311510.5656245229
 10
370725.9531298396
 20
311523.1858064944
trir вне форума  
 
Непрочитано 16.08.2013, 18:59
#7
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Вот так. Прочитать уже сформированный файл по мануалу легко. Сформировать с нуля dxf>=2000 c парой стилей линий, текста, несколькими блоками - не выйдет (в смысле автокад его валидным не посчитает), много "белых" пятен, которые придется выяснять эксперементальным путем
Я не работал с DXF, поскольку мне (к счастью) это не требовалось. Здесь DXF спецификации от Autodesk. Т.е. хотите сказать, что на практике обозначенные спецификации не являются полными?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 16.08.2013, 19:50
#8
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Почему, они являются полными)) Всё расписано по отдельности, но когда начинаешь всё это увязывать вместе - общая структура файла не очень понятна, что на что ссылается не ясно. А в документации по этому поводу сухие строки, например:
Цитата:
340-349:Hard-pointer handle; arbitrary hard pointers to other objects within same DXF file or drawing. Translated during INSERT and XREF operations
Также в автокаде не радует обработка ошибок в чертежах - либо вылет с невнятным асертом, либо самый "любимый" вариант - неработает копирование в клипбоард. Вот и разбирайся где накосячил. Клоны в таких случаях более информативны
zamtmn вне форума  
 
Непрочитано 16.08.2013, 20:00
#9
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от zamtmn Посмотреть сообщение
когда начинаешь всё это увязывать вместе - общая структура файла не очень понятна
Как-то не густо книг по теме... Единственное что нашёл, имеющее отношение к DXF, но применительно к некому Vectorworks (но в оглавлении там какая-то ахинея).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 16.08.2013, 20:28
#10
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Всё что мне попадалось в свободном доступе находится на уровне
Цитата:
0
SECTION
2
ENTITIES
.....
.....

0
ENDSEC
0
EOF
Хочешь большего - покупай закрытую либу. Правда я интересовался этим очень давно.
dxf хоть и называется "обменным", но его структура повторяет внутренние "автокадовские" структуры данных, что очень плохо для "универсального" стандарта

Последний раз редактировалось zamtmn, 16.08.2013 в 20:35.
zamtmn вне форума  
 
Автор темы   Непрочитано 16.08.2013, 21:34
#11
Аркос


 
Регистрация: 18.09.2012
Сообщений: 23


Цитата:
Сообщение от zamtmn Посмотреть сообщение
в нем имеется куча заморочек - dxf хорошо документированный формат для чтения, с записью всё довольно расплывчато((
Полностью согласен. К тому же стороннее ПО, которому dxf довольно часто скармливается, прекрасно понимает любые кастрированные от указательного мусора формы.
А вот у автокада
Цитата:
Сообщение от zamtmn Посмотреть сообщение
много "белых" пятен, которые придется выяснять эксперементальным путем
hwd, любое стороннее ПО не имеет особого смысла рассматривать. Подходы сильно отличаются - кроме ACAD'а никому нет дела до его указателей. Видимо, это просто бессмысленная коммерческая уловка.
К тому же наши файлы должны читаться автокадом на стороне заказчика.

P.S. trir, вот и попробуй скорми это CAD'у А потом расскажи, откуда взялись значения по индексам 5 и 330.
Олег (jr.), тема - экспорт. Чтение интересует крайне мало - с ним проблем не бывало пока. Плюс, умеющий писать - читать сумеет

--------------------------

На текущий момент был взят более-менее кастрированный вариант от стороннего ПО, которое хорошо дружит с acad'ом.
Читаемость acad'ом стала 100%. Но итого пара тысяч лишних строк в файле. (раз в 10 меньше, чем "пустой" dxf от самого acad'а)
Может, кто-то может предложить ещё более "чистые" (короткие) варианты?

Как альтернатива, есть ли ещё более удобные способы передачи данных из/в CAD, кроме dxf?
(сам CAD на рабочей машине отсутствует, работа сугубо по подгрузке нужных данных, собственной обработке и выгрузке в читаемый формат)

Последний раз редактировалось Аркос, 16.08.2013 в 21:39. Причина: дополнение
Аркос вне форума  
 
Непрочитано 16.08.2013, 21:38
#12
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Аркос Посмотреть сообщение
Может, кто-то может предложить ещё более "чистые" (короткие) варианты?
Вспомнился один мой старый фокус, который проделывал ещё в 9-14 автокадах... А текстовые данные для передачи должны быть обязательно в формате DXF? Приложения из которых\в которые производится экспорт\импорт, оба умеют выполнять код, написанный на AutoLISP?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 16.08.2013, 21:43
#13
Аркос


 
Регистрация: 18.09.2012
Сообщений: 23


Цитата:
Сообщение от hwd Посмотреть сообщение
А текстовые данные для передачи должны быть обязательно в формате DXF?
Нет. Просто первый пришедший в голову и на практике опробованный способ.
Как-никак довольно открытый формат с хорошей документацией на чтение.

Цитата:
Сообщение от hwd Посмотреть сообщение
Приложения из которых\в которые производится экспорт\импорт, оба умеют выполнять код, написанный на AutoLISP?
Нет. Своё - самописное. Умеет только то, чему сами научим.
Если есть предложения, как можно обучить autolisp'у - с удовольствием почитаю.
Аркос вне форума  
 
Непрочитано 16.08.2013, 21:55
#14
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Аркос Посмотреть сообщение
Нет. Своё - самописное. Умеет только то, чему сами научим.
Жаль. Во времена DOS'овских версий AutoCAD, когда файлы передавались дискетами и каждый байт был на счету, я сжимал чертежи, программно генерируя исходный LISP код, воссоздающий содержимое этих чертежей. Поскольку исходный код имел текстовый формат, то такой файл сжимался весьма сильно (в отличие от DWG файла), как минимим на порядок. На сжатый файл ставил пароль, если требовалось. Т.о. там, где у других на дискету едва помещался один файл, у меня помещалось 4-5 файлов. В то время это была охренительная экономия. Причём сам LISP код, генерировавший мой LISP файл, был прост до безобразия. Сейчас под рукой нет справочника Полещука, но насколько я помню, в AutoLISP есть команда, называется entmake, которая на основе заданного списка пар воссоздаёт примитив. Т.е. к примеру, при помощи (entget(car(entsel))) получаешь список, удаляешь из него идентификаторы (так же программно) и результат подсовываешь entmake в качестве параметра. Ну и такую команду генерируешь для каждого примитива. Получается текстовый файл исходника LISP, который сжимаешь архиватором. В своё время эта штука у меня в универе (конец 90-х) была очень востребована. Вот подумал, может быть тебе можно было бы по похожему пути пойти. Реализация проста как пять копеек, даже несмотря на то, что я лисп уже не помню лет адцать, но думаю что смог бы вспомнить при желании. Тем более с этим могут справиться те, кто на лиспе пишет сейчас.

Попробовал, что-то получилось: Например, в чертеже есть линия, упрощённо (на пальцах) получаем её коды так:
Код:
[Выделить все]
 (entget(car(entsel)))
Результат видим такой:
Цитата:
((-1 . <Entity name: 7ffffb03ef0>) (0 . "LINE") (330 . <Entity
name: 7ffffb03e50>) (5 . "6F") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8
. "0") (100 . "AcDbLine") (10 131.285 80.6143 0.0) (11 175.784 110.461 0.0)
(210 0.0 0.0 1.0))
Отрезаем лишнее и формируем команду создания этой линии:
Код:
[Выделить все]
 (entmake '((0 . "LINE") (5 . "6F") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 
. "0") (100 . "AcDbLine") (10 131.285 80.6143 0.0) (11 175.784 110.461 0.0) 
(210 0.0 0.0 1.0)))
Теперь, если эту команду запустить - в чертеже будет создана та самая линия. Ну и все остальные примитивы по аналогии. Генерируешь текстовый файл с такими командами в своей программе и затем спокойно запускаешь его в AutoCAD на исполнение.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 16.08.2013 в 22:56.
hwd вне форума  
 
Автор темы   Непрочитано 16.08.2013, 22:09
#15
Аркос


 
Регистрация: 18.09.2012
Сообщений: 23


Цитата:
Сообщение от hwd Посмотреть сообщение
Реализация проста как пять копеек.
Хм... идея неплохая. Осталось придумать, как автоматизировать запуск скрипта, а так же добавить нужные размерные стили и пр.
Боюсь, что это будет в разы сложнее. Если бы не текстовые и т.п. стили... а так придётся устроить фабрику из несвязанных приложений, одно из которых не планируется покупать
или нанять бригаду телепатов для обучения заказчика хитростям исполнения 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
Аркос вне форума  
 
Непрочитано 16.08.2013, 22:10
#16
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


подправил предыдущее своё сообщение, добавив простой пример.
Цитата:
Осталось придумать, как автоматизировать запуск скрипта, а так же добавить нужные размерные стили и пр.
Это-то как раз и не сложно.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 16.08.2013, 22:19
#17
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Аркос
>>Может, кто-то может предложить ещё более "чистые" (короткие) варианты?
а смысл гонки за укорачиванием? Имхо лучше лделать "универсально" чтоб можно было вписывать что надо и в короткие-сторонние и в длинные-"родные". да еще и любых версий.
>>Может, кто-то может предложить ещё более "чистые" (короткие) варианты?
dwg?
hwd
>>то такой файл сжимался весьма сильно (в отличие от DWG файла)
Думаю только за счет того что в нем было фактически гораздо меньше информации чем в dwg. Старые dwg были очень экономными, впрочем и сейчас "координатная" информация там хранится очень компактно, со множеством хитростей для экономии места. Это не нынешние xml))
zamtmn вне форума  
 
Автор темы   Непрочитано 16.08.2013, 22:20
#18
Аркос


 
Регистрация: 18.09.2012
Сообщений: 23


Цитата:
Сообщение от Аркос Посмотреть сообщение
acad ------> наше ПО, нет acad'а ------> acad
При условии максимально неумных обезьян на обоих концах (дуракоустойчивость).
Дополнил пояснения схемкой =)
Цитата:
Сообщение от hwd Посмотреть сообщение
Цитата:
Сообщение от Аркос Посмотреть сообщение
Осталось придумать, как автоматизировать запуск скрипта, а так же добавить нужные размерные стили и пр.
Это-то как раз и не сложно.
Я в cad'е уверенный пользователь и начинающий lisp'ер. Не более. И полагаю, что на стороне, принимающей мои файлы, будут ещё менее гибкие пользователи. И слать им .lsp и объяснять что к чему не получится.

Цитата:
Сообщение от zamtmn
а смысл гонки за укорачиванием?
Сугубо в целях читаемости и компактности.
В любом случае уже были выиграны полметра и пара десятков тысяч строк. Думаю, дальше уже не критично.
Ориентировка же идёт на 2004 в целях совеместимости со старыми версиями.

Последний раз редактировалось Аркос, 16.08.2013 в 22:25. Причина: ответ zamtmn
Аркос вне форума  
 
Непрочитано 16.08.2013, 22:28
#19
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Думаю только за счет того что в нем было фактически гораздо меньше информации чем в dwg.
Нет, как раз таки за счёт того, что любой текстовый файл сжимается гораздо лучше чем двоичный. Генерируемый мною LISP файл по объёму получался в 3-5 раз больше, чем исходный DWG файл, однако после сжатия архиватором лисп в итоге по объёму получался чуть ли на порядок меньше.
Цитата:
Сообщение от zamtmn Посмотреть сообщение
Старые dwg были очень экономными
Хрен там! Как раз таки старые DWG сжимались гораздо хуже, чем современные. Во всяком случае, насколько я помню, старый DWG не всегда сжимался даже в 2 раза, из-за этого и пришлось такого коня изобретать, ибо дискеты стоили денег и часто дохли, особенно в метро.
Цитата:
Сообщение от Аркос
И полагаю, что на стороне, принимающей мои файлы, будут ещё менее гибкие пользователи. И слать им .lsp и объяснять что к чему не получится.
Если всё время ориентироваться на дураков, то коммунизм построить не удастся. Файл не обязательно должен иметь расширение LSP, можно задать и SCR, однако один хрен - всё равно придётся дёрнуть команду (load "бла-бла"), или appload или script.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 16.08.2013 в 22:38.
hwd вне форума  
 
Непрочитано 16.08.2013, 22:33
#20
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Аркос
>>Сугубо в целях читаемости и компактности.
думаю самым верным вариантом будет найти гденибудь старенький autocad2000\2004 БЕЗ ВСЯКИХ СТОРОННИХ НАШЛЕПОК и записать файлы в нем
hwd
>>Генерируемый мною LISP файл по объёму получался в 3-5 раз больше
я думаю он всяко не содержал всего того что есть в dwg, а только то что нужно. вот за счет этого и выигрышь.
zamtmn вне форума  
 
Автор темы   Непрочитано 16.08.2013, 22:38
#21
Аркос


 
Регистрация: 18.09.2012
Сообщений: 23


Цитата:
Сообщение от hwd Посмотреть сообщение
старые DWG сжимались гораздо хуже, чем современные
старые dwg сжимались старыми архиваторами, а современные...
Цитата:
Сообщение от zamtmn Посмотреть сообщение
найти гденибудь старенький autocad2000\2004 БЕЗ ВСЯКИХ СТОРОННИХ НАШЛЕПОК и записать файлы в нем
Семён Семёныч! Осталось найти.
Цитата:
Сообщение от hwd
Если всё время ориентироваться на дураков, то коммунизм построить не удастся.
Как только коммунизм будет распространяться на интеллект и узкопрофессиональные знания, и чиновники комиссий будут выполнять за вас часть вашей работы...
Дуракоустойчивость, как известно, один из основных параметров. Вы же не проводите хим.анализ заливаемого бензина и уже позабыли, что такое кривой стартёр. Мало кто из вас знает, какие побеги надо обрывать, чтобы урожай был выше. И какой катализатор используется при окраске вашего любимого телефона... Так почему эксперт должен уметь за вас преобразовывать файл, программист учить все ГОСТы, а домохозяйка энергетические уровни орбит электрона?

------------------------------------

Не все не столько могут, но не все хотят/обязаны учиться в данной области. Кто в более "выгодном" положении - вы или тот, кому вы должны выдать готовый материал?
Поэтому философию в другой раз. А сегодня актуальная проблема экспорта/импорта более-менее основных данных acad'а без его специфики.

Последний раз редактировалось Аркос, 16.08.2013 в 22:48. Причина: очетяпочка
Аркос вне форума  
 
Непрочитано 16.08.2013, 22:41
#22
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от zamtmn Посмотреть сообщение
думаю он всяко не содержал всего того что есть в dwg, а только то что нужно. вот за счет этого и выигрышь.
и за счёт этого в том числе.

@Аркос,
ты уж определись, тебе шашечки или ехать?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 16.08.2013, 22:45
#23
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>Семён Семёныч! Осталось найти.
их есть у меня. 2000. завтра могу намылить
zamtmn вне форума  
 
Автор темы   Непрочитано 16.08.2013, 22:51
#24
Аркос


 
Регистрация: 18.09.2012
Сообщений: 23


Цитата:
Сообщение от hwd Посмотреть сообщение
ты уж определись, тебе шашечки или ехать?
Мне dxf-писалку, пожалуйста
Цитата:
Сообщение от zamtmn Посмотреть сообщение
>>Семён Семёныч! Осталось найти.
их есть у меня. 2000. завтра могу намылить
Спасибо, обождём выходные. Утро понедельника субботней ночи мудренее.
Всем хороших солнечных (любите пасмурные - тогда пасмурных, с личной тучкой) прибрежных выходных.
Аркос вне форума  
 
Непрочитано 16.08.2013, 23:38
#25
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>Под "330" там же всегда ставили 1F.
а что под 1F в исходном файле? имхо ерунда. кроме 330 еще много ссылочных групп.
вот мой вариант писалки\читалки http://svn.shamangrad.net/zcad/trunk...mats/iodxf.pas код конечно говно, для личного использования, писался давно и много раз правился не вникая в суть. Но структурных проблем с dxf не имеет.
Принцип - парсит исходный файл, в нужные места вставляя что надо, ловит ссылочные группы, перенумеровывает их сохраняя соответствие старый-новый, все перекрестные ссылки сохраняются
zamtmn вне форума  
 
Автор темы   Непрочитано 21.08.2013, 06:52
#26
Аркос


 
Регистрация: 18.09.2012
Сообщений: 23


Вести с полей доносят печальные известия.
Информация по листам (layout) (а также модели) валяется аж в трёх местах.
Кто-нибудь вникал в эту область?

Код на паскале уже дюже непривычен. Пока особо к нему не обращался, но благодарю за отзывчивость.
Аркос вне форума  
 
Непрочитано 21.08.2013, 10:59
#27
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>Кто-нибудь вникал в эту область?
я нет. Разберешся, просвети парой строк в чем там сложности
zamtmn вне форума  
 
Автор темы   Непрочитано 11.09.2013, 09:29
#28
Аркос


 
Регистрация: 18.09.2012
Сообщений: 23


Собственно, прогресс на лицо.

Но проблема с layout'ами всё так же висит в воздухе.
Во-первых, насколько я понял, layout'у нужен owner-словарь. Причём просто скопипастить его недостаточно...

Кто-нибудь может подсказать, что требуется для корректной записи layout'а?
// блоки пока не реализованы - может, из-за них, конечно...
На текущий момент при открытии файла вкладок модель/лист попросту нету. А pspaсe отказывается работать =)

P.S. может, кто-нибудь может поделиться официальными утилитками для ознакомления?
Вложения
Тип файла: dwg 1.dxf.dwg (218.8 Кб, 1851 просмотров)
Тип файла: dwg 1.dxf.dxf.dwg (14.8 Кб, 1844 просмотров)
Аркос вне форума  
 
Непрочитано 11.09.2013, 09:33
#29
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


layout'ы - это блоки... как и модель
trir вне форума  
 
Автор темы   Непрочитано 11.09.2013, 09:41
#30
Аркос


 
Регистрация: 18.09.2012
Сообщений: 23


Цитата:
Сообщение от trir Посмотреть сообщение
layout'ы - это блоки... как и модель
Да, когда запускаешь bedit, есть блок, содержащий всю модель.
Но Layout - это объект.
Цитата:
"0 Object name (LAYOUT)" находится в разделе Objects Section
...
...
...
...
...
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

Другое дело, что все визуальные его потроха лежат по адресу:
Цитата:
330 ID/handle to this layout's associated paper space block table record
В то время как своё имя, порядковый номер, настройки печати и пр. он (объект) содержит сам.

И по логике, ACAD мог бы отображать вкладки, а при попытке их открыть - глючить или открывать пустые.
В конце концов, выдавать ошибки, как он обычно это делает.
Но ACAD молчит в тряпочку и убивает закладки модель/листы.

Ежели никто не подскажет/поделится, то следующее оповещение после реализации блоков =)

Последний раз редактировалось Аркос, 11.09.2013 в 09:53. Причина: наведение словесной красоты
Аркос вне форума  
 
Непрочитано 11.09.2013, 09:47
#31
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


Код:
[Выделить все]
  <SECTION SECTION_Name="BLOCKS">
    <dxf_para dxf_code="0" dxf_value="BLOCK"/>
    <dxf_para dxf_code="5" dxf_value="20"/>
    <dxf_para dxf_code="330" dxf_value="1F"/>
    <dxf_para dxf_code="100" dxf_value="AcDbEntity"/>
    <dxf_para dxf_code="8" dxf_value="0"/>
    <dxf_para dxf_code="100" dxf_value="AcDbBlockBegin"/>
    <dxf_para dxf_code="2" dxf_value="*Model_Space"/>
    <dxf_para dxf_code="70" dxf_value="     0"/>
    <t_point3d dxf_code="10" X="0" Y="0" Z="0"/>
    <dxf_para dxf_code="3" dxf_value="*Model_Space"/>
    <dxf_para dxf_code="1" dxf_value=""/>
    <dxf_para dxf_code="0" dxf_value="ENDBLK"/>
    <dxf_para dxf_code="5" dxf_value="21"/>
    <dxf_para dxf_code="330" dxf_value="1F"/>
    <dxf_para dxf_code="100" dxf_value="AcDbEntity"/>
    <dxf_para dxf_code="8" dxf_value="0"/>
    <dxf_para dxf_code="100" dxf_value="AcDbBlockEnd"/>
    <dxf_para dxf_code="0" dxf_value="BLOCK"/>
    <dxf_para dxf_code="5" dxf_value="5A"/>
    <dxf_para dxf_code="330" dxf_value="58"/>
    <dxf_para dxf_code="100" dxf_value="AcDbEntity"/>
    <dxf_para dxf_code="67" dxf_value="     1"/>
    <dxf_para dxf_code="8" dxf_value="0"/>
    <dxf_para dxf_code="100" dxf_value="AcDbBlockBegin"/>
    <dxf_para dxf_code="2" dxf_value="*Paper_Space"/>
    <dxf_para dxf_code="70" dxf_value="     0"/>
    <t_point3d dxf_code="10" X="0" Y="0" Z="0"/>
    <dxf_para dxf_code="3" dxf_value="*Paper_Space"/>
    <dxf_para dxf_code="1" dxf_value=""/>
    <dxf_para dxf_code="0" dxf_value="ENDBLK"/>
    <dxf_para dxf_code="5" dxf_value="5B"/>
    <dxf_para dxf_code="330" dxf_value="58"/>
    <dxf_para dxf_code="100" dxf_value="AcDbEntity"/>
    <dxf_para dxf_code="67" dxf_value="     1"/>
    <dxf_para dxf_code="8" dxf_value="0"/>
    <dxf_para dxf_code="100" dxf_value="AcDbBlockEnd"/>
    <dxf_para dxf_code="0" dxf_value="BLOCK"/>
    <dxf_para dxf_code="5" dxf_value="5F"/>
    <dxf_para dxf_code="330" dxf_value="5D"/>
    <dxf_para dxf_code="100" dxf_value="AcDbEntity"/>
    <dxf_para dxf_code="67" dxf_value="     1"/>
    <dxf_para dxf_code="8" dxf_value="0"/>
    <dxf_para dxf_code="100" dxf_value="AcDbBlockBegin"/>
    <dxf_para dxf_code="2" dxf_value="*Paper_Space0"/>
    <dxf_para dxf_code="70" dxf_value="     0"/>
    <t_point3d dxf_code="10" X="0" Y="0" Z="0"/>
    <dxf_para dxf_code="3" dxf_value="*Paper_Space0"/>
    <dxf_para dxf_code="1" dxf_value=""/>
    <dxf_para dxf_code="0" dxf_value="ENDBLK"/>
Сказали блок - значит блок, читай спецификацию!!!
trir вне форума  
 
Автор темы   Непрочитано 11.09.2013, 09:55
#32
Аркос


 
Регистрация: 18.09.2012
Сообщений: 23


Вы абсолютно правы, это блок, который layout использует. Впрочем, без объекта layout это обычный блок.

*ушёл ковырять блоки - расковыряю, посмотрим, что получится*

P.S. подправил предыдущий пост, добавил dxf-код.
Аркос вне форума  
 
Непрочитано 11.09.2013, 09:56
#33
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Автокад при любых даже "несущественных" ошибках отказывается открывать-восстанавливать, выводя минимум инфы. При существенных вообще молча падает. Проверять надо в клонах, вот что выдал брикс:
Цитата:
:
:
: _recover
Имя: Database header;
Значение: System Variable "CMLSTYLE";
Проверка: Неверно;
Заменен на:Standard.

Имя: AcDbLayerTableRecord(908D);
Значение: PlotStyleName Id (F);
Проверка: Неверно;
Заменен на:Set to Null.

Имя: AcDbLayerTableRecord(908E);
Значение: PlotStyleName Id (F);
Проверка: Неверно;
Заменен на:Set to Null.

Имя: AcDbLayerTableRecord(908F);
Значение: PlotStyleName Id (F);
Проверка: Неверно;
Заменен на:Set to Null.

Имя: AcDbDictionary(C);
Значение: Множественные вхождения ссылки (D);
Проверка: Неверно;
Заменен на:Удален.

Имя: AcDbDictionary(C);
Значение: Множественные вхождения ссылки (1A);
Проверка: Неверно;
Заменен на:Удален.

Имя: AcDbDictionary(C);
Значение: Множественные вхождения ссылки (17);
Проверка: Неверно;
Заменен на:Удален.

Имя: AcDbDictionary(C);
Значение: Множественные вхождения ссылки (19);
Проверка: Неверно;
Заменен на:Удален.

Имя: AcDbDictionary(C);
Значение: Множественные вхождения ссылки (E);
Проверка: Неверно;
Заменен на:Удален.

Имя: AcDbDictionary(1A);
Значение: Объект входа (1E);
Проверка: Неверно;
Заменен на:Удален.

Имя: AcDbDictionary(1A);
Значение: Объект входа (1E);
Проверка: Неверно;
Заменен на:Удален.

Имя: AcDbDictionary(1A);
Значение: Объект входа (26);
Проверка: Неверно;
Заменен на:Удален.

Имя: AcDbDictionary(1A);
Значение: Объект входа (26);
Проверка: Неверно;
Заменен на:Удален.

Имя: AcDbDictionary(1A);
Значение: Объект входа (22);
Проверка: Неверно;
Заменен на:Удален.

Имя: AcDbDictionary(1A);
Значение: Объект входа (22);
Проверка: Неверно;
Заменен на:Удален.

Имя: AcDbDictionary(17);
Значение: Объект входа (18);
Проверка: Неверно;
Заменен на:Удален.

Имя: AcDbDictionary(17);
Значение: Объект входа (18);
Проверка: Неверно;
Заменен на:Удален.

Имя: AcDbDictionaryWithDefault(E);
Значение: Объект входа (F);
Проверка: Неверно;
Заменен на:Удален.

Имя: AcDbDictionaryWithDefault(E);
Значение: Объект входа (F);
Проверка: Неверно;
Заменен на:Удален.
Файл он открыл, но отсутствует модель

>>// блоки пока не реализованы - может, из-за них, конечно...
Скорее всего так и есть. на модель и листы должны присутствовать описания блоков ИМХО

>>Ежели никто не подскажет/поделится, то следующее оповещение после реализации блоков =)
Автодеск или ОДА с радостью поделятся за $. Возможно стоить покопаться в исходниках qcad(недавно вышла свежая комьюнити версия), librecad и т.п. - может что и прояснится

trir
>>Сказали блок - значит блок, читай спецификацию!!!
Типичный ответ для этого форума)) вы ее сами та читали? пробовали чтонить по ней записать?
Автодесковская документация (как собственно и формат dwg) - образец того как надо вставлять бревна в колеса сторонним разработчикам - вроде всё есть, начинаешь копать, а ничего оказывается нет))

Последний раз редактировалось zamtmn, 11.09.2013 в 10:05.
zamtmn вне форума  
 
Автор темы   Непрочитано 11.09.2013, 09:59
#34
Аркос


 
Регистрация: 18.09.2012
Сообщений: 23


Да я уже заметил, я профукал в словаре инфу про листы.
Сейчас поправлю - посмотрим, прокатит ли без блоков.

>> Автокад при любых даже "несущественных" ошибках отказывается открывать-восстанавливать, выводя минимум инфы.
>> При существенных вообще молча падает.
При несущественных, вроде разбега указателей - он прекрасно правит, в остальных случаях мне пока хватало его инфы.
Он указывает, в какой строке споткнулся и в двух словах почему.

А вот про клоны - благодарю, что-то в руках не держал, так и не было мыслей.
Аркос вне форума  
 
Непрочитано 11.09.2013, 10:02
#35
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


В BLOCKS записаны все примитивы layout'а. В спецификации написано BLOCKS - не обязательная секция, если нет описания блоков, но layout'ы - это блоки, а значит с ними секция BLOCKS - обязательная
Что бы разобраться с dxf - нужен AcAd, в нём через entmake создать нужный примитив -> сохранить в dxf -> смотреть, что получилось -> читать спецификацию...
trir вне форума  
 
Автор темы   Непрочитано 11.09.2013, 10:11
#36
Аркос


 
Регистрация: 18.09.2012
Сообщений: 23


trir, я приводил цитатку из спецификации. И там таки ничего не сказано про обязан/не обязан. Там вообще мало что детализированно. Общие наброски.
Т.е. да, сам раздел блоков - необязателен. А обязателен ли блок для layout'а или нет - остаётся узнавать эмпирически.
Offtop: Понятно, что на практике он нужен. Иначе зачем он вообще? Но сейчас интересует - будет ли всё остальное без блока работать.
Потому что заниматься сразу всем - мозга не хватает, хочется идти последовательно.


А насчёт entmake не совсем понял. Можно разве создать объект и изолировать его в файл?
В противном случае, я, видимо, так и делаю.
1.dxf - файл, созданный ACAD'ом. 1.dxf.dxf - то, что получается после прогонки через мою софтину.
Аркос вне форума  
 
Непрочитано 11.09.2013, 10:18
#37
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>При несущественных, вроде...
Для меня всегда было загадкой почему автокад не хочет открыть (а главное восстановить!) файл если слой дефпоинтс сделан печатаемым и таких примеров куча. знаю что это прописано в спецификации, но восстановить та можно совсем без проблем)).
Сообщения об ошибках типа файлтакойта.cpp@строкатакаято тоже очень помогают в копаниях))
zamtmn вне форума  
 
Автор темы   Непрочитано 11.09.2013, 10:33
#38
Аркос


 
Регистрация: 18.09.2012
Сообщений: 23


Цитата:
Сообщение от zamtmn Посмотреть сообщение
Для меня всегда было загадкой почему автокад не хочет открыть (а главное восстановить!) файл если слой дефпоинтс сделан печатаемым и таких примеров куча. знаю что это прописано в спецификации, но восстановить та можно совсем без проблем)).
Согласен, мелкие огрехи и прочая дуракоустойчивость у них не фонтан. Запад же =)
Цитата:
Сообщение от zamtmn Посмотреть сообщение
Сообщения об ошибках типа файлтакойта.cpp@строкатакаято тоже очень помогают в копаниях))
Будете смеяться, мне помог пару раз =) Интуитивно догадался, в чём дело именно по имени файла.
А так, конечно, номер строки в недоступном исходнике помогает как припарка от гангрены.

Сейчас пошаманил в словаре - вернулся на круги своя, ошибка в начале словаря, идите лесом.
Кто что понимает в словарях?)
Вложения
Тип файла: dwg 1.dxf.dxf.dwg (13.6 Кб, 1745 просмотров)
Аркос вне форума  
 
Непрочитано 11.09.2013, 12:52
#39
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


я ниче не понимаю в словарях, но с учетом того что в файле проблемы с блоками, думаю ошибку в словаре можно вполне списать на них. (кстати ошибка в словаре начинающемся тамто, а не в начале словаря)
лог драфтсигта:
Цитата:
Информация:Проверьте восстановленную базу данных.
Ошибка:BlockTableRecord(23): Идентификатор начала блока должен быть Создан (Тест:Не верно)
Ошибка:BlockTableRecord(23): Идентификатор конца блока должен быть Создан (Тест:Не верно)
Ошибка:BlockTableRecord(1F): Идентификатор начала блока должен быть Создан (Тест:Не верно)
Ошибка:BlockTableRecord(1F): Идентификатор конца блока должен быть Создан (Тест:Не верно)
Ошибка:BlockTableRecord(1B): Идентификатор начала блока должен быть Создан (Тест:Не верно)
Ошибка:BlockTableRecord(1B): Идентификатор конца блока должен быть Создан (Тест:Не верно)
Информация:115 объектов проверено
Информация:Найдено ошибок во время проверки 6, исправлено 6
zamtmn вне форума  
 
Автор темы   Непрочитано 11.09.2013, 13:21
#40
Аркос


 
Регистрация: 18.09.2012
Сообщений: 23


Зайка в утке, утка - в мишутке...

А если точнее, то модель/лист - в блоке, блок - в таблице, таблица - в листе, лист - в словаре... разрабы - в мыле, Autodesk - в шоколаде.
Аркос вне форума  
 
Непрочитано 12.09.2013, 13:35
#41
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Аркос Посмотреть сообщение
Цитата:
Сообщение от zamtmn Посмотреть сообщение
Сообщения об ошибках типа файлтакойта.cpp@строкатакаято тоже очень помогают в копаниях))
Будете смеяться, мне помог пару раз =) Интуитивно догадался, в чём дело именно по имени файла.
А так, конечно, номер строки в недоступном исходнике помогает как припарка от гангрены.
Public symbols for AutoCAD 2012
Announcement: AutoCAD® 2014 debug symbols now available on the public server
Александр Ривилис вне форума  
 
Непрочитано 13.09.2013, 11:21
#42
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


Александр Ривилис
Это для отладки arx, по теме топика непоможет
zamtmn вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Экспорт в DXF из своего ПО



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу коллег-пользователей 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