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

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

Как залить примитив цветом в DXF?

Ответ
Поиск в этой теме
Непрочитано 29.07.2011, 14:02 #1
Как залить примитив цветом в DXF?
Vasyan
 
Программист, Электронщик, Музыкант, Звукоинженер
 
Красноярск
Регистрация: 29.07.2011
Сообщений: 7

Здравствуйте уважаемые знатоки автокада!
Задаю этот вопрос на форуме, так как после многочисленных поисков в интернете не нашел ответа на свой вопрос.
Суть вопроса такова: Пишу программу, которая выполняет экспорт чертежа в формате DXF,
при этом некоторые примитивы, к примеру CIRCLE, должны быть залиты определенным цветом.
вот типичный кусок файла DXF:

Код:
[Выделить все]
…
0
CIRCLE
8
Links
62
7
10
22.5
20
197.5
40
1.0
0
…
в результате окружность получается не залитой.
Теперь сам вопрос: что следует дописать в коде, чтобы окружность была залита черным цветом?
P.S. С заливкой прямоугольников уже разобрался, используя примитив SOLID.
Заранее благодарю.
Просмотров: 7250
 
Непрочитано 29.07.2011, 14:11
1 | #2
_Oleg_


 
Регистрация: 28.09.2006
Dnepropetrovsk
Сообщений: 683


Для круга и других сложных примитивов используй заливку сплошной штриховкой HATCH. Довольно сложное занятие.

http://www.autodesk.com/techpubs/autocad/acad2000/dxf/
_Oleg_ вне форума  
 
Непрочитано 29.07.2011, 14:32
#3
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Vasyan Посмотреть сообщение
С заливкой прямоугольников уже разобрался, используя примитив SOLID.
с кругами то-же самое
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 29.07.2011, 14:40
#4
Vasyan

Программист, Электронщик, Музыкант, Звукоинженер
 
Регистрация: 29.07.2011
Красноярск
Сообщений: 7
Отправить сообщение для Vasyan с помощью Skype™


Цитата:
Для круга и других сложных примитивов используй заливку сплошной штриховкой HATCH. Довольно сложное занятие.
Благодарствую за ссылку.
Можно какой-нибудь простой пример, и желательно для старых версий ACAD, так как на производстве, где будет внедрятся данная программа стоят старенькие 386 где автокад-12 ещё под MSDOS,
или старые Pentium-1 c 14-й версией.

Цитата:
с кругами то-же самое
Интересно каким-же образом?
Для прямоугольника всё понятно:
Код:
[Выделить все]
0
SOLID
8
Graph
10
0.0
20
0.0
11
10.0
21
0.0
12
0.0
22
10.0
13
10.0
23
10.0
Taм пары кодов 10,20;11,21;12,22;13,23 задают вершины прямоугольника, а окружность тогда как задать?

Последний раз редактировалось Vasyan, 29.07.2011 в 14:51. Причина: дополнение
Vasyan вне форума  
 
Непрочитано 29.07.2011, 14:50
#5
_Oleg_


 
Регистрация: 28.09.2006
Dnepropetrovsk
Сообщений: 683


Возможно я что-то не учел, но как объект SOLID можно применить для круга?

Цитата:
Solid group codes Group codes Description
100
Subclass marker (AcDbTrace)
10
First corner
DXF: X value; APP: 3D point
20, 30
DXF: Y and Z values of first corner
11
Second corner
DXF: X value; APP: 3D point
21, 31
DXF: Y and Z values of second corner
12
Third corner
XF: X value; APP: 3D point
22, 32
DXF: Y and Z values of third corner
13
Fourth corner. If only three corners are entered to define the SOLID, then the fourth corner coordinate is the same as the third.
DXF: X value; APP: 3D point
23, 33
DXF: Y and Z values of fourth corner
39
Thickness (optional; default = 0)
210
Extrusion direction (optional; default = 0, 0, 1)
DXF: X value; APP: 3D vector
220, 230
DXF: Y and Z values of extrusion direction (optional)
Для старых версий не скажу точно, но по всей видимости, нельзя применить заливку круга. Там вроде только объект SOLID и все. Может кто меня поправит...

Вот сишная библиотека для самых старых версий
http://www.codeproject.com/KB/librar...aspx?artkw=dxf
_Oleg_ вне форума  
 
Автор темы   Непрочитано 29.07.2011, 15:09
#6
Vasyan

Программист, Электронщик, Музыкант, Звукоинженер
 
Регистрация: 29.07.2011
Красноярск
Сообщений: 7
Отправить сообщение для Vasyan с помощью Skype™


Цитата:
Сообщение от _Oleg_ Посмотреть сообщение
Возможно я что-то не учел, но как объект SOLID можно применить для круга?



Для старых версий не скажу точно, но по всей видимости, нельзя применить заливку круга. Там вроде только объект SOLID и все. Может кто меня поправит...

Вот сишная библиотека для самых старых версий
http://www.codeproject.com/KB/librar...aspx?artkw=dxf
За библиотеку сэнкс, разберусь.
Но насчет приведенного Вами кода будет рисоваться четырехугольник.
Объект SOLID достаточно интересный объект, может быть и прямоугольником, квадратом, ромбом, параллелограммом, трапецией итд. даже треугольником.
Вот и приходит мысль, то что любой многоугольник (в т.ч окружность) можно имитировать объектами SOLID, но это не есть гуд, зачем городить огород, когда наверняка есть достаточно простое решение, хотя подобных вопросов на англоязычных ресурсах нашел порядка десятка, но увы надлежащих ответов там нет.
Vasyan вне форума  
 
Непрочитано 29.07.2011, 15:14
#7
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 428


Используй полилинию, составленную из 2-х дуг радиусом=R/2 с "Global width"=R
ытя вне форума  
 
Непрочитано 29.07.2011, 15:22
#8
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Vasyan Посмотреть сообщение
Можно какой-нибудь простой пример, и желательно для старых версий ACAD, так как на производстве, где будет внедрятся данная программа стоят старенькие 386 где автокад-12 ещё под MSDOS
Вот это круто, попутал я sold'ы с region'ами, хотя конечно можно и ими закрасить (только поколдовать придеться и "точность" приближения задавать) - посему советую использовать "толстую", замкнутую, сопряженную полилинию - хотя не уверен что в настолько старом автокаде они были.
p.s. вобщем пока писал - уже оба варианта появились
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 29.07.2011, 15:32
#9
_Oleg_


 
Регистрация: 28.09.2006
Dnepropetrovsk
Сообщений: 683


Еще скажу два слова, на счет примеров под старые кады, можно у себя на компе поставить самый старый кад и в нем рисовать примитивы и сохранять в формате dxf, а потом смотреть их код.
_Oleg_ вне форума  
 
Автор темы   Непрочитано 29.07.2011, 15:42
#10
Vasyan

Программист, Электронщик, Музыкант, Звукоинженер
 
Регистрация: 29.07.2011
Красноярск
Сообщений: 7
Отправить сообщение для Vasyan с помощью Skype™


Цитата:
Сообщение от _Oleg_ Посмотреть сообщение
Возможно я что-то не учел, но как объект SOLID можно применить для круга?
Вот сишная библиотека для самых старых версий
http://www.codeproject.com/KB/librar...aspx?artkw=dxf
В данной библиотеке нет ничего подходящего для решения данной проблемы.

Цитата:
Сообщение от ытя Посмотреть сообщение
Используй полилинию, составленную из 2-х дуг радиусом=R/2 с "Global width"=R
Полилинии рисуются тоже без заливок.

Думаю использовать HATCH. Но вот примеров использования его не нашел. Может простой пример кто-нибудь приведёт?

Цитата:
Еще скажу два слова, на счет примеров под старые кады, можно у себя на компе поставить самый старый кад и в нем рисовать примитивы и сохранять в формате dxf, а потом смотреть их код.
Как вариант сойдёт.
Vasyan вне форума  
 
Непрочитано 29.07.2011, 15:46
#11
_Oleg_


 
Регистрация: 28.09.2006
Dnepropetrovsk
Сообщений: 683


Vasyan

HATCH насколько я помню под старые кады тоже не идет
_Oleg_ вне форума  
 
Непрочитано 29.07.2011, 15:47
#12
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Vasyan Посмотреть сообщение
и желательно для старых версий ACAD, так как на производстве, где будет внедрятся данная программа стоят старенькие 386 где автокад-12 ещё под MSDOS,
или старые Pentium-1 c 14-й версией.
Штриховка SOLID появилась гораздо позже. По поводу 14 версии нужно проверить, есть ли там штриховка solid. Раньше для получения эффекта сплошной заливки использовали обычную штриховку (например ANSI31) с мелким шагом. Но это здорово утяжеляло чертеж. Здесь в #7 есть пример лиспа для создания штриховки. Коды полученного списка для создания штриховки должны совпадать с dxf кодами.
Наиболее приемлемый, на мой взгляд, вариант заливки круга - это использовать полилинию с дуговыми сегментами и заданной глобальной шириной. Образец - команда Автокада _Donut (внутренний диаметр - 0 , внешний = твоему диаметру круга). Как высчитать кривизну сегментов смотри здесь через Там применено "хитрое" оформление. Чтобы увидеть текст нужно выделить все (ctrl+A).
Можно здесь посмотреть готовые ф-ции на лисп и переписать их для своей программы. Только учти, что полилинию в dxf нужно писать в старом (heavy) формате
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 29.07.2011 в 15:57.
VVA вне форума  
 
Непрочитано 29.07.2011, 15:48
#13
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Vasyan Посмотреть сообщение
Полилинии рисуются тоже без заливок.
Имеется в виду с толщиной, а не заливкой.
Вложения
Тип файла: dwg
DWG 2000
пример.dwg (45.9 Кб, 1522 просмотров)
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 29.07.2011 в 15:54.
Дима_ вне форума  
 
Автор темы   Непрочитано 29.07.2011, 16:59
#14
Vasyan

Программист, Электронщик, Музыкант, Звукоинженер
 
Регистрация: 29.07.2011
Красноярск
Сообщений: 7
Отправить сообщение для Vasyan с помощью Skype™


Цитата:
Сообщение от VVA Посмотреть сообщение
Штриховка SOLID появилась гораздо позже. По поводу 14 версии нужно проверить, есть ли там штриховка solid. Раньше для получения эффекта сплошной заливки использовали обычную штриховку (например ANSI31) с мелким шагом. Но это здорово утяжеляло чертеж. Здесь в #7 есть пример лиспа для создания штриховки. Коды полученного списка для создания штриховки должны совпадать с dxf кодами.
Наиболее приемлемый, на мой взгляд, вариант заливки круга - это использовать полилинию с дуговыми сегментами и заданной глобальной шириной. Образец - команда Автокада _Donut (внутренний диаметр - 0 , внешний = твоему диаметру круга). Как высчитать кривизну сегментов смотри здесь через Там применено "хитрое" оформление. Чтобы увидеть текст нужно выделить все (ctrl+A).
Можно здесь посмотреть готовые ф-ции на лисп и переписать их для своей программы. Только учти, что полилинию в dxf нужно писать в старом (heavy) формате
Спасибо за совет, насколько я знаю сплошная заливка была в 14 версии, по поводу всяких ЛИСПов могу сказать, что они применимы лишь в Автокаде, и к средам разработки приложений,
таких как Microsoft Visual Studio или Delphi, никакого отношения не имеют (если конечно дополнительно не установлены специальные модуля).
А так как разрабатываемая мною программа лишь генерирует файл DXF, который кстати приходится просматривать бесплатными программами-просмотрщиками или импортировать в CorelDraw, нет возможности нарисовать залитую цветом окружность в Автокаде и сгенерировать DXF (за неимением Автокада).
Цитата:
Имеется в виду с толщиной, а не заливкой. Вложения пример.dwg (45.9 Кб, 6 просмотров)


__________________
Данный пример в SolidWorks eDrawings выдал окружность заполненную сегментами, а при импорте в CorelDraw преобразовал в незамкнутую кривую.
Хотя как рассказывают коллеги, последние версии CorelDraw достаточно точно преобразовывают 2D-чертежи из Автокада, даже со штриховками, которые кстати нельзя модифицировать в Кореле.
________________________________________________________

UPDATE: Скачал бесплатный A9CAD, нарисовал в нём окружность с заливкой и был поражен размером DXF файла ~25 Kb
это всё для того, чтобы описать единственную залитую окружность Моя программа делает файл DXF с окружностью размером 435 байт всего. Зато имеется возможность разобраться, отсеить всё ненужное и добится результата...

Последний раз редактировалось Vasyan, 30.07.2011 в 09:14. Причина: UPDATE
Vasyan вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как залить примитив цветом в DXF?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите, существуют ли практические руководства по Lisp? vn LISP 261 26.11.2015 13:27
Как поменять 3D высоту на Уровень? DmAK AutoCAD 18 15.06.2015 09:14
dxf код 284 kserg Программирование 22 29.07.2011 13:20