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

Тема 4 Разработка программ для определения длины 2D- и 3D- полилинии в разных слоях

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

Оглавление

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

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

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

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

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

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

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

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

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

Текст программы учета данных 3D полилиний по слоям в чертеже Автокада (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 © Сайт поддержки пользователей САПР