- •AutoCad: доступно кожному
- •1. Вступ
- •1.1 AutoCad – система автоматизованого проектування
- •1.2 Векторна і растрова графіка
- •1.3 Інтерфейс користувача AutoCad
- •2. Методи точного креслення
- •2.1 Системи координат
- •2.2 Об’єктні прив’язки
- •Об’єктні прив’язки
- •2.3 Полярне відстеження
- •2.4 Відстеження об’єктних прив’язок
- •2.5 Методи крок, сітка, орто
- •3. Шари і робота з ними
- •4. Палітра властивостей об’єктів
- •5. Основні типи графічних об’єктів AutoCad
- •5.1 Точка
- •5.2.2 Пряма і промінь
- •5.2.4 Мультилінія
- •5.2.5 Багатокутник
- •5.2.6 Прямокутник
- •5.3 Криволінійні об’єкти
- •5.3.1 Сплайн
- •5.3.2 Коло
- •5.3.3 Дуга
- •5.4 Текст
- •5.4.1 Однорядковий
- •5.4.2 Багаторядковий
- •6. Виділення об’єктів в AutoCad
- •7. Основні операції редагування об’єктів
- •7.1 Видалення, копіювання, вставка об’єктів
- •7.2 Розмноження об'єктів масивом
- •7.3 Перенесення об’єктів
- •7.4 Поворот об’єктів
- •7.5 Масштабування об’єктів
- •7.6 Дзеркальне відображення об’єктів
- •7.7 Створення подібних об'єктів
- •7.8 Команда фаска
- •7.9 Команда спряження
- •8. Команди оформлення креслень
- •8.1 Штрихування
- •8.2 Встановлення розмірів і управління розмірними стилями
- •9. Більш складні об'єкти AutoCad
- •9.1 Таблиці
- •9.2 Блоки
- •10. Керування переглядом креслення
- •10.1 Зумування
- •10.2 Панорамування
- •11. Підготовка і випуск креслень
- •11.1 Простір моделі і листа
- •11.2 Видові екрани
- •11.3 Виведення на друк
- •12. Файли обміну кресленнями
- •12.1 Формат файлу обміну кресленнями dxf
- •Загальна структура файлу
- •12.2 Приклад формування файлу dxf в Turbo Pascal
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
Загальна структура файлу
Розділ ЗАГОЛОВКУ /HEADER/ містить загальну інформацію про креслення
Розділ ТАБЛИЦЬ /TABLES/ містить визначення іменованих елементів:
таблиця типів ліній
таблиця шарів
таблиця типів шрифтів
таблиця видів
Розділ БЛОКІВ /BLOCKS/ містить графічні примітиви визначень блоків
Розділ ПРИМІТИВІВ /ENTITIES/ містить графічні примітиви креслення, в тому числі посилання на блоки
Розділ КІНЦЯ ФАЙЛУ /EOF/
Якщо файл креслення типу dwg в середовищі AutoCAD зберегти з розширенням dxf (не перейменувати, а зберегти в іншому форматі), а потім переглянути в будь-якому текстовому редакторі, можна побачити інформацію дуже великого обсягу, на перший погляд незрозумілу і надлишкову. Не будемо детально зупинятися на її аналізі, розглянемо лише необхідні для формування dxf - файлу розділи. Зазначимо, що всі команди і повідомлення dxf - файлу традиційно англомовні. Для створення двохвимірних креслень, які містять основні графічні примітиви, запропонуємо такі елементи, оформлені у вигляді процедур на мові програмування Turbo Pascal:
Початок секції примітивів
Накреслення лінії
Накреслення кола
Накреслення тексту
Кінець секції з кінцем файлу
Секція таблиць з початком і кінцем (додатково для позначення типів ліній і шарів)
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, після якого можна знайти опис використаних Вами примітивів. Копіюйте потрібні частини тексту і використовуйте їх в Вашій програмі, попередньо відредагувавши їх.
Література
Соколова Т.Ю. AutoCAD. Легкий старт. – СПб. : Питер, 2006. – 160 с.
Смирнов Д.В. Основы черчения в AutoCAD. – М. : НТ Прогресс, 2006. – 114 с.
Финкельштейн Эллен. AutoCAD 2009 и AutoCAD LT 2009. Библия пользователя. : Пер. с англ. – М. : ООО «И.Д. Вильямс», 2009. – 1376 с.
