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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Создание дополнительных параметров Visibility Set в динамических блоках.

Создание дополнительных параметров Visibility Set в динамических блоках.

Ответ
Поиск в этой теме
Непрочитано 13.09.2008, 13:35 5 |
Создание дополнительных параметров Visibility Set в динамических блоках.
Supermax
 
Руководитель фирмы
 
Москва
Регистрация: 28.03.2007
Сообщений: 1,831

В этой теме рассматривается вопрос программного "наращивания" возможностей динамических блоков.
Программистам:
Разбор словарей дин.блока
Получение параметра видимости и его разбор

Примеры блоков с несколькими параметами видимости (Visibility Set): "неправильные" и "правильные".
В посте #212 - пример связи Lookup-ов друг с другом.
Макрос по перемещению свойств в списке свойств блока меню Properties
02.02.2010 Откорректирована для работы в 2010 каде



Пользователям:
Готовые макросы:
Все функции по вставке и обработке дополнительных Visibility Set
Обновление 17.07.2009г. Исправлена ошибка в element-sel-current-insert и добавлено включение видимости всем элементам с откатом назад, после выбора нужных элементов
Обновление 06.10.2009. Исправил функцию eval_graf_output, из-за которой не работала visibility-up.
Обновление 02.02.2010. !!! Откорректирована в связи с появлением нового динамического элемента в 2010 каде
(properties_add_all_visibility) - установка видимости выбранных динамических свойств и ручек во всех представлениях всех Visibility Set-ов.
Добавлен вывод значения текущего Visibility Set-a в статусную строку и спрятаны не нужные глобальные переменные
(element-all-current-del) - удаление из текущего Visibility Set всех элементов оставляя свойства и представления.
(element-sel-current-del) - очищает Visibility Set от указанных элементов без необходимости выключать им видимость в других представлениях текущего Visibility Set-а.
(element-sel-current-insert) - внедрение в общий список текущего Visibility Set-a выбранных элементов.
(Visibility_add) - Добавление нового Visibility Set-a
(visibility-up) - Делает указанный пользователем Visibility Set текущим
(eddedd) - Включает ручки всем элементам текущего Visibility Set-a
(Visibility_clear) - Очищает указанный Visibility Set от всех элементов, параметров и представлений. Принадлежащие ему элементы становятся свободными
Инструкция по применению дополнительных Visibility Set

Функции управления видимостью объектов (вкл\выкл)
Вебмакрос по управлению видимостью объектов (только для тех, у кого Internet Explorer 7.0)
Функция по выключению видимости отдельных элементов блока из пространства модели
#66 и #67 - восстановление видимости отдельных элементов блока.
Excel->Lookup
Lookup->Excel
Lookup->Lookup

Самые последние версии, для работы в любом пространстве.
Программа по массовой установке и снятию видимости элементов в представлениях текущего Visibility Set-a Обновление 8.10.2008г. Устранена ошибка загрузки DCL панели.
Программа по устаноке на параметр Lookup-a сколь угодного количества активаторов
Пример использования связанных активаторов Lookup-a через один параметр Lookup-a. 3D-динамический блок-игрушка Гидроцилиндр телескопический 4-х секционный. Файл обновлен 8.10.2008г.

Все макросы для кнопок и иконки к ним

24.01.2009.
Исправлена ошибка в функции (properties_add_all_visibility)

Исходные тексты к функциям:
http://www.private.peterlink.ru/pole...9/tainypod.htm

Последний раз редактировалось Supermax, 02.02.2010 в 20:26.
Просмотров: 361649
 
Непрочитано 25.11.2016, 15:06
#621
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,702
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от Alexander250505 Посмотреть сообщение
Окончательный вариант моей рамки со штампами.
Добавил 4 и 5 формы по ГОСТ 21.1101. Устранил массу косяков и в целом упростил внутреннее устройство блока (весить стал намного меньше).
Может кому пригодится
Alexander250505, жму пять! Вот именно так и надо делать "дополнительные параметры видимости" в динамическом блоке. Удивляет скудность фантазии тех, кто пытается это сделать программным способом, оперируя с нестабильными недокументированными возможностями. 30 с лишним страниц обсуждения различных проблем, автор уже сам давно это дело забросил, и все равно кто-то пытается это использовать. Видать, у людей куча ненужного свободного времени
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 19.12.2016, 12:15
#622
Н.Н.Полещук

Autodesk Authorized Author
 
Регистрация: 16.05.2006
Санкт-Петербург
Сообщений: 14


К несчастью, автор темы недавно ушел из жизни:
http://isicad.ru/ru/articles.php?article_num=18968
Пусть земля ему будет пухом.
Н.Н.Полещук вне форума  
 
Непрочитано 19.12.2016, 12:17
#623
AndruxaZ


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


Соболезную родным
AndruxaZ вне форума  
 
Непрочитано 19.12.2016, 13:58
#624
tujn08


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


Не успели поработать вместе
Цитата:
Сообщение от Н.Н.Полещук Посмотреть сообщение
К несчастью, автор темы недавно ушел из жизни:
tujn08 вне форума  
 
Непрочитано 22.01.2017, 02:00
#625
Ignor17


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


В 2016 И 2017 акадах постоянно выдаёт fatal error Может кто знает решение проблемы!?
Ignor17 вне форума  
 
Непрочитано 02.02.2017, 13:52
#626
Stivan


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


Доброго времени суток!
Начал изучение данной темы по созданию расширенных динамических блоков.
В общем и целом все уже давно разжевано и обкатано, поэтому в основном я разобрался.
Уважаемые форумчане, прошу помочь разобраться в некоторых нюансах.

Выкладываю свою модель необходимого мне блока.
Создан динамический блок стандартными средствами автокад 2010 с тремя видимостями: вид 1, вид 2, вид 3, которые переключают три разноцветных прямоугольника.
В этом блоке ещё создан дополнительный параметр Visibility Set с видимостями: VS 1, VS 2, которые выбирают фигуры: круг или квадрат.
Все работает и переключается как надо.
Вопрос: как сделать, чтобы дополнительные параметры Visibility Set отключались (были невидимы) при выборе вида 3, а при выборе вида 1 и вида 2 оставались?

С уважением, Иван.
Вложения
Тип файла: dwg
DWG 2010
Чертеж1_V2010.dwg (50.9 Кб, 56 просмотров)
Stivan вне форума  
 
Непрочитано 04.07.2017, 21:54
#627
skkkk


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


Подскажите, пожалуйста, если кто знает, как получить список объектов текущего состояния видимости в динамическом блоке? Есть динамический блок, в нем присутствуют статические блоки в разных состояниях видимости. Нужно подсчитать все дочерние блоки, которые видны на экране.
Взрывать или преобразовывать его (копию) в статический - это вариант, конечно, но как-то уж слишком он брутфорсен, планируется обработка больших количеств. Ковырял через ActiveX, но там явно не добраться до такой информации. Остается надежда на dfx-коды, но как-то уж для меня этот метод не слишком дружелюбен, и я обращаюсь к нему редко. Перед тем, как лезть в дебри и писать код, решил узнать, может, кто-то уже решал такую задачу или просто натолкнет на мысль или любую вспомогательную информацию.
skkkk вне форума  
 
Непрочитано 05.07.2017, 01:18
#628
Сергей812


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


а просто посчитать количество используемых вариантов видимости, а потом преобразовать в количество блоков?
Сергей812 вне форума  
 
Непрочитано 05.07.2017, 01:26
#629
skkkk


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


В смысле, посчитать общее количество всех одинаковых блоков и разделить на количество вариантов параметра видимости?
Ну просто в одном варианте видимости может быть два одинаковых блока, а в другом - три. Делитель везде разный будет. Плюс и количество параметров видимости может быть не равным одному (спасибо Supermax'у). Отсюда и вопрос.
skkkk вне форума  
 
Непрочитано 05.07.2017, 01:48
| 1 #630
Сергей812


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


Точнее не видимости. Если можно на лиспе достучаться до содержимого промежуточного анонимного блока *U - то в этих блоках как раз будут видимые в данном состоянии субблоки и примитивы находиться. Акад напрямую то не умеет динблоки отображать. Т.е. посчитали сначала количество вставок с привязкой к определениям анонимных блоков, потом по этому списку сформировать список субблоков, умножая на количество вставок.
Сергей812 вне форума  
 
Непрочитано 06.07.2017, 20:02
#631
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Дополню Сергей812 Достучаться можно (dxf группа 2 или свойство Name будет содержать имя анонимного блока, а EffectiveName - человеческое)
Цитата:
Команда: (vla-get-name(vlax-ename->vla-object(entlast)))
"*U51"
Команда:
Команда: (vla-get-EffectiveName(vlax-ename->vla-object(entlast)))
"MIP_Формат"
Только, если мне не изменяет память , в анонимном блоке будет все. Только у не входящих в текущую видимость свойство visible будет отключено.
Т.е. нужно "собрать" блоки с включенной видимостью
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 07.07.2017 в 11:02.
VVA вне форума  
 
Непрочитано 27.07.2017, 12:06 error: bad argument type: lentityp nil
#632
Vombat

HVAC (ОВК)
 
Регистрация: 08.10.2005
Ukraine, L'viv
Сообщений: 822


Здравствуйте.
Не получается в данном блоке добавить дополнительный параметр видимости.
«Command: (LOAD "D:/LISP/visibility/visibility-ADD2.fas") C:HIDEOBJ
Command: (Visibility_add)
Укажите место расположения Visibility Set: ; error: bad argument type: lentityp
nil»

Проблема именно с этим блоком.

Win 7 x 86, Autocad 2011
Вложения
Тип файла: dwg
DWG 2010
block.dwg (112.6 Кб, 13 просмотров)
Vombat вне форума  
 
Непрочитано 27.07.2017, 15:51
1 | #633
skkkk


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


Vombat, вроде получилось
Win 7x64, Autocad 2011
Вложения
Тип файла: dwg
DWG 2010
block.dwg (133.0 Кб, 23 просмотров)
skkkk вне форума  
 
Непрочитано 27.07.2017, 16:12
#634
Сергей812


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


Дополнение к посту №630 - пример получения списка видимых примитивов в динамическом блоке на .Net. Не тестировал на текущий момент, просто для информации.
Сергей812 вне форума  
 
Непрочитано 27.07.2017, 16:39
#635
Vombat

HVAC (ОВК)
 
Регистрация: 08.10.2005
Ukraine, L'viv
Сообщений: 822


Цитата:
Сообщение от skkkk Посмотреть сообщение
Vombat, вроде получилось
Win 7x64, Autocad 2011
Странно. У меня не получилось.
В Вашем варианте блока (с добавленной видимостью) все равно выскакивает та же ошибка
"Command: (visibility-up)
Выберите параметр требуемого Visibility Set: ; error: bad argument type:
lentityp nil"
p/s вечером попробую на другом ПК Win7x64
Vombat вне форума  
 
Непрочитано 27.07.2017, 17:05
#636
skkkk


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


VVA, Сергей812, спасибо за помощь и прошу прощения за долгое молчание по моему вопросу - большой аврал, не было времени все хорошенько проверить и разобраться. Пришлось для текущего горячего проекта идти "в лоб" - переконвертировал все блоки (точнее, копии) в статические и собрал списки объектов из них, произведя подсчет вложенных блоков. Около сотни блоков отрабатывает примерно секунд за пять. Я думал, будет хуже. И в статическом блоке мне не удалось найти все объекты из всех видимостей, применив к нему функцию Алексея (см. ссылку на функцию ниже), я получил список объектов текущего состояния видимости - как раз, то, что требовалось.

Однако я не оставил попыток разобраться с изначально желаемым подходом.
Идея
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
достучаться до содержимого промежуточного анонимного блока *U
мне понравилась, но реализовать ее мне не удалось.
Использовал функцию Алексея отсюда.
Она по указанному вхождению блока возвращает список всех элементов из всех видимостей. То есть, она обращается не к описанию блока *U, а к описанию самого динамического блока. Пока пытаюсь понять, как получить список объектов не описания, а вхождения блока и результатами еще похвастаться не могу.

Vombat, действительно странно. (visibility-up) у меня тоже отработало нормально. Но ведь его действие распространяется только в текущем режиме редактирования блока. Смысла нет прикладывать файл с "апнутым" сетом. Если нужно срочно и сможете легко объяснить, какие объекты надо убрать из этого визабилити сета, то я могу это сделать. Правда текстом это объяснить, полагаю, если и не невозможно, то как минимум, трудно. Можно, выделить неким особенным цветом то, что нужно из него удалить.
skkkk вне форума  
 
Непрочитано 27.07.2017, 17:48
#637
Сергей812


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


skkkk, самое интересное:
Цитата:
К сожалению API динамических блоков ограничено и нет прямого пути для получения этой информации. Эта информация в словаре расширения динамического блока и требуется смотреть на свойства экземпляра класса "AcDbBlockVisibilityParameter" (это родной класс ObjectARX, но он недоступен через публичные API ни в C++, ни в .NET).
если нельзя с самого низкого уровня программного доступа ObjectARX через открытое API достучаться. А через Lisp VVA делал (согласно посту №631) - это очень странно.
Сергей812 вне форума  
 
Непрочитано 27.07.2017, 19:59
#638
Vombat

HVAC (ОВК)
 
Регистрация: 08.10.2005
Ukraine, L'viv
Сообщений: 822


Цитата:
Сообщение от Vombat Посмотреть сообщение
p/s вечером попробую на другом ПК Win7x64
результат идентичен. Та же ошибка
Цитата:
Сообщение от skkkk Посмотреть сообщение
Если нужно срочно и сможете легко объяснить, какие объекты надо убрать из этого визабилити сета, то я могу это сделать.
Спасибо, но не надо, так как после этого я уже не смогу редактировать (дорабатывать) блок, а это творческий процесс и он бесконечный. Сделал по старинке через Lookup и масштабирование (пришлось ввести дополнительные параметры). Через Visibility Set было бы проще

Последний раз редактировалось Vombat, 27.07.2017 в 20:07.
Vombat вне форума  
 
Непрочитано 12.10.2017, 16:46
#639
Black Diamond


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


Добрый день. Необходима помощь. Пытаюсь создать рамку с несколькими параметрами видимости: для основной надписи, для рамки сквозной нумерации и для дополнительной графы слева. Пробовал это сделать в AutoCAD 2013, 2016 и 2018. Всё делаю как показано в в этом видео. https://www.youtube.com/watch?v=3VWoHxLD8Lc

Для основной рамки использую 4 видимости: для блока со штампом по форме 3, по форме 4, по форме 5 и по форме 6. Для сквозной нумерации 2 видимости: показывать или не показывать сквозную нумерацию.

По итогу получается, что в режиме по умолчанию можно менять виды штампов по отдельности и показывать/не показывать сквозную нумерацию. Но когда в режиме отсутствия нумерации пытаюсь перейти на другой штамп, то у меня показывается штамп по форме 3, или все сразу (такое тоже бывает). И когда перехожу в другие виды штампов, то появляется рамка нумерации, хотя сама рамка стоит в режиме нет (не отображать).
Делаю вроде всё по инструкции. Сначала добавляю параметр видимости VSPadd. Потом перехожу на него VSPSet. Убираю объекты штампов основной надписи командой VSPDelsel.

В чём может быть проблема? Что же я делаю не так? Есть ли более подробная инструкция, как с этим приложением работать? За ранее благодарен помощи.

----- добавлено через ~7 мин. -----
Пытался делать по этой схеме, но до конца так и не понял, что к чему и в каком порядке.


Цитата:
Сообщение от tujn08 Посмотреть сообщение
1) Нужен 10 если не ошибаюсь (или 12) версия автокада - программа только в них работает. Начну с этого- проверьте.
2) Сам мучался с такой проблемой.
делал так:
а) прикинули сколько параметров видимости будет использоваться
б) надо нарисовать в блоке абсолютно все линии для всех видимостей (разбрасывайте по рабочему полю относительно одной точки. потом все это просто совместить в одну точку нужно будет). Если есть накладывающиеся линии лучше оставить их. Пока не разберетесь как работает программа- будите путаться и все время переделывать
в) открыли блок, программой вставить подсчитанное количество видимостей (лучше так же в разные места, что бы не накладывалиь) - сразу называем как надо
г) теперь начинаем раскидывать, что с чем видимо и невидимо. Выходим из блока сохраняем, программой выбираем видимость, заходим в блок, стандартными средствами автокада выбираем скрыть/показать, если есть несколько сетов в видимости- так же делаем скрыть/показать.
д) выходим сохраняем, переключаемся на следующую видимость и повторяем пункт г)

Примечание! из-за которого и начинается путаница
Скрыв линии они могут все равно быть видны- это нормально. Все будет работать исправно (поэтому нужен пункт б) )

PS
лучше делать разные версии блоков при каждом изменении т.к. что-то можете сломать/забыть и будет худо.
поправка: версия где все раскидано(для отладки и внесения изменений через некоторое вреся) и версия где все собрано(рабочая). Т.к. скрытые линии все равно видны- сразу запутаетесь.
Чем больше видимостей тем сложнее вносить изменения в будущем!!! На мой взгляд программно решать некоторые проблемы и атрибутами.
Вложения
Тип файла: dwg
DWG 2007
рамка.dwg (451.3 Кб, 21 просмотров)
Black Diamond вне форума  
 
Непрочитано 12.10.2017, 17:53
#640
skkkk


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


Black Diamond, полагаю, что предварительно нужно вновь создаваемые параметры видимости очистить от всех объектов с помощью функции (Visibility_clear). Потом активировать этот параметр функцией (visibility-up) и уже после создавать состояния видимости и назначать им соответствующие объекты.
skkkk вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Создание дополнительных параметров Visibility Set в динамических блоках.

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как с помощью vba начертить линию vasyavip Программирование 77 09.10.2008 23:17
Femap и VBA Makson Программирование 11 05.08.2008 14:54
Создание списка чертежей из Sheet Set Manager krokh AutoCAD 2 20.06.2008 16:46