Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

кр_САП(autolisp)

.doc
Скачиваний:
0
Добавлен:
27.01.2024
Размер:
174.08 Кб
Скачать

Задание вариант №25

Построение многоугольников. Диалоговое окно должно обеспечивать выбор многоугольника с количеством углов от пяти до восьми с помощью кнопок с изображениями ImageButton, а более восьми – с помощью EditBox. Программа должна обеспечивать:

  • при выборе кнопок с изображениями ImageButton в соответствующем окне редактирования EditBox должно отображаться количество углов выбранного многоугольника;

  • выбор цвета многоугольника через стандартное меню AutoCAD;

  • задание точки вставки центра многоугольника указанием на экране координат с помощью мыши, при котором диалоговое окно временно закрывается, давая пользователю возможность указать точку на графическом экране в интерактивном режиме, после чего диалоговое окно снова должно появиться на экране с отображением указанных координат XY в соответствующих полях редактирования EditBox для возможности в коррекции значений в них;

  • задание точки вставки многоугольника указанием координат XY в соответствующих полях редактирования EditBox в диалоговом окне;

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

  • при выборе количества углов менее трёх и более 255 (ограничения команды AutoCAD polygon) должно выдаваться сообщение об ошибке.

  AutoShape 1

Теоретическая часть

В коде были использованы следующие функции:

defun – определяет функцию посредством создания структурированного списка операторов программы;

setq – присваивает переменной нужное нам значение, т. е. заносит указанное нами значение в ячейку с именем переменной;

if – функция? выполняющая действия по условию;

setvar – функция установки системной переменной AutoCAD.

Д ля выбора цвета используется стандартное окно AutoCAD с палитрой цветов, которое вызывается функцией (acad_colordlg 3). 3 – в данном случае это номер цвета по умолчанию. Далее выполняется вызов из AutoLISP команды AutoCAD (command "_color" color), которая устанавливает текущий цвет слоя. Все дальнейшие построения будут производится выбранным цветом.

Исходный код программы AutoLISP- приложения

(defun c:Edge_Surface(/ Folder$ what_next num_color px py pn pm)

(gc)

(gc)

(defun *error* (msg)

(princ msg)

(setvar "osmode" osm)

(setvar "nomutt" 0)

(gc)

(terpri)

)

(setq osm (getvar "osmode")) ; запоминаем какие привязки были включены на момент запуска программы

(setvar "osmode" 0) ; выключаем все привязки

;----Установка начальных значений переменных

(setq Folder$ "C:\\MyLisp" )

(setq what_next 2 px "0.0" py "0.0" num_color 1)

(if (< (setq dcl_id (load_dialog "Edge_Surface.dcl")) 0)(exit))

(start_image "Slide5")(slide_image 1 1 (strcat Folder$ Slide5))(end_image)

(start_image "Slide6")(slide_image 1 1 (strcat Folder$ Slide6))(end_image)

(start_image "Slide7")(slide_image 1 1 (strcat Folder$ Slide7))(end_image)

(start_image "Slide8")(slide_image 1 1 (strcat Folder$ Slide8))(end_image)

(while (>= what_next 1) ;Начинаем бесконечный цикл для обеспечения временного выхода по кнопке Указать мышью-->

(if (not (new_dialog "Edge_Surface" dcl_id)) (exit)) ;отобразить окно на экране. При неудаче - выйти

;(add_dial)

;----Установка полей окна при возврате после указания координат мышью

(set_tile "editboxx" px) ;установка поля для координаты X

(set_tile "editboxy" py) ;установка поля для координаты Y

(if pn (set_tile "editboxn" pn)) ;чтение значения поля "Количество углов"

(if pm (set_tile "editboxm" pm)) ;чтение значения поля "Диаметр"

(setq pn (get_tile "editboxn"))

(setq pm (get_tile "editboxm"))

(action_tile "Slide5" "(setq pn=5)")

(action_tile "Slide6" "(setq pn=6)")

(action_tile "Slide7" "(setq pn=7)")

(action_tile "Slide8" "(setq pn=8)")

(action_tile "btColor" "(done_dialog 3)") ;действие по нажатию на кнопку "Цвет". Отображение окна AutoCAD с палитрой цветов

(action_tile "file_add" "(done_dialog 5)") ;действие по нажатию на кнопку "Цвет". Отображение окна AutoCAD с палитрой цветов

(action_tile "editboxx" "(setq px $value)") ;чтение значения поля "Координата X"

(action_tile "editboxy" "(setq py $value)") ;чтение значения поля "Координата Y"

(action_tile "editboxn" "(setq pn $value)") ;чтение значения поля "Количество углов"

(action_tile "editboxm" "(setq pm $value)") ;чтение значения поля "Диаметр"

(action_tile "mouse" "(done_dialog 4)") ;действие по нажатию на кнопку "Указать мышью -->". Закрыть окно с кодом выхода 4

(action_tile "ok" "(setq pn (get_tile \"editboxn\")) (setq pm (get_tile \"editboxm\")) (done_dialog 1)") ;действие по нажатию на кнопку OK.

(action_tile "cancel" "(done_dialog) (unload_dialog dcl_id) (exit)") ;действие по нажатию на кнопку Cancel

(setq what_next (start_dialog))

(cond ;выбор в зависимости от состояния флага what_next

((= what_next 4)

(setq _point (getpoint "Укажите мышью точку вставки ...")) ;интерактивный выбор координат точки вставки на графическом экране

(setq px (rtos (nth 0 _point) 2 2) py (rtos (nth 1 _point) 2 2))) ;преобразовать координаты в строки для вывода в диалоговое окно

((= what_next 3)

(setq num_color (acad_colordlg num_color)) ;отображение окна AutoCAD с палитрой цветов

(command "_.color" num_color)) ;установка цвета текущего слоя

((= what_next 0) (prompt "\nuser cancelled dialog"))

((= what_next 1)

(setq err nil)

(cond

((or (eq pn "") (not pn))

(alert "Ошибка! Не указана Количество углов!") ()

(setq err T)

)

((or (not pm) (eq pm ""))

(alert "Ошибка! Не указан Диаметр!")

(setq err T)

)

((or (< pn 3))

(alert "Ошибка! Количество углов меньше 3!")

(setq err T)

)

((or (> pn 255))

(alert "Ошибка! Количество углов больше 255!")

(setq err T)

)

(if (not err) (setq what_next 0))

;(run_accept)

)

)

);while

(command "_POLYGON" pn px,py C pm)

(unload_dialog dcl_id) ;выгрузка диалогового окна из памяти

;----Преобразование значений прочитанных координат из строк в действительные числа

(setvar "osmode" osm) ; включаем привязки

(command "_.regen")

(print "OK!")

(*error* nil)

)

Исходный файл с программным кодом диалогового окна

mp_poly: dialog {label = "Отрисовка многоугольников"; // начало диалога

: spacer{height=1;} // вставка пустой строки

: boxed_column { label = "Многоугольник";

: row { : image_button {key = "Slide5"; width = 5.28; height = 5.28; aspect_ratio = 1; color = -2;}

: image_button {key = "Slide6"; width = 5.28; height = 5.28; aspect_ratio = 1; color = -2;}

: image_button {key = "Slide7"; width = 5.28; height = 5.28; aspect_ratio = 1; color = -2;}

: image_button {key = "Slide8"; width = 5.28; height = 5.28; aspect_ratio = 1; color = -2;}

}

: spacer{height=1;} // вставка пустой строки

}

: boxed_column { label = "Параметры";

: boxed_column { label = "Точка вставки";

: edit_box {label = "Координата X: "; key = "editboxx"; fixed_width=true; width = 1;edit_width = 6;} // редактируемые текстовые поля

: edit_box {label = "Координата Y: "; key = "editboxy"; fixed_width=true; width = 1;edit_width = 6;} // редактируемые текстовые поля

: spacer{height=1;} // вставка пустой строки

: button {label="Указать мышью -->"; key="mouse";fixed_width=true; width = 20;edit_width = 6;action="(done_dialog 4)";}

}

: spacer{height=1;} // вставка пустой строки

: edit_box {label = "Количество углов:"; key = "eb_kolvouglov"; edit_width = 6; alignment = right;}

: row { : button {label="Цвет"; key="btColor"; width=2; action="(done_dialog 5)";}

: edit_box {label = "Радиус опис. окружн.:"; key = "eb_radius"; fixed_width=true; width = 1;edit_width = 6;}}

}

ok_cancel; // добавление кнопок ОК и Отмена

} // окончание диалога

Пример отображения диалогового окна

Представим результат работы программы:

Вывод

Были получены навыки работы с AutoCAD в области работы с чертежами, а также написания приложений AutoLISP, автоматизирующих процессы создания определённых элементов чертежей.