![]() |
Translate to: |
||||||
| Обратная связь | Новости САПР | Программы | Документация | Полезные советы | Обзорные статьи | ||
| Заказ и разработка | Каталог САПР | САПР-конференция | Библиотека ГОСТов | Наши соавторы | Коммерческое ПО | ||
После манипуляций с технологическими шаблонами в чертеже, наступает время нумерации пожарных извещателей (ПИ). Пред-варительно надо уточнить, что изображение дымового пожарного извещателя состоит из двух блоков – блока изображения дымового пожарного извещателя (ПИ) – (1_DIP) и нескольких его модификаций (1_ADIP, 1_DIP3) и блока обозначения дымового пожарного извещателя (ПИ) - (1_NL). Хочу подчеркнуть, что работа с данными (ПИ) ведется именно с блоком обозначения. Это намного удобнее. Т.е. внесение информации и считывание информации ведется именно с блока обозначения (1_NL). В этом блоке содержатся атрибуты наружной информации – N датчика в шлейфе (ND) и N шлейфа (NL) и атрибуты скрытой информации – тип датчика (DAT1) и адрес датчика (ADR). Точно также изображение ручного пожарного извещателя (ПИ) состоит из двух блоков – блока изображения ручного пожарного извещателя (ПИ) - (1_IPR) и блока обозначения ручного пожарного извещателя (ПИ) - (1_NLR). Работа с данными ручного (ПИ) ведется тоже с блоком обозначения - внесение информации и считывание информации ведется именно с блока обозначения ручного (ПИ) - (1_NLR). В этом блоке содержатся атрибуты наружной информации – N датчика в шлейфе (ND) и N шлейфа (NL) и атрибуты скрытой информации – тип датчика (DAT2) и адрес датчика (ADR). Программа внесения данных (ZDP.LSP) позволяет вставлять в блок обозначения (ПИ) необходимую информацию последовательно указывая курсором на каждый блок по порядку следования шлейфа пожарной сигнализации.
Для детального усвоения программ в пособии 1 использовалась методика пошагового рассмотрения текста программ. В этом посо-бии я перехожу к логическому рассмотрению программ крупными «кусками», которые позволяют понять замысел автора. Для начального знакомства с языком Автолисп лучше всего заглянуть в пособие 1.
(defun zdp() ;замена номера датчика и номера луча ;ДЛЯ ДЫМОВОГО ИЗВЕЩАТЕЛЯ - БЛОК 1_NL для ДИП-34А ;ДЛЯ РУЧНОГО ИЗВЕЩАТЕЛЯ - БЛОК 1_NLR для ИПР-513-3А (setq nlu (getstring "ВВЕДИТЕ N ЛУЧА"))(terpri) (if (equal nlu "")(progn (setq nlu pnlu)))(setq pnlu nlu) (princ "nlu =")(princ nlu)(terpri) (setq ndt (getstring "ВВЕДИТЕ N ДАТЧИКА"))(terpri) (if (equal ndt "")(progn (setq ndt pndt))) (setq pndt ndt)(setq dlndt (strlen ndt)) (princ "ndt =")(princ ndt)(terpri) (setq ndt1 (atoi ndt))(setq ndt2 ndt1)(textscr) (princ "====================")(terpri) (princ " A01 . NNN ")(terpri) (princ "====================")(terpri) (setq nad1 (getstring "ВВЕДИТЕ N АДРЕСА ГОЛОВНОГО ПРИБОРА без А01 И БЕЗ НУЛЕЙ"))(terpri) (if (equal nad1 "")(progn (setq nad1 pnad1))) (setq pnad1 nad1)(setq dlnad1 (strlen nad1)) (if (= dlnad1 1)(progn (setq nad1 (strcat "A01" "." "00" nad1 )))) (if (= dlnad1 2)(progn (setq nad1 (strcat "A01" "." "0" nad1 )))) (if (= dlnad1 3)(progn (setq nad1 (strcat "A01" "." nad1 )))) (if (= dlndt 1)(progn (setq nad2 (strcat nad1 "." "00" ndt )))) (if (= dlndt 2)(progn (setq nad2 (strcat nad1 "." "0" ndt )))) (if (= dlndt 3)(progn (setq nad2 (strcat nad1 "." ndt )))) |
Введение данных, для формирования начальных значений первого пожарного извещателя (ПИ):
(если двузначное число – добавляется один 0) (если трехзначное число – добавлять ничего не надо) |
(setq id1 "ДИП-34А")(setq id2 "ИПР-513-3А") ; определяем в двух переменных типы пожарных извещателей (setq idd nil dlnad1 nil)(gc) (setq a1 (car(entsel "ВЫБЕРИТЕ БЛОК НОМЕРА ДАТЧИКА")))(terpri) (setq b1 t);(setq a1 (entnext a1)) |
| После формирования начальных данных необходимо выбрать курсором первый пожарный извещатель шлейфа. |
(while b1
(setq tip (cdr(assoc '0 (entget a1))))
(if (or (equal tip "ATTDEF")(equal tip "ATTRIB")) ;условие
(progn ;атрибутов
(setq b1 (cdr(assoc '2 (entget a1))))
|
| Начало цикла вставки данных в блок обозначения ПИ. В выбранном блоке необходимо найти определенные атрибуты |
(if (equal b1 "NL")(progn
(setq b (subst (cons 1 nlu)(assoc '1 (entget a1))(entget a1)))
(entmod b)(entupd a1)
))
|
| Если обнаружен атрибут номера луча, с помощью этого выражения вставляем значение указанного ранее номера луча |
(if (equal b1 "ND")(progn
(setq b (subst (cons 1 ndt)(assoc '1 (entget a1))(entget a1)))
(entmod b)(entupd a1)(setq ndt1 (+ ndt1 1) ndt (itoa ndt1))
))
|
| Если обнаружен атрибут номера датчика, с помощью этого выражения вставляем значение указанного ранее номера датчика. Одновременно номер датчика увеличиваем на единицу для вставки его в атрибут номера следующего датчика |
(if (equal b1 "ADR")(progn (setq b (subst(cons 1 nad2)(assoc '1 (entget a1))(entget a1))) (entmod b)(entupd a1)(setq ndt2 (+ ndt2 1) ndt21 (itoa ndt2)) (setq dlndt (strlen ndt21)) (if (= dlndt 1)(progn (setq nad2 (strcat nad1 "." "00" ndt21 )))) (if (= dlndt 2)(progn (setq nad2 (strcat nad1 "." "0" ndt21 )))) (if (= dlndt 3)(progn (setq nad2 (strcat nad1 "." ndt21 )))) )) |
| Если обнаружен атрибут адреса датчика, с помощью этого выражения вставляем значение указанного ранее полного адреса датчика. Одновременно адрес датчика увеличиваем на единицу и преобразовываем выражение в полный адрес для вставки его в атрибут адреса следующего датчика |
(if (equal b1 "DAT1")(progn ;дымовые
(if (not kld)(progn (setq kld 0)))
(setq b (subst(cons 1 id1)(assoc '1 (entget a1))(entget a1)))
(entmod b)(entupd a1)(setq kld (+ kld 1))
))
|
| Если обнаружен атрибут типа дымового датчика, с помощью этого выражения вставляем значение подобранного ранее типа дымового датчика. Счетчик количества дымовых датчиков прибавляет единицу |
(if (equal b1 "DAT2")(progn ;ручные
(if (not klr)(progn (setq klr 0)))
(setq b (subst(cons 1 id2)(assoc '1 (entget a1))(entget a1)))
(entmod b)(entupd a1)(setq klr (+ klr 1))
))
|
| Если обнаружен атрибут типа ручного датчика, с помощью этого выражения вставляем значение подобранного ранее типа ручного датчика. Счетчик количества ручных датчиков прибавляет единицу |
)) ; окончание условия атрибутов |
(setq a1 (entnext a1))
(if a1 (progn
(setq tip (cdr(assoc '0 (entget a1)))) ;тип примитива
(if (equal tip "SEQEND")(progn ; если конец данных блока
(setq a1 (car(entsel "ВЫБЕРИТЕ БЛОК НОМЕРА ДАТЧИКА")))
(terpri)
(if (not a1)(progn ; если не выбран блок номера датчика
; щелчок по пустому месту, для ввода данных нового луча
(setq nlu (getstring "ВВЕДИТЕ N ЛУЧА"))(terpri)
(if (equal nlu "")(progn (setq nlu pnlu)))(setq pnlu nlu)
(setq ndt (getstring "ВВЕДИТЕ N ДАТЧИКА"))(terpri)
(if (equal ndt "")(progn (setq ndt pndt)))
(setq pndt ndt)(setq dlndt (strlen ndt))
(setq ndt1 (atoi ndt))(setq ndt2 ndt1)
(setq nad1
(getstring "ВВОД N АДРЕСА ГОЛОВНОГО ПРИБОРА без А01 И БЕЗ НУЛЕЙ"))
(terpri)
(if (equal nad1 "")(progn (setq nad1 pnad1)))
(setq pnad1 nad1)(setq dlnad1 (strlen nad1))
(if (= dlnad1 1)(progn (setq nad1 (strcat "A01" "." "00" nad1 ))))
(if (= dlnad1 2)(progn (setq nad1 (strcat "A01" "." "0" nad1 ))))
(if (= dlnad1 3)(progn (setq nad1 (strcat "A01" "." nad1 ))))
(if (= dlndt 1) (progn (setq nad2 (strcat nad1 "." "00" ndt ))))
(if (= dlndt 2) (progn (setq nad2 (strcat nad1 "." "0" ndt ))))
(setq id1 "ДИП-34А")(setq id2 "ИПР-513-3А")
(setq idd nil dlnad1 nil)(gc)
(setq a1 (car(entsel "ВЫБЕРИТЕ БЛОК НОМЕРА ДАТЧИКА")))(terpri)
(setq b1 t)
))
(if a1 (progn (setq b1 (cdr(assoc '2 (entget a1))))))
;тип примитива
))
))
(if (not a1)(progn (setq a1 nil b1 nil)))
)
|
| Программа выстроена для шлейфов ДПЛС прибора С2000-КДЛ системы «Орион» фирмы «Болид». Эта часть программы прокручивает и находит атрибуты конкретного блока. Если наступает конец блока то необходимо указать курсором на следующий блок номер датчика. Если закончился выбор номеров датчиков, в связи с окончанием шлейфа, достаточно щелкнуть по пустому месту, чтобы перейти к вводу начальных данных следующего шлейфа, для начала работы с блоками обозначения номеров датчиков следующего шлейфа. |
(princ "ЧИСЛО ДЫМОВЫХ ИЗВЕЩАТЕЛЕЙ В ШЛЕЙФЕ =")(princ kld) (terpri) (princ "ЧИСЛО РУЧНЫХ ИЗВЕЩАТЕЛЕЙ В ШЛЕЙФЕ =")(princ klr) (terpri)(setq a1 nil b1 nil b11 nil) ) |
Окончание программы – вывод общих данных обсчета плана:
В результате работы программы (затраты времени не более 30 минут для одной тысячи датчиков) на плане в установленные ранее датчики - пожарные извещатели (ПИ) внесена информация, отражающая полную характеристику каждого датчика (ПИ). Это необходимо:
|
(defun zdp() ;замена номера датчика и номера луча
;ДЛЯ ДЫМОВОГО ИЗВЕЩАТЕЛЯ - БЛОК 1_NL для ДИП-34А
;ДЛЯ РУЧНОГО ИЗВЕЩАТЕЛЯ - БЛОК 1_NLR для ИПР-513-3А
(setq nlu (getstring "ВВЕДИТЕ N ЛУЧА"))(terpri)
(if (equal nlu "")(progn (setq nlu pnlu)))(setq pnlu nlu)
(setq ndt (getstring "ВВЕДИТЕ N ДАТЧИКА"))(terpri)
(if (equal ndt "")(progn (setq ndt pndt)))
(setq pndt ndt)(setq dlndt (strlen ndt))
(setq ndt1 (atoi ndt))(setq ndt2 ndt1)(textscr)
(princ "====================")(terpri)
(princ " A01 . NNN ")(terpri)
(princ "====================")(terpri)
(setq nad1
(getstring "ВВОД N АДРЕСА ГОЛОВНОГО ПРИБОРА без А01 И БЕЗ НУЛЕЙ"))
(terpri)
(if (equal nad1 "")(progn (setq nad1 pnad1)))(setq pnad1 nad1)
(setq dlnad1 (strlen nad1))
(if (= dlnad1 1)(progn (setq nad1 (strcat "A01" "." "00" nad1 ))))
(if (= dlnad1 2)(progn (setq nad1 (strcat "A01" "." "0" nad1 ))))
(if (= dlnad1 3)(progn (setq nad1 (strcat "A01" "." nad1 ))))
(if (= dlndt 1)(progn (setq nad2 (strcat nad1 "." "00" ndt ))))
(if (= dlndt 2)(progn (setq nad2 (strcat nad1 "." "0" ndt ))))
(if (= dlndt 3)(progn (setq nad2 (strcat nad1 "." ndt ))))
(setq id1 "ДИП-34А")(setq id2 "ИПР-513-3А")
(setq idd nil dlnad1 nil)(gc) (setq b1 t)
(setq a1 (car(entsel "ВЫБЕРИТЕ БЛОК НОМЕРА ДАТЧИКА")))(terpri)
(while b1
(setq tip (cdr(assoc '0 (entget a1))))
(if (or (equal tip "ATTDEF")(equal tip "ATTRIB"))(progn
(setq b1 (cdr(assoc '2 (entget a1))))
(if (equal b1 "NL")(progn
(setq b (subst (cons 1 nlu)(assoc '1 (entget a1))(entget a1)))
(entmod b)(entupd a1)))
(if (equal b1 "ND")(progn
(setq b (subst (cons 1 ndt)(assoc '1 (entget a1))(entget a1)))
(entmod b)(entupd a1)(setq ndt1 (+ ndt1 1) ndt (itoa ndt1))
))
(if (equal b1 "ADR")(progn
(setq b (subst(cons 1 nad2)(assoc '1 (entget a1))(entget a1)))
(entmod b)(entupd a1)(setq ndt2 (+ ndt2 1) ndt21 (itoa ndt2))
(setq dlndt (strlen ndt21))
(if (= dlndt 1)(progn (setq nad2 (strcat nad1 "." "00" ndt21 ))))
(if (= dlndt 2)(progn (setq nad2 (strcat nad1 "." "0" ndt21 ))))
(if (= dlndt 3)(progn (setq nad2 (strcat nad1 "." ndt21 ))))
))
(if (equal b1 "DAT1")(progn ;дымовые
(if (not kld)(progn (setq kld 0)))
(setq b (subst(cons 1 id1)(assoc '1 (entget a1))(entget a1)))
(entmod b)(entupd a1)(setq kld (+ kld 1))
))
(if (equal b1 "DAT2")(progn ;ручные
(if (not klr)(progn (setq klr 0)))
(setq b (subst(cons 1 id2)(assoc '1 (entget a1))(entget a1)))
(entmod b)(entupd a1)(setq klr (+ klr 1))
))
)) ; конец условия определения атрибута
(setq a1 (entnext a1))
(if a1 (progn
(setq tip (cdr(assoc '0 (entget a1)))) ;тип примитива
(if (equal tip "SEQEND")(progn
(setq a1 (car(entsel "ВЫБЕРИТЕ БЛОК НОМЕРА ДАТЧИКА")))(terpri)
(if (not a1)(progn
(setq nlu (getstring "ВВЕДИТЕ N ЛУЧА"))(terpri)
(if (equal nlu "")(progn (setq nlu pnlu)))(setq pnlu nlu)
(setq ndt (getstring "ВВЕДИТЕ N ДАТЧИКА"))(terpri)
(if (equal ndt "")(progn (setq ndt pndt)))
(setq pndt ndt)(setq dlndt (strlen ndt))
(setq ndt1 (atoi ndt))(setq ndt2 ndt1)
(setq nad1 (getstring "ВВОД N АДРЕСА ПРИБОРА без А01 И БЕЗ НУЛЕЙ")) (terpri)
(if (equal nad1 "")(progn (setq nad1 pnad1)))
(setq pnad1 nad1)(setq dlnad1 (strlen nad1))
(if (= dlnad1 1)(progn (setq nad1 (strcat "A01" "." "00" nad1 ))))
(if (= dlnad1 2)(progn (setq nad1 (strcat "A01" "." "0" nad1 ))))
(if (= dlnad1 3)(progn (setq nad1 (strcat "A01" "." nad1 ))))
(if (= dlndt 1)(progn (setq nad2 (strcat nad1 "." "00" ndt ))))
(if (= dlndt 2)(progn (setq nad2 (strcat nad1 "." "0" ndt ))))
(if (= dlndt 3)(progn (setq nad2 (strcat nad1 "." ndt ))))
(setq id1 "ДИП-34А")(setq id2 "ИПР-513-3А")
(setq idd nil dlnad1 nil)(gc) (setq b1 t)
(setq a1 (car(entsel "ВЫБЕРИТЕ БЛОК НОМЕРА ДАТЧИКА")))(terpri)
))
(if a1 (progn (setq b1 (cdr(assoc '2 (entget a1))))));тип примити-ва
))
))
(if (not a1)(progn (setq a1 nil b1 nil)))
)
(princ "ЧИСЛО ДЫМОВЫХ ИЗВЕЩАТЕЛЕЙ В ШЛЕЙФЕ =")(princ kld) (terpri)
(princ "ЧИСЛО РУЧНЫХ ИЗВЕЩАТЕЛЕЙ В ШЛЕЙФЕ =")(princ klr) (terpri)(setq a1 nil b1 nil b11 nil)
)
Для детального усвоения программ в пособии 1 использовалась методика пошагового рассмотрения текста программ. В этом посо-бии я перехожу к логическому рассмотрению программ крупными «кусками», которые позволяют понять замысел автора. Для начального знакомства с языком Автолисп лучше всего заглянуть в пособие 1.
(defun znp() ; ФУНКЦИЯ ИЗМЕНЕНИЯ N луча в обьектах шлейфа ПС - БРИЗ и УК-П (textscr)(princ "==========================================")(terpri) (setq nnp (getstring"\n ВВЕДИТЕ N ЛУЧА\n: ")) (setq nnp1 (atoi nnp)) (setq a1 (car(entsel"\n ВЫБЕРИТЕ БЛОК БРИЗ или УК-П \n: "))) (setq b1 t)(setq a1 (entnext a1)) (setq b1 (cdr(assoc '2 (entget a1)))) (setq tip (cdr(assoc '0 (entget a1)))) |
| Начало задачи стандартное – подготовка данных для занесения в атрибуты блоков БРИЗ и УК-П и выбор блока необходимого шлейфа для внесения данных |
(while b1
(if (or (equal tip "ATTDEF")(equal tip "ATTRIB"))
(progn
(if (equal b1 "NL")(progn
(setq b1 (subst (cons 1 nnp) (assoc '1 (entget a1)) (entget a1)))
(entmod b1)(entupd a1)
))
|
| Начало цикла для нахождения атрибута номера шлейфа, если нашли – происходит внесение информации в атрибут |
(setq a1 (entnext a1))
(if a1 (progn
(setq d1 (cdr(assoc '0 (entget a1)))) ;тип примитива
(setq b1 (cdr(assoc '2 (entget a1)))) ;тип примитива
(if (equal d1 "SEQEND")(progn ;(setq b1 nil)
(setq a1 (car(entsel"\n ВЫБОР ОБЪЕКТА для изменения N ЛУЧА \n: ")))
;(setq b1 (cdr(assoc '2 (entget a1)))) ;тип примитива
))
))
|
| Выражение для прокрутки атрибутов блока, прочтение данных нового атрибута, если атрибут является "SEQEND" окончанием блока, то попадаем в выражение выбора нового блока – следующего БРИЗ или УК-П |
(if (not a1)(progn
(setq nnp (getstring"\n ВВЕДИТЕ N ЛУЧА\n: "))
(setq a1 (car(entsel"\n ВЫБЕРИТЕ БЛОК БРИЗ или УК-П \n: ")))
(setq b1 (cdr(assoc '2 (entget a1))))
(setq tip (cdr(assoc '0 (entget a1))))
;(setq a1 nil b1 nil)
))
|
| Если число БРИЗ и УК-П предыдущего шлейфа закончились, т.е. всем присвоен номер шлейфа, надо указать курсором по пустому месту, в этом случае попадаем в это выражение, которое запрашивает новые данные следующего шлейфа и все повторяется, т.е. последовательное указание курсором на указанные устройства шлейфа. |
(if (not a1)(progn (setq a1 nil b1 nil)))
))
(if a1 (progn (setq a1 (entnext a1))
(setq tip (cdr(assoc '0 (entget a1))))
(setq b1 (cdr(assoc '2 (entget a1))))
))
)
(setq a1 nil b1 nil b11 nil)
)
|
| Если и дальше отсутствует выбор примитива (БРИЗ и УК-П) работа цикла и программы заканчивается |
(defun znp()
; ФУНКЦИЯ ИЗМЕНЕНИЯ N луча в обьектах шлейфа ПС - БРИЗ и УК-П
(textscr)(princ "================================")(terpri)
(setq nnp (getstring"\n ВВЕДИТЕ N ЛУЧА\n: "))(setq nnp1 (atoi nnp))
(setq a1 (car(entsel"\n ВЫБЕРИТЕ БЛОК БРИЗ или УК-П \n: ")))
(setq b1 t)(setq a1 (entnext a1))
(setq b1 (cdr(assoc '2 (entget a1))))
(setq tip (cdr(assoc '0 (entget a1))))
(while b1
(if (or (equal tip "ATTDEF")(equal tip "ATTRIB"))
(progn
(if (equal b1 "NL")(progn
(setq b1 (subst (cons 1 nnp) (assoc '1 (entget a1)) (entget a1)))
(entmod b1)(entupd a1)
))
(setq a1 (entnext a1))
(if a1 (progn
(setq d1 (cdr(assoc '0 (entget a1)))) ;тип примитива
(setq b1 (cdr(assoc '2 (entget a1)))) ;тип примитива
(if (equal d1 "SEQEND")(progn ;(setq b1 nil)
(setq a1 (car(entsel"\n ВЫБОР ОБЪЕКТА для изменения N ЛУЧА \n: ")))
;(setq b1 (cdr(assoc '2 (entget a1)))) ;тип примитива
))
))
(if (not a1)(progn
(setq nnp (getstring"\n ВВЕДИТЕ N ЛУЧА\n: "))
(setq a1 (car(entsel"\n ВЫБЕРИТЕ БЛОК БРИЗ или УК-П \n: ")))
(setq b1 (cdr(assoc '2 (entget a1))))
(setq tip (cdr(assoc '0 (entget a1))))
;(setq a1 nil b1 nil)
))
(if (not a1)(progn (setq a1 nil b1 nil)))
))
(if a1 (progn (setq a1 (entnext a1))
(setq tip (cdr(assoc '0 (entget a1))))
(setq b1 (cdr(assoc '2 (entget a1))))
))
)
(setq a1 nil b1 nil b11 nil)
)
После того, как пожарные извещатели (ПИ) расположены на плане и до того, как произведена нумерация каждого (ПИ), необходимо соединить (ПИ) шлейфами (лучами) пожарной сигнализации.
Пути решения этого вопроса могут быть следующими:Для детального усвоения программ в пособии 1 использовалась методика пошагового рассмотрения текста программ. В этом пособии я перехожу к логическому рассмотрению программ крупными «кусками», которые позволяют понять замысел автора. Для начального знакомства с языком Автолисп лучше всего заглянуть в пособие 1.
(defun risp (); РИСОВАНИЕ ПОЛИЛИНИИ ПРЯМЫМИ КУСКАМИ БЕЗ ПЕРЕРЫВА (terpri)(terpri)(terpri)(terpri)(terpri)(terpri)(terpri)(setq bb t) |
| Создание начальных условий работы последующего цикла |
(while bb (setq pt1 (getpoint "\n Введите 1 ТОЧКУ ПОЛИЛИНИИ;\n")) (if (not pt1)(progn (setq bb nil))) (terpri)(terpri) (setq pt2 (getpoint "\n Введите 2 ТОЧКУ ПОЛИЛИНИИ;\n")) (if (not pt2)(progn (setq bb nil))) (terpri)(terpri) (command "_pline" pt1 pt2 "") ) |
| Цикл позволяет указывать только две точки для отрисовки полилинии, снимая все промежуточные вопросы команды Автокада |
| (setq pt1 nil pt2 nil) ) |
| Окончание программы – обнуление переменных |
(defun risp (); РИСОВАНИЕ ПОЛИЛИНИИ ПРЯМЫМИ КУСКАМИ БЕЗ ПЕРЕРЫВА (terpri)(terpri)(terpri)(terpri)(terpri)(terpri)(terpri)(setq bb t) (while bb (setq pt1 (getpoint "\n Введите 1 ТОЧКУ ПОЛИЛИНИИ;\n")) (if (not pt1)(progn (setq bb nil)))(terpri)(terpri) (setq pt2 (getpoint "\n Введите 2 ТОЧКУ ПОЛИЛИНИИ;\n")) (if (not pt2)(progn (setq bb nil))) (terpri)(terpri) (command "_pline" pt1 pt2 "") ) (setq pt1 nil pt2 nil) )
Copyright © Сайт поддержки пользователей САПР