All Forums
 Категория Visio
 Форум Вопросы и ответы
 Connection Points
Author Previous Topic Topic Next Topic  

maniac

Russia
25 Posts

Posted - 03/12/2009 :  14:43:45
Добрый всем!
Возникли трудности:
1)На листе есть несколько шейпов связанных через Connection Points.
Как, выбрав один из шейпов, автоматически последовательно перебрать всю связанную цепочку шейпов и считать из них информацию (допустим Height).
2)Можно ли увеличить радиус чувствительности Connection Points (сделать больше красный квадратик прилипания).
Спасибо, Ваш кровожадный Maniac :)

Tumanov

Russia
1198 Posts

Posted - 03/12/2009 :  18:32:06
Квадратик больше сделать нельзя. Всегда одинаковый.
А по поводу связей вопросы уже были:
topic.asp@TOPIC_ID=2230.html
topic.asp@TOPIC_ID=827.html
topic.asp@TOPIC_ID=200.html
Go to Top of Page

maniac

Russia
25 Posts

Posted - 03/16/2009 :  08:36:36
Спасибо, прочитал, но понял не всё (в силу своих ограниченных возможностей :)).
Вопрос - если склеенны 2 шейпа (SH2 приклеен к SH1), то SH1 - пассивный, а SH2 - активный?

Tumanov ------
Вообще-то, пассивный, активный - это не очень распространенная терминология. Только так, для понимания...
В том топике квадратики - пассивные, коннекторы - активные. Квадратики ждут, когда к ним кто-то приклеится. Коннекторы цепляются за квадратики.
Go to Top of Page

maniac

Russia
25 Posts

Posted - 03/16/2009 :  13:09:31
Ещё вопросы.
Есть несколько "склеенных" шейпов. При двойном клике на шейпе, показываются его связи.

i = ActiveWindow.Selection.Item(1)
Set Active = ActivePage.Shapes(i).Connects.ToSheet
On Error Resume Next
MsgBox Active
Set Passive = ActivePage.Shapes(i).FromConnects.FromSheet
MsgBox Passive

1)Почему это не работает когда я копирую последний шейп и приклеиваю его к первому?
2)Как перейти на приклеенные шейпы через Connect (плохо с синтаксисом - если можно пример кода)
Спасибо!
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 03/16/2009 :  16:11:11
Слишком много ошибок.
i = ActiveWindow.Selection.Item(1)
Это очень кривая запись.
Лучше было бы
Set sh = ActiveWindow.Selection.Item(1)
sh - это будет селектированный шейп.
Connects.ToSheet - тоже в корне неверно.
Connects - это коллекция. Для .ToSheet обязательно нужно указывать какой-то элемент коллекции. Например Connects(1).ToSheet. Здесь указан первый элемент коллекции.
Тогда вместо строчки
Set Active = ActivePage.Shapes(i).Connects.ToSheet
должно быть нечто похожее на
Set Active = sh.Connects(1).ToSheet
Если селектирован коннектор, то такой строчкой мы получим шейп, к которому он подключен. Только тогда уж логично было бы писать не Active, а Passive :)
А если второй конец коннектора тоже куда-то подключен, то можно использовать и Connects(2). Это будет уже шейп с обратной стороны.
Но сдается мне, что Вы пытаетесь не коннекторы использовать, а 2D шейпы между собой склеивать. Тогда все усложняется. Надо разбираться с типами Conecction points (inward, outward...). В этом случае любой шейп может быть и "активным" и "пассивным" - в зависимости от типа точки.
Если точка Outward, значит шейп похож на коннектор. Если Inward - значит к ней будут коннектиться.
Если у шейпа есть точки обоих типов, значит опрашивать придется обе коллекции - и Connects и FromConnects.

Go to Top of Page

maniac

Russia
25 Posts

Posted - 03/17/2009 :  08:54:02
Всё верно, извиняюсь за кривоту изложения вопросов.
Есть ряд склееных между собой 2D-шейпов. При выборе любого шейпа мне необходимо считывать свойства каждого из них - длина, для получения суммарной длинны.
Этот код работает, за исключением первого склеенного шейпа.
Не помогает и защита от ошибки
Почему, не пойму?
Sub SumWidht()
Set sh = ActiveWindow.Selection.Item(1)
Set Active = sh.Connects(1).ToSheet
On Error Resume Next
MsgBox Active
Set Passive = sh.FromConnects(1).FromSheet
MsgBox Passive
End Sub
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 03/17/2009 :  16:07:54
Тут гадать можно долго...
Лучше пришлите файлик. Все лишнее из него удалите. Укажите точно ситуацию - с каким шейпом что не работает. Посмотрю, скажу.
Присылать на ttt@post.rzn.ru
Go to Top of Page

maniac

Russia
25 Posts

Posted - 03/19/2009 :  13:43:05
Геннадий, большое спасибо!
Всё работает!
Если кому интересно, то вот код:
Dim Passive(10) As String
Dim Active(10) As String
Sub ConnectedShapes()
Set sh = ActiveWindow.Selection.Item(1) 'выделенный шейп
'Активные связи 2D-шейпа
If sh.Connects.Count > 0 Then 'условие наличия активных связей
For i = 1 To sh.Connects.Count 'цикл перебора всех активных связей
Active(i) = sh.Connects(1).ToSheet 'активные связи (к чему приклеен)
Debug.Print Active(i)
Next
End If
'Пассивные связи 2D-шейпа
If sh.FromConnects.Count > 0 Then 'условие наличия пассивных связей
For i = 1 To sh.FromConnects.Count 'цикл перебора всех пассивных связей
Passive(i) = sh.FromConnects(i).FromSheet 'пассивные связи (какие шейпы приклеены к выделенному)
Debug.Print Passive(i)
Next
End If
End Sub
Эта программа определяет связи 2D-шейпа по 2clc(Format/Behavior/Double-click/RunMacro/ConnectedShapes)при выборе одного из склеенных шейпов.
Go to Top of Page

bdfy

Belarus
267 Posts

Posted - 03/29/2009 :  09:16:01
не могу связать две группы. коннекшн пойнтс вроде есть, вроде по размерам совпадают - соединения нет.
файл
http://rapidshare.de/files/46408185/testSx.vsd.html
условно говоря есть несколько групп "верхов" (распред. ус-во) и несколько групп "низов" (трансформаторы). в файле примере их под два типа. нужно их соединять в нужной конфигурации (в перспективе желательно скриптово). добится этого я не могу (( в чем ошибка ? коннекшн пойнтс не те или не там ?
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 03/29/2009 :  09:33:44
Слишком много нарисовано, поэтому вопрос не понятен.
Что-то соединяется, что-то нет...
Хорошо бы оставить в этом файле самый минимум, чтобы без вариантов было ясно, о какой точке идет речь.
Go to Top of Page

bdfy

Belarus
267 Posts

Posted - 03/29/2009 :  09:39:58
ок. оставил один верх один низ. слева они отдельно. справа соединены как нужно. только без "склейки", руками подогнаны.
мне же нужно чтобы группы легко склеивались при перетаскивании и соединялись легко скриптово. вроде точек соединения немеряно, но не цепляется ни одна
http://rapidshare.de/files/46408496/testSx.vsd.html
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 03/29/2009 :  19:11:33
Да, какие-то проблемы...
Сходу не понятно, в чем дело. И даже нет уверенности, что Visio вообще позволит такое склеить. Все-таки основное применение склеивания - это когда 2D шейпы соединяются коннекторами. Соединение двух 2D шейпов - это уже некоторый выход за рамки, но вроде еще объяснимый. А у Вас многократно вложенные группы, да еще и содержащие внутренние склеивания...
Visio ведь пытается все это по ходу дела пересчитать. И при любой ошибке цепочка вычислений гробится.
Сдается мне, что придется что-то в подходе пересматривать. Упрощать.
Go to Top of Page

zhuravsky

Russia
115 Posts

Posted - 03/30/2009 :  17:30:36
Обратите внимание!
Я однажды столкнулся с такими "особенностями" механизма приклеивания шейпа к шейпу:
1. Если шейп - это группа, состоящая более чем из 20-ти (примерно, точно не помню)элементов, то другой шейп может к первому и не приклеиться;

2. Если последовательно приклеиваешь друг к дружке одинаковые шейпы, то после 10-го-12-го (тоже точно не помню) с приклеиванием начинаются проблемы.

Попробуйте, например, сделать квадрат, у которого в левом нижнем и правом нижнем углу - коннекшен поинтс, скопируйте его несколько раз и поприклеивайте друг к другу.
Go to Top of Page

bdfy

Belarus
267 Posts

Posted - 03/31/2009 :  16:13:07
я вообще начинаю сомневаться что коннектор можно повесить к группе. в другом случае, на другом чертеже тоеж проблема похожая - группа много меньше, но коннектится желает только по точкам фигур включенных в группу. добавлять общую точку для группы в шейпшит словно бесполезно.
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)