![]() |
Translate to: |
||||||
| Обратная связь | Новости САПР | Программы | Документация | Полезные советы | Обзорные статьи | ||
| Заказ и разработка | Каталог САПР | САПР-конференция | Библиотека ГОСТов | Наши соавторы | Коммерческое ПО | ||
Третья самостоятельная задача, которая применяется для определения количества кабельной продукции системы автоматизации в схемах внешних соединений. Обозначения кабеля в виде блоков находятся на поле чертежа.
Задача проектировщика состоит в подсчете количества электрокабеля и количества трубной продукции, обозначение которых находятся в поле чертеже в виде блоков. Ручной процесс подсчета довольно трудоемкий и сложность его увеличивается по мере насыщения чертежа схемы внешних соединениий. Речь идет о схемах внешних соединений автоматизации на которых раньше вручную наноси-лись обозначения кабельной продукции. Чем больше трасс, тем больше обозначений. После окончания выполнения чертежа перед проектировщиком вставала задача вычислить обьемы кабельной продукции на чертеже по типам кабеля и провода. При этом задача является обычной механической операцией, не требующей интеллектуального труда.
Задача требует использования блоков, которые представляют из себя условные обозначение наименования кабеля, провода или трубы. За счет уникального имени блока, позволяет с помощью программы, автоматически пересчитать количество по типам. При этом задача просматривает все примитивы чертежа-рисунка и находя соответствующие блоки сортирует их по именам. Каждому блоку соответствует свой счетчик, который накапливает данные при нахождении соответствующего блока. После окончания просмотра рисунка данные подсчета выводятся на экран. Можно сделать соответствующие дополнения в программу и получить вывод данных в текстовый файл или в таблицу данных на чертеже. Интересно решен подсчет проводов. В блоке обозначения провода добавлении еще один(два) атрибут(а), которые несут информацию о количестве жил. Это дает возможность определить полную длину провода. В данном описании рассматривается всего лишь несколько конкретных примеров, в то время, как общее их количество в предлагаемой программе намного больше. Но все они построены по одному принципу.
Разбор задачи выполнен для 2 примеров – провода и кабеля. Все остальные операции для другой кабельной продукции аналогично. Точка с запятой используется для комментарий, которые устанавливаются в тексте программы и на работу программы не влияют. В конце описания приведен полный текст программы.
(defun kolkp () |
Программная объединяющая функция подсчета числа кабеля на схеме внешних соединений. Функция defun под именем /kolkp/ объединяет все выражения и функции программы. В сеансе Автокада она вызывается с помощью команды: (load "имя_файла")- загрузка файла, после чего в скобках указывается (имя_файла) для исполнения. Для нашего случая (load "kolkp") - загрузка файла,это выражение достаточно набрать в командной строке Автокада, после чего набрать - (kolkp) для исполнения программы, полную запись необходимо указать в командной строке Автокада или в пункте меню. Открывающая скобка функции defun должна закрыться закрывающей скобкой в конце программы. Выглядит это так (defun …………) |
(setq a (entnext)) |
Функция setq - присвоение переменной /а/ имени первого примитива в рисунке в длинной очереди выстроенных друг за другом примитивов чертежа. Команда entnext без аргумента дает имя первого неудаленного примитива в рисунке, тем самым мы находим начало данных примитивов Автокада. Примитивы Автокада это линии, текст, полилинии, круг, блоки и т.д. |
(setq b t) |
Функция присвоения переменной /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 т.е. блоков , а затем из всего числа блоков, выбор блоков с именем P_PV11 и K41. Правильное написание выражений смотреть в аналоге программы в конце главы. |
(if b |
Начало первого условия, открывающая скобка условия. Проверка существования /b/ - типа примитива, т.е. если переменная /b/ существует, то вход в условие разрешен. В противном случае доступ к выражениям, находящимся внутри первого условия будет запрещен. |
(progn |
Функция progn позволяет объединить разные выражения находящиеся внутри первого условия в одно выражение. Если этого не сделать, то произойдет сбой или ошибка выполнения программы |
(setq c (cdr(assoc '2 (entget a)))) |
С помощью этого выражения, уже знакомого нам определяем имя блока или атрибута из (СИСП) |
(princ "с = ")(princ c) (terpri) |
Вывод сообщения об имени блока в текстовом режиме Автокада, после отладки это выражение удаляется. Функция (terpri) служит для удобства – переносит следующее сообщение в текстовом режиме Автокада на новую строку |
(if (equal b "INSERT") |
Начало второго условия, открывающая скобка условия. Выполнение 2 условия, что в переменной /b/ содержится вставка блока, т.е. при работе цикла и последовательном просмотре примитивов, содержащихся в рисунке, второе условие позволяет отобрать и пропустить внутрь себя только тогда, когда в переменной /b/ содержится вставка блока - INSERT или иначе говоря при нахождении блока, содержащегося внутри рисунка. |
(progn |
Функция progn позволяет объединить разные выражения, находящиеся внутри второго условия в одно выражение. Если этого не сделать, то произойдет сбой или ошибка выполнения. |
(if (equal c "P_PV11") |
Третье условие подсчета, начало условия, открывающая скобка - условия нахождения имени блока для провода ПВ1 сечением 1,0 мм2. Если переменная /с/ соответствует имени блока P_PV11, то мы попадаем в третье условие |
(progn |
Функция progn позволяет объединить разные выражения находящиеся внутри третьего условия в одно выражение. Если этого не сделать, то произойдет сбой или ошибка выполнения программы |
(setq aa1 a)) |
Это выражение помогает записать имя примитива найденного блока, чтобы использовать его еще раз. Это станет ясно позднее |
)) |
Первая скобка закрывает выражение PROGN а вторая скобка закрывает третье условие по выбору блока провода |
В этом месте устанавливаются третьи условия для других проводов, а их может быть много и структура сложнее |
|
)) |
Первая скобка закрывает выражение PROGN, а вторая скобка закрывает второе условие по определению вставки блока |
(if (equal b "ATTRIB") |
Аналогично второму условию определяем наличие атрибута в проверяемых примитивах в четвертом условии. Для чего это надо. Все дело в том, что в блоках названий кабеля, длина кабеля хранится в атрибутах, имеющих специфические имена (неповторяющиеся). Поэтому нет смысла искать блок названия кабеля, а сразу найти атрибут длины конкретного кабеля. Это практичнее. Для провода поиск длины отличается. |
(progn |
Функция progn позволяет объединить разные выражения находящиеся внутри четвертого условия в одно выражение. Если этого не сделать, то произойдет сбой или ошибка выполнения программы |
(if (equal c "К41") (progn |
Выражение пятого условия для нахождения атрибута длины кабеля КВВГ 4х1 |
(setq dl1 (atoi (cdr(assoc '1 (entget a))))) |
С помощью этого выражения, уже знакомого нам определяем длину кабеля из (СИСП) |
(if (not dlo1) (prong (setq dlo1 0))) |
Если вдруг отсутствует общий счетчик длины кабеля КВВГ 4х1, то создаем переменную для счетчика и присваиваем ей нулевое значение. |
(setq dl1 (+ dl1 dlo1) dl1 nil) |
Теперь можем добавлять в счетчик кабеля найденное значение длины кабеля |
)) |
Первая скобка закрывает выражение PROGN, а вторая скобка закрывает пятое условие по добавлению конкретного кабеля в конкретный счетчик |
В этом месте устанавливаются, пятые условия для счетчиков других кабелей, а их может быть много |
|
(if (and (equal c "PV11") aa1) |
Пятое условие для провода, если мы находим атрибут длины провода PV11 с существованием примитива блока названия провода aa1, то попадаем внутрь условия |
(prong |
Функция progn позволяет объединить разные выражения находящиеся внутри пятого условия в одно выражение. Если этого не сделать, то произойдет сбой или ошибка выполнения программы |
(setq dl7 (atoi(cdr(assoc '1 (entget a))))) |
Определение длины провода |
(setq a1 aa1 aa1 nil ) (setq a1 (entnext a1)) |
Переприсвоение данных: в /a1/ переносим данные из /aa1/, уничтожаем переменную /aa1/, и начинаем листать примитивы нашего блока, (entnext a1) – позволяет перелистнуть данные блока и попасть в первый атрибут нашего блока и записать в /a1/ |
(setq b1 (cdr(assoc '0 (entget a1)))) |
Выражение для получения из информационной структуры примитива рисунка - типа примитива ATTRIB, т.е. атрибута блока, выражение можно записать и другим способом - последовательным написанием каждой функции: (setq b1 (entget a)) - список информационной структуры примитива (СИСП), (setq b1 (assoc '0 b1)) - нахождение в (СИСП) по ключу (паролю) '0 ключевой пары типа примитива (0 . тип_примитива) , (setq b1 (cdr b1)) - получение значения второго члена ключевой пары, т.е. типа примитива |
(setq prr t) |
Создание виртуальной переменной prr |
(while (and a1 b1) |
Открытие внутреннего цикла для работы с атрибутами блока названия провода, если переменные /a1/ и /b1/ существуют, то цикл включается в работу |
(setq b1 (cdr(assoc '0 (entget a1)))) |
Выражение для получения из информационной структуры примитива рисунка - типа примитива ATTRIB, т.е. атрибута блока, выражение можно записать и другим способом - последовательным написанием каждой функции: (setq b1 (entget a)) - список информационной структуры примитива (СИСП),(setq b1 (assoc '0 b1)) - нахождение в (СИСП) по ключу (паролю) '0 ключевой пары типа примитива (0 . тип_примитива). (setq b1 (cdr b1)) - получение значения второго члена ключевой пары, т.е. типа примитива. |
(if b1 (progn |
Шестое условие существования примитива, если есть, то мы попадаем в условие |
(setq c1 (cdr(assoc '2 (entget a1)))) |
Чтение данных атрибута – в данном случае получение имени атрибута |
(if (equal b1 "ATTRIB")(progn |
Седьмое условие, если наш примитив – атрибут, то попадаем в условие |
(if (and (equal c1 "NG") prr) (progn |
Восьмое условие, если имя атрибута /NG/ и существует виртуальная переменная prr, мы попадаем в условие |
(setq chg (atoi(cdr(assoc '1 (entget a1))))) |
Определяем данные атрибута – число жил |
(if (not dlo7) (prong (setq dlo7 0))) |
Если отсутствует счетчик длины провода то переменной dlo7 присваиваем нулевое значение |
(setq dl7 (* chg dl7)) |
Перемножаем число жил на длину провода и получаем общую длину провода |
(setq dlo7 (+ dlo7 dl7)) |
Добавляем общую длину провода в счетчик провода ПВ1 1х1 |
(setq prr nil dl7 nil) |
После завершения работы с счетчиком уничтожаем ненужные переменные, теперь они могут стать вредными |
)) |
Первая скобка закрывает выражение PROGN, а вторая скобка закрывает восьмое условие по /NG/ |
)) |
Первая скобка закрывает выражение PROGN, а вторая скобка закрывает седьмое условие по /ATTRIB/ |
)) |
Первая скобка закрывает выражение PROGN, а вторая скобка закрывает шестое условие по /B1/ |
(setq a1 (entnext a1)) |
Выражение для перелистывания примитивов и получения имени следующего примитива или подпримитива, т.е. функция entnext с именем /а1/ - предыдущего примитива, дает имя следующего примитива, которое записывается в переменную /а1/. |
) |
Конец цикла по выбору длины провода, закрывающая скобка для цикла |
(setq a1 nil b1 nil c1 nil) (setq chg nil dl7 nil) |
Уничтожение ненужных переменных |
)) |
Первая скобка закрывает выражение PROGN, а вторая скобка закрывает пятое условие по обсчету провода ПВ 1х1 |
В этом месте устанавливаются пятые условия для счетчиков других проводов, а их может быть много и характер обсчета может быть сложнее |
|
)) |
Первая скобка закрывает выражение PROGN, а вторая скобка закрывает первое условие по определению существования примитива /B1/ |
(setq a1 (entnext a1)) |
Выражение для перелистывания примитивов и получения имени следующего примитива или подпримитива, т.е. функция entnext с именем /а1/ - предыдущего примитива, дает имя следующего примитива, которое записывается в переменную /а1/ |
) |
Окончание главного цикла, после определения отсутствия существующих примитивов - выходим из цикла |
(if dlo1 (progn (princ "ДЛИНА КАБЕЛЯ КВВГ 4х1,0 (метр) = ") (princ dlo1)(terpri))) |
Если переменная /dlo1/ общего счетчика кабеля существует, то попадая в условие, мы выводим текстовое сообщение о длине кабеля на текстый экран Автокада |
(if dlo7 (progn (princ "ДЛИНА ПРОВОДА ПВ1(1х1,0) (метр) = ") (princ dlo7)(terpri))) |
Если переменная /dlo7/ общего счетчика провода существует, то попадая в условие, мы выводим текстовое сообщение о длине провода на текстый экран Автокада |
) |
Закрытие программной объединяющей функции подсчета числа кабеля и провода на схеме внешних соединений (Функция defun под именем /kolkp/) |
Вывод полученных результатов в текстовое окно Автокада, когда проектировщик выполняет чертеж, чтобы перейти в текстовое окно необходимо нажать клавишу F1. Выводу информации помогает функция Автолиспа /princ/. Если переменная имеет значение, то далее друг за другом следуют два выражения /princ/. В первом выражении печа-тается название кабеля/провода, а во втором выражении печатается переменная количества конкретного кабеля/провода, т.е. сколько содержится в переменной, столько и напечатается.
Ниже приведен текст программы, который намного меньше верхнего варианта с пояснениями. Хорошо видно тело программы с отступами, которые формируют и выражают функции цикла и условий. Наглядно видно, что каждое выражение, которое открывается скобкой должно иметь соответствующую закрывающую скобку. Кстати наиболее часто встречающаяся ошибка – несоответствие по количеству открывающих и закрывающих скобок.
Текст программы учета длин кабеля и провода в чертеже Автокада – схеме внешних соединений систем автоматизации
(defun kolkp() ;функция счета длины кабеля и провода из атрибутов ;схемы внешних соединений
(setq a (entnext) b t)(setq aa1 nil aa2 nil aa5 nil aa3 nil)(gc)
(setq aa4 nil aa6 nil aa7 nil aa9 nil)(gc)
(while (and a b)
(setq b (cdr(assoc '0 (entget a))))
(if b (progn (setq c (cdr(assoc '2 (entget a))))
;(princ "c = ")(princ c)(terpri) ; для справок
(if (equal b "INSERT")(progn
(if (equal c "P_PV11") (progn (setq aa1 a)))
(if (equal c "P_pv11") (progn (setq aa1 a)))
(if (equal c "P_PV115") (progn (setq aa2 a)))
(if (equal c "P_pv115") (progn (setq aa2 a)))
(if (equal c "P_PV125") (progn (setq aa5 a)))
(if (equal c "P_pv125") (progn (setq aa5 a)))
(if (equal c "P_PV31") (progn (setq aa3 a)))
(if (equal c "P_pv31") (progn (setq aa3 a)))
(if (equal c "P_PV315") (progn (setq aa4 a)))
(if (equal c "p_pv315") (progn (setq aa4 a)))
(if (equal c "P_PV325") (progn (setq aa6 a)))
(if (equal c "p_pv325") (progn (setq aa6 a)))
(if (equal c "P_PV115_PV125") (progn (setq aa7 a)))
(if (equal c "p_pv115_pv125") (progn (setq aa7 a)))
(if (equal c "P_PV315_PV325") (progn (setq aa9 a)))
(if (equal c "p_pv315_pv325") (progn (setq aa9 a)))
(if (equal c "KPSVV_5") (progn (setq aa8 a)))
))
(if (equal b "ATTRIB")(progn
(if (equal c "M35") (progn
(setq dl1 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo201) (progn (setq dlo201 0)))
(setq dlo201 (+ dlo201 dl1) dl1 nil)))
(if (equal c "M75") (progn
(setq dl1 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo202) (progn (setq dlo202 0)))
(setq dlo202 (+ dlo202 dl1) dl1 nil)))
(if (equal c "KMM2") (progn
(setq dlm1 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlmo1) (progn (setq dlmo1 0)))
(setq dlmo1 (+ dlmo1 dlm1) dlm1 nil)))
(if (equal c "KV2") (progn
(setq dlve1 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlveo1) (progn (setq dlveo1 0)))
(setq dlveo1 (+ dlveo1 dlve1) dlve1 nil)))
(if (equal c "VP2") (progn
(setq dlv1 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlvo1) (progn (setq dlvo1 0)))
(setq dlvo1 (+ dlvo1 dlv1) dlv1 nil)))
(if (equal c "KU4") (progn
(setq dlu1 (atoi(cdr(assoc '1 (entget a)))))
(if (not dluo1) (progn (setq dluo1 0)))
(setq dluo1 (+ dluo1 dlu1) dlu1 nil)))
(if (equal c "KUE4") (progn
(setq dlue1 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlueo1) (progn (setq dlueo1 0)))
(setq dlueo1 (+ dlueo1 dlue1) dlue1 nil)))
(if (equal c "KE4") (progn
(setq dl1 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo1) (progn (setq dlo1 0)))
(setq dlo1 (+ dlo1 dl1) dl1 nil)))
(if (equal c "K41") (progn
(setq dl2 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo2) (progn (setq dlo2 0)))
(setq dlo2 (+ dlo2 dl2) dl2 nil)))
(if (equal c "K71") (progn
(setq dl21 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo21) (progn (setq dlo21 0)))
(setq dlo21 (+ dlo21 dl21) dl21 nil)))
(if (equal c "K101") (progn
(setq dl22 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo22) (progn (setq dlo22 0)))
(setq dlo22 (+ dlo22 dl22) dl22 nil)))
(if (equal c "K141") (progn
(setq dl23 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo23) (progn (setq dlo23 0)))
(setq dlo23 (+ dlo23 dl23) dl23 nil)))
(if (equal c "K271") (progn
(setq dl25 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo25) (progn (setq dlo25 0)))
(setq dlo25 (+ dlo25 dl25) dl25 nil)))
(if (equal c "K45") (progn
(setq dl27 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo27) (progn (setq dlo27 0)))
(setq dlo27 (+ dlo27 dl27) dl27 nil)))
(if (equal c "K75") (progn
(setq dl28 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo28) (progn (setq dlo28 0)))
(setq dlo28 (+ dlo28 dl28) dl28 nil)))
(if (equal c "K105") (progn
(setq dl29 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo29) (progn (setq dlo29 0)))
(setq dlo29 (+ dlo29 dl29) dl29 nil)))
(if (equal c "K145") (progn
(setq dl291 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo291) (progn (setq dlo291 0)))
(setq dlo291 (+ dlo291 dl291) dl291 nil)))
(if (equal c "K195") (progn
(setq dl292 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo292) (progn (setq dlo292 0)))
(setq dlo292 (+ dlo292 dl292) dl292 nil)))
(if (equal c "K275") (progn
(setq dl26 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo26) (progn (setq dlo26 0)))
(setq dlo26 (+ dlo26 dl26) dl26 nil)))
(if (equal c "K375") (progn
(setq dl261 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo261) (progn (setq dlo261 0)))
(setq dlo261 (+ dlo261 dl261) dl261 nil)))
(if (equal c "A42") (progn
(setq dl3 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo3) (progn (setq dlo3 0)))
(setq dlo3 (+ dlo3 dl3) dl3 nil)))
(if (equal c "A72") (progn
(setq dl31 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo31) (progn (setq dlo31 0)))
(setq dlo31 (+ dlo31 dl31) dl31 nil)))
(if (equal c "A102") (progn
(setq dl32 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo32) (progn (setq dlo32 0)))
(setq dlo32 (+ dlo32 dl32) dl32 nil)))
(if (equal c "TP105") (progn
(setq dl11 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo11) (progn (setq dlo11 0)))
(setq dlo11 (+ dlo11 dl11) dl11 nil)))
(if (equal c "TP205") (progn
(setq dl12 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo12) (progn (setq dlo12 0)))
(setq dlo12 (+ dlo12 dl12) dl12 nil)))
(if (equal c "TP305") (progn
(setq dl13 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo13) (progn (setq dlo13 0)))
(setq dlo13 (+ dlo13 dl13) dl13 nil)))
(if (equal c "TP505") (progn
(setq dl15 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo15) (progn (setq dlo15 0)))
(setq dlo15 (+ dlo15 dl15) dl15 nil)))
(if (equal c "P20") (progn
(setq dl101 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo101) (progn (setq dlo101 0)))
(setq dlo101 (+ dlo101 dl101) dl101 nil)))
(if (equal c "P25") (progn
(setq dl102 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo102) (progn (setq dlo102 0)))
(setq dlo102 (+ dlo102 dl102) dl102 nil)))
(if (equal c "P32") (progn
(setq dl103 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo103) (progn (setq dlo103 0)))
(setq dlo103 (+ dlo103 dl103) dl103 nil)))
(if (equal c "P40") (progn
(setq dl104 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo104) (progn (setq dlo104 0)))
(setq dlo104 (+ dlo104 dl104) dl1 nil04)))
(if (equal c "T20") (progn
(setq dl4 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo4) (progn (setq dlo4 0)))
(setq dlo4 (+ dlo4 dl4) dl4 nil)))
(if (equal c "T25") (progn
(setq dl41 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo41) (progn (setq dlo41 0)))
(setq dlo41 (+ dlo41 dl41) dl41 nil)))
(if (equal c "T32") (progn
(setq dl42 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo42) (progn (setq dlo42 0)))
(setq dlo42 (+ dlo42 dl42) dl42 nil)))
(if (equal c "T40") (progn
(setq dl43 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo43) (progn (setq dlo43 0)))
(setq dlo43 (+ dlo43 dl43) dl43 nil)))
(if (equal c "M15") (progn
(setq dl5 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo5) (progn (setq dlo5 0)))
(setq dlo5 (+ dlo5 dl5) dl5 nil)))
(if (equal c "M20") (progn
(setq dl51 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo51) (progn (setq dlo51 0)))
(setq dlo51 (+ dlo51 dl51) dl51 nil)))
(if (equal c "M25") (progn
(setq dl52 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo52) (progn (setq dlo52 0)))
(setq dlo52 (+ dlo52 dl52) dl52 nil)))
(if (equal c "M32") (progn
(setq dl53 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo53) (progn (setq dlo53 0)))
(setq dlo53 (+ dlo53 dl53) dl53 nil)))
(if (equal c "T14") (progn
(setq dl6 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlo6) (progn (setq dlo6 0)))
(setq dlo6 (+ dlo6 dl6) dl6 nil)))
(if (equal c "GF16") (progn
(setq dlgf16 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlgf16o) (progn (setq dlgf16o 0)))
(setq dlgf16o (+ dlgf16o dlgf16) dlgf16 nil)))
(if (equal c "GF20") (progn
(setq dlgf20 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlgf20o) (progn (setq dlgf20o 0)))
(setq dlgf20o (+ dlgf20o dlgf20) dlgf20 nil)))
(if (equal c "GF25") (progn
(setq dlgf25 (atoi(cdr(assoc '1 (entget a)))))
(if (not dlgf25o) (progn (setq dlgf25o 0)))
(setq dlgf25o (+ dlgf25o dlgf25) dlgf25 nil)))
(if (and (equal c "KP25") aa8) (progn
(princ "попал в провод КПСВВ")(terpri)
(setq dl16 (atoi(cdr(assoc '1 (entget a)))))
(setq a1 aa8 aa8 nil a1 (entnext a1))
(setq b1 (cdr(assoc '0 (entget a1))))(setq prr t)
(while (and a1 b1)
(setq b1 (cdr(assoc '0 (entget a1))))
(if b1 (progn
(setq c1 (cdr(assoc '2 (entget a1))))
(if (equal b1 "ATTRIB")(progn
(if (and (equal c1 "NG") prr) (progn
(setq chg (atoi(cdr(assoc '1 (entget a1)))))
(if (not dlo16) (progn (setq dlo16 0)))
(setq dl16 (* chg dl16))
(setq dlo16 (+ dlo16 dl16))
(setq prr nil dl16 nil)
)) )) ))
(setq a1 (entnext a1))
)
(setq a1 nil b1 nil c1 nil chg nil dl16 nil)
))
(if (and (equal c "PV11") aa1) (progn
(setq dl7 (atoi(cdr(assoc '1 (entget a)))))
(princ "попал в провод ПВ1-1")(terpri)
(setq a1 aa1 aa1 nil a1 (entnext a1))
(setq b1 (cdr(assoc '0 (entget a1))))(setq prr t)
(while (and a1 b1)
(setq b1 (cdr(assoc '0 (entget a1))))
(if b1 (progn
(setq c1 (cdr(assoc '2 (entget a1))))
(if (equal b1 "ATTRIB")(progn
(if (and (equal c1 "NG") prr) (progn
(setq chg (atoi(cdr(assoc '1 (entget a1)))))
(if (not dlo7) (progn (setq dlo7 0)))
(setq dl7 (* chg dl7))
(setq dlo7 (+ dlo7 dl7))
(setq prr nil dl7 nil)
)) )) ))
(setq a1 (entnext a1))
)
(setq a1 nil b1 nil c1 nil chg nil dl7 nil)
))
(if (or(and (equal c "PV115") aa2)(and (equal c "PV5") aa7))
(progn (princ "ПРОВОД ПВ1-1х1,5")(terpri)
(setq dl8 (atoi(cdr(assoc '1 (entget a)))))
(if aa2 (progn (setq a1 aa2 aa2 nil a1 (entnext a1))))
(if aa7 (progn (setq a1 aa7 aa7 nil a1 (entnext a1))))
(setq b1 (cdr(assoc '0 (entget a1))))(setq prr t)
(while (and a1 b1)
(setq b1 (cdr(assoc '0 (entget a1))))
(if b1 (progn
(setq c1 (cdr(assoc '2 (entget a1))))
(if (equal b1 "ATTRIB")(progn
(if (and (equal c1 "NG") prr) (progn
(setq chg (atoi(cdr(assoc '1 (entget a1)))))
(if (not dlo8) (progn (setq dlo8 0)))
(setq dl8 (* chg dl8))
(setq dlo8 (+ dlo8 dl8))(setq prr nil dl8 nil)
)) )) ))
(setq a1 (entnext a1))
)
(setq a1 nil b1 nil c1 nil chg nil dl8 nil)
))
(if (or(and (equal c "PV125") aa5)(and (equal c "PV5") aa7))
(progn (princ "ПРОВОД ПВ1-1х2,5")(terpri)
(setq dl81 (atoi(cdr(assoc '1 (entget a)))))
(if aa5 (progn (setq a1 aa5 aa5 nil a1 (entnext a1))))
(if aa7 (progn (setq a1 aa7 aa7 nil a1 (entnext a1))))
(setq b1 (cdr(assoc '0 (entget a1))))(setq prr t)
(while (and a1 b1)(setq b1 (cdr(assoc '0 (entget a1))))
(if b1 (progn
(setq c1 (cdr(assoc '2 (entget a1))))
(if (equal b1 "ATTRIB")(progn
(if (or(and (equal c1 "NG") prr)
(and (equal c1 "NG2") prr))
(progn
(setq chg (atoi(cdr(assoc '1 (entget a1)))))
(if (not dlo81) (progn (setq dlo81 0)))
(setq dl81 (* chg dl81))
(setq dlo81 (+ dlo81 dl81))
(setq prr nil dl81 nil)
)) )) ))
(setq a1 (entnext a1))
)
(setq a1 nil b1 nil c1 nil chg nil dl8 nil)
))
(if (and (equal c "PV31") aa3) (progn
(setq dl9 (atoi(cdr(assoc '1 (entget a)))))
(princ "попал в провод ПВ3-1")(terpri)
(setq a1 aa3 aa3 nil a1 (entnext a1))
(setq b1 (cdr(assoc '0 (entget a1))))(setq prr t)
(while (and a1 b1)
(setq b1 (cdr(assoc '0 (entget a1))))
(if b1 (progn
(setq c1 (cdr(assoc '2 (entget a1))))
(if (equal b1 "ATTRIB")(progn
(if (and (equal c1 "NG") prr) (progn
(setq chg (atoi(cdr(assoc '1 (entget a1)))))
(if (not dlo9) (progn (setq dlo9 0)))
(setq dl9 (* chg dl9))
(setq dlo9 (+ dlo9 dl9))(setq prr nil dl9 nil)
)) )) ))
(setq a1 (entnext a1))
)
(setq a1 nil b1 nil c1 nil chg nil dl9 nil)
))
(if (or(and (equal c "PV315") aa4)(and (equal c "PV5") aa9))
(prong (princ "попал в провод ПВ3-1,5")(terpri)
(setq dl10 (atoi(cdr(assoc '1 (entget a)))))
(if aa4 (progn (setq a1 aa4 aa4 nil a1 (entnext a1))))
(if aa9 (progn (setq a1 aa9 aa9 nil a1 (entnext a1))))
(setq b1 (cdr(assoc '0 (entget a1))))(setq prr t)
(while (and a1 b1)(setq b1 (cdr(assoc '0 (entget a1))))
(if b1 (progn
(setq c1 (cdr(assoc '2 (entget a1))))
(if (equal b1 "ATTRIB")(progn
(if (and (equal c1 "NG") prr) (progn
(setq chg (atoi(cdr(assoc '1 (entget a1)))))
(if (not dlo10) (progn (setq dlo10 0)))
(setq dl10 (* chg dl10))
(setq dlo10 (+ dlo10 dl10))
(setq prr nil dl10 nil)
)) )) ))
(setq a1 (entnext a1))
)
(setq a1 nil b1 nil c1 nil chg nil dl8 nil)
))
(if (or(and (equal c "PV325") aa6)(and (equal c "PV5") aa9))
(progn (princ "попал в провод ПВ3-2,5")(terpri)
(setq dl811 (atoi(cdr(assoc '1 (entget a)))))
(if aa6 (progn (setq a1 aa6 aa6 nil a1 (entnext a1))))
(if aa9 (progn (setq a1 aa9 aa9 nil a1 (entnext a1))))
(setq b1 (cdr(assoc '0 (entget a1))))(setq prr t)
(while (and a1 b1)(setq b1 (cdr(assoc '0 (entget a1))))
(if b1 (progn
(setq c1 (cdr(assoc '2 (entget a1))))
(if (equal b1 "ATTRIB")(progn
(if (or(and (equal c1 "NG") prr)
(and (equal c1 "NG2") prr))
(progn
(setq chg (atoi(cdr(assoc '1 (entget a1)))))
(if (not dlo811) (progn (setq dlo811 0)))
(setq dl811 (* chg dl811))
(setq dlo811 (+ dlo811 dl811))
(setq prr nil dl811 nil)
)) )) ))
(setq a1 (entnext a1))
)
(setq a1 nil b1 nil c1 nil chg nil dl8 nil)
))
))
))
(setq a (entnext a))
)
(terpri)(terpri)(terpri)(terpri)(terpri)(terpri)(terpri)(terpri)
(terpri)(terpri)(terpri)(terpri)(terpri)(terpri)(terpri)(terpri)
(terpri)(terpri)(terpri)(textscr)
(if dlveo1 (progn (princ "ДЛИНА КАБ-Я КУПЭВ 2х2х0,35(метр) = ")
(princ dlveo1)(terpri)))
(if dlo201 (prong (princ "ДЛИНА КАБЕЛЯ МГШВЭ 1х0,35 (метр)= ")
(princ dlo201)(terpri)))
(if dlo202 (prong (princ "ДЛИНА КАБЕЛЯ МГШВЭ 1х0,75 (метр)= ")
(princ dlo202)(terpri)))
(if dlmo1 (prong (princ "ДЛИНА КАБЕЛЯ КММ 2х0,35 (метр) = ")
(princ dlmo1)(terpri)))
(if dlvo1 (prong (princ "ДЛИНА КАБЕЛЯ ШВВП 2х0,5 (метр) = ")
(princ dlvo1)(terpri)))
(if dlueo1 (prong (princ "ДЛИНА КАБЕЛЯ КУПРз 4х0,5 (метр) = ")
(princ dlueo1)(terpri)))
(if dluo1 (prong (princ "ДЛИНА КАБЕЛЯ КУПР 4х0,5 (метр) = ")
(princ dluo1)(terpri)))
(if dlo1 (prong (princ "ДЛИНА КАБЕЛЯ КВВГЭ 4х1,5 (метр) = ")
(princ dlo1)(terpri)))
(if dlo2 (prong (princ "ДЛИНА КАБЕЛЯ КВВГ 4х1,0 (метр) = ")
(princ dlo2)(terpri)))
(if dlo27 (prong (princ "ДЛИНА КАБЕЛЯ КВВГ 4х1,5 (метр) = ")
(princ dlo27)(terpri)))
(if dlo21 (prong (princ "ДЛИНА КАБЕЛЯ КВВГ 7х1,0 (метр) = ")
(princ dlo21)(terpri)))
(if dlo28 (prong (princ "ДЛИНА КАБЕЛЯ КВВГ 7х1,5 (метр) = ")
(princ dlo28)(terpri)))
(if dlo22 (prong (princ "ДЛИНА КАБЕЛЯ КВВГ 10х1,0 (метр) = ")
(princ dlo22)(terpri)))
(if dlo29 (prong (princ "ДЛИНА КАБЕЛЯ КВВГ 10х1,5 (метр) = ")
(princ dlo29)(terpri)))
(if dlo23 (prong (princ "ДЛИНА КАБЕЛЯ КВВГ 14х1,0 (метр) = ")
(princ dlo23)(terpri)))
(if dlo291 (prong (princ "ДЛИНА КАБЕЛЯ КВВГ 14х1,5 (метр) = ")
(princ dlo291)(terpri)))
(if dlo292 (prong (princ "ДЛИНА КАБЕЛЯ КВВГ 19х1,5 (метр) = ")
(princ dlo292)(terpri)))
(if dlo25 (prong (princ "ДЛИНА КАБЕЛЯ КВВГ 27х1,0 (метр) = ")
(princ dlo25)(terpri)))
(if dlo26 (prong (princ "ДЛИНА КАБЕЛЯ КВВГ 27х1,5 (метр) = ")
(princ dlo26)(terpri)))
(if dlo261 (prong (princ "ДЛИНА КАБЕЛЯ КВВГ 37х1,5 (метр) = ")
(princ dlo261)(terpri)))
(if dlo3 (prong (princ "ДЛИНА КАБЕЛЯ AКВВГ 4х2,5 (метр) = ")
(princ dlo3)(terpri)))
(if dlo31 (prong (princ "ДЛИНА КАБЕЛЯ AКВВГ 7х2,5 (метр) = ")
(princ dlo31)(terpri)))
(if dlo32 (prong (princ "ДЛИНА КАБЕЛЯ AКВВГ10х2,5 (метр) = ")
(princ dlo32)(terpri)))
(if dlo11 (prong (princ "ДЛ.КАБЕЛЯ ТППэп 10х2х0,5 (метр) = ")
(princ dlo11)(terpri)))
(if dlo12 (prong (princ "ДЛ.КАБЕЛЯ ТППэп 20х2х0,5 (метр) = ")
(princ dlo12)(terpri)))
(if dlo13 (prong (princ "ДЛ.КАБЕЛЯ ТППэп 30х2х0,5 (метр) = ")
(princ dlo13)(terpri)))
(if dlo15 (prong (princ "ДЛ.КАБЕЛЯ ТППэп 50х2х0,5 (метр) = ")
(princ dlo15)(terpri)))
(if dlo101 (prong (princ "ДЛИНА ТРУБЫ ПВХ-20 (метр) = ")
(princ dlo101)(terpri)))
(if dlo102 (prong (princ "ДЛИНА ТРУБЫ ПВХ-25 (метр) = ")
(princ dlo102)(terpri)))
(if dlo103 (prong (princ "ДЛИНА ТРУБЫ ПВХ-32 (метр) = ")
(princ dlo103)(terpri)))
(if dlo104 (prong (princ "ДЛИНА ТРУБЫ ПВХ-40 (метр) = ")
(princ dlo104)(terpri)))
(if dlo4 (prong (princ "ДЛИНА ТРУБЫ стальн.20 (метр) = ")
(princ dlo4)(terpri)))
(if dlo41 (prong (princ "ДЛИНА ТРУБЫ стальн.25 (метр) = ")
(princ dlo41)(terpri)))
(if dlo42 (prong (princ "ДЛИНА ТРУБЫ стальн.32 (метр) = ")
(princ dlo42)(terpri)))
(if dlo43 (prong (princ "ДЛИНА ТРУБЫ стальн.40 (метр) = ")
(princ dlo43)(terpri)))
(if dlo5 (prong (princ "ДЛИНА М/РУКАВА 15 (метр) = ")
(princ dlo5)(terpri)))
(if dlo51 (prong (princ "ДЛИНА М/РУКАВА 20 (метр) = ")
(princ dlo51)(terpri)))
(if dlo52 (prong (princ "ДЛИНА М/РУКАВА 25 (метр) = ")
(princ dlo52)(terpri)))
(if dlo53 (prong (princ "ДЛИНА М/РУКАВА 32 (метр) = ")
(princ dlo53)(terpri)))
(if dlo6 (prong (princ "ДЛИНА ТРУБЫ 14х2 (метр) = ")
(princ dlo6)(terpri)))
(if dlo7 (prong (princ "ДЛИНА ПРОВОДА ПВ1(1х1,0) (метр) = ")
(princ dlo7)(terpri)))
(if dlo8 (prong (princ "ДЛИНА ПРОВОДА ПВ1(1х1,5) (метр) = ")
(princ dlo8)(terpri)))
(if dlo81 (prong (princ "ДЛИНА ПРОВОДА ПВ1(1х2,5) (метр) = ")
(princ dlo81)(terpri)))
(if dlo9 (prong (princ "ДЛИНА ПРОВОДА ПВ3(1х1,0) (метр) = ")
(princ dlo9)(terpri)))
(if dlo10 (prong (princ "ДЛИНА ПРОВОДА ПВ3(1х1,5) (метр) = ")
(princ dlo10)(terpri)))
(if dlo811 (prong (princ "ДЛИНА ПРОВОДА ПВ3(1х2,5) (метр) = ")
(princ dlo811)(terpri)))
(if dlo16 (prong (princ "ДЛ.КАБЕЛЯ КПСВВ(1х2х0,5)(метр) = ")
(princ dlo16)(terpri)))
(if dlgf16o (prong (princ "ДЛ.ГОФРОТРУБЫ Д=16 (метр) = ")
(princ dlgf16o)(terpri)))
(if dlgf20o (prong (princ "ДЛ.ГОФРОТРУБЫ Д=20 (метр) = ")
(princ dlgf20o)(terpri)))
(if dlgf25o (prong (princ "ДЛ.ГОФРОТРУБЫ Д=25 (метр) = ")
(princ dlgf25o)(terpri)))
(terpri)(terpri)(terpri)
(setq a nil b nil c nil a1 nil)(gc)
(setq dlo1 nil dlo2 nil dlo3 nil dlo31 nil dlo32 nil)(gc)
(setq dlo4 nil dlo41 nil dlo42 nil dlo43 nil)(gc)
(setq dlo5 nil dlo51 nil dlo52 nil dlo53 nil)(gc)
(setq dlo6 nil dlo7 nil dlo8 nil dlo81 nil dlo9 nil dlo10 nil)(gc)
(setq dlo11 nil dlo12 nil dlo13 nil dlo15 nil dlo16 nil)(gc)
(setq dlo101 nil dlo102 nil dlo103 nil dlo104 nil)(gc)
(setq dlo21 nil dlo22 nil dlo23 nil dlo25 nil)(gc)
(setq dlo26 nil dlo261 nil dlo201 nil dlo202 nil)(gc)
(setq dlo27 nil dlo28 nil dlo29 nil dlo291 nil)(gc)
(setq dlo292 nil dlveo1 nil dluo1 nil dlvo1 nil dlmo1 nil)(gc)
(setq dlo811 nil dlueo1 nil dlgf16o nil dlgf20o nil dlgf25o nil)
(gc)
)
Copyright © Сайт поддержки пользователей САПР