![]() |
Translate to: |
||||||
| Обратная связь | Новости САПР | Программы | Документация | Полезные советы | Обзорные статьи | ||
| Заказ и разработка | Каталог САПР | САПР-конференция | Библиотека ГОСТов | Наши соавторы | Коммерческое ПО | ||
Четвертая выбираемая задача, предназначена для числового обсчета свай расположенных в чертеже. Программа позволяет установить точное число свай и получить порядковые номера свай по модификациям.
Установленные блоки в виде свай на поле чертежа будут последовательно просмотрены и в них будут прочитаны имена атрибутов, несущие в своем значении порядковый номер сваи. При этом включаются счетчики свай и порядковых номеров свай для каждой модификации. Используя эти счетчики, программа устанавливает их значения в таблицу, которая устанавливается на поле чертежа. После использования табличных данных, таблицу можно удалить.
Задача требует использования блоков, которые являются условным обозначением сваи с атрибутом, имеющим в своем имени номер модификации сваи. Постановка задачи состоит в том, чтобы найти блок сваи, имя атрибута и его значение (порядковый номер) в блоке, выделить из него номер модификации сваи и включить счетчик конкретной сваи, куда добавить единицу и выделив в атрибуте порядковый номер сваи – добавить его в переменную с пробелом. Процесс повторяется при нахождении программой следующей сваи, по порядку, зависящему от последовательности вставки сваи в рисунок. По окончании обсчета данных на чертеже, полученные данные добавляются в таблицу в соответствующие атрибуты ячеек таблицы.
Структура программы приведена на чертеже. Предварительно необходимо обнулить все переменные для перестраховки, что играет немаловажную роль, поскольку используя много программ в чертеже Автокада можно получить неожиданный подарок в виде добавочной суммы, содержащейся в аналогичной переменной другой программы. Наглядно видно существование общего цикла, который работает, как "вертушка". Он крутится и просматривает примитивы чертежа, которые последовательно анализируются программой.
В цикл можно попасть только в случае наличия примитива.
После этого необходимо выполнить два условия:После выполнения этих условий срабатывает механизм установки в значение атрибута очередного номера сваи. При выполнении условий соблюдается следующий порядок: попасть в проверку 2 условия можно, только выполнив 1 условие.
При продолжении работы цикла и просмотре составляющих элементов блока подходит очередь последнего элемента блока, обозначающего его конец. В этом случае очередь просмотра переходит к следующему примитиву, с целью обнаружить следующий блок сваи. И так далее, пока не закончатся все сваи.
Разбор задачи выполнен для одной сваи в общем виде. Все остальные операции для других свай аналогичны. Точка с запятой используется для пояснений, которые устанавливаются в тексте программы и на работу программы не влияют.
(defun kols() |
Программная объединяющая функция счета числа электроприборов по плану этажа. Функция defun под именем /kols/ объединяет все выражения и функции программы. В сеансе Автокада она вызывается с помощью команды: (load"имя_файла") - загрузка файла, после чего в скобках указывается (имя_файла) для исполнения. Для нашего случая (load "kols") - загрузка файла, это выражение достаточно набрать в командной строке Автокада, после чего набрать - (kols) для исполнения программы, полную запись необходимо указать в командной строке Автокада или в пункте меню. Открывающая скобка функции defun должна закрыться закрывающей скобкой в конце программы. Выглядит это так (defun …………) |
(setq a nil b nil c nil a1 nil) (setq s51 nil n1 nil) (gc) (setq s52 nil n2 nil) (gc) |
Уничтожение всех переменных, участвующих в программе и очистка памяти |
(setq a (entnext)) |
Функция setq - присвоение переменной /а/ имени первого примитива в рисунке в длинной очереди выстроенных друг за другом примитивов чертежа. Команда entnext без аргумента дает имя первого неудаленного примитива в рисунке, тем самым мы находим начало данных примитивов рисунка Автокада. Примитивы Автокада это линии, текст, полилинии, круг, блоки и т.д. |
(setq b t) |
Создание переменной /b/, присвоение условного, виртуального существования переменной /b/ с помощью специального знака /t/ без каких либо данных |
(while (and a b) |
Начало цикла, открывающая скобка цикла - вход в цикл, который работает только при взаимном существовании переменных /a/ и /b/ при помощи функции (and...) - логическое И, объединяющей проверку существования /a/ и /b/. В цикле происходит повторение задуманных действий до тех пор, пока существуют обе переменные /a/ и /b/. При этом происходит последовательный внутренний просмотр примитивов рисунка одного за другим, согласно внутренней иерархии. Вызов нового элемента рисунка происходит в конце цикла с помощью команды (entnext a): При этом с помощью команды (setq a .....) происходит переприсвоение в переменную /а/ имени нового примитива взамен старого, уже просмотренного программой |
(setq b (cdr(assoc '0 (entget a)))) |
Выражение для получения из информационной структуры примитива рисунка (внутренней базы данных) - типа примитива INSERT, т.е. вставки блока, выражение можно записать и другим способом - последовательным написанием каждой функции: (setq b (entget a)) - список информационной структуры примитива (СИСП), (setq b (assoc '0 b)) - нахождение в (СИСП) по ключу (паролю) '0 ключевой пары типа примитива (0 . тип_примитива) (setq b (cdr b)) - получение значения второго члена ключевой пары, т.е. типа примитива. Наша задача - отбор всех примитивов с типом INSERT т.е. блоков, а затем из всего числа блоков, выбор блоков с именем 1_LMS1_18_54. Правильное написание выражений смотреть в аналоге программы в конце главы |
(if b |
Начало первого условия, открывающая скобка условия. Проверка существования /b/ - типа примитива, т.е. если переменная /b/ существует, то вход в условие разрешен. В противном случае доступ к выражениям, находящимся внутри первого условия будет запрещен |
(progn |
Функция progn позволяет объединить разные выражения находящиеся внутри первого условия в одно выражение. Если этого не сделать, то произойдет сбой или ошибка выполнения программы |
(if (equal b "INSERT") |
Начало второго условия, открывающая скобка условия. Выполнение 2 условия, что в переменной /b/ содержится вставка блока, т.е. при работе цикла и последовательном просмотре примитивов, содержащихся в рисунке, второе условие позволяет отобрать и пропустить внутрь себя только тогда, когда в переменной /b/ содержится вставка блока - INSERT или иначе говоря при нахождении блока, содержащегося внутри рисунка |
(progn |
Функция progn позволяет объединить разные выражения, находящиеся внутри второго условия в одно выражение. Если этого не сделать, то произойдет сбой или ошибка выполнения |
(setq c (cdr(assoc '2 (entget a)))) |
Получение имени блока из (СИСП), аналогично /b/ - см. рассмотренное выше выражение для получение типа примитива |
(princ "с = ")(princ c) (terpri) |
Вывод сообщения об имени блока в текстовом режиме Автокада, после отладки это выражение удаляется. Функция (terpri) служит для удобства – переносит следующее сообщение в текстовом режиме Автокада на новую строку |
(if (equal c "SV51") |
Третье условие подсчета, начало условия, открывающая скобка - условия количества свай пятиметровых первой модификации. Если переменная /с/ соответствует имени блока SV51, то мы попадаем в третье условие |
(progn |
Функция progn позволяет объединить разные выражения находящиеся внутри третьего условия в одно выражение. Если этого не сделать, то произойдет сбой или ошибка выполнения программы |
(if (not n1)(setq n1 0)) |
Это выражение проверяет существует ли счетчик свай 5м N1, если его /n1/ нет, что подтверждается выражением (not n1),которое дает значение /t/ – подтверждение для входа в условие, если переменная /n1/ не имеет значения. В этом случае внутри условия переменной счетчика присваивается значение 0, после чего он может использоваться для прибавления значения. Условие используется только один раз вначале появления счетчика, для создания переменной счетчика |
(setq n1 (+ n1 1)) |
Работа счетчика свай 5м N1 - увеличение на единицу, если выполнение программы доходит до этого места, т.е. когда программа находит блок свай 5м N1 в чертеже. Само выражение читается так - к значению переменной /n1/ прибавляется единица и общее значение снова записывается в переменную /n1/. Тем самым условие заканчивается |
)) |
Первая скобка закрывает выражение PROGN, а вторая скобка закрывает третье условие по выбору свай 5м N1 |
(if (equal c "SV52") |
Третье условие подсчета, начало условия, открывающая скобка - условия количества свай пятиметровых второй модификации. Если переменная /с/ соответствует имени блока SV52, то мы попадаем в третье условие |
(progn |
Функция progn позволяет объединить разные выражения находящиеся внутри третьего условия в одно выражение. Если этого не сделать, то произойдет сбой или ошибка выполнения программы |
(if (not n11)(setq n11 0)) |
Это выражение проверяет существует ли счетчик свай 5м N2, если его /n11/ нет, что подтверждается выражением (not n11), которое дает значение /t/ – подтверждение для входа в условие, если переменная /n11/ не имеет значения. В этом случае внутри условия переменной счетчика присваивается значение 0, после чего он может использоваться для прибавления значения. Условие используется только один раз вначале появления счетчика, для создания переменной счетчика |
(setq n11 (+ n11 1)) |
Работа счетчика свай 5м N2 - увеличение на единицу, если выполнение программы доходит до этого места, т.е. когда программа находит блок свай 5м N2 в чертеже. Само выражение читается так - к значению переменной /n11/ прибавляется единица и общее значение снова записывается в переменную /n11/. Тем самым условие заканчивается |
)) |
Первая скобка закрывает выражение PROGN, а вторая скобка закрывает третье условие по выбору свай 5м N2 |
Место вставки других третьих условий для выбора свай разной длины и модификаций по аналогии со сваями SV51 и SV52. |
|
)) |
Первая скобка закрывает выражение PROGN, а вторая скобка закрывает второе условие IF по определению блока, именно внутри 2 условия будут находиться десятки третьих условий для выбора свай разной длины и разных модификаций |
(if (equal b "ATTRIB") |
Начало четвертого условия, открывающая скобка условия. Выполнение 4 условия, что в переменной /b/ содержится атрибут, т.е. при работе цикла и последовательном просмотре примитивов, содержащихся в рисунке, четвертое условие позволяет отобрать и пропустить внутрь себя только тогда, когда в переменной /b/ содержится атрибут - ATTRIB или иначе говоря при нахождении атрибута, содержащегося внутри рисунка. Поскольку атрибут принадлежит блоку и при чтении программой примитивов рисунка будет следовать после своего блока, это будет означать, что после чтения данных блока SV51, следующим примитивом, который будет читаться программой, будет атрибут S51 в котором содержится порядковый номер сваи |
(progn |
Функция progn позволяет объединить разные выражения находящиеся внутри четвертого условия в одно выражение. Если этого не сделать, то произойдет сбой или ошибка выполнения программы |
(setq c (cdr(assoc '2 (entget a)))) |
Получение имени атрибута из (СИСП), аналогично /b/ - см. рассмотренное выше выражение для получение типа примитива |
(princ "с = ")(princ c) (terpri) |
Вывод сообщения об имени атрибута в текстовом режиме Автокада, после отладки это выражение удаляется. Функция (terpri) служит для удобства – переносит следующее сообщение в текстовом режиме Автокада на новую строку |
(setq d (cdr(assoc '1 (entget a)))) |
Получение значения атрибута, т.е. порядкового номера сваи из (СИСП), аналогично /b/ - см. рассмотренное выше выражение для получение типа примитива |
(if (equal c "S51") |
Пятое условие подсчета, начало условия, открывающая скобка - условия получения порядкового номера свай пятиметровых первой модификации. Если переменная /с/ соответствует имени атрибута S51, то мы попадаем в пятое условие для получения значения атрибута |
(progn |
Функция progn позволяет объединить разные выражения находящиеся внутри пятого условия в одно выражение. Если этого не сделать, то произойдет сбой или ошибка выполнения программы |
(if d |
Шестое условие проверки наличия значения в атрибуте, если есть, продвигаемся дальше по выражению условия - условия получения значения для установки в таблицу данных |
(progn |
Функция progn позволяет объединить разные выражения находящиеся внутри шестого условия в одно выражение. Если этого не сделать, то произойдет сбой или ошибка выполнения программы |
(if (not s51)(setq s51 " ")) |
Полное выражение седьмого условия - проверки переменной S51 куда записываются последовательно через пробел значения (номера свай), при первой встрече с этой переменной – ее не существует поэтому нам нужно ее создать, для этого записываем в нее пробел с помощью седьмого условия |
(setq s51 (strcat s51 d " ")) |
Это выражение служит для записи в переменную s51 значения атрибута, т.е. номера сваи вместе с пробелом, чтобы добавляемое следующее значение атрибута (следующий найденный номер сваи), не сливалось с предыдущим значением |
)))) |
Третья скобка закрывает выражение PROGN, а четвертая скобка закрывает шестое условие IF по наличию /d/, первая скобка закрывает выражение PROGN, а вторая скобка закрывает пятое условие IF по соответствию /с/ имени атрибута /s51/ |
(if (equal c "S52")(progn (if d (progn (if (not s52)(setq s52 " ")) (setq s52 (strcat s52 d " ")) )) )) |
Пятое условие получения порядкового номера свай пятиметровых второй модификации. Если переменная /с/ соответствует имени атрибута S52, то мы попадаем в пятое условие для получения значения атрибута – см. аналогично /S51/ |
Место вставки других пятых условий для выбора атрибутов имен свай разной длины и модификаций по аналогии с именем атри-бута S51 |
|
)) |
Первая скобка закрывает выражение PROGN, а вторая скобка закрывает четвертое условие IF по определению наличия атрибута, именно внутри 4 условия будут находиться десятки пятых условий для выбора атрибутов свай разной длины и разных модификаций |
)) |
Первая скобка закрывает выражение PROGN, а вторая скобка закрывает первое условие IF по определению существования типа примитива |
(setq a (entnext a)) |
Выражение для перелистывания примитивов и получения имени следующего примитива или подпримитива, т.е. функция entnext с именем /а/ - предыдущего примитива, дает имя следующего примитива, которое записывается в переменную /а/ |
(if (not a)(progn (setq b nil))) |
При отсутствии следующих примитивов (после просмотра последнего примитива), переменная /a/ перестает существовать и с помощью этого условия уничтожаем переменную /b/ для прекращения работы цикла |
) |
Конец цикла по выбору примитивов свай, закрывающая скобка для цикла |
(textscr) |
Функция перехода из графического в текстовый режим, чтобы прочитать текстовые сообщения о работе программы в сеансе Автокада |
(princ"========")(terpri) |
Визуальный разделитель текстовых строк при выводе текстовой информации на экран, для лучшего прочтения текстовой информации |
(if n1 (progn (terpri) (princ "1 ЧИСЛО СВАЙ ДЛИНОЙ 5м - 1 на ПЛАНЕ = ") (princ n1) )) |
Условие вывода информации на экран, если существует /n1/ счетчик количества свай 5м N1, то на текстовый экран выйдет информация коли-чества свай 5м N1 |
(if s51 (progn (terpri) (princ "НОМЕРА СВАЙ 5м 1 = ")(princ s51))) |
Условие вывода информации на экран, если существует /s51/ список номеров свай 5м N1, то на текстовый экран выйдет информация - список N cвай |
(if n11 (progn (terpri) (princ "2 ЧИСЛО СВАЙ ДЛИНОЙ 5м - 2 на ПЛАНЕ = ") (princ n11) )) |
Условие вывода информации на экран, если существует /n11/ счетчик количества свай 5м N2, то на текстовый экран выйдет информация количества свай 5м N2 |
(if s52 (progn (terpri) (princ "НОМЕРА СВАЙ 5м 2 = ")(princ s52))) |
Условие вывода информации на экран, если существует /s52/ список номеров свай 5м N2, то на текстовый экран выйдет информация - список N cвай |
Место вставки других условий для вывода информации о других типах свай разной длины и модификаций по аналогии с вышеприведенными. |
|
(load"p_tbs")(p_tbs)(setq p_tbs nil) (gc) |
Включение задачи вставки данных в таблицу данных свай, данные свай соответствуют выведенной текстовой информации в текстовом окне Автокада. В связи с тем, что текстовая информация не всегда удобна, а таблицу данных можно преобразовать к необходимому виду чертежа. Еще немаловажная деталь – Автокад непрерывно выводит свою текстовую информацию на экран о своей работе и наша текстовая информация будет сдвигаться и исчезать с экрана, а таблица данных останется в графическом окне Автокада, т.е. будет всегда под рукой |
(setq a nil b nil c nil a1 nil)(gc) (setq n1 nil n11 nil s51 nil s52 nil) (gc) |
Удаление неиспользуемых перемен-ных перед окончанием программы |
) |
Скобка закрытия программной объединяющей функции данных свай. (Функция defun) под именем /kols/ |
(defun kols() ;количество свай на плане по типу
(setq a nil b nil c nil a1 nil)(gc)
(setq n1 nil n11 nil n12 nil n2 nil n21 nil n22 nil n3 nil n31 nil n32 nil)(gc)
(setq n4 nil n41 nil n42 nil n5 nil n51 nil n52 nil)(gc)
(setq s51 nil s52 nil s53 nil s61 nil s62 nil s63 nil s71 nil) (gc)
(setq s72 nil s73 nil)(gc)
(setq s81 nil s82 nil s83 nil s91 nil s92 nil s93 nil)(gc)
(setq a (entnext) a1 0 b t)
(while (and a b) (setq b (cdr(assoc '0 (entget a))))
(if b (progn
(princ "с = ")(princ c)(terpri)
(if (equal b "INSERT")(progn
(setq c (cdr(assoc '2 (entget a))))
(setq d (cdr(assoc '1 (entget a))))
(princ "b1 = ")(princ b)(terpri)(princ "с1 = ")(princ c)(terpri)
(if (equal c "SV51")(progn (if (not n1)(setq n1 0))(setq n1 (+ n1 1))))
(if (equal c "SV52")(progn
(if (not n11)(setq n11 0))(setq n11 (+ n11 1))))
(if (equal c "SV53")(progn
(if (not n12)(setq n12 0))(setq n12 (+ n12 1))))
(if (equal c "SV61")(progn
(if (not n2)(setq n2 0))(setq n2 (+ n2 1))))
(if (equal c "SV62")(progn
(if (not n21)(setq n21 0))(setq n21 (+ n21 1))))
(if (equal c "SV63")(progn
(if (not n22)(setq n22 0))(setq n22 (+ n22 1))))
(if (equal c "SV71")(progn (if (not n3)(setq n3 0))(setq n3 (+ n3 1))))
(if (equal c "SV72")(progn
(if (not n31)(setq n31 0))(setq n31 (+ n31 1))))
(if (equal c "SV73")(progn
(if (not n32)(setq n32 0))(setq n32 (+ n32 1))))
(if (equal c "SV81")(progn
(if (not n4)(setq n4 0))(setq n4 (+ n4 1))))
(if (equal c "SV82")(progn
(if (not n41)(setq n41 0))(setq n41 (+ n41 1))))
(if (equal c "SV83")(progn
(if (not n42)(setq n42 0))(setq n42 (+ n42 1))))
(if (equal c "SV91")(progn (if (not n5)(setq n5 0))(setq n5 (+ n5 1))))
(if (equal c "SV92")(progn
(if (not n51)(setq n51 0))(setq n51 (+ n51 1))))
(if (equal c "SV93")(progn
(if (not n52)(setq n52 0))(setq n52 (+ n52 1))))
))
(if (equal b "ATTRIB")(progn
(setq c (cdr(assoc '2 (entget a))))(setq d (cdr(assoc '1 (entget a))))
(princ "b2 = ")(princ b)(terpri)(princ "с2 = ")(princ c)(terpri)
(if (equal c "S51")(progn
(if d (progn (if (not s51)(setq s51 " "))
(setq s51 (strcat s51 d " "))))
))
(if (equal c "S52")(progn
(if d (progn (if (not s52)(setq s52 " "))
(setq s52 (strcat s52 d " "))))
))
(if (equal c "S53")(progn
(if d (progn (if (not s53)(setq s53 " "))
(setq s53 (strcat s53 d " "))))
))
(if (equal c "S61")(progn (if d (progn (if (not s61)(setq s61 " "))
(setq s61 (strcat s61 d " "))))))
(if (equal c "S62")(progn (if d (progn (if (not s62)(setq s62 " "))
(setq s62 (strcat s62 d " "))))))
(if (equal c "S63")(progn (if d (progn (if (not s63)(setq s63 " "))
(setq s63 (strcat s63 d " "))))))
(if (equal c "S71")(progn (if d (progn (if (not s71)(setq s71 " "))
(setq s71 (strcat s71 d " "))))))
(if (equal c "S72")(progn (if d (progn (if (not s72)(setq s72 " "))
(setq s72 (strcat s72 d " "))))))
(if (equal c "S73")(progn (if d (progn (if (not s73)(setq s73 " "))
(setq s73 (strcat s73 d " "))))))
(if (equal c "S81")(progn (if d (progn (if (not s81)(setq s81 " "))
(setq s81 (strcat s81 d " "))))))
(if (equal c "S82")(progn (if d (progn (if (not s82)(setq s82 " "))
(setq s82 (strcat s82 d " "))))))
(if (equal c "S83")(progn (if d (progn (if (not s83)(setq s83 " "))
(setq s83 (strcat s83 d " "))))))
(if (equal c "S91")(progn (if d (progn (if (not s91)(setq s91 " "))
(setq s91 (strcat s91 d " "))))))
(if (equal c "S92")(progn (if d (progn (if (not s92)(setq s92 " "))
(setq s92 (strcat s92 d " "))))))
(if (equal c "S93")(progn (if d (progn (if (not s93)(setq s93 " "))
(setq s93 (strcat s93 d " "))))))
))
))
(setq a (entnext a))(if (not a)(progn (setq a nil b nil)))
)
(princ "свая 5 -1 = ")(princ n1)(terpri)
(princ "свая 5 -2 = ")(princ n11)(terpri)
(princ "свая 5 -3 = ")(princ n12)(terpri)
(princ "=========================================")(terpri)
(if n1 (progn (terpri)
(princ " 1 ЧИСЛО СВАЙ ДЛИНОЙ 5м - 1 на ПЛАНЕ = ")(princ n1)))
(if s51 (progn (terpri)
(princ "НОМЕРА СВАЙ 5м 1 = ")(princ s51)))
(if n11 (progn (terpri)
(princ " 2 ЧИСЛО СВАЙ ДЛИНОЙ 5м - 2 на ПЛАНЕ = ")(princ n11)))
(if s52 (progn (terpri)
(princ "НОМЕРА СВАЙ 5м 2 = ")(princ s52)))
(if n12 (progn (terpri)
(princ " 3 ЧИСЛО СВАЙ ДЛИНОЙ 5м - 3 на ПЛАНЕ = ")(princ n12)))
(if s53 (progn (terpri)
(princ "НОМЕРА СВАЙ 5м 3 = ")(princ s53)))
(if n2 (progn (terpri)
(princ " 1 ЧИСЛО СВАЙ ДЛИНОЙ 6м - 1 на ПЛАНЕ = ")(princ n2)))
(if s61 (progn (terpri)
(princ "НОМЕРА СВАЙ 6м 1 = ")(princ s61)))
(if n21 (progn (terpri)
(princ " 2 ЧИСЛО СВАЙ ДЛИНОЙ 6м - 2 на ПЛАНЕ = ")(princ n21)))
(if s62 (progn (terpri)
(princ "НОМЕРА СВАЙ 6м 2 = ")(princ s62)))
(if n22 (progn (terpri)
(princ " 3 ЧИСЛО СВАЙ ДЛИНОЙ 6м - 3 на ПЛАНЕ = ")(princ n22)))
(if s63 (progn (terpri)
(princ "НОМЕРА СВАЙ 6м 3 = ")(princ s63)))
(if n3 (progn (terpri)
(princ " 1 ЧИСЛО СВАЙ ДЛИНОЙ 7м - 1 на ПЛАНЕ = ")(princ n3)))
(if s71 (progn (terpri)
(princ "НОМЕРА СВАЙ 7м 1 = ")(princ s71)))
(if n31 (progn(terpri)
(princ " 2 ЧИСЛО СВАЙ ДЛИНОЙ 7м - 2 на ПЛАНЕ = ")(princ n31)))
(if s72 (progn (terpri)
(princ "НОМЕРА СВАЙ 7м 2 = ")(princ s72)))
(if n32 (progn(terpri)
(princ " 3 ЧИСЛО СВАЙ ДЛИНОЙ 7м - 3 на ПЛАНЕ = ")(princ n32)))
(if s73 (progn (terpri)
(princ "НОМЕРА СВАЙ 7м 3 = ")(princ s73)))
(if n4 (progn (terpri)
(princ " 1 ЧИСЛО СВАЙ ДЛИНОЙ 8м - 1 на ПЛАНЕ = ")(princ n4)))
(if s81 (progn (terpri)
(princ "НОМЕРА СВАЙ 8м 1 = ")(princ s81)))
(if n41 (progn(terpri)
(princ " 2 ЧИСЛО СВАЙ ДЛИНОЙ 8м - 2 на ПЛАНЕ = ")(princ n41)))
(if s82 (progn (terpri)
(princ "НОМЕРА СВАЙ 8м 2 = ")(princ s82)))
(if n42 (progn(terpri)
(princ " 3 ЧИСЛО СВАЙ ДЛИНОЙ 8м - 3 на ПЛАНЕ = ")(princ n42)))
(if s83 (progn (terpri)
(princ "НОМЕРА СВАЙ 8м 3 = ")(princ s83)))
(if n5 (progn (terpri)
(princ " 1 ЧИСЛО СВАЙ ДЛИНОЙ 9м - 1 на ПЛАНЕ = ")(princ n5)))
(if s91 (progn (terpri)
(princ "НОМЕРА СВАЙ 9м 1 = ")(princ s91)))
(if n92 (progn(terpri)
(princ " 2 ЧИСЛО СВАЙ ДЛИНОЙ 9м - 2 на ПЛАНЕ = ")(princ n92)))
(if s92 (progn (terpri)
(princ "НОМЕРА СВАЙ 9м 2 = ")(princ s92)))
(if n52 (progn(terpri)
(princ " 3 ЧИСЛО СВАЙ ДЛИНОЙ 9м - 3 на ПЛАНЕ = ")(princ n52)))
(if s93 (progn (terpri)
(princ "НОМЕРА СВАЙ 9м 3 = ")(princ s93)))
(terpri)(princ "===============================================")
(load"p_tbs")(p_tbs)(setq p_tbs nil)(gc)(terpri)
(setq a nil b nil c nil a1 nil)(gc)
(setq n1 nil n11 nil n12 nil n2 nil n21 nil)
(setq n22 nil n3 nil n31 nil n32 nil)(gc)
(setq n4 nil n41 nil n42 nil n5 nil n51 nil n52 nil)(gc)
(setq s51 nil s52 nil s53 nil s61 nil s62 nil s63 nil)
(setq s71 nil s72 nil s73 nil)
(setq s81 nil s82 nil s83 nil s91 nil s92 nil s93 nil)(gc)
)
Copyright © Сайт поддержки пользователей САПР