|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
VBA: как связать между собой блоки
Регистрация: 25.02.2014
Сообщений: 9
|
||
Просмотров: 4388
|
|
||||
Регистрация: 25.02.2014
Сообщений: 9
|
Нужно редактировать это дерево и забивать в атрибуты требуемые текстовые данные.
Блоки содержат графические обозначения и вместе с текстом и связями составляют итоговый документ. Линии связей должны рисоваться автоматически - это я представляю как. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Фирст, вложенные блоки - это вложенные блоки. Копируй "родителя" и все вложенные блоки автоматом перекопируются.
Или ты говоришь не про AutoCAD. Никак. Используй Handle - они по крайней мере внутри одного файла уникальны и неизменны.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
инженер-проектировщик КИПиА Регистрация: 30.08.2008
Минск
Сообщений: 159
|
на сколько я понял, блоки совсем не вложенные друг в друга, и человек пытается реализовать свою собственную структуру данных.
тоже давно интересует данная тема и если не секрет, то Цитата:
и любопытно посмотреть на уже созданные блоки, да и вообще - модель если я правильно понял задумку, то атрибутов на уровень "+1" нужно создавать неопределенное количество, т.к. полагаю дочерних объектов может быть "не один" и тут же непонятно зачем может пригодиться ссылка на "соседний" блок того же уровня |
|||
![]() |
|
||||
Регистрация: 25.02.2014
Сообщений: 9
|
Блоки не вложенные, связи вручную рисует разработчик. При изменении дерева все линии корректируются.
Спасибо! Проверил, они и в копии файла не меняются. |
|||
![]() |
|
||||
Цитата:
Вот как в БД реализуются древовидные структуры: http://www.ibase.ru/devinfo/treedb.htm, тут можно по аналогии делать. Принцип прост - у каждого элемента есть запись о том, кто его владелец. А с помощью программного кода можно выстроить всю иерархию.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic) |
||||
![]() |
|
||||
Регистрация: 25.02.2014
Сообщений: 9
|
Схематично, структура дерева как на рис. А
Но программно это неудобно, поскольку у каждого "родителя" может быть разное число "потомков". Поэтому структура дерева как на рис. Б, но у каждого "потомка" есть ссылка на "родителя" чтобы чертить линии как на рис А. |
|||
![]() |
|
||||
инженер-проектировщик КИПиА Регистрация: 30.08.2008
Минск
Сообщений: 159
|
у меня одного мозг взорвался? )))
... по теме - думаю - что проще/удобнее реализовать структуру - средствами словарей и XRecord/XRecordData в своём созданном словаре, а уже блокам прикручивать (можно и в виде атрибутов) handl'ы этих словарей/записей аналогия папка = словарь файл = запись PS Do$, сенк за линку Последний раз редактировалось kakt00z, 25.02.2014 в 15:21. |
|||
![]() |
|
||||
Регистрация: 25.02.2014
Сообщений: 9
|
Не совсем понимаю, как это можно использовать (можно пример?). Я записывал расширенные данные в объект, но смог только добавлять. Отредактировать или удалять не смог (можно пример?). Доступ к данным только перебором, при этом неизвестно какие новее (возможно те, что идут первыми).
И при копировании объекта вся эта инфа копируется в новый. Последний раз редактировалось Фирст, 25.02.2014 в 16:04. |
|||
![]() |
|
||||
инженер-проектировщик КИПиА Регистрация: 30.08.2008
Минск
Сообщений: 159
|
расширенные данные это немного не то, что я имел ввиду (хотя их тоже можно использовать для привязки блокам handl'ов X-записей), и уверен они, если не редактируются, то удаляются
на VBA примеров не покажу, ![]() Код:
|
|||
![]() |
|
||||
инженер-проектировщик КИПиА Регистрация: 30.08.2008
Минск
Сообщений: 159
|
|
|||
![]() |
|
||||
Регистрация: 25.02.2014
Сообщений: 9
|
Блоки собраны так, что базовая точка блока (InsetionPoint) определяет левый верхний угол, а InsetionPoint одного из скрытых атрибутов правый нижний угол. Это не обязательно реальные границы блока. Точку привязки я вычисляю как середина нужной стороны получившегося прямоугольника (на рис. два прямоугольника половинного размера).
|
|||
![]() |
|
||||
инженер-проектировщик КИПиА Регистрация: 30.08.2008
Минск
Сообщений: 159
|
Мне кажется "красивее" было бы сделать отдельный словарь у каждого блока с перечнем точек привязки связей, каждая из которых могла бы содержать координаты и вектор направления для присоединения связи.
или, как вариант, можно "покрутить" дин. параметры Последний раз редактировалось kakt00z, 03.01.2015 в 12:53. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
минимальное расстояние между лестничными маршами | Laki | Конструкции зданий и сооружений | 11 | 23.08.2013 11:52 |
ЛИСП слои цвета преобразование | Gotch | LISP | 97 | 08.11.2011 10:22 |
Как связать размеры деталей в сборке ? | Grafandin | Другие CAD системы | 3 | 20.02.2008 08:29 |
Перегородка: кирпич или гипсолитовые блоки? | Pilot | Прочее. Архитектура и строительство | 8 | 08.06.2007 09:58 |
"сложный узел": соединение 41кэ между собой. | Евгений 88 | Прочее. Программное обеспечение | 8 | 04.03.2007 13:06 |