LISP для построения ВЛ и ЛС в автокаде, возможно?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP для построения ВЛ и ЛС в автокаде, возможно?

LISP для построения ВЛ и ЛС в автокаде, возможно?

Ответ
Поиск в этой теме
Непрочитано 11.12.2014, 09:54 #1
LISP для построения ВЛ и ЛС в автокаде, возможно?
Gotch
 
Регистрация: 07.02.2007
Сообщений: 200

друзья пользовался поиском не нашел построение ЛЭП
возможно ли полностью автоматизировать вставку блоков стрелочек
4 вопроса перед построение:
1. Масштаб съемки: 0 - 500; 1 - 1000; 2 - 2000; 5 - 5000 (по умолчанию значение 1)
2. Территория: 1 - застроенная; 2 - незастроенная (на застроенной соединять плинией цветом 250; на незастроенной цвет черный)
3. Тип опоры: 1 - ж/б; 2 - метал; 3 - дерев
4. Тип ЛЭП: 1 - высоковольтная; 2 - низковольтная; 3 - связь
такой алгоритм -
- проводим для начала плинию, первый отрезок
- ставим на вершинах плинии блок опоры
- ставим на вершинах блок стрелок
- и относительно Базового угла Восток 0d00' поворачиваем на нужный угол что бы легли на плинию
такое возможно?
или не получиться настолько автоматизировать?
что бы как в кредомикс рисуешь и все сразу ставиться как надо
если такой лисп уже есть не пинайте сильно
помогите кому не сложно

прикрепил архив с блоками столбов и стрелок
столбы
B-STOLB-34.dwg - столб метал
B-STOLB-38.dwg - столб ж/б
B-STOLB-39.dwg - столб дерево
стрелки
B-VL-V.dwg - стрелка высоковольтная
B-VL-N.dwg - стрелка низковольтная
B-VL-S.dwg - стрелка связь

Вложения
Тип файла: rar LEP_Heon01.rar (111.7 Кб, 395 просмотров)

Просмотров: 9249
 
Непрочитано 11.12.2014, 13:39
#2
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


уточни, цвета по застроенной и не застроенной, потому как 250 - черный
ciril вне форума  
 
Автор темы   Непрочитано 11.12.2014, 13:44
#3
Gotch


 
Регистрация: 07.02.2007
Сообщений: 200


да прости ошибся с цветом
давай пока остановимся на цвете N 8 для застройки
и черный для незастройки
Gotch вне форума  
 
Непрочитано 11.12.2014, 13:47
#4
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


размер условных во вложении дан для тысячного?
и вот это вот соотношение числа и слова принципиально или можно и вводить словом?
ciril вне форума  
 
Автор темы   Непрочитано 11.12.2014, 13:56
#5
Gotch


 
Регистрация: 07.02.2007
Сообщений: 200


да блоки в 1 000 масштабе
удобнее даже было бы просто цифрой
это что бы просто подсказка в командной строке всплывала - Выберите масштаб съемки: 0 - 500; 1 - 1000; 2 - 2000; 5 - 5000
а пользователь просто ввел число
Выберите тип территория: 1 - застроенная; 2 - незастроенная
Выберите тип опоры: 1 - ж/б; 2 - метал; 3 - дерево
Выберите тип ЛЭП: 1 - высоковольтная; 2 - низковольтная; 3 - связь
и везде просто ввести число

----- добавлено через ~5 мин. -----
и если возможно от
сама плиния между столбами была в слое "И1 ВЛ и ЛС" и цвет этого слоя в зависимости от застройки/незастройки
блоки столбы в слой "И1 Блоки Столбы" цвет слоя черный
блоки стрелки в слой "И1 ВЛ и ЛС Блоки" цвет слоя черный
Gotch вне форума  
 
Непрочитано 11.12.2014, 14:05
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Так... С самого начала: на чем сам споткнулся?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 11.12.2014, 14:06
#7
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


цвет стрелок вне зависимости от застройки/незастройки?
ciril вне форума  
 
Автор темы   Непрочитано 11.12.2014, 14:06
#8
Gotch


 
Регистрация: 07.02.2007
Сообщений: 200


я лисп совершенно не знаю
поэтому попросил помощи

----- добавлено через 43 сек. -----
цвет стрелок и столбов всегда по слою
а цвет слоя у них всегда черный
Gotch вне форума  
 
Непрочитано 11.12.2014, 14:14
#9
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


как бы три типа примитивов на три разных слоя - это как-то жестоко по отношению к тем, кто потом эти чертежи читать будет, на один слой никак не поместить? если полилинии цвет зависит от застроенности и слой, на котором она располагается, зависит от застроенности, то запрос на тип территории лишний, нет?
ciril вне форума  
 
Автор темы   Непрочитано 11.12.2014, 14:22
#10
Gotch


 
Регистрация: 07.02.2007
Сообщений: 200


не поверьте наоборот так даже лучше будет три примитива три слоя

исходя из этого запроса -
Выберите тип территория: 1 - застроенная; 2 - незастроенная
задаеться цвет слоя -> И1 ВЛ и ЛС
а цвет полилинии по слою
Gotch вне форума  
 
Непрочитано 11.12.2014, 14:30
#11
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


и вправду, не поверю, привычней, может быть, а лучше врят ли.
не, для команды хоть на 10, но просто хочется знать для чего лучше?
ciril вне форума  
 
Автор темы   Непрочитано 11.12.2014, 14:39
#12
Gotch


 
Регистрация: 07.02.2007
Сообщений: 200


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

блин что то я подумал может так слои поделим
И1 ЛЭП ВЛ - высоковольтка + стрелочки(но они должны быть цветом по блоку)
И1 ЛЭП НЛ - низковолька + стрелочки(но они должны быть цветом по блоку)
И1 ЛЭП ЛС - линия связи + стрелочки(но они должны быть цветом по блоку)
И1 ЛЭП Столбы - для столбов по всем лэп

если это вам не слишком затруднительно
Gotch вне форума  
 
Непрочитано 11.12.2014, 15:15
#13
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


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

Последний раз редактировалось ciril, 11.12.2014 в 15:23.
ciril вне форума  
 
Непрочитано 11.12.2014, 15:30
#14
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450


Цитата:
Сообщение от Gotch Посмотреть сообщение
я лисп совершенно не знаю
поэтому попросил помощи
Вообще-то ты не помощи просишь, а "за спасибо" нарисовать тебе программу.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.12.2014, 16:13
#15
Gotch


 
Регистрация: 07.02.2007
Сообщений: 200


тип линии по слою для слоя тип линии - Continuous
вес по слою

не вопрос если он скажет я готов отблагодарить и закинуть на сотик 1000р. или на сбер карту перевести

----- добавлено через ~2 мин. -----
знаешь наши проектанты вообще бывает даже не в своих слоях рисуют
какой попадеться в таком и рисуют
Gotch вне форума  
 
Автор темы   Непрочитано 11.12.2014, 16:25
#16
Gotch


 
Регистрация: 07.02.2007
Сообщений: 200


ciril возожно ил что бы блок столба и стрелки брался не из отдельных файлов в которых они находятся а из единого где у меня все блоки собраны которые я применяю
прикрепил файлик с блоками
если это сложно то не вопрос можно что бы отдельными файлами были
Вложения
Тип файла: rar Блоки.rar (271.5 Кб, 119 просмотров)
Gotch вне форума  
 
Непрочитано 11.12.2014, 16:32
#17
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Раз пошло такое дело, можно все Только вот я в этом файле с блоками опор и иже с ними не нашел? Их там нет?
ciril вне форума  
 
Автор темы   Непрочитано 11.12.2014, 16:46
#18
Gotch


 
Регистрация: 07.02.2007
Сообщений: 200


блоки столбов и стрелки там есть
их можно найти по названию блока
название блоков столбов
B-STOLB-34 - столб метал
B-STOLB-38 - столб ж/б
B-STOLB-39 - столб дерево
название блоков стрелки
B-VL-V - стрелка высоковольтная
B-VL-N - стрелка низковольтная
B-VL-S - стрелка связь

Последний раз редактировалось Gotch, 11.12.2014 в 16:52.
Gotch вне форума  
 
Непрочитано 11.12.2014, 18:08
#19
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


опять халтуру увели
gomer вне форума  
 
Непрочитано 11.12.2014, 18:27
#20
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,194


Цитата:
что бы как в кредомикс рисуешь и все сразу ставиться как надо
повторюсь - в поиск исполнителей.
Цитата:
Сообщение от Gotch Посмотреть сообщение
если такой лисп уже есть не пинайте сильно
Если не писать прогу с нуля, то в приложении Toolpack есть команда вставки заданных блоков во все вершины полилинии. Если не хочется/нельзя использовать toolpack - на просторах форума где-то был лисп, решающий эту же задачу.
Блоки всех опор и стрелок имеет смысл совместить в одном динамическом блоке, в который добавить:
- выбор вида линии и вида опоры с помощью состояния видимости (проще всего по одному состоянию видимости на каждую из 9 комбинаций стрелок и опоры);
- поворот стрелок с помощью "ручек".
Доворачивать стрелки по отрезкам полилинии придется вручную

Последний раз редактировалось kp+, 11.12.2014 в 18:37.
kp+ вне форума  
 
Непрочитано 11.12.2014, 19:39
#21
freese

ingénieur
 
Регистрация: 21.07.2008
Сообщений: 769


В exchange вот такое есть https://apps.exchange.autodesk.com/A...ws32and64%3aru
freese вне форума  
 
Непрочитано 11.12.2014, 21:20
#22
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Разумеется, такую программу сделать можно. Тем более, что рисовать ВЛ решили не впервые в мире. И не надо никаких "динамических блоков", и "стрелочки доворачивать".
И не надо "слои поделим". Правильная программа всегда должна рисовать на текущем слое. В разных организациях могут быть свои стандарты слоев, цвета и прочего.

Если где-то есть стандартный слой для ВЛ (или всего прочего) то уже другая функция должна устанавливать такой слой, а рисование должно выпоняться "методом слоя", т.е. слой "знает" что и как на нем должно изображаться.

Ну, это не для данного случая. На картинке - меню со всеми видами электросетей, на другой - результат рисования некоторых ВЛ. Всё рисование сводится к выполнению протокола:
Первая точка [Образец/Начало]<Выход>: Указали
Следующая точка [Пред/Образец/Начало]<Выход>: Указали
Следующая точка [Пред/Образец/Начало]<Выход>: Указали
Следующая точка [Пред/Образец/Начало]<Выход>:П - выбрали опцию Пред. Теперь будут запрашиваться точка от предыдщего столба

Следующая точка [Пред/Образец/Начало]<Выход>: Указали и пошли от предыдущего столба в другую сторону.
Следующая точка [Пред/Образец/Начало]<Выход>: Указали
Следующая точка [Пред/Образец/Начало]<Выход>:О - выбрали опцию Образец

Выбери отрезок или полилинию <Выход>: - указали на полилинию. По всей трассе этой полилинии разоставились стобы со стрелками, повернутыми в нужном направлении.
Следующая точка [Пред/Образец/Начало]<Выход>: Нажали Enter и вышли.

В следующий раз можем продолжить от последней точки, выбрав опцию Пред.

Как всё это сделать - написано в книге "САПР на базе AutoCAD - как это делается". Там и исходники есть.
Миниатюры
Нажмите на изображение для увеличения
Название: topo_vl.jpg
Просмотров: 165
Размер:	60.5 Кб
ID:	140462  Нажмите на изображение для увеличения
Название: topo_vl_2.jpg
Просмотров: 158
Размер:	32.0 Кб
ID:	140463  
ShaggyDoc вне форума  
 
Непрочитано 12.12.2014, 14:31
#23
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Ну вот как-то так
Код:
[Выделить все]
 (defun aiku_copyblock  (e00 e01 / x00 x01)
    (vl-load-com)
    (and (vl-catch-all-error-p
             (setq x01 (vl-catch-all-apply 'vla-open
                                           (list (setq x00 (vla-getinterfaceobject (vlax-get-acad-object)
                                                                                   (strcat "ObjectDBX.AxDbDocument."
                                                                                           (if (>= (setq x00 (substr (getvar 'acadver) 1 2)) "16")
                                                                                               x00
                                                                                               ""))))
                                                 e00))))
         (vl-catch-all-error-message x01))
    (and (vl-catch-all-error-p
             (setq x01 (vl-catch-all-apply 'vla-copyobjects
                                           (list x00
                                                 (vlax-safearray-fill (vlax-make-safearray vlax-vbobject '(0 . 0))
                                                                      (list (vla-item (vla-get-blocks x00) e01)))
                                                 (vla-get-blocks (vla-get-activedocument (vla-get-application (vlax-get-acad-object))))))))
         (vl-catch-all-error-message x01))
    (vlax-release-object x00))
(defun c:лэп  (/ x00 x01 x02 x03 x04 x05 x06 x07 la00 la01 xff)
    (mapcar 'set
            '(x00 x01 x02 x03)
            (if (eq "aiku" (car (setq x00 (read (getvar 'users1)))))
                (cdr x00)
                '("1000" "Застроенная" "Железобетонная" "Высоковольтная")))
    (setq xff (getvar 'users1))
    (mapcar (function
                (lambda (a00 a01 a02 / u00)
                    (initget a00)
                    (and (setq u00 (getkword (strcat "\nВведите " a02 " [" a00 "]: <" (eval a01) "> "))) (set a01 u00))))
            '("500 1000 2000 5000"
              "Застроенная Незастроенная"
              "Железобетонная Металлическая Деревянная"
              "Высоковольтная Низковольтная Связь")
            '(x00 x01 x02 x03)
            '("масштаб съемки" "тип территории" "тип опоры" "тип ЛЭП"))
    (setvar 'users1 (strcat "(\"aiku\"" x00 "\" \"" x01 "\" \"" x02 "\" \"" x03 "\")"))
    (setq x00  (/ (atoi x00) 1000.0)
          x00  (mapcar (function (lambda (a00) (cons a00 x00))) '(41 42 43))
          x01  (cons 62
                     (if (eq x01 "Застроенная")
                         8
                         250))
          x04  (cons 8
                     (cdr
                         (assoc (substr (caadr
                                            (mapcar (function
                                                        (lambda (a00 a01 / u00)
                                                            (or (tblobjname "BLOCK" (setq u00 (cdr (assoc (eval a00) a01))))
                                                                (aiku_copyblock (if (or x05 (setq x05 (findfile "Блоки.dwg")))
                                                                                    x05
                                                                                    (progn (while (not (setq x05 (getfiled "Файл блоков" "Блоки" "dwg" 0)))) x05))
                                                                                u00))
                                                            (set a00 (cons u00 (tblobjname "BLOCK" u00)))))
                                                    '(x02 x03)
                                                    '((("Железобетонная" . "B-STOLB-38") ("Металлическая" . "B-STOLB-34") ("Деревянная" . "B-STOLB-39"))
                                                      (("Высоковольтная" . "B-VL-V") ("Низковольтная" . "B-VL-N") ("Связь" . "B-VL-S")))))
                                        6)
                                '(("V" . "И1 ЛЭП ВЛ") ("N" . "И1 ЛЭП НЛ") ("S" . "И1 ЛЭП ЛС")))))
          la00 (function (lambda (a00) (entmake (append '((0 . "INSERT") (100 . "AcDbEntity") (62 . 0)) x00 a00)))))
    ((eval
         (setq la01 (function
                        (lambda (a00 a01 a02)
                            (and a01
                                 (progn (mapcar la00
                                                (list (list (cons 330 (cdr x02)) (cons 10 a00) (cons 8 "И1 ЛЭП") (cons 2 (car x02)) '(50 . 0.0))
                                                      (list (cons 330 (cdr x03)) (cons 10 a00) x04 (cons 2 (car x03)) (cons 50 (angle a00 a01)))
                                                      (list (cons 330 (cdr x03)) (cons 10 a01) x04 (cons 2 (car x03)) (cons 50 (angle a01 a00)))))
                                        (setq x07 (entmod (subst (cons 90 (1+ a02))
                                                                 (cons 90 a02)
                                                                 (append x07 (list (setq x06 (list 10 (car a01) (cadr a01)))))))))
                                 ((eval la01) a01 (getpoint "\nУкажите следующую точку или <завершить>: " a01) (1+ a02)))))))
        (setq x06 (getpoint "\nУкажите следующую точку: " (setq x05 (getpoint "\nУкажите начальную точку: "))))
        (progn (and x06
                    (setq x07 (entget
                                  (entmakex (append '((0 . "LWPOLYLINE") (100 . "AcDbEntity") (100 . "AcDbPolyline") (90 . 2))
                                                    (mapcar (function (lambda (a00) (list 10 (car a00) (cadr a00)))) (list x05 x06))
                                                    (list x01 x04))))))
               (mapcar la00
                       (list (list (cons 330 (cdr x02)) (cons 10 x05) (cons 8 "И1 ЛЭП") (cons 2 (car x02)) '(50 . 0.0))
                             (list (cons 330 (cdr x03)) (cons 10 x05) x04 (cons 2 (car x03)) (cons 50 (angle x05 x06)))
                             (list (cons 330 (cdr x03)) (cons 10 x06) x04 (cons 2 (car x03)) (cons 50 (angle x06 x05)))))
               (setq x05 nil)
               (getpoint "\nУкажите следующую точку или <завершить>: " x06))
        2)
    (entmake (append '((0 . "INSERT") (100 . "AcDbEntity") (50 . 0.0) (62 . 0))
                     x00
                     (list (cons 330 (cdr x02)) x06 (cons 8 "И1 ЛЭП") (cons 2 (car x02)))))
    (setvar 'users1 xff)
    (princ))
(princ "\nСтроит ЛЭП с опорами и проводами, вызывается ЛЭП")
(princ)
Смотри, как так ли Ести файл с блоками находится в путях поддержки, то файл с ними не запрашивает, ответы на запросы по типу ЛЭП сохраняются до конца закрытия чертежа.

Последний раз редактировалось ciril, 12.12.2014 в 15:06.
ciril вне форума  
 
Автор темы   Непрочитано 15.12.2014, 07:05
#24
Gotch


 
Регистрация: 07.02.2007
Сообщений: 200


я подправил вот тут твой код -
Код:
[Выделить все]
            '("500/1000/2000/5000"
              "Застроенная/Незастроенная"
              "Железобетонная/Металлическая/Деревянная"
              "Высоковольтная/Низковольтная/Связь")
что бы легко и удобно было мышкой выбирать

но выбирая мышкой выдает вот такое
Код:
[Выделить все]
Команда:
Строит ЛЭП с опорами и проводами, вызывается ЛЭП
Команда:
Команда: (c:лэп)

Введите масштаб съемки [500/1000/2000/5000]: <1000> 1000

Неправильное ключевое слово.

Введите масштаб съемки [500/1000/2000/5000]: <1000> 500

Введите тип территории [Застроенная/Незастроенная]: <Застроенная> Н

Неправильное ключевое слово.

Введите тип территории [Застроенная/Незастроенная]: <Застроенная> Н

Неправильное ключевое слово.

Введите тип территории [Застроенная/Незастроенная]: <Застроенная> Н

Неправильное ключевое слово.

Введите тип территории [Застроенная/Незастроенная]: <Застроенная> Н

Неправильное ключевое слово.

Введите тип территории [Застроенная/Незастроенная]: <Застроенная> З

Введите тип опоры [Железобетонная/Металлическая/Деревянная]: <Железобетонная> М

Неправильное ключевое слово.

Введите тип опоры [Железобетонная/Металлическая/Деревянная]: <Железобетонная> М

Неправильное ключевое слово.

Введите тип опоры [Железобетонная/Металлическая/Деревянная]: <Железобетонная> Д

Неправильное ключевое слово.

Введите тип опоры [Железобетонная/Металлическая/Деревянная]: <Железобетонная> Ж

Введите тип ЛЭП [Высоковольтная/Низковольтная/Связь]: <Высоковольтная> Н

Неправильное ключевое слово.

Введите тип ЛЭП [Высоковольтная/Низковольтная/Связь]: <Высоковольтная> С

Неправильное ключевое слово.

Введите тип ЛЭП [Высоковольтная/Низковольтная/Связь]: <Высоковольтная> В
; ошибка: неверный тип аргумента: stringp nil
значение по умолчанию оно не должно быть до двоеточия?

Последний раз редактировалось Gotch, 15.12.2014 в 07:25.
Gotch вне форума  
 
Непрочитано 15.12.2014, 08:54
1 | #25
ciril

САПР
 
Регистрация: 29.09.2011
СПб
Сообщений: 283


Вообще, значение по умолчанию можно пихать куда угодно, хочешь перенеси до двоеточия Под мышь не "/", а " / ", но лучше весь код копируй, я там еще поправил.
Код:
[Выделить все]
 (defun aiku_copyblock  (e00 e01 / x00 x01)
    (vl-load-com)
    (and (vl-catch-all-error-p
             (setq x01 (vl-catch-all-apply 'vla-open
                                           (list (setq x00 (vla-getinterfaceobject (vlax-get-acad-object)
                                                                                   (strcat "ObjectDBX.AxDbDocument."
                                                                                           (if (>= (setq x00 (substr (getvar 'acadver) 1 2)) "16")
                                                                                               x00
                                                                                               ""))))
                                                 e00))))
         (vl-catch-all-error-message x01))
    (and (vl-catch-all-error-p
             (setq x01 (vl-catch-all-apply 'vla-copyobjects
                                           (list x00
                                                 (vlax-safearray-fill (vlax-make-safearray vlax-vbobject '(0 . 0))
                                                                      (list (vla-item (vla-get-blocks x00) e01)))
                                                 (vla-get-blocks (vla-get-activedocument (vla-get-application (vlax-get-acad-object))))))))
         (vl-catch-all-error-message x01))
    (vlax-release-object x00))
(defun c:лэп  (/ x00 x01 x02 x03 x04 x05 x06 x07 la00 la01 xff)
    (mapcar 'set
            '(x00 x01 x02 x03)
            (if (and (listp (setq x00 (read (getvar 'users1)))) (eq "aiku" (car x00)))
                (cdr x00)
                '("1000" "Застроенная" "Железобетонная" "Высоковольтная")))
    (mapcar (function
                (lambda (a00 a01 a02 / u00)
                    (initget a00)
                    (and (setq u00 (getkword (strcat "\nВведите " a02 " [" a00 "]: <" (eval a01) "> "))) (set a01 u00))))
            '("500 / 1000 / 2000 / 5000"
              "Застроенная / Незастроенная"
              "Железобетонная / Металлическая / Деревянная"
              "Высоковольтная / Низковольтная / Связь")
            '(x00 x01 x02 x03)
            '("масштаб съемки" "тип территории" "тип опоры" "тип ЛЭП"))
    (setvar 'users1 (strcat "(\"aiku\" \"" x00 "\" \"" x01 "\" \"" x02 "\" \"" x03 "\")"))
    (setq x00  (/ (atoi x00) 1000.0)
          x00  (mapcar (function (lambda (a00) (cons a00 x00))) '(41 42 43))
          x01  (cons 62
                     (if (eq x01 "Застроенная")
                         8
                         250))
          x04  (cons 8
                     (cdr
                         (assoc (substr (caadr
                                            (mapcar (function
                                                        (lambda (a00 a01 / u00)
                                                            (or (tblobjname "BLOCK" (setq u00 (cdr (assoc (eval a00) a01))))
                                                                (aiku_copyblock (if (or x05 (setq x05 (findfile "Блоки.dwg")))
                                                                                    x05
                                                                                    (progn (while (not (setq x05 (getfiled "Файл блоков" "Блоки" "dwg" 0)))) x05))
                                                                                u00))
                                                            (set a00 (cons u00 (tblobjname "BLOCK" u00)))))
                                                    '(x02 x03)
                                                    '((("Железобетонная" . "B-STOLB-38") ("Металлическая" . "B-STOLB-34") ("Деревянная" . "B-STOLB-39"))
                                                      (("Высоковольтная" . "B-VL-V") ("Низковольтная" . "B-VL-N") ("Связь" . "B-VL-S")))))
                                        6)
                                '(("V" . "И1 ЛЭП ВЛ") ("N" . "И1 ЛЭП НЛ") ("S" . "И1 ЛЭП ЛС")))))
          la00 (function (lambda (a00) (entmake (append '((0 . "INSERT") (100 . "AcDbEntity") (62 . 0)) x00 a00)))))
    ((eval
         (setq la01 (function
                        (lambda (a00 a01 a02)
                            (and a01
                                 (progn (mapcar la00
                                                (list (list (cons 330 (cdr x02)) (cons 10 a00) (cons 8 "И1 ЛЭП") (cons 2 (car x02)) '(50 . 0.0))
                                                      (list (cons 330 (cdr x03)) (cons 10 a00) x04 (cons 2 (car x03)) (cons 50 (angle a00 a01)))
                                                      (list (cons 330 (cdr x03)) (cons 10 a01) x04 (cons 2 (car x03)) (cons 50 (angle a01 a00)))))
                                        (setq x07 (entmod (subst (cons 90 (1+ a02))
                                                                 (cons 90 a02)
                                                                 (append x07 (list (setq x06 (list 10 (car a01) (cadr a01)))))))))
                                 ((eval la01) a01 (getpoint "\nУкажите следующую точку или <завершить>: " a01) (1+ a02)))))))
        (setq x06 (getpoint "\nУкажите следующую точку: " (setq x05 (getpoint "\nУкажите начальную точку: "))))
        (progn (and x06
                    (setq x07 (entget
                                  (entmakex (append '((0 . "LWPOLYLINE") (100 . "AcDbEntity") (100 . "AcDbPolyline") (90 . 2))
                                                    (mapcar (function (lambda (a00) (list 10 (car a00) (cadr a00)))) (list x05 x06))
                                                    (list x01 x04))))))
               (mapcar la00
                       (list (list (cons 330 (cdr x02)) (cons 10 x05) (cons 8 "И1 ЛЭП") (cons 2 (car x02)) '(50 . 0.0))
                             (list (cons 330 (cdr x03)) (cons 10 x05) x04 (cons 2 (car x03)) (cons 50 (angle x05 x06)))
                             (list (cons 330 (cdr x03)) (cons 10 x06) x04 (cons 2 (car x03)) (cons 50 (angle x06 x05)))))
               (setq x05 nil)
               (getpoint "\nУкажите следующую точку или <завершить>: " x06))
        2)
    (entmake (append '((0 . "INSERT") (100 . "AcDbEntity") (50 . 0.0) (62 . 0))
                     x00
                     (list (cons 330 (cdr x02)) x06 (cons 8 "И1 ЛЭП") (cons 2 (car x02)))))
    (princ))
(princ "\nСтроит ЛЭП с опорами и проводами, вызывается ЛЭП")
(princ)
__________________
На работе было скучно:shout:
ciril вне форума  
 
Автор темы   Непрочитано 15.12.2014, 09:20
#26
Gotch


 
Регистрация: 07.02.2007
Сообщений: 200


отлично все работает
спасибо огромное
напиши в личке куда денежку отправить
Gotch вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP для построения ВЛ и ЛС в автокаде, возможно?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Доработать программу построения 2d из 3d vavII LISP 2 29.09.2010 20:56
LISP для построения поперечных сечений voverrr LISP 5 31.03.2010 14:01
Программа для построения фермы в автокаде dextron3 Прочее. Программное обеспечение 20 03.02.2010 15:36
скрытые возможности: автомат построения уклонов в АвтоКАДе kiber_tech AutoCAD 3 28.05.2009 15:14