русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2015-06-12; просмотров: 561; Нарушение авторских прав


Розглянемо процедури на мові програмування 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);



<== предыдущая лекция | следующая лекция ==>
Загальна структура файлу | Методические рекомендации по переводу файлов из программы AutoCAD в jpeg


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 2.065 сек.