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

Вернуться   Форум 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.
Просмотров: 361655
 
Непрочитано 22.12.2010, 14:46
#461
5hev

roads
 
Регистрация: 22.12.2010
msk
Сообщений: 121
<phrase 1= Отправить сообщение для 5hev с помощью Skype™


Имеем polar stretch в блоке, добавляем в сам stretch объекты...
Меняются только пары в описании BLOCKSTRETCHACTION:

71 - количество объектов в action`е
330 - имена объектов
73* - см 71
331* - см 330

*(только если объект находится в рамке влияния actiona`а, плюс к каждой строке 331 идут парочки 74.1 и 94.1)

Supermax, расскажи пожалуйста, имеет ли значение, в каком месте я добавлю имя нового объекта в описание BLOCKSTRETCHACTION?
Т.е.:
1) (append new_330 acad_eval_graph)
2) (append acad_eval_graph new_330)
3) искать нужное место в описании и сувать туда
[Верное отметить]

Последний раз редактировалось 5hev, 22.12.2010 в 15:11. Причина: добавил
5hev вне форума  
 
Автор темы   Непрочитано 22.12.2010, 15:12
#462
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Распечатай все коды и выложи сюда.
Все имеет значение. Здесь порядок очень важен. см 3
Supermax вне форума  
 
Непрочитано 22.12.2010, 15:18
#463
5hev

roads
 
Регистрация: 22.12.2010
msk
Сообщений: 121
<phrase 1= Отправить сообщение для 5hev с помощью Skype™


Выкладываю распечатку описания BLOCKSTRETCHACTION:
((-1 . <Entity name: 7eb8c1f8>)
(0 . "BLOCKSTRETCHACTION")
(330 . <Entity name: 7eb8c1b8>)
(5 . "35F")
(100 . "AcDbEvalExpr")
(90 . 5)
(98 . 27)
(99 . 25)
(100 . "AcDbBlockElement")
(300 . "Stretch")
(98 . 27)
(99 . 25)
(1071 . 0)
(100 . "AcDbBlockAction")
(70 . 0)
(71 . 1)
(330 . <Entity name: 7eb8c1a8>)
(1010 4.25338 20.7466 0.0)
(100 . "AcDbBlockStretchAction")
(92 . 1)
(301 . "EndXDelta")
(93 . 1)
(302 . "EndYDelta")
(72 . 2)
(1011 -5.0 5.0 0.0)
(1011 13.4784 40.3757 0.0)
(73 . 1)
(331 . <Entity name: 7eb8c1a8>)
(74 . 1)
(94 . 1)
(75 . 0)
(140 . 1.0)
(141 . 0.0)
(280 . 0))


((-1 . <Entity name: 7eb8c498>)
(0 . "BLOCKSTRETCHACTION")
(330 . <Entity name: 7eb8c470>)
(5 . "3AB")
(100 . "AcDbEvalExpr")
(90 . 5)
(98 . 27)
(99 . 25)
(100 . "AcDbBlockElement")
(300 . "Stretch")
(98 . 27)
(99 . 25)
(1071 . 0)
(100 . "AcDbBlockAction")
(70 . 0)
(71 . 2)
(330 . <Entity name: 7eb8c458>)
(330 . <Entity name: 7eb8c460>)
(1010 4.25338 20.7466 0.0)
(100 . "AcDbBlockStretchAction")
(92 . 1)
(301 . "EndXDelta")
(93 . 1)
(302 . "EndYDelta")
(72 . 2)
(1011 -4.95064 19.1229 0.0)
(1011 13.4784 40.3757 0.0)
(73 . 1)
(331 . <Entity name: 7eb8c458>)
(74 . 1)
(94 . 1)
(75 . 0)
(140 . 1.0)
(141 . 0.0)
(280 . 0))


((-1 . <Entity name: 7eb8c300>)
(0 . "BLOCKSTRETCHACTION")
(330 . <Entity name: 7eb8c2d8>)
(5 . "380")
(100 . "AcDbEvalExpr")
(90 . 5)
(98 . 27)
(99 . 25)
(100 . "AcDbBlockElement")
(300 . "Stretch")
(98 . 27)
(99 . 25)
(1071 . 0)
(100 . "AcDbBlockAction")
(70 . 0)
(71 . 2)
(330 . <Entity name: 7eb8c2c8>)
(330 . <Entity name: 7eb8c328>)
(1010 4.25338 20.7466 0.0)
(100 . "AcDbBlockStretchAction")
(92 . 1)
(301 . "EndXDelta")
(93 . 1)
(302 . "EndYDelta")
(72 . 2)
(1011 -5.0 5.0 0.0)
(1011 13.4784 40.3757 0.0)
(73 . 2)
(331 . <Entity name: 7eb8c2c8>)
(74 . 1)
(94 . 1)
(331 . <Entity name: 7eb8c328>)
(74 . 1)
(94 . 1)
(75 . 0)
(140 . 1.0)
(141 . 0.0)
(280 . 0))


* - зона влияния подразумевает рамку которую acad просит обвести перед указанием объектов для набора в actionset.

Последний раз редактировалось 5hev, 22.12.2010 в 15:55.
5hev вне форума  
 
Автор темы   Непрочитано 22.12.2010, 16:43
#464
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Тебе надо добавить свой новый элемент в этот список
Цитата:
(71 . 2)
(330 . <Entity name: 7eb8c458>)
(330 . <Entity name: 7eb8c460>)
увеличив 71 пару на 1
и
добавить
в конец

Цитата:
(331 . <Entity name: 7eb8c328>)
(74 . 1)
(94 . 1)
увеличив 73 пару на 1

пары 1010 и 1011 надо просто выкинуть перед entmod-ом
Они сами восстановятся
Supermax вне форума  
 
Непрочитано 22.12.2010, 22:11
#465
5hev

roads
 
Регистрация: 22.12.2010
msk
Сообщений: 121
<phrase 1= Отправить сообщение для 5hev с помощью Skype™


Попробовал самый простой вариант:
  • Взял блок с двумя объектами и параметром polar stretch, который влияет на один из объектов (отрезков).
  • Получил словарь ...graph, получил ...action, заменил в его описании пары, указывающие на зависимый отрезок, так, чтобы они указывали на другой из двух, выбросил все пары без точек (1010, 1011), количество зависимых объектов менять не пришлось - один и остался один. Еще выкинул 1071 - на нее ругалась entmod.
Но... Фиаско, entmod выдал nil
Возможно, где-то еще надо менять описания?
Supermax, я, видимо, спустя несколько лет после создания темы, выгляжу тут олухом, но не взыщи, подскажи. Сам сижу и ругаюсь, - где я был в 2008...
5hev вне форума  
 
Автор темы   Непрочитано 22.12.2010, 23:00
#466
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Попробуй просто выкинуть 1010, 1011 и 1071, а потом ентмод.
Если модифицируется, тоесть вернет список с парами вместо нил, то ты где-то что-то пропустил, а если опять нил, то надо будет искать другие пути.
Supermax вне форума  
 
Непрочитано 23.12.2010, 09:59
#467
5hev

roads
 
Регистрация: 22.12.2010
msk
Сообщений: 121
<phrase 1= Отправить сообщение для 5hev с помощью Skype™


Оказалось, что 1011 неразрывно связана с 72 парой, которая считает их количество. Порезал 72ую - и все работает!
Вот только выбирать имя того объекта, который надо включить в set, приходится через (entnext <block_ename>), неудобно.

Кстати, можно включить в set любой объект даже вне блока, entmod съест, но вот двигаться объект не будет... Может, с другими parameter будет такой фокус прокатывать
5hev вне форума  
 
Автор темы   Непрочитано 23.12.2010, 10:14
#468
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


А пара 1011 восстанавливается после ентмод?
И на что она указывает, разобрался?
Supermax вне форума  
 
Непрочитано 23.12.2010, 10:23
#469
5hev

roads
 
Регистрация: 22.12.2010
msk
Сообщений: 121
<phrase 1= Отправить сообщение для 5hev с помощью Skype™


Это рамка actionset`а - две точки так сказать её boundingbox`а.
И конечно, она восстанавливается. Думаю даже, подхватывается из других элементов action`а.

Последний раз редактировалось 5hev, 23.12.2010 в 10:30.
5hev вне форума  
 
Автор темы   Непрочитано 23.12.2010, 10:33
#470
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Не, не из других элементов, а из этого же.
Картина вырисовывается следующая:
1. Есть пары, которые определяют принадлежность DXF описания к объекту.
2. Есть пары и DXF списки, которые менять нельзя. Они не обрабатываются entmod
3. Есть пары, которые менять можно.

Entmod держит перед собой два описания, старое и новое. Определяет отличия, проверяет их на допустимость изменения и изменяет.
Пары 1010, 1011, 1071 и т.п берет из старого описания.

Где-то похоже так.

P.S. Про 72 пару ценная инфа, я не знал. Надо запомнить.

В блоке есть возможность выбора многоугольником. Не квадратом. В таком случае 1011 пар будет много и 72 пара будет давать их количество.

Попробуй проделать такой фокус:
Размести блок в пространстве модели так, чтобы пространство блока по координатам совпало с пространством модели и попробуй привяжи элемент вне блока, но чтобы координаты его точек попадали в рамку выбора.

Последний раз редактировалось Supermax, 23.12.2010 в 11:30.
Supermax вне форума  
 
Непрочитано 23.12.2010, 11:39
#471
5hev

roads
 
Регистрация: 22.12.2010
msk
Сообщений: 121
<phrase 1= Отправить сообщение для 5hev с помощью Skype™


Добавлять элементы внутри блока легко - промодить ...parameter и всё.
А как быть, если задача сложнее:
  • Есть блок-шаблон, в котором уже есть actionset нужной конфигурации
  • Есть объект(ы), которые нужно добавить в блок
  • При этом объекты эти нужно добавить и в actionset
Пробовал модить первоначальный блок, потом мэйкить новый блок со всеми элементами старого - динамические параметры не копируются.
Получается, необходимо модить сам evaluation-graph, меняя в нем 330ую и может что-то еще. Но даже если заморочиться, то в какой момент его entmak`ить в процессе формирования нового блока

Supermax, странно, но ни на одном форуме такие вопросы не поднимаются... Ты где-нибудь нашел?

Последний раз редактировалось 5hev, 24.12.2010 в 16:35.
5hev вне форума  
 
Автор темы   Непрочитано 26.12.2010, 00:22
#472
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Ну, я так думаю:
Есть в пространстве модели блок (точнее, вхождение) и он динамический.
Есть рядом с ним объект.

Запоминаем точку вставки блока (назовем его "первоначальный") и нормаль.
Нужный (нужные) объекты объединяем программно в блок с любой точкой вставки (0,0,0 к примеру). Запоминаем эту точку и нормаль этого блока. Также вычисляем смещение этой точки относительно точки вставки "первоначального блока"

Программно открываем редактор блока, вставляем программно созданный нами блок, смещаем точку вставки так, как она смещена относительно нашего первоначального блока и разворачиваем нормаль.
Технический блок взрываем.

Все. элементы в блоке.
Тут же корректируем активатор и выходим из редактора.
Можно попробовать редактировать активатор после выхода из редактора блоков.
Supermax вне форума  
 
Непрочитано 26.12.2010, 21:06
#473
5hev

roads
 
Регистрация: 22.12.2010
msk
Сообщений: 121
<phrase 1= Отправить сообщение для 5hev с помощью Skype™


Хех, я пошел по тому же пути, и теперь юзера веду в bedit, делаю дела, закрываю. Уже реализовал...
Спрашивал я скорее про то - теперь уже могу сформулировать - как программно эмулировать bedit.
Сам себе ответил что это будет *опа, и решил мол зачем выдумывать велик, коли автодэск не публикует свои тайные функции для таких вещей (или тут надо курить ObjectARX)?

Только есть один момент: как подавить строку редактора блоков, ведь это же тулбар или нет? Не догнал. Я хочу чтоб юзер bclose`зился только через меня.
5hev вне форума  
 
Автор темы   Непрочитано 26.12.2010, 21:46
#474
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Программно сделать динамический блок нельзя по двум причинам.
1. Не все словари, входящие в блок можно создать программно.
2. все те же 1010, 1011, 1071 списки.
Первоначальный динамический блок и динамические параметры со свойствами должны быть.
ObjectARX тут не помощник. В нем ты того, что сделал в лиспе не повторишь.

а последнее переведи с гоблинского, а то я не догнал.
Supermax вне форума  
 
Непрочитано 26.12.2010, 21:59
#475
5hev

roads
 
Регистрация: 22.12.2010
msk
Сообщений: 121
<phrase 1= Отправить сообщение для 5hev с помощью Skype™


Цитата:
Сообщение от Supermax Посмотреть сообщение
а последнее переведи с гоблинского
Можно ли как-нибудь удалить с экрана полоску меню редактора блоков (там еще "Close Block Editor" есть)?


Цитата:
Сообщение от Supermax Посмотреть сообщение
Не все словари, входящие в блок можно создать программно
Пример, пожалуйста.
5hev вне форума  
 
Автор темы   Непрочитано 26.12.2010, 22:01
#476
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


"ACAD_EVALUATION_GRAPH"
Supermax вне форума  
 
Непрочитано 26.12.2010, 22:06
#477
5hev

roads
 
Регистрация: 22.12.2010
msk
Сообщений: 121
<phrase 1= Отправить сообщение для 5hev с помощью Skype™


Цитата:
Сообщение от Supermax Посмотреть сообщение
"ACAD_EVALUATION_GRAPH"
Ну...) Я, конечно, утверждать ничего не буду, просто спрошу:
А как он извините тогда добавляется к блоку? Если не программно, то как?
5hev вне форума  
 
Автор темы   Непрочитано 26.12.2010, 22:16
#478
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


А вот так.. Создается-то он программно, но не нам это дано.
Можно конечно Автокад надурить, но надо разобраться со структурой файла и базы блоков.
Я, к примеру, visibility-set создаю программно, но его автокад не принимает и его глючит, благодаря чему я заставляю сам автокад себе вставлять новый visibility-set. Можно попробовать всетаки создать visibility-set программно и правильно его вставить в базу. Я на коленке все это ваял и не со всеми парами разбирался "по мужски".

А панель скрыть можно, но надо в скрипты лезть, писать всякие ковырялки. Я как-то все эти окна изучал, да лень одолела дальше изучать.
Supermax вне форума  
 
Непрочитано 30.03.2011, 17:26
#479
Slimper


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


Подскажите как быть в этом случае:
Есть 2 Visibility Set - в одном выбирается элемент, во втором по идее должны включаться и выключаться размеры. Проблема в том, что если сначала выключить размеры, а потом их включить, то включаются все имеющиеся размеры. Мучаюсь уже который день - но могу разобраться...
Вложения
Тип файла: dwg
DWG 2004
block.dwg (63.2 Кб, 3002 просмотров)
Slimper вне форума  
 
Непрочитано 14.04.2011, 10:12
#480
Makswell

Инженер-строитель
 
Регистрация: 15.08.2007
Киров
Сообщений: 2,204


Supermax, тут такая ситуация: поставил новый MS Office 2007. При попытке использования Excel-Lookup.lsp, прога пишет "Невозможно запустить Microsoft Excel 2003", ну и не работает соответственно.
Не мог бы ты допилить своё творение на предмет этого?

Добавлено:
А, не, погорячился я. Есть уже в этой теме решение: http://forum.dwg.ru/showpost.php?p=425895&postcount=425
Ложная тревога. Отбой. ))
Makswell вне форума  
Ответ
Вернуться   Форум 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