Автокад lisp скрипт подсчет блоков на чертеже
C хранцузским напряжёнка. По первому атрибуту считает блки. Клик по блоку.
(defun c:bbya( / blc sp_bl imja filtr nameset nm_at_o
sp_at_o tx_at_o nm_bl nm_at sp_at tx_at
kol setlength i namrun spirun l_run )
(setq blc (car (entsel)))
(setq sp_bl (entget blc)) ; spisok
(setq imja (assoc 2 sp_bl)) ;p imja
(setq nm_at_o (entnext blc)); imya attributa
(setq sp_at_o (entget nm_at_o)) ; spisok attributa
(setq tx_at_o (cdr(assoc 1 sp_at_o))); atribut 1
(setq filtr (list '( 0 . "INS ERT") imja))
(setq nameset (ssget "X" filtr)) ;imya nabora
(setq setlength (sslength nameset)) ;dlina nabora
(setq kol 0)
(setq i -1)
(repeat setlength
(setq i (1+ i))
(setq nm_bl (ssname nameset i)) ;imya i
(setq nm_at (entnext nm_bl)); imya attributa
(setq sp_at (entget nm_at)) ; spisok attributa
(setq tx_at (cdr(assoc 1 sp_at))); atribut 1
(if(= tx_at_o tx_at)(se tq kol (1+ kol)))
)
(princ "\nKol-vo blokov s atributon ")
(princ tx_at_o)
(princ " = ")
(princ kol)
(princ)
)
Считает блоки по выбранному атрибуту:
(defun C:TT ()
(setq e1 (nentsel "\nSelect attribute to filter: "))
(setvar "cmdecho" 0)
(setq eget (entget (car e1)))
(setq EX_STR (cdr (assoc 1 EGET))) ;EXISTING TEXTSTRING
(setq ex_tag (cdr (assoc 2 EGET))) ;EXISTING tag
(SETQ PT1 (CADR E1))
(SETQ SS0 (SSGET PT1))
(SETQ BLKNAME (CDR (ASSOC 2 (ENTGET (SSNAME SS0 0)))))
(prompt (strcat "\n Block: " blkname " Attribute tag: " ex_tag " >: " ex_str))
;______________ SELECTING BLOCKS "BLKNAME" _________________
(SETQ LST1 (LIST '(0 . "INS ERT") (CONS 2 BLKNAME)) )
(SETQ SS1 (SSGET "_X" LST1))
; (SETQ SS1 (SSGET LST1))
; (IF (NULL SS1) (SETQ SS1 (SSGET "_X" LST1)) )
(setq SSM (SSADD))
(setq len1 (sslength ss1) n1 0 ssx (ssadd))
(WHILE ( < n1 len1) ;WHILE 1
(setq ename1 (ssname ss1 n1) eget1 (entget ename1) CTRL1 nil COUNTER 0 str1 "")
(SETQ en1 ename1)
;____ Find Tag Level
(while (and (null ctrl1) (/= (CDR (ASSOC 0 (ENTGET (setq en1 (ENTNEXT en1))))) "SEQEND"))
(setq tag1 (CDR (ASSOC 2 (ENTGET en1))))
(if (= tag1 ex_tag) (setq str1 (CDR (ASSOC 1 (ENTGET en1))) ctrl1 T))
(setq counter (1+ counter))
) ;end while2
;_____
;(if (= str1 ex_str) (princ str1))
(if (= (STRCASE str1) (STRCASE ex_str)) (setq ssx (ssadd ename1 ssx)))
(setq n1 (1+ n1))
) ; end WHILE1
(setq lenx (sslength ssx))
(command "_.select" ssx "")
(PROMPT (strcat "\n Match found : [" (itoa lenx) "]. Selected objects are stored in Previous Selection."))
(se tvar "cmdecho" 1)
(princ)
)
;_____________________________________________________________
(prompt "\n Start command with [TT] - by Raymond Rizkallah - April 06. ")
(PRINC)
Pltools отвечает на все вопросы которые у вас могут возникнуть при работе с полилиниями и 3d полилиниями. Конвертация, оптимизация, направление, и многое другое. В одной удобной, небольшой панели умещается функционал который по идее должен быть в Автокаде по умолчанию. История […]
Создание сложных поверхностей в Текле.
Автокад Lisp Скрипт — подсчет блоков на чертеже
Скрипт для подсчета количества блоков на чертеже. Имеет множество возможностей, в том числе позволяет в табличном виде вывести на чертеже информацию о количестве и типах блоков. Название скрипта Подсчет блоков на чертеже Версия скрипта 1.5 Ссылка для скачивания CountV1-5.lsp Оригинальная […]
Фишки AutoCAD — поля
В любой программе есть множество переменных. Они используются в самых разных местах и с разными целями. Любой объект на чертеже так же представляет собой набор переменных — координаты, цвет, слой, площадь, и т.д. Да и сам чертеж тоже обладает целым […]
Tekla мини тулбар, лечим — Floatie.exe
Текла мини тулбар: Довольно удобная и универсальная панель которая дает быстрый доступ к свойствам элементов — так называемый мини тулбар, запускается в виде отдельного процесса, одновременно с запуском Теклы. Сам файл с мини тулбаром находится здесь: C:\Program Files\Tekla\Structures\XX.X\nt\bin\applications\Tekla\AplicationStartup\Floatie.exe
openVPN клиенты не пингуют друг друга
автокад LISP в значение «по слою»
LISP выставляет выделенным объектам свойства: цвет, толщину линии и тип линии в значение «по слою». (defun c:setbylayer () (prompt «\nSelect objects:») (setq s1 (ssget)) (command «chprop» s1 «» «color» «bylayer» «LT» «bylayer» «lweight» «bylayer» «») (princ) )
Печать в Автокаде, приемы и настройка
Печать в автокаде имеет ряд нюансов и свои, подчас не очевидные, особенности. Не смотря на кажущуюся прозаичность этой задачи любой кто сталкивался с ней прекрасно понимает сколько сложностей и подводных камней таит в этот процесс. В этой статье я постараюсь […]
Автокад Lisp Скрипт — подсчет блоков на чертеже
Скрипт для подсчета количества блоков на чертеже. Имеет множество возможностей, в том числе позволяет в табличном виде вывести на чертеже информацию о количестве и типах блоков. Название скрипта Подсчет блоков на чертеже Версия скрипта 1.5 Ссылка для скачивания CountV1-5.lsp Оригинальная […]
Lisp, склеивание линий под блоком.
Если у вас есть блок лежащий на линии, при этом линия под ним «разрезана», то -эта комманда поможет удалить блок «склеив» линию под ним. Работает следующим образом: HEAL2 Выбрать блок для удаления. Собственно всё. (defun c:HEAL2(/ block ll ur […]
линии автокад
В этой статье рассмотрим типы и виды линий в автокаде. Их свойства, настройки, особенности работы с каждым типом. Какие линии в каком случае следует применять. Как сделать «жирные» и «тонкие» линии, а так же посчитать их длину, и вычислить площади. […]
Апостроф в autoLISP
Столкнулся с вопросом что же делает апостроф в записях на autoLISP, покопавшись в интернетах нашел это исчерпывающее объяснение. Ну и в меру своих сил постарался перевести его на русский язык: Введение Мой опыт показывает, что информации о назначении апострофа в […]
Овощехранилище с регулируемой газовой средой.
Предпроект: овощехранилище длительного хранения с регулируемой газовой средой на 2,4 тысячи тонн продукции. 12 изолированных ячеек по 200 тонн каждая, с рекуперацией тепла выделяемого продукцией во время хранения.
вообще есть в Tools->Attribute Axtraction
но можно и на Бейсике(VBA), который а Автокаде
Выводит все имена и количество блоков
Sub ShowBlockNumber()
Dim oBl As AcadBlock
For Each oBl In ThisDrawing.Blocks
Debug.Print oBl.Name, oBl.Count
Next
End Sub
конкретное имя блока->> надо форму, техстбокс для задания имени, его как параметр надо передать в подпрограмму - NameBlok
Sub blockNumber(ByVal NameBlok As String)
Dim i As Long, oBl As AcadBlock
For Each oBl In ThisDrawing.Blocks ' перебирает все блоки
If NameBlok = oBl.Name Then ' если имя совпало с заданным
Debug.Print oBl.Name, oBl.Count
End If
Next
End Sub
Вот простенькая функция. Тыкаете в блок и она выводит, его название и количество одноименных блоков на чертеже.
Можно в принципе немного доработать и сделать чтобы выдавала полный список блоков с их количеством.
Чуть подправил. Так лучше.
Есть щтатное средство. Quick select на правой кнопке мыши. Выбери Блок по параметру Name Пoлучишь количество вставок
> Но
времени это занимает намного больше. Тем более что при выборе опции Block Reference названия блоков к сожалению не появляются в выпадающем меню и их надо набирать вручную.
Зачем набивать имя блока? Вызови List и скопируй. Другое штатное средство, покороче, команда Blockreplace. Замени свой блок на любой из списка, прочитай результат и сделай Undo. А то можно подумать, что без Лиспа автокад беспомощный.
Как то видел программку, которая выводит количество всех вхождений каждого блокоа в чертеж, но не смог сразу найти. Написал свой вариант:
Если надо чтоб считала не только в модели - то '(410 . "Model") надо убрать.
Мдя.. Маленькое ограничение: имя блока НЕ должно содержать Space
А я, тут, застрял между Vova и Fantomas. Неудобно, как-то.
В Acad`е довольно давно, живет Filter, там есть и Выбор блоков из списка(по Fantomas`у), и жизнь без Лисба (по Vova).
Довольно крутой, продвинутый инструмент.
А QuickSelect, мне тоже чего-то не запал, хотя иногда тоже супер. В общем, смотря какая задача.
> Jura
Filter безусловно хорош, но опять же надо настраивать, а для постоянных задач, типа подсчета количества розеток, выключателей или еще какой ерунды на поэтажном плане это нормальный вариант.
Я сам расширенные данные вношу, и получаю практически сразу почти полную смету по оборудованию и спецификацию. Но когда то такой ерундой пользовался, уже забыл где лежит, пришлось переписать.
> VK
Есть и такая штука, правда там столько "мусора" вылезает, что заколебешься оттуда "полезные" блоки выскребать. Если чертежи относительно "чистые", типа машиностроительных, то еще ничего. А если архтектурные, которые перед этим прошли через 10 субподрядчиков, то с блоками "каша", и Purge не поможет чтобы разобраться. Так что по мне лучше в "свое" тыкнуть и чтобы посчитало.
Привет всем! Где то год назад качнул с этой ветки лисп для посчета блоков на чертеже с учетом слоя. Назывался вроде blxc. Сейчас ищу найти немогу. Помогите если кто знает где! Или завалялся у кого. Этот лисп для меня очень хорош, после его запуска выделяешь любой блок который тебе нужно посчитать, затем выделяешь рамкой область чертежа где надо считать и все! Посчет ведеться всех блоков которые относятся к слою выбранного блока в пределах указанной области. Очень удобный.
Только почему раздел "Готовые программы", непонятно.
P.S. Есть 2 замечательные команды: bcount и _qselect - в 99% случаев их достаточно.
> Кулик Алексей aka kpblc
Век живи . bcount - не знал я этой команды.
Она из ЕТ, и, кстати, точно так же, как и твой код, не учитывает динамических блоков. Но в дин.блоках не все так просто, как хотелось бы. На abok'e я долго пытался что-то сделать :( Результат - практически нуль.
Только надобы либо перенести тему в LISP, либо опубликовать готовую программу
Господа, большое спасибо, что отозвались на призыв о помощи. Да моя вина, что разместил не в том разделе. Простите ради бога. Теперь о программах. Это не совсем то, что мне нужно. Работа программы представленной LeonidSN, такая же, как и у Кулик Алексей aka kpblc. При старте проги предлагается выбрать объект (блок) или нужную область с блоками. Затем производиться подсчет. Вот именно в этом и есть неудобность этих программ. В той программе, которую я скачал здесь же на этом форуме, было так: при старте проги предлагалось выбрать объект, я выбираю ОДИН интересующий меня блок (например, светильник), следующая «просьба» программы это выбрать область, где искать. Итого я получаю результат количества блоков светильников расположенных на слое первого выбранного блока (в данном случае слой СВЕТИЛЬНИК) и в итого не попадают ненужные мне блоки с выключателями, распред коробками и т.п. Ваши программы тоже хороши и решить вопрос с помощью их тоже можно, но та прога была УДОБНОЙ. Именно поэтому я ее ищу. Кстати при выборе первого блока, их может быть несколько, соответственно слоев тоже. Ну, удобная и все тут!
> alex
было так: при старте проги предлагалось выбрать объект, я выбираю ОДИН интересующий меня блок (например, светильник), следующая «просьба» программы это выбрать область, где искать. Итого я получаю результат количества блоков светильников расположенных на слое первого выбранного блока (в данном случае слой СВЕТИЛЬНИК) и в итого не попадают ненужные мне блоки с выключателями, распред коробками и т.п
alex, но мой скромный код работает именно так. Не пойму в чем прикол с "той прогой"?
А я на этом форуме скачивал программу SelSlim - выбор по образцу. Работает так как хотелось бы alex. Только она выделяет блоки (и не блоки) по образцу, надо каждый раз в свойствах смотреть сколько же блоков выделено. Зато там есть настройки - учитывать ли слой, цвет, масштаб и т.т.
LeonidSN, Ваша программа работает иначе. Возможно, я непонятно объяснил, извините. Итак, работа Вашей программы: подгружаем программу, в командной строке вводим blockcount. Предлагается выбрать объект, я «тыкаю» на светильнике, затем Enter. Все! Работа программы завершена, итог найден один объект с таким-то именем количество 1. Такой вариант не устраивает, программа должна была спросить указать (выделить область) где искать блоки по слою первого указанного. Другой вариант работы Вашей программы это после ее запуска сразу выбрать область с блоками, нажимаем Enter, получаем список всех блоков в указанной области, нужных и не нужных. Такой результат не устраивает тоже. Искать блоки нужно по слою, а не по имени, т.к. светильники могут быть разные на одном этаже (например, освещение в кабинете и в санузле выполнено разными светильниками, читай блоками с разными именами).
Еще раз про удобность той программы (для меня) то, что выбор происходит по слою, перед подсчетом видно выделенные объекты, соответственно видны ошибки если какие то светильники (блоки) лежат в другом слое и под выделение не попали.
Остальные ссылки на программы предоставленные Кулик Алексей aka kpblc постараюсь в течении дня разобрать, времени мало, работа!
Программы А.Ривилиса.
В этой заметке собраны ссылки на приложения А.Ривилиса. Всем кто работает с Автокадом стоит ознакомиться с его программными расширениями, они просты в установке, и спасают огромное количество времени. Оглавление: Приложения А.Ривилиса Как загрузить приложение в Автокад Приложения А.Ривилиса: GeomProps […]
Очередной проморолик посвященный возможностям программного комплекса Tekla Structures. В этот раз внимание уделено инженерным сооружениям без которых невозможно представить себе современный мир — металлические башни и мачты. Нашедшие самое широкое применение в телекоммуникационной и энергетической отраслях. Сотовая связь, высоковольтные […]
Макросы в Текле, Tekla Structure Macros how to
Tekla Structures позволяет записывать действия пользователя в макрос, который потом можно «проиграть», что позволяет ускорить рабочий процесс на пару другую операций. С учетом любви разработчиков к огромному количеству вложенных меню, с параметрами и постоянным «применением», макросы реально могут спасти кучу […]
Торговый центр Пуувилла
Очередной победитель Tekla BIM Awards. Торговый центр в Финляндии. Шикарная работа, и отличный видео рассказ полноценно раскрывающий возможности современных программных комплексов 3d моделирования и проектирования.
Читайте также: