Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
AutoCAD_pidruch.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

12.1 Формат файлу обміну кресленнями dxf

DXF (англ. Drawing eXchange Format) — відкритий формат файлів для обміну графічною інформацією між додатками САПР. Нижче приведений фрагмент dxf - файлу, що відповідає кресленню на рис.64:

0

SECTION

2

ENTITIES

0

circle

8

0

62

5

10

1.20000000000000E+0001

20

1.80000000000000E+0001

40

1.00000000000023E-0001

0

circle

8

0

62

5

10

1.90000000000000E+0001

20

1.90000000000000E+0001

40

1.00000000000023E-0001

0

line

8

0

62

5

10

1.20989949493669E+0001

20

1.80141421356238E+0001

11

1.89010050506331E+0001

21

1.89858578643762E+0001

……………………………….

0

circle

8

0

62

6

10

3.60000000000000E+0001

20

1.60000000000000E+0001

40

4.49999999999818E-0001

0

text

8

0

62

4

10

3.56500000000233E+0001

20

1.58249999999971E+0001

40

3.49999999999909E-0001

1

61

50

0.00000000000000E+0000

0

ENDSEC

0

EOF

Загальна структура файлу

  1. Розділ ЗАГОЛОВКУ /HEADER/ містить загальну інформацію про креслення

  2. Розділ ТАБЛИЦЬ /TABLES/ містить визначення іменованих елементів:

    • таблиця типів ліній

    • таблиця шарів

    • таблиця типів шрифтів

    • таблиця видів

  3. Розділ БЛОКІВ /BLOCKS/ містить графічні примітиви визначень блоків

  4. Розділ ПРИМІТИВІВ /ENTITIES/ містить графічні примітиви креслення, в тому числі посилання на блоки

  5. Розділ КІНЦЯ ФАЙЛУ /EOF/

Якщо файл креслення типу dwg в середовищі AutoCAD зберегти з розширенням dxf (не перейменувати, а зберегти в іншому форматі), а потім переглянути в будь-якому текстовому редакторі, можна побачити інформацію дуже великого обсягу, на перший погляд незрозумілу і надлишкову. Не будемо детально зупинятися на її аналізі, розглянемо лише необхідні для формування dxf - файлу розділи. Зазначимо, що всі команди і повідомлення dxf - файлу традиційно англомовні. Для створення двохвимірних креслень, які містять основні графічні примітиви, запропонуємо такі елементи, оформлені у вигляді процедур на мові програмування Turbo Pascal:

  1. Початок секції примітивів

  2. Накреслення лінії

  3. Накреслення кола

  4. Накреслення тексту

  5. Кінець секції з кінцем файлу

  6. Секція таблиць з початком і кінцем (додатково для позначення типів ліній і шарів)

12.2 Приклад формування файлу dxf в Turbo Pascal

Розглянемо процедури на мові програмування Turbo Pascal, які цілком можна використати для формування dxf - файлу. В даному прикладі f0 – файл, який слід визначити з розширенням dxf і відкрити для запису. Файл dxf у найпростішому випадку починається з секції примітивів (процедура w1). Далі, в залежності від задачі, що вирішується, багатократно (у циклі) або єдиний раз викликаються процедури w2 (LINE – лінія), w3 (CIRCLE – коло), w4 (TEXT – текст) у певній послідовності. У разі необхідності використання інших графічних примітивів (дуга, прямокутник, і т.д.) слід самостійно, по аналогії, дописати відповідні процедури.

procedure w1; { Початок секції примітивів }

begin

writeln(f0,0);

writeln(f0,'SECTION');

writeln(f0,2);

writeln(f0,'ENTITIES');

end;

procedure w2; { Накреслення лінії }

begin

writeln(f0,0);

writeln(f0,'LINE');

writeln(f0,8);

writeln(f0,sim1);

writeln(f0,62);

writeln(f0,CV);

writeln(f0,6);

writeln(f0,sim2);

writeln(f0,10);

writeln(f0,ix);

writeln(f0,20);

writeln(f0,iy);

writeln(f0,11);

writeln(f0,ix1);

writeln(f0,21);

writeln(f0,iy1);

end;

procedure w3; { Накреслення кола }

begin

writeln(f0,0);

writeln(f0,'CIRCLE');

writeln(f0,8);

writeln(f0, sim1);

writeln(f0,62);

writeln(f0,CV);

writeln(f0,6);

writeln(f0,sim2);

writeln(f0,10);

writeln(f0,ix);

writeln(f0,20);

writeln(f0,iy);

writeln(f0,40);

writeln(f0,irad);

end;

procedure w4; { Накреслення тексту }

begin

writeln(f0,0);

writeln(f0,'TEXT');

writeln(f0,8);

writeln(f0,sim1);

writeln(f0,62);

writeln(f0,CV);

writeln(f0,6);

writeln(f0,sim2);

writeln(f0,10);

writeln(f0,ix);

writeln(f0,20);

writeln(f0,iy);

writeln(f0,40);

writeln(f0,v);

writeln(f0,1);

writeln(f0,sim);

writeln(f0,50);

writeln(f0,ug);

end;

procedure w5; { Кінець секції з кінцем файлу }

begin

writeln(f0,0);

writeln(f0,'ENDSEC');

writeln(f0,0);

writeln(f0,'EOF');

end;

procedure w6; { секція таблиць з початком і кінцем для визначення типів ліній і шарів }

begin

writeln(f0,0);

writeln(f0,'SECTION');

writeln(f0,2);

writeln(f0,'TABLES');

writeln(f0,0);

writeln(f0,'TABLE');

writeln(f0,2);

writeln(f0,'LTYPE');

writeln(f0,70);

writeln(f0,5);

writeln(f0,0);

writeln(f0,'LTYPE');

writeln(f0,2);

writeln(f0,'CONTINUOUS');

writeln(f0,70);

writeln(f0,64);

writeln(f0,3);

writeln(f0,'SOLID LINE');

writeln(f0,72);

writeln(f0,65);

writeln(f0,73);

writeln(f0,0);

writeln(f0,40);

writeln(f0,0.0);

writeln(f0,0);

writeln(f0,'LTYPE');

writeln(f0,2);

writeln(f0,'DOT');

writeln(f0,70);

writeln(f0,64);

writeln(f0,3);

writeln(f0,'...............................................');

writeln(f0,72);

writeln(f0,65);

writeln(f0,73);

writeln(f0,2);

writeln(f0,40);

writeln(f0,0.3);

writeln(f0,49);

writeln(f0,0.0);

writeln(f0,49);

writeln(f0,-0.3);

writeln(f0,0);

writeln(f0,'LTYPE');

writeln(f0,2);

writeln(f0,'DIVIDE');

writeln(f0,70);

writeln(f0,64);

writeln(f0,3);

writeln(f0,'__ . . __ . . __ . . __ . . __ . . __ . . __');

writeln(f0,72);

writeln(f0,65);

writeln(f0,73);

writeln(f0,6);

writeln(f0,40);

writeln(f0,2.15);

writeln(f0,49);

writeln(f0,0.75);

writeln(f0,49);

writeln(f0,-0.5);

writeln(f0,49);

writeln(f0,0.0);

writeln(f0,49);

writeln(f0,-0.4);

writeln(f0,49);

writeln(f0,0.0);

writeln(f0,49);

writeln(f0,-0.5);

writeln(f0,0);

writeln(f0,'LTYPE');

writeln(f0,2);

writeln(f0,'HIDDEN');

writeln(f0,70);

writeln(f0,64);

writeln(f0,3);

writeln(f0,'_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ');

writeln(f0,72);

writeln(f0,65);

writeln(f0,73);

writeln(f0,2);

writeln(f0,40);

writeln(f0,0.7);

writeln(f0,49);

writeln(f0,0.4);

writeln(f0,49);

writeln(f0,-0.3);

writeln(f0,0);

writeln(f0,'LTYPE');

writeln(f0,2);

writeln(f0,'DASHDOT');

writeln(f0,70);

writeln(f0,64);

writeln(f0,3);

writeln(f0,'__ . __ . __ . __ . __ . __ . __ . __ . __ . __');

writeln(f0,72);

writeln(f0,65);

writeln(f0,73);

writeln(f0,4);

writeln(f0,40);

writeln(f0,1.3);

writeln(f0,49);

writeln(f0,0.7);

writeln(f0,49);

writeln(f0,-0.3);

writeln(f0,49);

writeln(f0,0.0);

writeln(f0,49);

writeln(f0,-0.3);

writeln(f0,0);

writeln(f0,'ENDTAB');

writeln(f0,0);

writeln(f0,'TABLE');

writeln(f0,2);

writeln(f0,'LAYER');

writeln(f0,70);

writeln(f0,4);

writeln(f0,0);

writeln(f0,'LAYER');

writeln(f0,2);

writeln(f0,'SET');

writeln(f0,70);

writeln(f0,0);

writeln(f0,62);

writeln(f0,7);

writeln(f0,6);

writeln(f0,'CONTINUOUS');

writeln(f0,0);

writeln(f0,'LAYER');

writeln(f0,2);

writeln(f0,'NOM');

writeln(f0,70);

writeln(f0,0);

writeln(f0,62);

writeln(f0,7);

writeln(f0,6);

writeln(f0,'CONTINUOUS');

writeln(f0,0);

writeln(f0,'LAYER');

writeln(f0,2);

writeln(f0,'RA');

writeln(f0,70);

writeln(f0,0);

writeln(f0,62);

writeln(f0,7);

writeln(f0,6);

writeln(f0,'CONTINUOUS');

writeln(f0,0);

writeln(f0,'LAYER');

writeln(f0,2);

writeln(f0,'PODX');

writeln(f0,70);

writeln(f0,0);

writeln(f0,62);

writeln(f0,7);

writeln(f0,6);

writeln(f0,'CONTINUOUS');

writeln(f0,0);

writeln(f0,'ENDTAB');

writeln(f0,0);

writeln(f0,'ENDSEC');

end;

Якщо тип ліній або шар змінюється, останню процедуру (w6) в тексті програми слід викликати першою (перед w1). При незмінному типу ліній процедуру w6 не включають.

Файл dxf складається з груп, кожна з яких містить два рядка. В першому рядку розміщується код групи, в другому – значення групи. Тип значення залежить від коду групи:

0 – 9 рядковий тип

10 – 59 дійсний тип

60 – 79 цілий тип

Розглянемо загальне призначення кодів деяких груп (ті, що завжди виконують однакову функцію, відмічені словом "фіксований"):

0 – початок графічного примітива, входу в таблицю або розділювача файлів

1 – початкове текстове значення для графічного примітива

2 – ім’я; описувач атрибута, ім’я блока, і т.д.

3-5 – інші текстові або найменовані значення

6 – ім’я типа лінії (фіксоване)

7 – ім’я типа текстового шрифту (фіксоване)

8 – ім’я шару (фіксоване)

9 – ідентифікатор імені змінної (використовується тільки в розділі ЗАГОЛОВОК файлу)

10 – початкова координата Х (початкова точка лінії або текстового графічного примітива, центр кола і т.д.)

11-18 – інші координати Х

20 – початкова координата Y

21-28 – інші координати Y

40-48 – значення з плаваючою комою (висота тексту, масштабні коефіцієнти і т.д.)

49 – повторне значення (багатократні групи 49 можуть попадатися в одному графічному примітиві для таблиць змінної довжини (довжини штрихів в таблиці LTYPE)

50-58 – кути

62 – номер кольору (фіксоване)

66 – прапорець "Далі йдуть графічні примітиви" (фіксоване)

70-78 – цілочисельні значення (наприклад, кількість повторень)

Наведені процедури – тільки приклади використання графічних примітивів для створення файлів з розширенням dxf. Їх можна змінювати, прибирати зайве, поповнювати в залежності від потреб користувача. Тобто, відштовхуючись від них, можна програмно створювати файли креслень, а потім просто відкривати їх в середовищі AutoCAD, що іноді буває зручніше і швидше, ніж креслити власноруч.

На прикладі процедури накреслення лінії (w2) пояснимо використання пари рядків для опису відповідних дій.

writeln(f0,0);

writeln(f0,'LINE');

Початок графічного примітиву накреслення лінії. 0 – початок графічного примітива, слово LINE записане в лапках як текстова константа.

writeln(f0,8);

writeln(f0,sim1);

Визначення шару, якщо їх декілька. 8 – ім’я шару, змінній sim1 рядкового типу в програмі присвоюється назва потрібного шару (у лапках). У разі наявності тільки одного шару замість sim1 слід поставити 0, тобто writeln(f0,0);.

writeln(f0,62);

writeln(f0,CV);

Визначення кольору. Якщо колір один і визначається за замовчуванням, цю пару рядків можна вилучити з процедури. 62 – номер кольору, CV – змінній CV цілого типу в програмі присвоюється потрібний номер (0 – чорний, 1 – червоний, 5 – синій, …)

writeln(f0,6);

writeln(f0,sim2);

Визначення типу лінії. Якщо тип один і визначається за замовчуванням, цю пару рядків можна вилучити з процедури. 6 – ім’я типа лінії, змінній sim2 рядкового типу в програмі присвоюється назва потрібного типу лінії (у лапках).

writeln(f0,10);

writeln(f0,ix);

writeln(f0,20);

writeln(f0,iy);

writeln(f0,11);

writeln(f0,ix1);

writeln(f0,21);

writeln(f0,iy1);

Ці чотири пари рядків (разом з першою парою) є необхідними і визначають координати початку і кінця відрізку. 10 – початкова координата Х, змінній ix дійсного типу присвоюється потрібне значення; 20 – початкова координата Y, змінній iy дійсного типу присвоюється потрібне значення; 11, 21 – кінцеві координати Х і Y, змінним ix1 і iy1 присвоюються потрібні значення.

В процедурі накреслення кола w3 розглянемо тільки три пари рядків, які визначають координати центру кола (ix, iy) і радіус irad:

writeln(f0,10);

writeln(f0,ix);

writeln(f0,20);

writeln(f0,iy);

writeln(f0,40);

writeln(f0,irad);

В процедурі накреслення тексту w4 розглянемо п’ять пар рядків, які визначають координати початку тексту (ix, iy), висоту символів v, сам текст sim і кут нахилу тексту ug.

writeln(f0,10);

writeln(f0,ix)

writeln(f0,20);

writeln(f0,iy);

writeln(f0,40);

writeln(f0,v);

writeln(f0,1);

writeln(f0,sim);

writeln(f0,50);

writeln(f0,ug);

Структуру файлу dxf Ви завжди зможете переглянути будь-яким текстовим редактором, якщо накреслите в середовищі AutoCAD найпростіший малюнок і збережете його з розширенням dxf. У великому файлі слід відшукати слово ENTITIES, після якого можна знайти опис використаних Вами примітивів. Копіюйте потрібні частини тексту і використовуйте їх в Вашій програмі, попередньо відредагувавши їх.

Література

  1. Соколова Т.Ю. AutoCAD. Легкий старт. – СПб. : Питер, 2006. – 160 с.

  2. Смирнов Д.В. Основы черчения в AutoCAD. – М. : НТ Прогресс, 2006. – 114 с.

  3. Финкельштейн Эллен. AutoCAD 2009 и AutoCAD LT 2009. Библия пользователя. : Пер. с англ. – М. : ООО «И.Д. Вильямс», 2009. – 1376 с.

51

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]