Пример программы построения параметризованного изображения



Рассмотрим пример программы на языке AutoLISP для получения семейства чертежей. [6]

Представленная программа позволяет получить чертеж вала с произвольным числом ступеней. Пользователь задает начальную точку, число ступеней и для каждой ступени – длину и диаметр. Программа рисует контур детали и проставляет длины ступеней от единой базы. Программа спрашивает о необходимости простановки диаметров и при утвердительном ответе пользователя проставляет их.

При составлении программы принимались следующие решения:

масштаб изображения 1:1;

базовая точка располагается в центре левого торца первой ступени вала так, что каждая следующая ступень рисуется справа от предыдущей;

чтобы не рисовать дважды границу двух ступеней, ступень вала изображается с учетом соотношения между ее диаметром и диаметром предыдущей ступени: если следующий диаметр меньше , то формируется линия по четырем точкам (функция ST1), иначе ‒ по шести точкам (функция ST2);

контур создается полилинией шириной 0.5, что позволяет получать на изображении различную толщину для контурных и прочих линий;

диаметры проставляются так, что размерная линия отстоит на 10 см от правой границы данной ступени, следовательно, при слишком малой длине ступени размерный текст может наложиться на линию контура;

в связи с этим пользователю предоставлена возможность выбора способа простановки диаметров: автоматически или «вручную» с помощью команд ACAD.

; Программа 12. Формирование изображения вала

; с заданным числом ступеней

(DEFUN ID ( ) ; Функция для ввода исходных данных

(SETQ d (GETDIST (STRCAT “\nВведите диаметр ступени” (ITОА i) “ d = “))

1 (GETDIST “\nВведите длину ступени 1= “))

);id

(DEFUN STO ( ) ;Функция для изображения первой

; ступени

(SETQ p1 (POLAR bp (/ PI 2) (/ d 2))

p2 (POLAR p1 01)

p3 (POLAR p2 (* 1.5 PI) d)

p4 (POLAR p3 PI 1)

pl (POLAR bp 0 1) ;pl - базовая точка для новой ступени

)

(COMMAND “PLINE” p1 “W” 0.5 0.5 p2 p3 p4 “ С ”)

(SETQ d0 d)

(SETQ sp (LIST (LIST p2 p3))); подготовка списка

; пар точек для простановки диаметров

);st0

(DEPUN ST1 ( ) ; Функция для изображения ступени

; с меньшим диаметром

(SETQ p1 (POLAR pl (/ PI 2) (/ d 2))

p2 (POLAR pi 01)

p3(POLAR p2(*1.5PI)d)

p4 (POLAR p3 PI 1)

pl (POLAR pl 01)

)

(COMMAND “PLINE” p1 “W” 05 05 p2 p3 p4” “)

(SETQ d0 d)

(SETQ sp (CONS (LIST p2 p3) sp)) ; дополнение

;списка точек

); sti

(DEFUN ST2 ( ) ; Функция для изображения ступени

; с большим диаметром

(SETQ p1 (POLAR pl (/ PI 2) (/ d0 2))

p2 (POLAR p1 (/ PI 2) (/ d 2))

p3 (POLAR p2 01)

p4 (POLAR p3(* 1.5 PI) d)

p5 (POLAR p4 PI 1)

p6 (POLAR pl (‘1.5 PI) (/ d0 2))

pl (POLAR pl 01)

)

(COMMAND “PLINE” p1 “W” 0.5 0.5 p2 p3 p4 p5p6” “)

(SETQ d0 d)

(SETQ sp (CONS (LIST p3 p4) sp))

); st2

(DEFUN RZM ( ) ; Функция для простановки размеров

;ступеней

(PROMPT “\nНужно ли проставлять диаметры? <да>”)

(IF ( = (READ-CHAR) 10) ; В случае ответа

; < Enter >, т.е. “Да”:

(FOREACH рр sp ; Цикл по элементам

; списка sp - парам точек

(SETQ pl (CARpp)

; Выделение первой точки

p2(CADRpp)

; Выделение второй точки

рЗ (LIST (- (CAR p1) 10) (CADR p1))

; Точка для размерной линии

)

( COMMAND “ DIML ” “ VER ” p 1 p 2 рЗ

“%%с< >”)

; Простановка диаметра

);foreach

);if

(SETQ pr (GETPOINT “\nУкажите точку для простановки первого размера”)

sp (REVERSE sp)

; Реверсирование списка точек

рр (NTH 0 sp)

; Выделение первой пары точек из списка

pl (CADR pp)

; Выделение второй (нижней) точки из пары

)

(COMMAND “DIM” “HOR” bp p1 pr” “)

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

(SETQ sp (CDR sp)) ; Удаление первой пары точек

;из списка

(FOREACH рр sp ;Цикл по оставшемуся списку пар

(SETQ p1 (CADR рр ))

(COMMAND “BAS” р 1” “)

;Простановка длины ступени от базы

);foreach

(COMMAND)

; Завершение команды DIM - аналог Ctrl/C

);dia

(DEFUN C:VAL ( ) ; Головная функция - построение

;изображения вала

(SETVAR “CMDECHO” 0) ;Отмена эха команд

(SETVAR “BLIPMODE” 0)

;Отмена маркировки точек примитивов

(SETQ bp (GETPOINT “\nУкажите базовую точку”))

(INITGET 7)

;3апрет на ввод неположительных чисел и пробела

(SETQ n (GETINT “\nВведите число ступеней вала n = “))

(SETQ i 1) ; i - номер ступени

(ID) ; Ввод исходных данных для

; первой ступени

(STO) ; Изображение первой ступени

(WHILE ( < i n) ;Цикл по числу ступеней

(SETQ i (1+i))

(ID); Ввод исходных данных для i-й ступени

(IF(<d d0)

(ST1) ;Изображение ступени с меньшим диаметром

(ST2) ;Изображение ступени с большим диаметром

);if

); while

(RZM) ; Простановка размеров

(COMMAND “LINETYPE” “S” “CENTER” “” “LINE”

(POLAR bp PI 5) (POLAR pi 0 5) “”)

; Изображение осевой линии

(PRIN1) ;”Тихий выход” из программы

)

В этих методических указаниях описаны основные функции языка AutoLISP для AutoCAD. Знания этих функций достаточно для решения большинства практических задач: построения чертежей типовых деталей и узлов, расчетно-графических задач, работы с файлами, анализа и преобразования изображений, расширения системы команд графического редактора ACAD. Некоторые функции остались за рамками описания, в том числе функции, связанные с распределением оперативной памяти, отладкой программ и др.

Все возможности языка AutoLISP сохраняются в последних версиях системы AutoCAD. (см. [8, 9]). Помимо этого, начиная с версии 11 имеется возможность графического программирования с использованием языка С. Для выполнения программ, написанных на языке С, необходим интерпретатор AutoLISP.

Наряду с интерпретатором, разработан компилятор AutoLISP (поставляется отдельно от системы AutoCAD). Программа на AutoLISP, отлаженная в режиме интерпретации, может быть откомпилирована. Полученный в результате загрузочный модуль будет выполняться значительно быстрее и требовать меньше памяти.

Наряду с программированием на AutoLISP существует и другой способ получения модели семейства чертежей, отличающихся значениями размеров, ‒ метод параметризации. Этот метод реализован в таких системах, как PARACAD, SYNTHESIS, CUSP, p-Design, и других, работающих совместно с системой AutoCAD. Модель формируется с помощью системы параметризации в режиме графического редактирования, т.е. значительно удобнее и быстрее, чем программирование. Однако круг задач, решаемых с помощью системы параметризации, значительно уже, чем круг задач, для решения которых используется AutoLISP, и ограничен получением чертежей, различающихся только размерами. Например, чертеж вала с произвольным количеством ступеней, полученый с помощью программы 12, нельзя получить методом параметризации.

Возможности графического программирования продолжают развиваться (см. [10-12]).

 


Дата добавления: 2019-09-13; просмотров: 220; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!