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

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

Как правильно создать DXF?

Ответ
Поиск в этой теме
Непрочитано 12.06.2007, 16:46 #1
Как правильно создать DXF?
mmax
 
Программист широкого профиля.
 
Челябинск
Регистрация: 08.09.2005
Сообщений: 722

Сохранил пустой чертеж как DXF. И экспериментально определил, что для того чтобы в обычном блокноте добавить в него полилинию достаточно просто в определенном месте файла написать вот такое:
Код:
[Выделить все]
0
SECTION
  2
ENTITIES
  0
LWPOLYLINE
  5
10C
330
1F
100
AcDbEntity
  8
0
420
  2178526
410
Model
100
AcDbPolyline
 90
        2
 70
     0
 43
1.0
 10
0.0
 20
0.0
 10
1.0
 20
0.0
  0
ENDSEC
Единственный недостаток это коды 5 и 330. Под ними хранятся HEX-числа и от балды их ставить нельзя. Для следующей полилинии пробовал менять их по принципу i+1 иногда Автокад выдает сообщение о поврежденном файле, а иногда fatal-error, иногда вторая полилиния успешно получается.
И если так подумать, то в данном примере в десятичной форме получаются чистла (5 . 268) (330 . 31), и если формировать метки по принципу i+1, то в итоге получится их совпадение, правда о последствиях совпадения значений этих кодов я также ничего не знаю. К сожалению без этих кодов DXF-файл получается поврежденным.

По какому принципу фомируются метки объектов под кодами 5 и 330?
Просмотров: 9798
 
Непрочитано 13.06.2007, 08:26
#2
@LEXx

Инженер-строитель ПГС
 
Регистрация: 29.07.2006
г. Владимир
Сообщений: 1,125
Отправить сообщение для @LEXx с помощью Skype™


А это тебе зачем?
Хочешь слепых научить чертить в "Блокноте" на клаве с выпуклыми буквами?
__________________
Доверяй, но проверяйся
@LEXx вне форума  
 
Непрочитано 13.06.2007, 09:45
#3
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
По какому принципу фомируются метки объектов под кодами 5 и 330?
По принципам, указанным в DXF Reference. Его надо долго изучать, чтобы понять, что этим не стоит заниматься с помощью "обычного блокнота".

Когда DXF генерирует AutoCAD, он знает, как присваивать handle. Когда DXF генерирует человек, он должен знать как это делать. Если еще хочется помучиться, можно почитать старую книгу Джампа, в которой он утверждал, что настоящие программисты работают с DXF, и только мазохисты с DWG. Вся книга про то, как писать на C DXF. И только в конце автор обнаружил, что есть и другие способы для работы (Автолисп, например).
ShaggyDoc вне форума  
 
Непрочитано 13.06.2007, 15:37
#4
DonJad


 
Регистрация: 20.12.2005
Murmansk
Сообщений: 106


Гы про 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, Акад спокойно хавает.
DonJad вне форума  
 
Непрочитано 13.06.2007, 18:07
#5
zamtmn

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


вот еще про хендлы http://www.autocad.ru/cgi-bin/f1/board.cgi?t=10303Nn
zamtmn вне форума  
 
Автор темы   Непрочитано 15.06.2007, 19:39
#6
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


У меня есть маленькая идейка по векторизации. Поэтому встроенные в автокад средства не подходят тк они не умеют обращаться с картинками.

вобщем решил что данные будут формироваться в стороннем приложении, а рисоваться будут лиспом. Так всетаки легче.

Почему не работает?:
Код:
[Выделить все]
(setq color 15657980)
(setq X1 10)
(setq X2 20)
(setq Y1 30)
(setq Y2 40) ;эти значения формируются
; другими функциями и могут быть любыми

(entmake (list
                  '(0 . "lwpolyline")
                   (cons 420 color)
                   (list 10 X1 Y1)
                   (list 10 X2 Y2)
));возращает nil
mmax вне форума  
 
Непрочитано 15.06.2007, 22:04
#7
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,829


Ну, во-первых, вопросы с TrueColor уже несколько раз поднимались на форуме - что здесь, что на autocad.ru, поищи. В ACAD немного нестандартное, как я понял, представление таких цветов. Во-вторых, ты забыл про 62 группу - разве ее не надо задавать?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 16.06.2007, 06:19
#8
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Цитата:
Сообщение от Кулик Алексей aka kpblc
Ну, во-первых, вопросы с TrueColor уже несколько раз поднимались на форуме - что здесь, что на autocad.ru, поищи. В ACAD немного нестандартное, как я понял, представление таких цветов. Во-вторых, ты забыл про 62 группу - разве ее не надо задавать?
420 разве недостаточно?

Вот такой работает:
Код:
[Выделить все]
(entmake (list
                  '(0 . "line")
                   (cons 420 color)
                   (list 10 X1 Y1)
                   (list 11 X2 Y2)
));возращает список
Вот такой возращает список , но всеравно ничего не рисует

(
Код:
[Выделить все]
entmake (list
                  '(0 . "polyline")
                   (cons 420 color)
                   (list 10 X1 Y1)
                   (list 11 X2 Y2)
));возращает список
mmax вне форума  
 
Непрочитано 16.06.2007, 13:49
#9
Евгений А.

Армспорт
 
Регистрация: 18.07.2006
Ейск
Сообщений: 355


->mmax
Всё правильно. Читай в справке "Creating Complex Entities"
Полилиния как к примеру и блок относится к составным примитивам и с ними команда Entmake работает немного в другом режиме: сначала создаётся/переопределяется составной примитив, потом все подпримитивы и в конце надо создать метку конца описания примитива ("SEQEND" для примитивов и "ENDBLK" для описания блока)
Вот пример создания полилинии из справки:

Код:
[Выделить все]
(entmake '((0 . "POLYLINE")    ; Object type
          (62 . 5)             ; Color
          (6 . "dashed")       ; Linetype
          (66 . 1)             ; Vertices follow
) )
(entmake '((0 . "VERTEX")      ; Object type
          (10 1.0 1.0 0.0)     ; Start point
) )
(entmake '((0 . "VERTEX")      ; Object type
          (10 4.0 6.0 0.0)     ; Second point
) )
(entmake '((0 . "VERTEX")      ; Object type
          (10 3.0 2.0 0.0)     ; Third point
) )
(entmake '((0 . "SEQEND")))    ; Sequence end
Евгений А. вне форума  
 
Непрочитано 17.06.2007, 22:55
#10
Александр Ривилис

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


LWPOLYLINE, а не POLYLINE если ты хочешь работать со списком вершин в одном примитиве, а не заморачиваться с комплексными примитивами.
Александр Ривилис вне форума  
 
Непрочитано 16.10.2014, 15:26
#11
ЕвгенийЕвг


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


когда в мапинфо импортируешь DXF выходит вот такое сообщение:: (ОШИБКА не распознан код элемента DXF строка 23) что это может быть может кто нибудь подскажет заранее спасибо))
ЕвгенийЕвг вне форума  
 
Непрочитано 16.10.2014, 15:33
#12
trir


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


ЕвгенийЕвг, телепатов нет. Где файл? Какая версия mapinfo?
trir вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как правильно создать DXF?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск