Логотип сайта поддержки пользователей САПРО сайте поддержки пользователей САПР Translate to:
Hosting Ukraine

Программа (KOL) – последовательный автоматический просмотр 3Д-полилиний на поле чертежа в разных (упорядоченных) слоях с образованием послойных счетчиков длин

Оглавление

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

1. Описание технологии процесса автоматического обсчета длин полилинии на разных слоях.

Установленные полилинии на поле чертежа в разных слоях будут последовательно просмотрены и в них будут считаны длины и добавлены в счетчики длин, сколько бы отдельных участков полилиний не встретилось в одном слое и других слоях.

2. Разбор решения задачи для создания программы.

Задача требует использования нарисованной полилинии, которая может подразумевать на плане электрическую кабельную линию или трубопровод и т.д. В результате отпадает необходимость пользоваться курвиметром, а длины появляются через секунды, после запуска задачи. Постановка задачи состоит в том, чтобы найти полилинии конкретного слоя и вычислить их длину, затем включить счетчик конкретного слоя, куда добавить длину найденных полилиний. Отличие плоской полилинии состоит в том, что она не имеет подпримитивов и вся информация о точках полилинии (условные вершины) содержится в описании самой полилинии. Процесс повторяется при нахождении программой следующей полилинии, по порядку, начинающемуся со слоя «1» с добавленным обозначением и заканчивая например слоем «100». Можно обсчитать хоть тысячу слоев. Обозначение слоя может содержать характеристику работ, например:

  1. «EL» - электротехнические («EL1»…«EL100») - слои
  2. «POG» - пожарной сигнализации («POG1»…«POG100») - слои
  3. «AV» - автоматизации («AV1»…«AV100») - слои

3. Написание программы с текстовыми пояснениями, чтобы изучающему человеку не заглядывать в справочник Autolisp.

Разбор задачи выполнен в общем виде в облегченном варианте. Многие функции уже встречались ранее и в объяснении не нуждаются. Точка с запятой используется для пояснений, которые устанавливаются в тексте программы и на работу программы не влияют.

(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/

Текст программы учета данных 2D полилиний по слоям в чертеже Автокада (KOL.lsp)

(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 © Сайт поддержки пользователей САПР