![]() |
Translate to: |
||||||
| Обратная связь | Новости САПР | Программы | Документация | Полезные советы | Обзорные статьи | ||
| Заказ и разработка | Каталог САПР | САПР-конференция | Библиотека ГОСТов | Наши соавторы | Коммерческое ПО | ||
Задача, предназначена для числового обсчета длины плоской полилинии, расположенной на разных слоях. Программа позволяет установить точную длину полилинии и получить дополнительные длины полилинии с учетом поправочного коэффициента.
Установленные полилинии на поле чертежа в разных слоях будут последовательно просмотрены и в них будут считаны длины и добавлены в счетчики длин, сколько бы отдельных участков полилиний не встретилось в одном слое и других слоях.
Задача требует использования нарисованной полилинии, которая может подразумевать на плане электрическую кабельную линию или трубопровод и т.д. В результате отпадает необходимость пользоваться курвиметром, а длины появляются через секунды, после запуска задачи. Постановка задачи состоит в том, чтобы найти полилинии конкретного слоя и вычислить их длину, затем включить счетчик конкретного слоя, куда добавить длину найденных полилиний. Отличие плоской полилинии состоит в том, что она не имеет подпримитивов и вся информация о точках полилинии (условные вершины) содержится в описании самой полилинии. Процесс повторяется при нахождении программой следующей полилинии, по порядку, начинающемуся со слоя «1» с добавленным обозначением и заканчивая например слоем «100». Можно обсчитать хоть тысячу слоев. Обозначение слоя может содержать характеристику работ, например:
Разбор задачи выполнен в общем виде в облегченном варианте. Многие функции уже встречались ранее и в объяснении не нуждаются. Точка с запятой используется для пояснений, которые устанавливаются в тексте программы и на работу программы не влияют.
(defun kol() |
Программная объединяющая функция считывания длины полилинии на конкретном слое по плану чертежа. Функция defun под именем /kol/ объединяет все выражения и функции программы. В сеансе Автокада она вызывается с помощью команды: (load "имя_файла") - загрузка файла, после чего в скобках указывается (имя_файла) для исполнения. Для нашего случая (load "kol") - загрузка файла, это выражение достаточно набрать в командной строке Автокада, после чего набрать - (kol) для исполнения программы, полную запись необходимо указать в командной строке Автокада или в пункте меню. Открывающая скобка функции defun должна закрыться закрывающей скобкой в конце программы. Выглядит это так (defun …………) |
(setq a (entnext)) |
Функция setq - присвоение переменной /а/ имени первого примитива в рисунке в длинной очереди выстроенных друг за другом примитивов чертежа. Команда entnext без аргумента дает имя первого неудаленного примитива в рисунке, тем самым мы находим начало данных базы примитивов рисунка Автокада. Примитивы Автокада это линии, текст, полилинии, круг, блоки и т.д. |
(setq dlo2 nil) (gc) |
Обнуление количественной переменной dlo2, участвующей в программе |
(setq tipl (cdr(assoc '0 (entget a)))) |
Выражение для получения из информационной структуры примитива, принадлежащего чертежу (внутренней базы данных) - типа примитива , выражение можно записать и другим способом - последовательным написанием каждой функции: (setq b (entget a)) - список информационной структуры примитива (СИСП),(setq b (assoc '0 b)) - нахождение в (СИСП) по ключу (паролю) '0 ключевой пары типа примитива (0 . тип_примитива) , (setq b (cdr b)) - получение значения второго члена ключевой пары, т.е. типа примитива |
(setq vib "1") |
Присвоение переменной vib символьного значения "1" |
(textscr) |
Открытие текстового режима (экрана) Автокада |
(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"))) |
Расшифровка выбранного значения, если выбор остановился на четвертом варианте, мы попадаем в условие 4, где переменной 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)))) |
Повторение выражения для получения типа примитива |
(while (and a tipl) |
Включаем цикл 2, который работает при существовании примитива и наличии типа примитива |
(setq slo (cdr(assoc '8 (entget a)))) |
Выражение для получения из информационной структуры примитива, принадлежащего чертежу (внутренней базы данных) – имени слоя на котором расположен примитив LWPOLYLINE т.е. 2D полилинию, выражение можно записать и другим способом - последовательным написанием каждой функции: (setq b (entget a)) - список информационной структуры примитива (СИСП),(setq b (assoc '8 b)) - нахождение в (СИСП) по ключу (паролю) '8 ключевой пары слоя примитива (8 . тип_примитива), (setq b (cdr b)) - получение значения второго члена ключевой пары, т.е. слоя примитива. Наша задача - отбор всех примитивов с типом LWPOLYLINE т.е. полилиний, расположенных на определенном слое. Правильное написание выражений смотреть в аналоге программы в конце главы |
(if (and (equal slo slo1) (equal tipl "LWPOLYLINE")) (progn |
Условие 5, если слой примитива совпадает с проверяемым слоем, и примитив является плоской полилинией LWPOLYLINE мы попадаем в условие |
(setq dl2 nil pt1 nil pt2 nil nn nil) |
Уничтожение переменных, чтобы избежать ложных воздействий в программе, перед началом исследования данных полилинии |
(setq kol (length (entget a))) |
Определение целого числа, которое равно числу элементов в списке. Функция (entget a) позволяет получить информационный список ключевых пар примитива a. Этот список элементов является внутренней базой данных примитива и позволяет получить разные характеристики, в том числе слой, точки и т.д. А целое число kol нужно будет применить в следующем цикле, в котором надо будет провернуть просмотр данных примитива столько раз, сколько ключевых пар составляют базу данных примитива. А рассматривая каждую ключевую пару, мы получим те данные, которые необходимо получить |
(repeat kol |
Цикл 3 работает столько раз (делает столько оборотов), сколько содержится в целом числе kol |
(if (not nn)(setq nn 1)) |
Условие 6. Если переменная nn не существует, мы ей присваиваем число 1 |
(setq opol (nth nn (entget a))) |
Это выражение помогает доставать ключевые пары из базы данных примитива (entget a), одну за другой, по мере возрастания числа nn. Функция работает следующим образом – достает из списка тот элемент, номер которого содержится в переменной nn. В данном случае элементом является ключевая пара. В переменную opol записывается та ключевая пара, которую мы нашли при очередном повороте цикла |
(if (equal (car opol) 10)(progn |
Условие 7. Если выражение (car opol) соответствует ключу 10, мы попадаем в это условие. Функция car позволяет выделить первый член ключевой пары, т.е. получить ключ. Ключ 10 – это признак нахождения точки, т.е. второго члена ключевой пары |
(setq pt (cdr opol)) |
Получение точки (условной вершины) полилинии, т.е. второго члена ключевой пары |
(if pt2 (setq pt2 pt)) |
Условие 8. Если есть точка pt2, то вместо содержащегося в ней значения присваиваем значение точки pt в переменную pt2 |
(if (not pt1)(setq pt1 pt)) |
Условие 9. Если отсутствует точка pt1 мы записываем в переменную pt1 значение точки pt |
Комментарий: |
Точка pt2 это первая точка, а pt1 - это вторая точка полилинии, и они последовательно сдвигаются друг за другом по мере нахождения новой точки полилинии, при этом вычисляя расстояние между условными вершинами. Если посмотреть в промежуточном состоянии точка pt2 находится в первой условной вершине, которая еще только найдена, а точка pt1 находится в предыдущей условной вершине, где до этого находилась точка pt2 |
(if pt2 (progn (setq dl2 (distance pt1 pt2)) |
Условие 10. Если точка pt2 существует, мы вычисляем расстояние между указанными точками dl2 |
(if (not dlo2)(setq dlo2 0)) |
Условие 11. Если не существует общего счетчика длины полилинии на конкретном слое dlo2, мы его создаем присваивая нулевой значение |
(setq dlo2 (+ dlo2 dl2)) |
Добавляем найденное расстояние между двумя точками dl2 в общий счетчик длины полилинии dlo2 |
(setq dl2 nil) |
После этого уничтожаем переменную dl2 |
)) |
Окончание условия 10 |
(if pt2 (setq pt1 pt2)) |
Условие 12. Если существует точка pt2, то это, тот самый момент передачи данных условной вершины из pt2 в pt1, то есть предыдущую точку делаем последующей |
(if (not pt2) (setq pt2 pt1)) |
Условие 13. Если не существует значения точки pt2 мы создаем эту точку передавая ей значение точки pt1. Теперь понятно, что на первом витке цикла дистанция не определяется, а создаются предпосылки для ее определения в будущем. Из программы видно, что при следующем обороте цикла, в точке pt1 останется первая точка полилинии, а точке pt2 будет присвоено значение новой точки |
)) |
Окончание условия 7 |
(setq nn (+ nn 1)) |
Счетчик для конкретной полилинии, с его помощью мы получаем последовательно одну ключевую пару за другой при каждом обороте цикла, при этом счетчик nn возрастает на единицу |
) |
Окончание цикла 3, значит полилиния закончилась |
(setq dl2 nil sl2 nil slo nil) (setq nn nil)(gc) |
Уничтожение временных переменных, необходимость в которых отпала. |
)) |
Окончание условия 5 сравнения слоев |
(setq a (entnext a)) |
Выражение для перелистывания примитивов и получения имени следующего примитива, т.е. функция entnext с именем /а/ - предыдущего примитива, дает имя следующего примитива, которое записывается в переменную /а/ |
(if a (progn |
Условие 14. Если существует примитив мы попадаем внутрь условия |
(setq tipl (cdr(assoc '0 (entget a)))) |
Повторение выражения для получения типа примитива |
)) |
Окончание условия 14. |
) |
Окончание цикла 2 |
(textscr) |
Открытие текстового окна Автокада (F2) |
(if (and (equal mast "1") dlo2) (progn |
В условие 15 мы попадем, если выбранный масштаб "1" и существует счетчик длины полилинии на конкретном слое |
(if (> dlo2 1.0) (progn (setq dlo21 (* dlo2 1.2)) |
В условие 16 мы попадем, если в счетчике общей длины полилинии dlo2 содержится величина кабеля, которая больше 1 метра. Внутри условия величину dlo2 увеличиваем на 20%, чтобы компенсировать неучтенные затраты на длину полилинии. Это важно для кабельных трасс |
(princ "МАСШТАБ 1 СЛОЙ = ") (princ slo1) (terpri) |
Вывод текстовой информации о масштабе в текстовом режиме Автокада |
(princ "ДЛИНА ОБЩАЯ КАБЕЛЯ (ТРУБЫ) = ") (princ dlo2)(princ " м")(terpri) |
Вывод текстовой информации о длине полилинии (в данном случае кабеле-трубы) в текстовом режиме Автокада. Длина полученная при обсчете слоя |
(princ "ДЛИНА С ЗАПАСОМ 120% = ") (princ dlo21)(princ " м")(terpri) |
Вывод текстовой информации о длине полилинии с процентом запаса (в данном случае кабеле-трубы) в текстовом режиме Автокада. Длина получена при расчете процента |
| (princ "--------------------")(terpri) | Черта для разделения текста в текстовом режиме Автокада. |
(princ " ")(terpri) |
Пустая строка текста в текстовом режиме Автокада |
(setq dlo2 0 dlo21 0)(gc) |
Обнуление переменных – счетчиков количества полилинии, для возможного продолжения нового поиска полилинии на других слоях |
)) |
Окончание условия 16 |
)) |
Окончание условия 15 |
Для других масштабов выражения аналогичные условиям 15, 16, поэтому можно не рассматривать, а посмотреть текст программы в конце |
|
(setq vibb (atoi vib)) |
Преобразуем символьное значение, содержащееся в переменной vib , в целое число, которое записываем в переменную vibb. Это число связано с номером слоя и оно помогает листать слои, как страницы книги, при этом проверяя наличие полилиний на каждом слое |
(setq vibb (+ vibb 1)) (setq vib (itoa vibb)) |
Увеличение переменной vibb на единицу, и пребразование целого числа в символьную величину, которую за-писываем в переменную vib, тем самым меняя номер слоя на следующий, например «EL7» на «EL8» |
(setq a (entnext)) |
Функция setq - присвоение переменной /а/ имени первого примитива в рисунке в длинной очереди выстроен-ных друг за другом примитивов чертежа. Команда entnext без аргумента дает имя первого неудаленного примитива в рисунке, тем самым мы находим начало данных базы примитивов рисунка Автокада. Примитивы Автокада это линии, текст, полилинии, круг, блоки и т.д. Да начинаем все сначала, снова проверяем все примитивы в чертеже, но ищем полилинии уже на другом слое, если был например «EL1», то стал «EL2» |
(if (equal vib "100")(progn (setq bb nil))) |
Условие 17 – очень интересное условие, оно помогает включить в работу столько слоев, сколько надо. Если надо проверить «200» слоев, то просто набить эту цифру вместо «100» и т.д. Само условие уничтожает переменную bb , если мы достигли «100» слоя. В этом случае работа программы заканчивается |
| ) | Окончание цикла 1, если уничтожена переменная bb – закрывающая скобка |
(setq dlo2 nil dlo21 nil tipl nil) (setq a nil pt1 nil pt2 nil)(gc) |
Уничтожение переменных – хороший тон и очистка памяти после завершения программы |
) |
Скобка закрытия программной объединяющей функции данных полилиний. (Функция defun) под именем /kol/ |
(defun kol();ПОЛУЧЕНИЕ общей длины полилинии в определенном слое
(setq a (entnext));(setq tipl (entget a))
(setq dlo2 nil)(setq tipl (cdr(assoc '0 (entget a))))(gc)
(setq vib "1")(textscr)
(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 " АВТОМАТИЗАЦИЯ (СЛОЙ 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"))) ;4
(setq bb t)
(while bb ;1
(setq slo1 (strcat isl vib))
(setq tipl (cdr(assoc '0 (entget a))))
(while (and a tipl) ;2
(setq slo (cdr(assoc '8 (entget a))))
(if (and (equal slo slo1)(equal tipl "LWPOLYLINE")) ;5
(progn
(setq dl2 nil pt1 nil pt2 nil nn nil)
(setq kol (length (entget a)))
(repeat kol ;3
(if (not nn)(setq nn 1)) ;6
(setq opol (nth nn (entget a)))
(if (equal (car opol) 10)(progn (setq pt (cdr opol)) ;7
(if pt2 (setq pt2 pt)) ;8
(if (not pt1)(setq pt1 pt)) ;9
(if pt2 (progn (setq dl2 (distance pt1 pt2)) ;10
;(princ "pt1 = ")(princ pt1)
;(princ " pt2 = ")(princ pt2)(terpri)
(if (not dlo2)(setq dlo2 0)) ;11
(setq dlo2 (+ dlo2 dl2))
(setq dl2 nil)
))
(if pt2 (setq pt1 pt2)) ;12
(if (not pt2) (setq pt2 pt1)) ;13
))
(setq nn (+ nn 1))
)(setq dl2 nil sl2 nil slo nil nn nil)(gc)
))
(setq a (entnext a))
(if a (progn (setq tipl (cdr(assoc '0 (entget a)))))) ;14
)
;(princ " ДЛИНА ОБЩАЯ КАБЕЛЯ = ")(princ dlo2)(princ " м")(terpri)
(textscr)
(if (and (equal mast "1") dlo2)(progn ;15
(if (> dlo2 1.0) (progn (setq dlo21 (* dlo2 1.2))
(princ "МАСШТАБ 1 СЛОЙ = ")(princ slo1);(terpri)
(princ "ДЛИНА ОБЩАЯ КАБЕЛЯ КПСВВ 1х2х0,5 мм2 = ")
(princ dlo2)(princ " м")(terpri)
(princ "ДЛИНА С ЗАПАСОМ 120% = ")
(princ dlo21)(princ " м")(terpri)
(princ "-------------------------")(terpri)
(princ " ")(terpri)
))
))
(if (and (equal mast "2") dlo2)(progn (setq dlo21 (* dlo2 1.2))
(setq dlo2 (/ dlo2 50.0))
(setq dlo21 (/ dlo21 50.0))
(if (> dlo2 1.0) (progn
(princ "МАСШТАБ 5 СЛОЙ = ")(princ slo1)(terpri)
(princ "ДЛИНА ОБЩАЯ КАБЕЛЯ = ")
(princ dlo2)(princ " м")(terpri)
(princ "ДЛИНА С ЗАПАСОМ 120% = ")
(princ dlo21)(princ " м")(terpri)
(princ "-------------------------")(terpri)
(princ " ")(terpri)
))
))
;(getstring"")
(if (and (equal mast "3") dlo2)(progn (setq dlo21 (* dlo2 1.2))
(setq dlo2 (/ dlo2 500.0))
(setq dlo21 (/ dlo21 500.0))
(if (> dlo2 2.0) (progn
(princ "МАСШТАБ 50 СЛОЙ = ")(princ slo1)(terpri)
(princ "ДЛИНА ОБЩАЯ КАБЕЛЯ КПСВВ 1х2х0,5 мм2 = ")
(princ dlo2)(princ " м")(terpri)
(princ "ДЛИНА С ЗАПАСОМ 120% = ")
(princ dlo21)(princ " м")(terpri)
(princ "-------------------------")(terpri)
(princ " ")(terpri)
))
))
(if (and (equal mast "4") dlo2)(progn (setq dlo21 (* dlo2 1.2))
(setq dlo2 (/ dlo2 1000.0))
(setq dlo21 (/ dlo21 1000.0))
(if (> dlo2 2.0) (progn
(princ "МАСШТАБ 100 СЛОЙ = ")(princ slo1)(terpri)
(princ "ДЛИНА ОБЩАЯ КАБЕЛЯ КПСВВ 1х2х0,5 мм2 = ")
(princ dlo2)(princ " м")(terpri)
(princ "ДЛИНА С ЗАПАСОМ 120% = ")
(princ dlo21)(princ " м")(terpri)
(princ "-------------------------")(terpri)
(princ " ")(terpri)
))
))
(if (and (equal mast "5") dlo2)(progn (setq dlo21 (* dlo2 1.2))
(setq dlo2 (/ dlo2 2000.0))
(setq dlo21 (/ dlo21 2000.0))
(if (> dlo2 2.0) (progn
(princ "МАСШТАБ 200 СЛОЙ = ")(princ slo1)(terpri)
(princ "ДЛИНА ОБЩАЯ КАБЕЛЯ КПСВВ 1х2х0,5 мм2 = ")
(princ dlo2)(princ " м")(terpri)
(princ "ДЛИНА С ЗАПАСОМ 120% = ")
(princ dlo21)(princ " м")(terpri)
(princ "-------------------------")(terpri)
(princ " ")(terpri)
))
))
(if (and (equal mast "6") dlo2)(prong
(setq dlo21 (* dlo2 1.2))(setq dlo2 (/ dlo2 5000.0))
(setq dlo21 (/ dlo21 5000.0))
(if (> dlo2 2.0) (progn
(princ "МАСШТАБ 500 СЛОЙ = ")(princ slo1)(terpri)
(princ "ДЛИНА ОБЩАЯ КАБЕЛЯ КПСВВ 1х2х0,5 мм2 = ")
(princ dlo2)(princ " м")(terpri)
(princ "ДЛИНА С ЗАПАСОМ 120% = ")
(princ dlo21)(princ " м")(terpri)
(princ "-------------------------")(terpri)
(princ " ")(terpri)
))
))
(setq vibb (atoi vib))(setq vibb (+ vibb 1))(setq vib (itoa vibb))
(setq a (entnext))
(if (equal vib "100")(progn (setq bb nil)))
(setq dlo2 nil dlo21 nil)
)
(setq dlo2 nil dlo21 nil)
(setq a nil tipl nil pt1 nil pt2 nil)(gc)
)
Copyright © Сайт поддержки пользователей САПР