Auto CAD

CADR и CADDR


CADR и CADDR являются специализированными комбинациями двух базовых функций, разработанных для манипуляций с координатами точки, которые представляют собой список из трех значений. Но с помощью комбинаций cad и CDR можно извлечь любой элемент, независимо от длины списка. Поэтому во многих существующих программах на AutoLISP можно увидеть дикие комбинации этих функций.

Предположим, вы пишете программу, которая получает имя определенного блока из списка, содержащего семь имен блоков для одного чертежа. Если каждое имя блока состоит из одной буквы, список состоит из семи элементов, или атомов: например, А, В, С, D, Е, F и G. Поскольку CAR извлекает первый элемент из списка, получить имя блока А легко. Поскольку CDR возвращает весь остальной список без первого элемента, применение CAR после CDR дает второй элемент списка, а повторяющееся применение CDR дает возможность получить каждый из элементов списка. Давайте проследим это до седьмого элемента.

В следующем примере переменной blkList присвоено значение, состоящее из списка элементов А, В, С, D, Е, F и G:

Для всех элементов:

blkList в командной строке возвращает (А в С D е f G)

Для седьмого элемента:

(car (cdr (cdr (cdr (cdr (cdr (cdr blkList))))))) возвращаете

Давайте попробуем получить седьмой элемент списка еще раз, на сей раз с использованием функции nth:

Для седьмого элемента: (nth 6 blkList) возвращаете

Теперь понятно, почему я люблю функцию NTH? А если понадобится получить двадцать седьмой элемент? В целом, я готов немного пожертвовать скоростью ради простоты. Да, кстати — здесь нет ошибки: седьмой элемент на самом деле (nth 6 blkList), потому что отсчет идет с 0, и первый атом в списке —

(nth 0 blkList).

Функция entsel запрашивает у пользователя выбор одного объекта. Когда вы пользуетесь функцией entsel, она возвращает два значения: имя объекта и координаты точки, использованной для выбора объекта. Когда я выбрал ок

ружность, я получил в ответ (<Entity name: 7ef61ea8> (46.904 22.3015 о.о)). 7ef6iea8 — имя примитива, а (46.904 22,3015 0.0)—координаты точки, которую я использовал для выбора объекта.

Комментарии закрыты