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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > Извлечение атрибутов блока

Извлечение атрибутов блока

Ответ
Поиск в этой теме
Непрочитано 27.04.2020, 11:02 #1
Извлечение атрибутов блока
Leopard_
 
Нефтепереработка
 
Украина, Киев.
Регистрация: 21.01.2010
Сообщений: 364

Вводная: Есть чертеж с множеством различных динамических блоков.
Необходимо: Прямо на чертеже выполнить выноски с некоторыми параметрами блоков.
Например:
1) имя блока
2) имя блока / параметр1,параметр2
3) параметр1 х параметр2
Можно ли реализовать без лиспов?
__________________
У фантазии нет границ. Это у ограниченных нету фантазии.
Просмотров: 3434
 
Непрочитано 29.04.2020, 17:08
| 1 #2
BYNC

Инженер-конструктор
 
Регистрация: 08.09.2015
Москва
Сообщений: 52


Цитата:
Сообщение от Leopard_ Посмотреть сообщение
Можно ли реализовать без лиспов?
Может быть использовать ПОЛЕ?
BYNC вне форума  
 
Автор темы   Непрочитано 29.04.2020, 19:01
#3
Leopard_

Нефтепереработка
 
Регистрация: 21.01.2010
Украина, Киев.
Сообщений: 364


У меня не хватило фантазии - как полем запросить свойства произвольного существующего блока.

P.S. чисто интуитивно я подозреваю что мультивыноска помнит к кому ее привязали, но как у нее это узнать - не знаю.
__________________
У фантазии нет границ. Это у ограниченных нету фантазии.

Последний раз редактировалось Leopard_, 29.04.2020 в 21:04.
Leopard_ вне форума  
 
Непрочитано 29.04.2020, 22:11
#4
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,049


Цитата:
Сообщение от Leopard_ Посмотреть сообщение
чисто интуитивно я подозреваю что мультивыноска помнит к кому ее привязали, но как у нее это узнать - не знаю
если она чего то "помнит" - то это или поля, или программное решение) да уже и поднимались подобные темы тут на форуме за последние годы
Сергей812 вне форума  
 
Непрочитано 30.04.2020, 10:51
#5
Melx


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


Leopard_, заголовок темы не сочетается с вашим запросом. Извлечь атрибуты одно, обычно для обработки вне акада, а сделать выноски - уже совершенно другая задача.

Выносоки можете начертить в редакторе блоков вручную, в качестве текста используя поля:
имя блока - ИменованныйОбъект->имя блока (хотя конкретно в данном случае можно и без поля обойтись)
параметр1 - местазополнительблока->парметр1
параметр1*параметр2 соответственно - формула, в которой множитель - это код ссылки, отображаемый при выборе соответствующего параметра (местазополнительблока->парметр1)

Последний раз редактировалось Melx, 30.04.2020 в 12:40.
Melx вне форума  
 
Автор темы   Непрочитано 30.04.2020, 15:08
#6
Leopard_

Нефтепереработка
 
Регистрация: 21.01.2010
Украина, Киев.
Сообщений: 364


Итого у меня получилось 2 уровня непонимания:
1) выноску рисовать в пределах блока из которого надо получить информацию. В процессе работы выноска с ручкой перемещения ОЧЕНЬ мешает и захламляет чертеж, а видимостей у блоков уже штук по 6.
2) отдельный блок выноски в котором указывать конкретный блок из которого надо тянуть. Проще выйдет посмотреть и переписать...

Если я совсем не то непонимаю то - можно мне как чайнику?
Для понимания задам абстрактную ситуацию: блок кирпича сверху, сбоку, с торца. Есть кирпичи силикатный, керамический. Керамический полнотелый и пустотелый, гладкий и фигурный. Из 2 -3 типов собрали кладку и надо сделать выноски типа кирпича и вытянуть за границу кладки. (повторюсь - ситуация абстрактна)
__________________
У фантазии нет границ. Это у ограниченных нету фантазии.
Leopard_ вне форума  
 
Непрочитано 30.04.2020, 16:05
#7
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,049


Цитата:
Сообщение от Leopard_ Посмотреть сообщение
Для понимания задам абстрактную ситуацию: блок кирпича сверху, сбоку, с торца. Есть кирпичи силикатный, керамический. Керамический полнотелый и пустотелый, гладкий и фигурный. Из 2 -3 типов собрали кладку и надо сделать выноски типа кирпича и вытянуть за границу кладки. (повторюсь - ситуация абстрактна)
если накладывать ограничение
Цитата:
Сообщение от Leopard_ Посмотреть сообщение
Можно ли реализовать без лиспов?
т.е. только встроенными средствами акада - ну в любом случае это будет некий костыль разной степени кривизны....
Сергей812 вне форума  
 
Непрочитано 30.04.2020, 16:07
#8
Melx


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


Цитата:
Сообщение от Leopard_ Посмотреть сообщение
Для понимания задам абстрактную ситуацию
Обсуждать абстрактную ситуацию не вижу смысла. Например в вашей абстрактной ситуации, я бы вообще легенду с УГО приложил.
Melx вне форума  
 
Автор темы   Непрочитано 30.04.2020, 17:52
#9
Leopard_

Нефтепереработка
 
Регистрация: 21.01.2010
Украина, Киев.
Сообщений: 364


УГО у меня уже внутри блока. только одно и тоже обозначение имеет дохренища отличительных свойств.
Одно тоже уго листа бумаги может быть бумагой, картоном, блокнотом, чистым, в линейку, в клеточку и даже недавно встретил "в точечку". А еще разноцветными.
__________________
У фантазии нет границ. Это у ограниченных нету фантазии.
Leopard_ вне форума  
 
Непрочитано 30.04.2020, 19:39
#10
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


А может, подойдет динамический блок кирпича с воплощенным внутри него функционалом выноски?
В качестве примера: я взял блок выноски отсюда, переименовал ее в "Кирпич", добавил контур кирпича, видимость (с выноской/без выноски) и несколько скрытых атрибутов. В нескрытых атрибутах самой "выноски" создал поля со ссылкой на имя блока и эти атрибуты. Надеюсь, правильно понял абстрактную задачу. В примере возможны всякие глюки и недоразумения, т.к. особо я его не тестировал.
Вложения
Тип файла: dwg
DWG 2010
Пример.dwg (102.8 Кб, 18 просмотров)
skkkk вне форума  
 
Автор темы   Непрочитано 30.04.2020, 20:02
#11
Leopard_

Нефтепереработка
 
Регистрация: 21.01.2010
Украина, Киев.
Сообщений: 364


В вашем примере не хватает видимости сторца, видимости в плане, видимости для фигурного кирпича, видимости для кирпича с дырочками.
Повторюсь: у меня до 5-6 видимостей (есть даже 8).
Таблица свойств на 3-4 ступени. Иногда видимости вшиты в таблицу свойств, иногда есть только 2 таблицы выбора, иногда видимости завязаны перекрестно с выбором.
(Первое решение переходов для трубопроводов с учетом эксцентрических и концентрических имеет 28 видимостей, а тройников только 12)
Всё еще упрощаем работу с блоками...
Вложения
Тип файла: dwg
DWG 2010
Чертеж1.dwg (99.7 Кб, 20 просмотров)
__________________
У фантазии нет границ. Это у ограниченных нету фантазии.

Последний раз редактировалось Leopard_, 30.04.2020 в 20:12.
Leopard_ вне форума  
 
Непрочитано 30.04.2020, 23:41
#12
Melx


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


Leopard_, в вашем блоке можно обойтись вообще без видимомстей. Разве что скрыть отражение без видимости не получится, но сама операция отражения лишняя, т.к. ничем не отличается от таковой в модели. Но на вкус и цвет все фломастеры разные.
Ответ уже дан:
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
т.е. только встроенными средствами акада - ну в любом случае это будет некий костыль разной степени кривизны....
Подбирать вам костыли - гадать на кофейной гуще.
Стандартные инструменты вот. Ссылка на параметры внутри блока - поле местозаполнительблока, Ссылка на параметр конкретного вхождения в модели - поле объект. Вырезайте костыль под ваши нужды.
Или используйте лисп для создания полноценного протеза
Melx вне форума  
 
Автор темы   Непрочитано 02.05.2020, 15:27
#13
Leopard_

Нефтепереработка
 
Регистрация: 21.01.2010
Украина, Киев.
Сообщений: 364


Цитата:
Сообщение от Melx Посмотреть сообщение
Leopard_, в вашем блоке можно обойтись вообще без видимомстей. Разве что скрыть отражение без видимости не получится, но сама операция отражения лишняя, т.к. ничем не отличается от таковой в модели. Но на вкус и цвет все фломастеры разные.
Блок был сделан в 8 (!) акаде: 14х 3(4) варианта = 42 строки выбора. концентрический и эксцентрический = 84 строки выбора. Подъем потока или опуск КАКБЫ имеет таки значение и поэтому отражение принципиально!!! На момент создания это был самый простой из возможных вариантов создания блока.

Итого приходим: самый быстрый в исполнении костыль для всего отдела - глаза и клавиатура.
__________________
У фантазии нет границ. Это у ограниченных нету фантазии.
Leopard_ вне форума  
 
Непрочитано 02.05.2020, 18:02
#14
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


В общем, не знаю, почему нужно без лиспов, может, Автокад - LT?
Но я все равно взял да написал лисп. Использовал готовые функции по извлечению значений дин. параметров (от LeeMac) и для отрисовки мультивыноски (от VVA).
Десять минут - и код уже тут. Было бы еще быстрее, но там внутри блока всплыли всякие бяки, вроде того, что где-то лукапы прописаны с дефисом, где-то - без. Наверняка, выявил не все. Всяких проверок и обработок ошибок нет.
Код:
[Выделить все]
 (defun C:TEST ( / ent vla diam param1 str)
	(setq ent (car (entsel "\nВыберите блок:")))
	(setq vla (vlax-ename->vla-object ent))
	(setq diam (vl-string-subst  "" "Ду " (LM:getdynpropvalue vla "Lookup-К")))
	(if (= diam "Custom") (setq diam (vl-string-subst  "" "Ду " (LM:getdynpropvalue vla "Lookup-Э"))))
	(or 
		(setq param1 (LM:getdynpropvalue vla (strcat "КЭ-" diam))) ;;; концентрический/эксцентрический
		(setq param1 (LM:getdynpropvalue vla (strcat "КЭ" diam)))
	)
	(setq str
		(strcat
			(vla-get-EffectiveName vla) ;;; имя блока
			" " ;;; пробел
			param1
			"\n" ;;; переход на новую строку
			(LM:getdynpropvalue vla (strcat diam "х")) ;;; диаметры
		)
	)
	(if str
		(draw-mleader
			(getpoint "\nУкажите начальную точку выноски:") ;_ начальная точка
			pause ;_запрос второй точкм
			(list str)
			5.5 ;_Вытота текста
			0.87 ;_Значение коэффициента см
		;;; тему http://forum.dwg.ru/showpost.php?p=656758&postcount=51
			0.2 ;_отступ 1-го параграфа (форматтирование \\pxa)
		)
	)
)


;; Get Dynamic Block Property Value  -  Lee Mac
;; Returns the value of a Dynamic Block property (if present)
;; blk - [vla] VLA Dynamic Block Reference object
;; prp - [str] Dynamic Block property name (case-insensitive)

(defun LM:getdynpropvalue ( blk prp )
    (setq prp (strcase prp))
    (vl-some '(lambda ( x ) (if (= prp (strcase (vla-get-propertyname x))) (vlax-get x 'value)))
        (vlax-invoke blk 'getdynamicblockproperties)
    )
)



		 
		 
		 
		 
		 
(defun draw-mleader (pt1 pt2 strlist Htxt koeff abz / dic mlst i)
  ;;; pt1 - начальная точка UCS
  ;;; pt2 - конечная точка UCS
  ;;; strlist - список строк
  ;;; Htxt - высота текста
  ;;; koeff - коэфф форматирования pxe или nil
  ;;; abz - коэфф форматирования абзаца \\pa или Nil
  ;;;(draw-mleader (setq pt1(getpoint))(getpoint pt1)(list "Пример" "Минскинжпроект" "Третья строка") 1.5 0.9 nil)
 ;;; Стиль мультивыноски текущий
  (setq i 0)
  (command
    "_mleader"
    "_h"
    "_none"
    pt1
    "_none"
    pt2
  (strcat (if koeff (strcat "\\px"
                              (if abz (strcat "a"(VL-STRING-RIGHT-TRIM "0" (MIP-CONV-TO-STR abz))",") "")
                              "se" (VL-STRING-RIGHT-TRIM "0" (MIP-CONV-TO-STR koeff))";") "")   ;;;"\\pxse0.87;"
;;;            "\\pa0.15;" (car strlist) "\\pa0;"
              (car strlist)
    )
    )
  (while (> (getvar "CMDACTIVE") 0) (command ""))
  (setq dic (vlax-ename->vla-object (entlast)))
  (vla-put-TextString dic
    (strcat (if koeff (strcat "\\px"
                              (if abz (strcat "a"(VL-STRING-RIGHT-TRIM "0" (MIP-CONV-TO-STR abz))",") "")
                              "se" (VL-STRING-RIGHT-TRIM "0" (MIP-CONV-TO-STR koeff))";") "")   ;;;"\\pxse0.87;"
;;;            "\\pa0.15;" (car strlist) "\\pa0;"
              (car strlist)
;;;              (if abz "\\pa0;" "")
            (apply 'strcat
                   (mapcar '(lambda (x) (strcat "\\P" (if (= (setq i (1+ i)) 1)(if abz "\\pa0;" "")   "")  x)) (cdr strlist))
            ) ;_ end of apply
    ) ;_ end of strcat
  )
    (vla-put-TextHeight dic Htxt)
    dic
  )
  (defun mip-conv-to-str (dat)
      (cond ((= (type dat) 'INT) (setq dat (itoa dat)))
            ((= (type dat) 'REAL) (setq dat (rtos dat 2 12)))
            ((null dat) (setq dat ""))
            (t (setq dat (vl-princ-to-string dat)))
      ) ;_ end of cond
    ) ;_ end of defun



----- добавлено через ~14 мин. -----
Ну а если все же лисп - не вариант...
Цитата:
Сообщение от skkkk Посмотреть сообщение
А может, подойдет динамический блок кирпича с воплощенным внутри него функционалом выноски?
Цитата:
Сообщение от Leopard_ Посмотреть сообщение
В вашем примере не хватает видимости сторца, видимости в плане, видимости для фигурного кирпича, видимости для кирпича с дырочками.
Повторюсь: у меня до 5-6 видимостей (есть даже 8).
Не слишком разбирался в кишках блока, но, вроде, параметр видимости там только один, а остальное - лукапы, не?
Есть программа от Supermax'а, которая умеет добавлять дополнительные параметры видимости к блоку. Тогда на второй параметр видимости можно повесить вкл/выкл выноски. Программка работает только на Автокадах до 2011-го. Я лично пробовал делать несколько блоков - полет нормальный. Можно наделать блоков в ней, а после использовать и на LT. Разобраться в ней не так ух и сложно, но муторно эти блоки делать. Не люблю. Лично мне гораздо проще бывает набросать код, чем возиться с ними (но пару раз было реально надо).
Миниатюры
Нажмите на изображение для увеличения
Название: 2020-05-02 at 18-00-57.gif
Просмотров: 292
Размер:	365.1 Кб
ID:	225740  
skkkk вне форума  
 
Непрочитано 06.05.2020, 17:09
#15
Melx


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


Цитата:
Сообщение от Leopard_ Посмотреть сообщение
Подъем потока или опуск КАКБЫ имеет таки значение и поэтому отражение принципиально!!!
Как вы обеспечиваете использование коллегами/пользователями только внутриблочных операций отражения?
Какие последствия при использование отражения средствами акада из модели?

Цитата:
Сообщение от Leopard_ Посмотреть сообщение
14х 3(4) варианта = 42 строки выбора. концентрический и эксцентрический = 84 строки выбора.
На мой взгляд для фитингов из примера удобнее использовать таблицу выбора свойств. Во вложении пример для 6x3(2) вариаций схожего по принципу выбора блока.

Цитата:
Сообщение от skkkk Посмотреть сообщение
Программка работает только на Автокадах до 2011-го.
В теме множественных видимостей расписано решение для более поздних версий.
Вложения
Тип файла: dwg
DWG 2010
Чертеж2.dwg (79.1 Кб, 10 просмотров)
Melx вне форума  
 
Автор темы   Непрочитано 06.05.2020, 21:44
1 | 1 #16
Leopard_

Нефтепереработка
 
Регистрация: 21.01.2010
Украина, Киев.
Сообщений: 364


Цитата:
Сообщение от Melx Посмотреть сообщение
Как вы обеспечиваете использование коллегами/пользователями только внутриблочных операций отражения?
На этапе блоков с отображением текста всех отучил зеркалить что и как нипопадя! А вот брать оригиналиные блоки с последними правками еще не всех научил.
Цитата:
Сообщение от Melx Посмотреть сообщение
На мой взгляд для фитингов из примера удобнее использовать таблицу выбора свойств
Удобнее использовать таблицу в той версии акада в которой она появилась как таковая! В 2008 акаде она отсутствовала от слова ВООБЩЕ.
__________________
У фантазии нет границ. Это у ограниченных нету фантазии.
Leopard_ вне форума  
 
Непрочитано 07.05.2020, 01:03
#17
skkkk


 
Регистрация: 20.03.2008
Сообщений: 2,653


Цитата:
Сообщение от Melx Посмотреть сообщение
В теме множественных видимостей расписано решение для более поздних версий.
Я неверно выразился. Насколько помню, речь была о том, что именно сделать блоки можно было на Автокаде до 2011-го (может, что-то исправили - пропустил), но при этом блоки работали и в более новых версиях.
skkkk вне форума  
 
Автор темы   Непрочитано 07.05.2020, 15:03
#18
Leopard_

Нефтепереработка
 
Регистрация: 21.01.2010
Украина, Киев.
Сообщений: 364


Делал я с несколькими видимостями. Потом слетел АКАД и для правки блоков с этими видимостями надо было искать именно ТОТ фикс, потому что другие не видели.
__________________
У фантазии нет границ. Это у ограниченных нету фантазии.
Leopard_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > Извлечение атрибутов блока

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нарушается видимость атрибутов при вставке вхождения блока в чертеж Joann88 AutoCAD 7 28.03.2021 14:52
Извлечение атрибутов блока в определенном порядке Raylond Программирование 66 22.09.2019 21:44
Извлечение значений атрибутов динамического блока и создание таблицы Autocad VBA Abai Программирование 17 17.07.2017 09:00
Проблема извлечения атрибутов одного блока из набора блоков Titli-pytli LISP 5 26.05.2017 14:46
Извлечение атрибутов блока и вставка атрибутов в формулу andery AutoCAD 38 15.06.2009 02:39