Форум пользователей Visio
http://visio.getbb.ru/

Группированный шейп с полями
http://visio.getbb.ru/viewtopic.php?f=6&t=1000
Страница 1 из 3

Автор:  powercat [ 16 авг 2016, 11:05 ]
Заголовок сообщения:  Группированный шейп с полями

Привет.
Группированный шей с полями. Предполагается, что будет их несколько экземпляров. Т.е. автобусов с пассажирами и багажом будет несколько (неизвестное значение).
Вопрос - как обращаться к такому объекту в коде?
Предлагаемый способ работает в случае выделения группового шейпа:
Код:
Dim sh As Shape
Set sh = ActiveWindow.Selection.PrimaryItem
' получить значения полей
Debug.Print sh.Cells("Prop.child"), sh.Cells("Prop.Adult"), sh.Cells("Prop.Bagage")
' задать значения поля
sh.Cells("Prop.Bagage") = 88


У меня же в программе все будет работать от кнопки, без выделений мышкой.
В данном случае я хочу такую реализацию - соединил любое количество автобусов особой линией и в...пусть в msgbox выдается сумма пассажиров и багажа.
Правильно ли я понимаю, что мне нужно сделать объект "связь"? И как быть с его идентификатором, если я его буду копировать?
И как быть с объектам "автобус" - у них есть поля, но нет какого-то...эээ...одного общего идентификатора, чтобы сделать нечто подобное - avtobus(1).Cells("Prop.Adult")+avtobus(2).Cells("Prop.Adult"), если они соединены объектом svyazka(1)
Хм...вроде объяснил, может и путано ))

Автор:  Shishok [ 16 авг 2016, 12:13 ]
Заголовок сообщения:  Re: Группированный шейп с полями

Вы же не каждый раз заново рисуете свой автобус? А, видимо храните в стенсиле готовый шейп. Так ведь? А это значит что общий идентификатор есть. И это - имя Мастер-шейпа.

Автор:  Tumanov [ 16 авг 2016, 12:27 ]
Заголовок сообщения:  Re: Группированный шейп с полями

Если автобусы нужно соединять линией, значит предполагается, что таких групп автобусов будет несколько. Например, 5 автобусов соединены одной линией, еще 10 - другой и т.д.
Значит придется писать сканер, который просмотрит документ, выберет такие соединенные группы и сложит их в коллекции. Например, каждую связку в свою коллекцию.
Алгоритм сканирования будет не самым простым, но вполне разрешимым. Задача - отобрать в отдельную коллекцию все связанные автобусы.
Собрать все связи; отфильтровать - оставить только связи между автобусами; выбрать неразрывные цепочки (последовательным перебором с вычеркиванием).
Ну а когда в коллекции будут только связанные шейпы (автобусы), то просто перебирается коллекция шейпов и суммируются данные из нужных ячеек.
--
Возможны и другие подходы.
Можно группировать автобусы не соединяя их линией, а помещая в один контейнер. Тогда сканер будет попроще.
Или по типу SwimLine. Тогда отбирать по перекрывающему шейпу.
Или помещать группу автобусов на отдельный слой.
В любом из этих случаев алгоритм сканера будет попроще, чем при соединении линиями.

Автор:  powercat [ 16 авг 2016, 12:43 ]
Заголовок сообщения:  Re: Группированный шейп с полями

Shishok писал(а):
Вы же не каждый раз заново рисуете свой автобус? А, видимо храните в стенсиле готовый шейп. Так ведь? А это значит что общий идентификатор есть. И это - имя Мастер-шейпа.


Благодарю.

Автор:  powercat [ 16 авг 2016, 12:46 ]
Заголовок сообщения:  Re: Группированный шейп с полями

Tumanov писал(а):
Если автобусы нужно соединять линией, значит предполагается, что таких групп автобусов будет несколько. Например, 5 автобусов соединены одной линией, еще 10 - другой и т.д.
Значит придется писать сканер, который просмотрит документ, выберет такие соединенные группы и сложит их в коллекции. Например, каждую связку в свою коллекцию.
Алгоритм сканирования будет не самым простым, но вполне разрешимым. Задача - отобрать в отдельную коллекцию все связанные автобусы.
Собрать все связи; отфильтровать - оставить только связи между автобусами; выбрать неразрывные цепочки (последовательным перебором с вычеркиванием).
Ну а когда в коллекции будут только связанные шейпы (автобусы), то просто перебирается коллекция шейпов и суммируются данные из нужных ячеек.
--
Возможны и другие подходы.
Можно группировать автобусы не соединяя их линией, а помещая в один контейнер. Тогда сканер будет попроще.
Или по типу SwimLine. Тогда отбирать по перекрывающему шейпу.
Или помещать группу автобусов на отдельный слой.
В любом из этих случаев алгоритм сканера будет попроще, чем при соединении линиями.


У меня линии ))) Вопрос в том, что это должна быть за линия? Хотя так же, как и с другими объектами, можно использовать имя мастера...чтобы понять, что за связь (у меня будут разные). А еще плз ткните в тему, где определяется объект начала и конца линии.

Автор:  Shishok [ 16 авг 2016, 12:52 ]
Заголовок сообщения:  Re: Группированный шейп с полями

Глянь здесь:
http://visio.getbb.ru/viewtopic.php?f=6&t=936&p=8932&hilit=tosheet#p8932

Автор:  Гость [ 16 авг 2016, 12:55 ]
Заголовок сообщения:  Re: Группированный шейп с полями

Почему нельзя просто выделить автобусы мышью?
При рисовании отрезков соединяющих автобусы движений мышью будет больше!
При добавлении в контейнер всё равно придется их выделить мышью.

Автор:  powercat [ 16 авг 2016, 12:56 ]
Заголовок сообщения:  Re: Группированный шейп с полями

Shishok писал(а):


Благодарю.

Автор:  powercat [ 16 авг 2016, 12:59 ]
Заголовок сообщения:  Re: Группированный шейп с полями

Гость писал(а):
Почему нельзя просто выделить автобусы мышью?
При рисовании отрезков соединяющих автобусы движений мышью будет больше!
При добавлении в контейнер всё равно придется их выделить мышью.


Потому что в реальности это, разумеется, будут не автобусы, а куча объектов, соединенных разными связями, в объектах будет куча полей. Все это хозяйство будет обрабатываться, согласно связям. Разумеется, на уровне 2-3 шейпов на листе можно было бы и мышкой, но не мой случай - у меня будет "сканер"...В принципе у меня это все уже есть в экселе, там именно сканер, смотрит структуру схемы, по ней строит таблицы что с чем и как соединено, далее это все обрабатывается и т.д. Хочется теперь это все сделать в нормальной среде рисования, ибо эксель - это было вынужденно и не слишком удобно...

Автор:  powercat [ 16 авг 2016, 13:15 ]
Заголовок сообщения:  Re: Группированный шейп с полями

Shishok писал(а):


У меня будет не коннектор, а обычная линия с определенным типом (думаю, что тип будет указываться через имя мастер-шейпа). Например, автобусы могут быть связаны жесткой сцепкой или тросом. Нужно определить начальный автобус и конечный, соединенные тросом

Автор:  Surrogate [ 16 авг 2016, 13:35 ]
Заголовок сообщения:  Re: Группированный шейп с полями

Что реально нарисовал в экселе схему с кучей автобусов соединенных тросами?

Автор:  powercat [ 16 авг 2016, 13:36 ]
Заголовок сообщения:  Re: Группированный шейп с полями

Нда...нифига не понял, как выдрать имя ((( попробовал потыкаться в Set a = ActiveWindow.Shape.Shapes("Sheet.97").Connects.Item(1).FromSheet
Но что с этим делать дальше - без понятия...где там имя...
Печально, опять как в сумерках человечества брожу ))) :wall:

Автор:  powercat [ 16 авг 2016, 13:38 ]
Заголовок сообщения:  Re: Группированный шейп с полями

Surrogate писал(а):
Что реально нарисовал в экселе схему с кучей автобусов соединенных тросами?


Да, только вместо автобусов - реальные объекты, с которыми я работаю, и 4 типа связей между ними...Там все очень удобно в плане получения от чего и к чему стрелка идет, т.е. получить имя начального объекта и имя конечного - не вопрос...а тут для меня полный мрак...как-то уж очень сложно все реализовано в VISIO... :wall:

Автор:  Surrogate [ 16 авг 2016, 14:21 ]
Заголовок сообщения:  Re: Группированный шейп с полями

Я особо не пользуюсь коннекторами. Поиграл с кодом из ветки на которую давали ссылку, вроде всё ясно.
Ну ты крут, сделать такое в экселе!
Повторюсь: Визио не самый подходящий инструмент для твоих задач.

Автор:  powercat [ 16 авг 2016, 14:40 ]
Заголовок сообщения:  Re: Группированный шейп с полями

Surrogate писал(а):
Я особо не пользуюсь коннекторами. Поиграл с кодом из ветки на которую давали ссылку, вроде всё ясно.
Ну ты крут, сделать такое в экселе!
Повторюсь: Визио не самый подходящий инструмент для твоих задач.


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

У меня не коннектор, а просто линия. Я ее цепляю к этим...точкам привязки и хочу узнать, что является ее началом и концом...

Автор:  Tumanov [ 16 авг 2016, 14:55 ]
Заголовок сообщения:  Re: Группированный шейп с полями

Цитата:
У меня не коннектор, а просто линия

А при анализе соединений это без разницы.
С коннекторами важно понять, что есть такой объект "соединение". Как только коннектор к чему-то подключается, у него появляется этот объект. Подключится другим концом - появится второй.
Вот эти объекты Connects и нужно анализировать. Там есть свойства, от какого шейпа, к какому, от какой части шейпа, к какой и т.д.

Автор:  powercat [ 16 авг 2016, 15:42 ]
Заголовок сообщения:  Re: Группированный шейп с полями

Tumanov писал(а):
Цитата:
У меня не коннектор, а просто линия

А при анализе соединений это без разницы.
С коннекторами важно понять, что есть такой объект "соединение". Как только коннектор к чему-то подключается, у него появляется этот объект. Подключится другим концом - появится второй.
Вот эти объекты Connects и нужно анализировать. Там есть свойства, от какого шейпа, к какому, от какой части шейпа, к какой и т.д.


Ну собственно это я и не понимаю как сделать ))) В примерах, к сожалению, не разобрался :(

Автор:  9rey [ 16 авг 2016, 17:08 ]
Заголовок сообщения:  Re: Группированный шейп с полями

как-то делал для электрической схемы, состоящей из коннекторов или линий, соединенных друг с другом, проброс маркировок цепей (в виде текста над линией). просто брал первый отрезок, просматривал коллекции Connects/FromConnets, соответственно переходил через них на следующее соединение, проходил по всем коннекторам/линиям в цикле. так пронумеровывал все участки цепи.
тут ведь надо что-то подобное? проходить по схеме от объекта к объекту?
если да, тогда надо разбираться с тем что такое коллекции Connects/FromConnets. я в свое время просто посмотрел в самом визио через F1. вроде все было понятно.

Автор:  9rey [ 16 авг 2016, 17:21 ]
Заголовок сообщения:  Re: Группированный шейп с полями

powercat писал(а):
Нда...нифига не понял, как выдрать имя ((( попробовал потыкаться в Set a = ActiveWindow.Shape.Shapes("Sheet.97").Connects.Item(1).FromSheet

а что здесь надо? какое имя? если имя первого в списке шейпа, к которому приклеен Sheet.97, то Connects(1).ToSheet.Name

коллекция Connects - соединения, которые создает сам шейп, например линия или коннектор, когда ты ими цепляешься к другому шейпу
коллекция FromConnects - соединения других шейпов к данному.
как-то так вкратце

Автор:  Shishok [ 16 авг 2016, 18:37 ]
Заголовок сообщения:  Re: Группированный шейп с полями

Может вот это поможет разобраться. Код не помню откуда. Точно не мой.

Вложения:
Connects.vsd [197 Кб]
Скачиваний: 106

Страница 1 из 3 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/