Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 400108.doc
Скачиваний:
3
Добавлен:
30.04.2022
Размер:
570.88 Кб
Скачать

ГОУВПО «Воронежский государственный технический

университет»

Воронежский государственный технический университет

Кафедра компьютерных интеллектуальных технологий

проектирования

300-2009

Методические указания

для выполнения курсовой работы

по дисциплине «Компьютерная графика»

для студентов специальности 230104

«Системы автоматизированного проектирования»

очной формы обучения

Воронеж 2009

Составители: д-р техн. наук Е.Д. Федорков,

канд. техн. наук А.С. Кольцов

УДК 681.3

Методические указания для выполнения курсовой работы по дисциплине «Компьютерная графика» для студентов специальности 230104 «Системы автоматизированного проектирования» очной формы обучения / ГОУВПО «Воронежский государственный технический университет»; сост. Е.Д. Федорков, А.С. Кольцов. Воронеж, 2009. 42 с.

Методические указания содержат рекомендации по использованию основных возможностей входного языка Visual Lisp системы AutuCAD, автоматизирующих процесс проектирования чертежей деталей и предоставляющих возможности доступа к системным примитивам ввода-вывода. Курсовую работу оформить согласно требованиям СТП ВГТУ 62-2007.

Методические указания подготовлены на магнитном носителе в текстовом редакторе Microsoft Word 2003 и содержатся в файле KompGraf_KR2.doc.

Предназначены для студентов 3 курса

Табл. 1. Библиогр.: 5 назв.

Рецензент д-р техн. наук, проф. К.А. Разинкин

Ответственный за выпуск зав. кафедрой д-р техн. наук, проф. Е.Д. Федорков

Издается по решению редакционно-издательского совета Воронежского государственного технического университета

©

ГОУВПО «Воронежский

государственный технический университет», 2009

Содержание

1. Общие положения 4

2. Состав и объем курсовой работы 17

3. Задание на курсовую работу 18

Список литературы 19

Продолжение приложения Ж 33

ФУНКЦИИ ПРЕОБРАЗОВАНИЯ ТИПОВ 37

Приложение З 38

Список функций Visual Lisp. 38

1. Общие положения

Введение в Visual Lisp

Visual LISP представляет собой интегрированную среду разработки (integrated development environment - IDE), обеспечивающую удобный и простой в использовании интерфейс, который помогает создавать код, отлаживать его и тестировать программы. К числу полезных возможностей Visual LISP можно отнести следующие:

  • средство проверки синтаксиса Syntax Checker и выделение синтаксических ошибок, облегчающее их исправление;

  • компилятор File Compilation, обеспечивающий быстрое выполнение программ;

  • окна Inspect и Walch, в которых можно просматривать значения переменных в процессе выполнения программ;

  • контекстно-зависимая справка;

  • управление с помощью окна проекта приложениями, содержащими несколько файлов;

  • хранение протокола выполнения операций, что позволяет повторно вызвать введенную ранее информацию.

Создание собственных программ на Visual Lisp

Как и все языки программирования, Visual Lisp имеет свой синтаксис и содержит свой набор функций. Разрабатывать программы на Visual Lisp довольно просто, так как они сразу могут быть протестированы.

В языке Visual Lisp первым всегда стоит оператор, за которым следуют команды. Оператор можно считать обозначением функции, которая что-то выполняет, а операнды - данными, которыми оперирует функция.

Язык Visual Lisp можно использовать в AutoCAD в интерактивном режиме, поскольку он является интерпретатируемым. Результат получается немедленно после ввода выражения языка Visual Lisp в командную строку. Интерпретируемый язык - это язык, в котором операторы транслируются в машинные коды и выполняются по очереди. Это дает возможность интерактивного ввода Visual Lisp - программ в AutoCAD .

Чтобы создать новый файл Visual LISP, откройте редактор Visual LISP (команда Tolls  Visual Lisp  Visual LISP Editor) и выберите команду File  New file или щелкните на пиктограмме New File стандартной панели инструментов.

Теперь в новом документе можно начать вводить код. Как только вы приступите к вводу, то сразу же заметите, что ваш код выглядит несколько иначе, чем текст в обычном текстовом редакторе - он выделен цветом! Visual LISP позволяет выделить соответствующим цветом некоторые элементы синтаксиса языка. В табл. 1 приводятся цвета и соответствующие им элементы.

Таблица 1 – Выделение цветом в редакторе Visual LISP

Цвет

Элемент синтаксиса Visual Lisp

Голубой

Встроенные функции и защищенные символы

Пурпурный

Текстовые строки

Зеленый

Целые числа

Цвет морской волны

Действительные числа

Пурпурный на сером фоне

Комментарии

Красный

Скобки

Черный

Нераспознанные элементы, например, созданные вами переменные

Эти цвета можно настроить по-своему. В меню Visual LISP выберите команду Tools  Window Attributes  Configure Current (Сервис  Атрибуты окна  Текущая конфигурация). В диалоговом окне Windows Attributes (Атрибуты окна) выберите из раскрывающегося списка некоторый элемент, а на палитре цветов соответствующий образец. В этом диалоговом окне можно также изменить легкую границу и ширину табуляции.

Программирование на Visual Lisp

Одним из важнейших элементов большинства языков программирования являются переменные. Важным фактором использования переменных является возможность присвоения им значений. Рассмотрим пример, в котором переменной radius присваивается значение 3.

(setq radius 3)

Эту операцию можно выполнить в окне Console Visual LISP. Если вы хотите использовать эту переменную в командной строке AutoCAD, перед ней следует поставить (!):

Command: !radius

3

Восклицательный знак перед переменной заставляет программу вычислить (оценить) значение, хранящееся в переменной, и вывести его в командную строку. При работе с переменными в окне Console восклицательный знак перед именем переменной не нужен, поскольку предполагается, что любая вводимая в этом окне информация представляет собой выражение Visual Lisp.

Взаимосвязь между строковыми константами и переменными так же проста, как между числовыми константами и переменными.

(setq name "Robin")

"Robin"

Можно также использовать вложенные Visual Lisp-выражения - включать их одно в другое:

(setq radiua (+ 2 1))

3

Как было описано в предыдущей главе, Visual Lisp сначала вычисляет выражения во внутренних скобках (+ 2 1), а затем присваивает результат переменной radius.

Доступность команд AutoCAD из языка Visual Lisp служит мощным средством автоматизации часто выполняемых функций. Комбинируя команды AutoCAD переменными Visual Lisp, как описано в предыдущем разделе, можно достичь высокой степени гибкости программирования.

Функция COMMAND используется в языке Visual Lisp для выполнения команд AutoCAD. Она воспринимает все следующие операнды так, будто они вводятся в командную строку в интерактивном режиме. При программировании функции COMMAND в Visual Lisp нужно в точности дублировать то, что вводилось бы в командную строку.

Например, при использовании переменных startpt и endpt для начальной и конечной точек отрезка обращение к команде LINE из Visual Lisp-выражения осуществляется так:

(command "_line" startpt endpt "")

Использование функций всегда начинается с оператора DEFUN. Можно определить три основные типа функций:

К первому типу относятся функции, определяемые оператором DEFUN, именам которых предшествует C: (до сих пор вы встречались именно с такими функциями). Это позволяет использовать имя функции в командной строке AutoCAD. Такую функцию можно использовать, как любую команду AutoCAD.

Определение функции можно оформить и без префикса C:. Этот тип функций наиболее удобен, если функция вызывается другими Visual Lisp-выражениями. Для обращения к ней из командной строки необходимо заключить имя функции в круглые скобки. Заметим, что в Visual Lisp-выражениях можно также использовать функции с префиксом c:. Для этого в круглые скобки необходимо заключить имя функции вместе с префиксом, например (с:circle3).

Третий тип функций - S::STARTUP. Если функция определена с именем S::STARTUP (обычно именно такое определение вы встретите в файлах acad-doc.lsp), оона будет автоматически выполнена при инициализации нового чертежа или запуске AutoCAD.

При создании функции S::STARTUP необходимо хорошо продумать, в какой файл ее поместить. Ранее кратко упоминались различия между файлами acad.lsp и acaddoc.lsp. Необходимость создания двух файлов автозагрузки в AutoCAD 2000 объясняется тем, что в этой версии появился многооконный интерфейс - MDI, который позволяет открывать несколько чертежей одновременно. Более подробная информация по этому вопросу содержится на врезке Автоматически загружаемые файлы .lsp. Использование функции S::STARTUP значительно повышает производительность, так как позволяет автоматизировать любые стандартные операции, которые обычно выполняются в начале сеанса работы в AutoCAD или при открытии нового чертежа.

AutoCAD автоматически загружает четыре файла Visual Lisp. Два из них, acad2000.lsp и acad2000.lsp, появились лишь в AutoCAD 2000. Компания Autodesk рекомендует зарезервировать эти файлы для нужд разработчиков самой системы AutoCAD. Файл acad2000.lsp загружается один раз при загрузке AutoCAD, а acad2000doc.lsp загружается при открытии каждого нового чертежа.

Два других автоматически загружаемых файла Visual Lisp - acad.lsp и acaddoc.lsp - предназначены для пользователей системы. Файл acad.lsp загружается один раз перед началом сеанса работы в AutoCAD, а файл acaddoc.lsp - перед открытием каждого нового чертежа. Это означает, что в эти файлы можно поместить различные программы инициализации: одну для инициализации AutoCAD (в файл acad.lsp), а другую для каждого нового чертежа. Функции C::STARTUP можно поместить в оба файла. Однако следует помнить, что, помещая различные функции в оба файла, вы, по существу, отключаете функцию S::STARTUP, определенную в файле acad.lsp. Вам необходимо создать оба файла - acad.lsp и acaddoc.lsp. Однажды создав каждую из этих программ Visual Lisp и сохранив ее в одном из вышеназванных файлов, вы впоследствии сможете добавить в этот же файл другие программы. AutoCAD будет автоматически загружать эти файлы до тех пор, пока они будут существовать.

Файлы инициализации загружаются в следующем порядке:

Acad2000.lsp. Загружается в AutoCAD 2000 первым.

Acad.lsp. Этот определенный пользователем файл загружается один раз при загрузке AutoCAD 2000.

Acad2000doc.lsp. Системный файл инициализации документа, загружаемый AutoCAD 2000.

Acaddoc.lsp. Определенный пользователем файл инициализации документа.

Можно создавать функции с аргументами. Аргумент - это значение, которое должно передаваться функции. Функция использует значение аргумента в процессе выполнения. При этом локальные переменные помещаются в круглых скобках после косой черты. Аргументы тоже располагаются в круглых скобках, но только до косой черты. Если локальные переменные в функции отсутствуют, косая черта не ставится. Ниже приводится пример функции с одним аргументом.

(defun chg2red (selected_object)

)

Для обращения к этой программе из AutoCAD или из другой Visual Lisp-программы используется формат (chg2red selected_object). Здесь имя переменной, которая передается программе chg2red в качестве аргумента, находится после имени функции, и все выражение заключается в круглые скобки.

При каждом обращении к функции chg2red в какой-либо программе необходимо задавать значение аргумента. В качестве аргумента можно использовать конкретное значение или имя определенной в программе переменной, значение которой вводится пользователем в процессе работы программы.

Необходимость выполнить какую-либо процедуру при наличии некоторых условий возникает довольно часто. Условное выражение проще всего создать при помощи оператора IF, который выполняет одно действие, если выражение-операнд истинно, и другое, если оно ложно. Иными словами, результат операции зависит от истинности некоторого выражения.

( if условное выражение Если_True Если_False).

Предположим, требуется выбрать окружности с радиусом меньше 0.25. Вот пример оператора IF, в котором radius - переменная с присвоенным ранее значением:

( if (< radius .25)

(princ "Радиус меньше .25")

(princ "Радиус не меньше .25")

)

Здесь используется условное выражение (< radius .25). Выражение Если_True - это (princ "Радиус меньше .25"), а выражением Если_False - (princ "Радиус не меньше .25"). Этот условный оператор эквивалентен следующему утверждению: Если радиус меньше, чем .25, печатать "Радиус меньше .25"< если нет - "Радиус не меньше .25".

Выражение Если_False можно опустить. Тогда Visual Lisp выполнит выражение Если_True, если условное выражение истинно, а если оно ложно, сразу перейдет к выполнению остальной части программы.

Циклы обеспечивают возможность выполнения одного или нескольких операторов программы заданное количество раз. Один из способов организации цикла - использование оператора WHILE.

Формат функции WHILE следующий:

(while условное_выражение Если_True операторы тела цикла, которые выполняются до тех пор, пока условие истинно )

Общий подход к установке условий состоит во включении счетчика в оператор WHILE. Счетчик подсчитывает количество выполненных операций. Условием выхода из цикла может служить достижение счетчиком некоторого значения. Чтобы сформировать счетчик, присвойте переменной значение, с которого вы хотите начать выполнение операции. Затем напишите код (точнее, его фрагмент) для одного прохода. После этого увеличьте значение счетчика, используя выражение типа

(setq counter (+1 counter))

Программа будет повторять выполнение операции до тех пор, пока счетчик (переменная counter) не достигнет установленного вами значения.

Вот простой пример:

(defun c:process (/ counter)

(setq counter 1)

(while (< counter 6)

(princ "Номер цикла обработки ")

(princ counter)

(terpri)

(setq counter (+ 1 counter ) )

))

В этом примере функция PROCESS присваивает переменной counter значение 1. Затем начинается цикл WHILE, условием выполнения которого является то, что значение переменной counter должно быть меньше 6. Внутри оператора WHILE печатается строка "Номер цикла обработки " и затем значение переменной counter. Функция (tepri) обеспечивает печать каждой следующей строковой константы с новой строки. Затем для переменной counter вычисляется новое, большее значение. Каждый раз после выполнения операторов тела цикла значение счетчика увеличивается на 1. Без приращения значения переменной counter условие в строке 3 всегда будет возвращать Т и цикл никогда не закончится.

Если вы случайно создали программу с таким бесконечным циклом, то можете прервать выполнение Visual Lisp-программы, нажав <Esc>, <Ctrl+Break> или выбрав в меню Visual LISP команду Debug  Abort Evaluation.

В приведенном примере цикл WHILE продолжается до тех пор, пока переменная counter меньше 6. Когда значение счетчика станет равным 6, программа остановится. Оператор WHILE возвращает последнее значение программы, так что AutoCAD в последней строке выведет 6.

При работе с оператором WHILE может возникнуть желание объединить несколько операций в один блок. Для этого можно использовать функцию PROGN. Visual Lisp , встретив эту команду, будет рассматривать все, что включено в конструкцию PROGN, как один оператор, например:

(defun c:compare2three (/ entered_num)

(setq entered_num (getint "\nВведите число: ") )

( if ( < enered_num 3)

(princ "\nВведенное число меньше 3.")

(if (= entered_num 3)

(progn

(princ "\nВведенное число равно 3.")

(terpri)

(princ "\nЭто и есть результат эксперимента."))

(princ "\nВведенное число больше 3.")

)

)

(princ)

)

Наиболее эффективен Visual Lisp при работе с объектами чертежей. Любой объект базы данных AutoCAD (или примитив) имеет имя. По этому имени можно получить справку об объекте из любого места собственного Visual Lisp-приложения. Чтобы увидеть пример имени объекта, после создания нового чертежа введите:

(command "_line" "3,3" "5,5" "")

(enylast)

Visual Lisp возвратит Entity name: 2ed0520> (<Имя примитива:2ed0520>).

Возможно, в вашей системе имя примитива будет определяться другим числом. Используя возвращаемое функцией ENYLAST имя примитива, можно программным путем получать или устанавливать набор опций для любого заданного объекта базы данных.

В начале программы включите комментарий с описанием функционального назначения программы. Это поможет другим пользователям вашей программу лучше понять ее логику, а вам самим - быстрее вспомнить собственный замысел несколько месяцев спустя. Строки комментария в Visual Lisp-Программах начинаются с символа "точка с запятой"(;).

Комментарии также следует поместить и в тексте программы. Отсутствие комментариев может испортить даже самый лучший код. Большинство профессиональных программистов очень подробно комментируют и документируют свои программы.

Visual LISP поддерживает несколько типов комментариев. Щелкните на пиктограмме Format Edit Window панели инструментов Tools, и Visual LISP автоматически выровняет комментарии этих типов в вашей программе в процессе форматирования текста:

;;; - три точки с запятой. При использовании такого комментария Visual LISP выравнивает комментарий по левому краю. Этот тип комментария используют в начале программы для описания ее назначения и функционирования.

:: - две точки с запятой. Этот комментарий сдвигается в процессе форматирования на уровень следующих скобок. Такой комментарий используется для пояснения следующей за ним одной или нескольких строк кода.

; - точка с запятой. Комментарий, помеченный этим символом, Visual LISP в процессе форматирования кода по умолчанию сдвигает на 40 символов. Это значение можно изменить в диалоговом окне Format Options (Параметры форматирования), которое открывается при выборе команды ToolsEnvironment OptionsVisual LISP Format Options (СервисПараметры средыПараметры форматирования Visual LISP) . Этот тип комментария обычно используется для текущих пояснений в правой части кода. Благодаря большому отступу такие комментарии хорошо выделяются на фоне кода.

Среда визуального программирования Delphi

Среда Delphi обеспечивает высокоэффективную работу программиста и является одной из популярных систем программирования. Этим объясняется актуальность передачи расчетных параметров из программы созданной с помощью Delphi в AutoCAD. Рассмотрим варианты передачи расчетных данных в графический редактор AutoCAD.

Ниже приведен укрупненный алгоритм программы организующей взаимосвязь управляющего модуля с примитивами системы AutoCAD:

  1. Определение (назначение, ввод) значений основных параметров детали;

  2. Расчет основных размеров; вычисление объема и массы;

  3. Формирование и пересылка базовых точек в текстовый файл name.txt;

  4. Запись массы в файл name.txt;

  5. Определение и запуск AutoCAD;

  6. Автоматическая загрузка файла name.lsp и построение чертежа.

Для осуществления связи между программой, написанной на языке Delphi и графической системой необходимо указать место нахождения последней. Для этого указывается полный путь к файлу acad.exe, после чего программа проверяет наличие запускающего файла в указанной директории. Для осуществления автоматической загрузки файла name.lsp, предусмотрено наличие файла с расширением *.scr, в котором указанно имя lsp-файла, а так же название функции для прочерчивания детали. Файл acad.exe записывается со специальным ключом. Например: c:\program files\acad200\acad.exe /b name1.scr

В системе программирования Visual Lisp предусмотрены специальные функции для считывания данных из текстового или какого-либо другого файлa (atof (read-line f), где f—файловая переменная), после выполнения которых определенным переменным в программе Visual Lisp присваиваются значения параметров, посчитанных в расчетной программе. Затем, командами, содержащимися в файле name.lsp, осуществляется автоматическое прочерчивание детали.

Ниже представлены основные процедуры и функции, используемые в программе:

  • (setq f (open "name.txt" "r")) – процедура, связывающая файловую переменную f с файлом обмена данных .txt.

  • (command "limits" "0,0" "420,300" ^c) – процедура, устанавливающая пределы чертежа. В дальнейшем команды, указываемые в кавычках, означают стандартные процедедуры ACAD’а, вызываемые Auto LISP’ом.

  • (setq a (atof(read-line f))) – процедура присваивания переменной а, значения первой строки текстового файла, причем функция atof переводит строковую переменную в переменную типа real.

  • (close f) – стандартная процедура, означающая конец работы с файлом.

  • (command "zoom" "180,180" "210,210" ^C) – процедура, увеличивающая окно с координатами, указанными в кавычках (без данного увеленичения не проставляется радиус дуги)

  • (setq pt2 (list x2 y2 )) – процедура, присваивающая списковой переменной pt2 два значения х2 и у2.

  • (command "line" pt0 pt1 ^c) – процедура рисования отрезка от точки pt0, к точке pt1.

  • (command "arc" pt1 pt2 pt3 ^c) – процедура вычерчивания дуги по трем точкам.

  • (command "linetype" "set" "center2" ^c)– процедура ACAD’а, устанавливающая новый тип линии -- "center2". (для линии центра вида сверху).

  • (setq ll( distance pd1 pd2 ) ) – функция, возвращающая в переменную ll расстояние от точки pd1 до точки pd2.

  • (command "dimlinear" pd1 pd9 pdi4 ^c) – процедура проставления вертикального или горизонтального размера от точки pd1, к точке pd9. Выноска размера устанавливается в точку pdi4.

  • (command "dimaligned" pt0 pt1 pdi1 ^c) – процедура проставления размера под углом базовой линии.

  • (command "dimradius" pt2 pdi2 ^c) – процедура проставления радиуса. Выноска осуществляется в точку pdi2.

  • (command "dimangular" "" pt0 pt4 pt1 ^c) – процедура проставления размера угла (по трем точкам pt0 pt4 pt1, в точку pt13).

  • (command "text" "366,10" "5" "0" "ВГТУ АМ-031" ^c)– процедура вставления текста ВГТУ АМ-031 размером 5 мм в точку с координатами 366,10.

В программе можно использовать арифметические функции:

  • (setq xq3 (- x5 10 )) – переменной xq3 присваивается значение разности переменной х5 и 10.

  • (setq xc1 (+ a 15 )), (setq pt16 (list (+( - x4 (/ l 1.2))5) (+ b 7)))– то же самое – сложение, деление и вложенные операции.

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