![]() |
Translate to: |
||||||
| Обратная связь | Новости САПР | Программы | Документация | Полезные советы | Обзорные статьи | ||
| Заказ и разработка | Каталог САПР | САПР-конференция | Библиотека ГОСТов | Наши соавторы | Коммерческое ПО | ||
Задача, предназначена для числового обсчета длины 3D полилинии, расположенной на разных слоях. Программа позволяет установить точную длину полилинии и получить дополнительные длины полилинии с учетом поправочного коэффициента.
Установленные полилинии на поле чертежа в разных слоях будут последовательно просмотрены и в них будут считаны длины и добавлены в счетчики длин, сколько бы отдельных участков полилиний не встретилось в одном слое и других слоях.
Задача требует использования нарисованной 3D полилинии, кото-рая может подразумевать на плане электрическую кабельную линию или трубопровод и т.д. В результате отпадает необходимость пользоваться курвиметром, а длины появляются через секунды, после запуска задачи. Постановка задачи состоит в том, чтобы найти полилинии конкретного слоя и вычислить их длину, затем включить счетчик конкретного слоя, куда добавить длину найденных полилиний. Отличие в том, что 3D полилиния имеет подпримитивы – вершины полилинии и в программе нам приходится поочередно вызывать каждую вершину и считывать точку этой вершины и находить поочередно расстояние между вершинами. Процесс повторяется при нахождении программой следующей полилинии, по порядку, начинающемуся со слоя «1» с добавленным обозначением и заканчивая например слоем «100». Можно обсчитать хоть тысячу слоев. Обозначение слоя может содержать характеристику работ, например:
Разбор задачи выполнен в общем виде в облегченном варианте. Многие функции уже встречались ранее и в объяснении ненуждаются. Точка с запятой используется для пояснений, которые устанавливаются в тексте программы и на работу программы не влияют.
(defun npol() |
Программная объединяющая функция считывания длины полилинии на конкретном слое по плану чертежа. Функция defun под именем /npol/ объединяет все выражения и функции программы. В сеансе Автокада она вызывается с помощью команды: (load"имя_файла") - загрузка файла, после чего в скобках указывается (имя_файла) для исполнения. Для нашего случая (load "npol") - загрузка файла,это выражение достаточно набрать в командной строке Автокада, после чего набрать - (npol) для исполнения программы, полную запись необходимо указать в командной строке Автокада или в пункте меню. Открывающая скобка функции defun должна закрыться закрывающей скобкой в конце программы. Выглядит это так (defun …………) | |
(setq dl1 0 dl2 0 dl3 0 dl4 0) (setq dl5 0 dlo1 0 dlo2 0 dlo3 0) (setq dlo4 0 dlo5 0) (gc) |
Обнуление количественных переменных, участвующих в программе и очистка памяти – система безопасности программы | |
(setq a (entnext)) |
Функция setq - присвоение переменной /а/ имени первого примитива в рисунке в длинной очереди выстроенных друг за другом примитивов чертежа. Команда entnext без аргумента дает имя первого неудаленного примитива в рисунке, тем самым мы находим начало данных базы примитивов рисунка Автокада. Примитивы Автокада это линии, текст, полилинии, круг, блоки и т.д. | |
(setq n1 0 n2 0 n3 0) (setq n4 0 n5 0 tipl t) |
Обнуление других количественных переменных, участвующих в программе и создание существования для виртуальной переменной tipl | |
(setq vib "1") |
Присвоение переменной vib символьного значения "1" | |
(princ "=============")(terpri) |
Создание разделительной линии при выводе текстовой информации в текстовом режиме Автокада | |
(princ "МАСШТАБ 1:1 = 1") (terpri) |
Текстовая подсказка, при выборе масштаба 1:1,надо нажать на клавиатуре клавишу "1" | |
(princ "МАСШТАБ 1:5 = 2") (terpri) |
Текстовая подсказка, при выборе масштаба 1:5,надо нажать на клавиатуре клавишу "2" | |
(princ "МАСШТАБ 1:50 = 3") (terpri) |
Текстовая подсказка, при выборе масштаба 1:50, надо нажать на клавиатуре клавишу "3" | |
(princ "МАСШТАБ 1:100 = 4") (terpri) |
Текстовая подсказка, при выборе масштаба 1:100, надо нажать на клавиатуре клавишу "4" | |
(princ "МАСШТАБ 1:200 = 5") (terpri) |
Текстовая подсказка, при выборе масштаба 1:200, надо нажать на клавиатуре клавишу "5" | |
(princ "МАСШТАБ 1:500 = 6") (terpri) |
Текстовая подсказка, при выборе масштаба 1:500, надо нажать на клавиатуре клавишу "6" | |
(princ "=============")(terpri) |
Создание разделительной линии при выводе текстовой информации в текстовом режиме Автокада | |
(setq mast (getstring "\n ВЫБЕРИТЕ МАСШТАБ ?:")) |
С помощью функции getstring мы заносим, в ответ на запрос, символьное значение от «1» до «6», которое нажимаем на клавиатуре и присваиваем это значение переменной mast | |
(textscr)(terpri)(terpri) (terpri)(terpri)(terpri) |
Функция (textscr) открывает текстовый режим Автокада, аналогично (F2), и создает пустые строки при помощи функции (terpri) | |
(princ "=============")(terpri) |
Создание разделительной линии при выводе текстовой информации в текстовом режиме Автокада | |
(princ "АВТОМАТИЗ-Я (СЛОЙ AV...) = 1 ") (terpri) |
Текстовая подсказка, при выборе слоя AV...,где вместо ... будет устанавливаться номер слоя "1-100" | |
(princ "ПОЖ. СИГНАЛИЗАЦИЯ (СЛОЙ POG..) = 2 ") (terpri) |
Текстовая подсказка, при выборе слоя POG...,где вместо ... будет устанавливаться номер слоя "1-100" | |
(princ ЭЛЕКТРОСНАБЖЕНИЕ (СЛОЙ EL...) = 3 ") (terpri) |
Текстовая подсказка, при выборе слоя EL...,где вместо ... будет устанавливаться номер слоя "1-100" | |
(princ ТЕПЛОТЕХНИКА (СЛОЙ ТМ...) = 4 ") (terpri) |
Текстовая подсказка, при выборе слоя ТМ...,где вместо ... будет устанавливаться номер слоя "1-100" | |
(princ "=============")(terpri) |
Создание разделительной линии при выводе текстовой информации в текстовом режиме Автокада | |
(setq vib5 (getstring "\n ВЫБЕРИТЕ ВАРИАНТ ?:")) |
С помощью функции getstring мы заносим, в ответ на запрос о виде слоя, символьное значение от «1» до «4», которое нажимаем на клавиатуре и присваиваем это значение переменной vib | |
(if (equal vib5 "1") (prong (setq isl "AV"))) |
Расшифровка выбранного значения, если выбор остановился на первом варианте, мы попадаем в условие 1, где переменной isl присваивается значение "AV" | |
(if (equal vib5 "2") (prong (setq isl "POG"))) |
Расшифровка выбранного значения, если выбор остановился на втором варианте, мы попадаем в условие 2, где переменной isl присваивается значение "POG" | |
(if (equal vib5 "3") (prong (setq isl "EL"))) |
Расшифровка выбранного значения, если выбор остановился на третьем варианте, мы попадаем в условие 3, где переменной isl присваивается значение "EL" | |
(if (equal vib5 "4") (prong (setq isl "TM"))) |
Расшифровка выбранного значения, если выбор остановился на четвертом варианте, мы попадаем в условие 31, где переменной isl присваивается значение "TM" | |
(setq bb t) |
Создание переменной /bb/, присвоение условного, виртуального существования переменной /bb/ с помощью специального знака /t/ без каких либо данных | |
(while bb |
Начало цикла 1, открывающая скобка цикла - вход в цикл, который работает только при существовании переменной /bb/. В цикле происходит повторение задуманных действий до тех пор, пока существует переменная /bb/ | |
(setq slo1 (strcat isl vib)) |
Выражение помогает с помощью функции strcat объединить переменные isl и vib , после чего полученное выражение записывается в переменную slo1. В результате мы получаем имя слоя с номером «1». После того, как программа проверит этот слой на наличие полилиний, имя слоя будет изменяться, меняя «1» на «2»,«3» … и так далее | |
(setq tipl (cdr(assoc '0 (entget a)))) |
Выражение для получения из информационной структуры примитива, принадлежащего чертежу (внутренней базы данных) - типа примитива POLYLINE, т.е. полилинию, выражение можно записать и другим способом - последовательным написанием каждой функции: (setq b (entget a)) - список информационной структуры примитива (СИСП), (setq b (assoc '0 b)) - нахождение в (СИСП) по ключу (паролю) '0 ключевой пары типа примитива (0 . тип_примитива), (setq b (cdr b)) - получение значения второго члена ключевой пары, т.е. типа примитива. Наша задача - отбор всех примитивов с типом POLYLINE т.е. полилиний, если будет получен подпримитив полилинии с типом SEQEND, это будет означать окончание конкретного куска полилинии. Правильное написание выражений смотреть в аналоге программы в конце главы | |
(while (and a tipl) |
Включаем цикл 2, который работает при существовании примитива и наличии типа примитива | |
(setq tipl (cdr(assoc '0 (entget a)))) |
Повторение выражения для получения типа примитива | |
(setq slo (cdr(assoc '8 (entget a)))) |
Получение имени слоя на котором находится найденный примитив | |
(setq zam (cdr(assoc '70 (entget a)))) |
Выражение для полилинии помогает получить флаг полилинии, он помогает уточнить замкнутая или разомкнутая полилиния, нетрудно убедиться, что замкнутая полилиния имеет на один отрезок по вершинам больше | |
(if (equal slo slo1)(progn |
Мы попадаем в условие 4, если имя слоя примитива совпадает с именем слоя, на котором мы ищем полилинии | |
(if (and (not (equal tipl "SEQEND")) slo1 (equal tipl "POLYLINE")) (progn |
Мы попадаем в условие 5, если тип примитива – это не конец полилинии, если мы имеем проверяемый слой и если тип примитива – это полилиния 3D | |
(setq poly t n2 (+ n2 1)) |
Назначение некоторых выражений, необходимость которых станет ясна позднее | |
(while poly |
Запуск цикла 3, который будет работать, если существует переменная poly | |
(setq a (entnext a)) |
Выражение для перелистывания примитивов и получения имени следующего примитива или подпримитива, т.е. функция entnext с именем /а/- предыдущего примитива, дает имя следующего примитива, которое записывается в переменную /а/ | |
(setq tipl (cdr(assoc '0 (entget a)))) |
Повторение выражения для получения типа примитива | |
(if (equal tipl "SEQEND")(progn |
Мы попадаем в условие 6, если тип примитива означает конец полилинии | |
(if (= zam 9)(progn |
Мы попадаем в условие 7, если полилиния, которая закончилась - замкнутая | |
(setq pt1 ptk) |
Операция присвоения данных конечной точки ptk (отложенная в памяти) данным первой точки pt1 нашей полилинии | |
(if pt2 (progn |
Мы попадаем в условие 8, если существует точка pt2, на которой стояла последняя вершина полилинии | |
(setq dl1 (distance pt1 pt2)) |
Определение расстояния dl1 между последней вершиной полилинии и ее начальной точкой | |
(setq dlo1 (+ dlo1 dl1)) |
Добавление определенного расстояния dl1 в счетчик длины полилинии dlo1 на определенном слое | |
)) |
Окончание условия 8 | |
)) |
Окончание условия 7 | |
(setq poly nil n1 (+ n1 1)) (setq n2 0 pt1 nil pt2 nil dl1 0) |
По факту окончания полилинии обнуление части ненужных переменных, уничтожение части ненужных переменных, в том числе точек вершин полилинии, увеличение счетчика полилиний на единицу. Уничтожение переменной означает, что мы вышли из цикла 3 | |
)) |
Окончание условия 6 | |
(if (and (not (equal tipl "SEQEND")) (equal tipl "VERTEX")) (progn |
Попадаем в условие 9, если тип примитива не является концом полилинии SEQEND, и является вершиной полилинии VERTEX | |
(setq pt1 (cdr(assoc '10 (entget a)))) |
Получаем данные по точке вершины полилинии, это может быть первая вершина, промежуточная или последняя вершина | |
(if pt2 (progn |
В условие 10 попадаем, если существует точка , это значит, что для первой вершины условие закрыто | |
(setq dl1 (distance pt1 pt2)) |
Если мы попали в условие 10, определяем расстояние dl1 между предыдущей вершиной полилинии и ее последующей вершиной | |
(setq dlo1 (+ dlo1 dl1)) |
Добавление определенного расстояния dl1 в счетчик длины полилинии dlo1 на определенном слое. Надо знать, что пока не закончились полилинии на определенном слое, в счетчике будет складываться общая длина полилиний этого конкретного слоя | |
)) |
Окончание условия 10 | |
(if (= n2 1)(progn |
Мы попадаем в условие 11, если переменная – счетчик n2 имеет значение 1. Если посмотреть по программе, то после окончания полилинии мы снова попадаем в условие 5 и счетчик n2 приобретает значение 1, поэтому значение счетчика (n2 = 1), означает, что мы нашли новую полилинию и имеем дело с первой вершиной этой полилинии, для всех других вершин это условие будет недоступно | |
(setq ptk pt1)(setq n2 (+ n2 1)) |
Самое главное в этом условии - сохранить значение точки первой вершины и сделать ее конечной точкой замкнутой полилинии | |
)) |
Окончание условия 11 | |
(if pt1 (setq pt2 pt1)) |
Это условие 12 передает точку найденной вершины в переменную pt2 | |
)) |
Окончание условия 9 | |
) |
Окончание цикла 3 – закрывающая скобка | |
)) |
Окончание условия 5 | |
)) |
Окончание условия 4 – сравнение слоев | |
(setq a (entnext a)) |
Выражение для перелистывания примитивов и получения имени следующего примитива или подпримитива, т.е. функция entnext с именем /а/ - предыдущего примитива, дает имя следующего примитива, которое записывается в переменную /а/ | |
) |
Окончание цикла 2 – закрывающая скобка | |
(textscr) |
Открытие текстового окна Автокада (F2) | |
(if (and (equal mast "1") dlo1) (progn |
В условие 13 мы попадем, если выбранный масштаб "1" и существует счетчик длины полилинии на конкретном слое | |
(if (> dlo1 1.0) (progn (setq dlo11 (* dlo1 1.2)) |
В условие 14 мы попадем, если в счетчике общей длины полилинии dlo1 содержится величина кабеля, которая больше 1 метра. Внутри условия величину dlo1 увеличиваем на 20%, чтобы компенсировать неучтенные затраты на длину полилинии. Это важно для кабельных трасс | |
(princ "МАСШТАБ 1 СЛОЙ = ") (princ slo1) (terpri) |
Вывод текстовой информации о масштабе в текстовом режиме Автокада | |
(princ "ДЛИНА ОБЩАЯ КАБЕЛЯ (ТРУБЫ) = ") (princ dlo1)(princ " м")(terpri) |
Вывод текстовой информации о длине полилинии (в данном случае кабелетрубы) в текстовом режиме Автокада. Длина полученная при обсчете слоя | |
(princ "ДЛИНА С ЗАПАСОМ 120% = ") (princ dlo11)(princ " м")(terpri) |
Вывод текстовой информации о длине полилинии с процентом запаса (в данном случае кабеле, трубы) в текстовом режиме Автокада. Длина получена при расчете процента | |
(princ "--------------------")(terpri) |
Черта для разделения текста в текстовом режиме Автокада | |
(princ " ")(terpri) |
Пустая строка текста в текстовом режиме Автокада | |
(setq dlo1 0 dlo11 0)(gc) |
Обнуление перемнных – счетчиков количества полилинии, для возможного продолжения нового поиска полилинии на других слоях | |
)) |
Окончание условия 14 | |
)) |
Окончание условия 13 | |
Для других масштабов выражения аналогичные условиям 13, 14, поэтому можно не рассматривать, а посмотреть текст программы в конце |
||
(setq vibb (atoi vib)) |
Преобразуем символьное значение, содержащееся в переменной vib , в целое число, которое записываем в переменную vibb. Это число связано с номером слоя и оно помогает листать слои, как страницы книги, при этом проверяя наличие полилиний на каждом слое | |
(setq vibb (+ vibb 1)) (setq vib (itoa vibb)) |
Увеличение переменной vibb на единицу, и пребразование целого числа в символьную величину, которую записываем в переменную vib | |
(setq a (entnext)) |
Функция setq - присвоение переменной /а/ имени первого примитива в рисунке в длинной очереди выстроенных друг за другом примитивов чертежа. Команда entnext без аргумента дает имя первого неудаленного примитива в рисунке, тем самым мы находим начало данных базы примитивов рисунка Автокада. Примитивы Автокада это линии, текст, полилинии, круг, блоки и т.д. Да начинаем все сначала, снова проверяем все примитивы в чертеже, но ищем полилинии уже на другом слое, если был например «EL1», то стал «EL2» | |
(setq bb t) |
Новое создание переменной /bb/, присвоение условного, виртуального существования переменной /bb/ с помощью специального знака /t/ без каких либо данных | |
(if (equal vib "70")(progn (setq bb nil))) |
Условие 15 – очень интересное условие, оно помогает включить в работу столько слоев, сколько надо. Если надо проверить «100» слоев, то просто набить эту цифру вместо «70» и т.д. Само условие уничтожает переменную bb , если мы достигли «70» слоя. В этом случае работа программы заканчивается | |
) |
Окончание цикла 1, если уничтожена переменная bb – закрывающая скобка | |
(setq a nil tipl nil pt1 nil pt2 nil) (gc) |
Уничтожение переменных – хороший тон и очистка памяти | |
) |
Скобка закрытия программной объединяющей функции данных полилиний. (Функция defun) под именем /npol/ | |
(defun npol();ПОЛУЧЕНИЕ общей длины полилинии в определенном слое
(setq dl1 0 dl2 0 dl3 0 dl4 0 dl5 0 dlo1 0 dlo2 0 dlo3 0 dlo4 0 dlo5 0)
(setq a (entnext))(setq n1 0 n2 0 n3 0 n4 0 n5 0 tipl t)(setq vib "1")
(princ "==================================")(terpri)
(princ " МАСШТАБ 1:1 = 1 ")(terpri)
(princ "----------------------------------")(terpri)
(princ " МАСШТАБ 1:5 = 2 ")(terpri)
(princ "----------------------------------")(terpri)
(princ " МАСШТАБ 1:50 = 3 ")(terpri)
(princ "----------------------------------")(terpri)
(princ " МАСШТАБ 1:100 = 4 ")(terpri)
(princ "----------------------------------")(terpri)
(princ " МАСШТАБ 1:200 = 5 ")(terpri)
(princ "----------------------------------")(terpri)
(princ " МАСШТАБ 1:500 = 6 ")(terpri)
(princ "==================================")(terpri)
(setq mast (getstring "\n ВЫБЕРИТЕ МАСШТАБ ?:"))
(textscr)(terpri)(terpri)(terpri)(terpri)(terpri)
(princ "==================================================")(terpri)
(princ " ВЫБОР ТИПА СЛОЯ ДЛЯ СЧЕТА ДЛИН КАБ-ТРУБ ПО СЛОЯМ ")(terpri)
(princ "--------------------------------------------------")(terpri)
(princ " АНГЛИЙСКАЯ РЕДАКЦИЯ СЛОВ, ПРОВЕРКА 100 СЛОЕВ ")(terpri)
(princ "==================================================")(terpri)
(princ " АВТОМАТИЗАЦИЯ (СЛОЙ AV...) = 1 ")(terpri)
(princ "--------------------------------------------------")(terpri)
(princ " ПОЖАРНАЯ СИГНАЛИЗАЦИЯ (СЛОЙ POG..) = 2 ")(terpri)
(princ "--------------------------------------------------")(terpri)
(princ " ЭЛЕКТРОСНАБЖЕНИЕИ (СЛОЙ EL...) = 3 ")(terpri)
(princ "--------------------------------------------------")(terpri)
(princ " ТЕПЛОТЕХНИКА (СЛОЙ ТМ...) = 4 ")(terpri)
(princ "==================================================")(terpri)
(setq vib5 (getstring "\n ВЫБЕРИТЕ ВАРИАНТ ?:"))
(if (equal vib5 "1")(progn (setq isl "AV"))) ;1
(if (equal vib5 "2")(progn (setq isl "POG"))) ;2
(if (equal vib5 "3")(progn (setq isl "EL"))) ;3
(if (equal vib5 "4")(progn (setq isl "TM"))) ;31
(setq bb t)
(while bb ;1
(setq slo1 (strcat isl vib))
(setq tipl (cdr(assoc '0 (entget a))))
(while (and a tipl) ;2
(setq tipl (cdr(assoc '0 (entget a))))
(setq slo (cdr(assoc '8 (entget a))))
(setq zam (cdr(assoc '70 (entget a))))
;(princ "zam = ")(princ zam)(terpri)
(if (equal slo slo1)(progn ;4
(if (and (not (equal tipl "SEQEND")) slo1 ;5
(equal tipl "POLYLINE"))
(progn
(setq poly t n2 (+ n2 1))
(while poly
(setq a (entnext a))
(setq tipl (cdr(assoc '0 (entget a)))) ;3
(if (equal tipl "SEQEND")(progn ;6
(if (= zam 9)(progn (setq pt1 ptk) ;7
(if pt2 (progn ;8
(setq dl1 (distance pt1 pt2))
(setq dlo1 (+ dlo1 dl1))
))
))
(setq poly nil n1 (+ n1 1) pt1 nil pt2 nil dl1 0)
(setq n2 0)
))
(if (and (not (equal tipl "SEQEND"))
(equal tipl "VERTEX")) ;9
(progn
(setq pt1 (cdr(assoc '10 (entget a))))
(if pt2 (progn ;10
(setq dl1 (distance pt1 pt2))
(setq dlo1 (+ dlo1 dl1))
))
(if (= n2 1)(progn ;11
(setq ptk pt1)(setq n2 (+ n2 1))
))
(if pt1 (setq pt2 pt1)) ;12
))
)
))
))
(setq a (entnext a))
)
(textscr)
(if (and (equal mast "1") dlo1)(progn ;13
(if (> dlo1 1.0) (progn (setq dlo11 (* dlo1 1.2)) ;14
(princ "МАСШТАБ 1 СЛОЙ = ")(princ slo1)(terpri)
(princ "ДЛИНА ОБЩАЯ КАБЕЛЯ (ТРУБЫ) = ")
(princ dlo1)(princ " м")(terpri)
(princ "ДЛИНА С ЗАПАСОМ 120% = ")
(princ dlo11)(princ " м")(terpri)
(princ "-----------------------------------")(terpri)
(princ " ")(terpri)
(setq dlo1 0 dlo11 0)(gc)
))
))
(if (and (equal mast "2") dlo1)
(progn
(setq dlo11 (* dlo1 1.2))(setq dlo1 (/ dlo1 50.0))
(setq dlo11 (/ dlo11 50.0))
(if (> dlo1 1.0)
(progn
(setq dlo11 (* dlo1 1.2))
(princ "МАСШТАБ 5 СЛОЙ = ")(princ slo1)(terpri)
(princ "ДЛИНА ОБЩАЯ КАБЕЛЯ (ТРУБЫ) = ")
(princ dlo1)(princ " м")(terpri)
(princ "ДЛИНА С ЗАПАСОМ 120% = ")
(princ dlo11)(princ " м")(terpri)
(princ "-----------------------------")(terpri)
(princ " ")(terpri)
(setq dlo1 0 dlo11 0)(gc)
))
))
(if (and (equal mast "3") dlo1)(prong
(setq dlo11 (* dlo1 1.2))(setq dlo1 (/ dlo1 500))
(setq dlo11 (/ dlo11 500))
(if (> dlo1 2.0) (progn
(princ "МАСШТАБ 50 СЛОЙ = ")(princ slo1)(terpri)
(princ "ДЛИНА ОБЩАЯ КАБЕЛЯ (ТРУБЫ) = ")
(princ dlo1)(princ " м")(terpri)
(princ "ДЛИНА С ЗАПАСОМ 120% = ")
(princ dlo11)(princ " м")(terpri)
(princ "-------------------------------")(terpri)
(princ " ")(terpri)
(setq dlo1 0 dlo11 0)(gc)
))
))
(if (and (equal mast "4") dlo1)
(progn
(setq dlo11 (* dlo1 1.2))(setq dlo1 (/ dlo1 1000))
(setq dlo11 (/ dlo11 1000))
(if (> dlo1 1.0) (progn
(princ "МАСШТАБ 100 СЛОЙ = ")(princ slo1)(terpri)
(princ "ДЛИНА ОБЩАЯ КАБЕЛЯ (ТРУБЫ) = ")
(princ dlo1)(princ " м")(terpri)
(princ "ДЛИНА С ЗАПАСОМ 120% = ")
(princ dlo11)(princ " м")(terpri)
(princ "-----------------------------")(terpri)
(princ " ")(terpri)
(setq dlo1 0 dlo11 0)(gc)
))
))
(if (and (equal mast "5") dlo1)
(progn
(setq dlo11 (* dlo1 1.2))(setq dlo1 (/ dlo1 2000))
(setq dlo11 (/ dlo11 2000))
(if (> dlo1 2.0)
(progn
(princ "МАСШТАБ 200 СЛОЙ = ")(princ slo1)(terpri)
(princ "ДЛИНА ОБЩАЯ КАБЕЛЯ КПСВВ 1х2х0,5 мм2 = ")
(princ dlo1)(princ " м")(terpri)
(princ "ДЛИНА С ЗАПАСОМ 120% = ")
(princ dlo11)(princ " м")(terpri)
(princ "----------------------------------------")(terpri)
(princ " ")(terpri)
(setq dlo1 0 dlo11 0)(gc)
))
))
(if (and (equal mast "6") dlo1)
(progn
(setq dlo11 (* dlo1 1.2))(setq dlo1 (/ dlo1 5000))
(setq dlo11 (/ dlo11 5000))
(if (> dlo1 2.0)
(progn
(princ "МАСШТАБ 500 СЛОЙ = ")(princ slo1)(terpri)
(princ "ДЛИНА ОБЩАЯ КАБЕЛЯ КПСВВ 1х2х0,5 мм2 = ")
(princ dlo1)(princ " м")(terpri)
(princ "ДЛИНА С ЗАПАСОМ 120% = ")
(princ dlo11)(princ " м")(terpri)
(princ "----------------------------------------")(terpri)
(princ " ")(terpri)
(setq dlo1 0 dlo11 0)(gc)
))
))
(setq vibb (atoi vib))(setq vibb (+ vibb 1))
(setq vib (itoa vibb))(setq a (entnext))(setq bb t)
(if (equal vib "70")(progn (setq bb nil)))
; ИЗМЕНЕНИЕ ЧИСЛА ПРОВЕРЯЕМЫХ СЛОЕВ
)
(setq a nil tipl nil pt1 nil pt2 nil)(gc)
)
Copyright © Сайт поддержки пользователей САПР