Форум пользователей 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 Но что с этим делать дальше - без понятия...где там имя... Печально, опять как в сумерках человечества брожу ))) |
Автор: | powercat [ 16 авг 2016, 13:38 ] |
Заголовок сообщения: | Re: Группированный шейп с полями |
Surrogate писал(а): Что реально нарисовал в экселе схему с кучей автобусов соединенных тросами? Да, только вместо автобусов - реальные объекты, с которыми я работаю, и 4 типа связей между ними...Там все очень удобно в плане получения от чего и к чему стрелка идет, т.е. получить имя начального объекта и имя конечного - не вопрос...а тут для меня полный мрак...как-то уж очень сложно все реализовано в VISIO... |
Автор: | 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: Группированный шейп с полями | ||
Может вот это поможет разобраться. Код не помню откуда. Точно не мой.
|
Страница 1 из 3 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |