Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Пусть определены точки:

(setq a  ‘(1.0  1.0)  b  ‘(5.0  5.0))

(setq c  ‘(6.0  1.0)  d  ‘(6.0  2.0)),

тогда

(inters  a  b  c  d)                        возвращает  nil,

(inters  a  b  c  d  T)                возвращает  nil,

(inters  a  b  c  d  nil)          возвращает (6.0  6.0) .

(polar точка1 угол расстояние). Функция определяет положение точки, находящейся на указанном расстоянии от точки точка1  под углом  угол  к оси Х текущей системы координат и возвращает ее координаты.

Функция  polar очень часто используется  в структуре программ, так как она позволяет указывать положение точек в относительных координатах, привязывая каждую последующую точку к предыдущей. Примером такого использования может служить программа  format,  описываемая ниже.

3.  ВЗАИМОДЕЙСТВИЕ  АВТОЛИСПА
С  АВТОКАДОМ

3.1.  Вызов  команд  Автокада  в  Автолисп

Вызов команд Автокада Автолисп осуществляет с помощью функции  command. Необходимо помнить, что эта функция не имеет ничего общего с командами Автокада, которые входят в эту функцию в качестве аргументов. Количество аргументов функции не ограничивается, они могут представлять собой строки, списки, числа, но во всех случаях их тип должен соответствовать типу, ожидаемому Автокадом. Введение пустой строки  (“”) соответствует нажатию на клавишу  Space или  Enter,  например:

НЕ нашли? Не то? Что вы ищете?

       (command “line” pt1 pt2 “”).

Здесь Автолисп передает Автокаду команду  line  для проведения отрезка прямой из точки  pt1 к  точке  pt2.  Пустая строка завершает ввод параметров. При организации строки параметров следует обратить внимание на то, что она практически описывает символами действия оператора, вводящего параметры с клавиатуры или с помощью мыши. Действительно, при ручном вводе последовательность действия оператора выглядела бы следующим образом:

       Command:_line

               From point: pt1

       To point: pt2

       To point:  Enter

Команды Автокада, вызываемые функцией command, не отражаются  на  экране,  если системная  переменная  CMDECHO установлена в ноль. Если необходим ввод данных с клавиатуры или с помощью мыши,  нужно  либо осуществлять  эту операцию до использования функции  command,  либо организовать паузу внутри команды (см. разд. 4.1).

3.2.  Создание  новой  функции

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

  (defun имя ([аргументы]/[локальные переменные])),

например:

               (defun my_prog (a b / temp)).

Здесь функция  my_prog содержит два аргумента  (a, b) и одну локальную переменную  (temp). Пара круглых скобок после имени функции обязательна, даже если аргументы отсутствуют.

Переходя к изложению техники программирования на Автолиспе, автор считает необходимым еще раз подчеркнуть, что настоящее пособие не является справочником по функциям языка. Описываемые функции сгруппированы по назначению лишь частично и лишь в той степени, которая необходима для понимания рассматриваемых программ.  Детальное изучение языка требует привлечения дополнительных материалов (например  [ 1, 2 ]) .

3.3. Создание новой команды Автокада

Каждая внешняя функция Автолиспа может использоваться как команда Автокада путем введения ее в командную строку, если  использована особая структура имени функции – с:имя_функции.  Структура  с:  должна присутствовать обязательно, имя_функции определяет имя назначаемой команды Автокада. В такой функции  список  аргументов  должен  отсутствовать,  локальные  переменные

могут быть указаны.  Строго говоря, перечень аргументов или локальных переменных не всегда обязателен, поскольку они создаются автоматически при первом упоминании. Формат создаваемой функции:

(defun C:FUNCNAME ([ / переменные] )

       ......  ; тело функции

).

Если локальные переменные отсутствуют, круглые скобки после имени функции обязательно сохраняются, т. е. формат функции в этом случае выглядит следующим образом:

(defun С:FUNCNAME ()

..........

).

Работу в Автокаде над новым чертежом конструктор начинает с организации инструментария, в частности с создания нескольких необходимых слоев чертежа. В прототипах чертежей  acad. dwg  (12-я), unnamed. dwg (13-я), drawing. dwg (14-я) и drawingN. dwg (15-я версия) заложен по умолчанию один нулевой слой с присущим ему белым цветом и сплошными линиями. Изначальная установка пределов изображения (limits) позволяет назначить границы экрана, но не исключает необходимости организации слоев. Заложенные в последних версиях готовые рамки с угловыми штампами, соответствующие международным и региональным стандартам, расположены в пространстве бумаги и не соответствуют стандартам отечественным. Разумеется, создание аналогичной графической базы, опирающейся на отечественные стандарты, не представляет сложностей, однако не лишним представляется и другой путь – программное описание необходимых установок.

Предлагаемая в качестве иллюстрации программа используется в практике выполнения графических работ как в учебных курсах компьютерной графики, так и в ряде специальных дисциплин. Цель программы заключается в выводе на экран стандартных рамок, соответствующих принятым в отечественной практике форматам А0...А4, и  организации поля чертежа с заранее установленными характерными слоями. Программа рассматривается на примере формата А1.

3.3.1.  Функция  обрисовки  рамки

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

(defun C:A1 ()

;;;  Устанавливаем угловые точки внешней рамки,

(setq pt1 (list  -20  -5)

       (setq pt2 (polar pt1  0  840))

       (setq pt3 (polar pt2 (/  pi  2)  594))

       (setq pt4 (polar pt3  pi  840))

;;;  Устанавливаем таковые для внутренней рамки.

       (setq pt5 (list  0  0))

       (setq pt6 (polar pt5  0  815))

       (setq pt7 (polar pt6 (/  pi  2)  584))

       (setq pt8 (polar pt7  pi  815))

)

После определения точек можно сразу ввести команду обрисовки рамки, но лучше для этого создать отдельную функцию, работающую аналогично процедуре в Паскале или подпрограмме-функции в Фортране. Целесообразность такого подхода будет ясна далее. Поскольку внешняя и внутренняя рамки отличаются шириной линии, учтем это в создаваемой функции, обрисовывая внешнюю рамку командой  line, а внутреннюю – командой  pline:

(defun ramka ()

       (command “line”  pt1  pt2  pt3  pt4  “c”)

       (command “pline”  pt5  “w” “0.4” “” pt6  pt7  pt8  “c”)

)

Теперь достаточно добавить в исходную программу функцию  ramka,  и при вызове команды  А1 произойдет автоматическая обрисовка рамки на чертеже.

Объем программы может быть уменьшен, если рамки выполнить посредством команды  rectangle, а изменение ширины внутренней рамки осуществить командой  pedit.  В этом случае требуется ввод координат диагонально противоположных точек прямоугольника, а сама программа выглядит следующим образом:

(defun C:A1 ()

       (setq pt1 (list -20 -5))

       (setq pt2 (list 821 589))

       (setq pt3 (list 0 0))

       (setq pt4 (list 816 584))

       (ramka)

)

А функция  (ramka)  предстанет в форме:

(defun ramka ()

       (command "rectangle" pt1 pt2)

       (command "rectangle" pt3 pt4)

       (setq e1 (entlast))

       (command "pedit" e1 "w" "0.4" "")

)

3.3.2.  Создание  слоев

Процедура создания слоев может быть осуществлена автоматически при загрузке формата. В функции sloy, описанной далее, устанавливаются слои CONTUR, CENTER, DIM и HIDDEN, которым присваиваются соответственно цвета: белый, красный, зеленый и желтый, а в слои CENTER и HIDDEN загружаются соответственно типы линий Acad_ISO04w100 и Acad_ISO02w100. Поскольку любая функция может записываться в несколько строк, воспользуемся этим для построения  программы.

(defun sloy ()

  (command “linetype” “load” “Acad_ISO04w100” “acadiso. lin”  “load” “Acad_ISO02w100” “” “”)

  (command “layer” “new” “contur”

                        “new” “center”

                        “new” “dim”

                       “new” “hidden”

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14