Листинг 7.2 - Функция расчета координат базовых точек и отрисовки.
Размерные параметры конкретного изделия вводятся конструктором с клавиатуры. Следует помнить, что человеку свойственно ошибаться, а также развлекаться, вводя слово "Вася" в ответ на запрос "Введите диаметр". Поэтому в функции ввода исходных данных следует предусмотреть хотя бы минимальную защиту от ввода некорректных значений. Для этого используется функция INITGET.
Итак, функция ввода данных на входе не имеет параметров, а вот возвращать она должна несколько чисел. Единственный способ возвратить несколько значений - объединить их в список. Теперь мы можем написать функцию ввода данных для нашего примера (назовем ее getdim).
( DEFUN getdim ( / l d ) ; ввод длины и диаметра ; возвращаемый список: ( диаметр длина ) ( INITGET 7 ) ; запрет пустого ввода и ввода чисел <=0 ( SETQ l ( GETREAL "\nВведите длину валика: " ) ) ( INITGET 7 ) ( SETQ d ( GETREAL "\nВведите диаметр валика: " ) ) ( LIST d l ) ; возвращаемое значение ) ; конец функции getdim |
Листинг 7.3 - Функция ввода параметров.
Головная функция должна выполнять подготовительные операции (например, установку системных переменных Автокада для отрисовки размеров в соответствии с требованиями ЕСКД) и циклический вызов двух остальных функций: getdim
и show. Для удобства перед именем головной функции можно добавить символы "C:". Тогда в Автокаде появится новая команда с именем вашей головной функции и можно будет не набирать скобки при ее вызове. В примере головная функция называется C:main, поэтому для ее вызова в командной строке Автокада достаточно набрать main.
Самостоятельно разберитесь с одним из возможных вариантов организации цикла, приведенном в примере.
( DEFUN C:main ( / l x y flag ) ; Устанавливаем размерные переменные по ЕСКД ; Текст над размерной линией, а не в разрыве ( SETVAR "DIMTAD" 1 ) ; Текст вне размерных линий параллелен линиям ( SETVAR "DIMTOH" 0 ) ; Текст между размерными линиями горизонтален ( SETVAR "DIMTIH" 0 ) ; Проведение линии между выносными, если текст сбоку ( SETVAR "DIMTOFL" 1 ) ; Продолжение выносных линий за размерными, мм ( SETVAR "DIMEXE" 1 ) ; Отключение генерации допусков ( SETVAR "DIMTOL" 0 ) ; Размер стрелок ( SETVAR "DIMASZ" 3 ) ; Продолжение выносных линий за размерную ( SETVAR "DIMEXE" 3 ) ( SETQ flag T ) ( WHILE flag ( SETQ l ( getdim ) x 10 y 10 ) ( show x y ( CAR l ) ( CADR l ) ) ( SETQ ans ( GETSTRING "\nПовторить?<Д/Н>: " ) ) ( SETQ flag ( OR ( = ans "Д" ) ( = ans "д" ) ) ) ); конец WHILE ( PRIN1 ) ) |
Листинг 7.4 - Головная функция .