All Forums
 Категория Visio
 Форум Вопросы и ответы
 вопрос к программному подключению дин. коннектора
Author Previous Topic Topic Next Topic  

krys

55 Posts

Posted - 10/24/2006 :  15:08:59
Добрый день.
Я работаю с kоннекторами для которых должно действовать условие что, они могут сгибаться только под прямым углом.
Имеется следующая ситуация :
Ш1 Ш2
|
|
Коннектор расположен на чертеже под шейпом
один конец коннектора подключен к етому шейпу, другой конец я программно подключаю к рядом стоящему шейпу, передавая Координатам линии EndX и EndY координаты Точки подключения данного шейпа. Я ожидаю увидеть следующее :
Ш1 Ш2
| |
|___|

Вместо етого я получаю Линию в Форме зуба:

Ш1 Ш2
| /
| /
|/

При етом в коннтекстном меню етой линии выбран пункт "прямоугольный" коннектор. Если я мышью кликаю еще раз на етом пункте, то линия принимает прямоугольную форму.

Я пробовал добавлять строки LineTo с нужными значениями в Секцию Geometry,но если v ячейкe ObjType я потом восстанавливаю изначальное значение равное 2 то эффект от этой акции
нулевой

что я делаю неправильно?


Заранее спасибо за помощь.

Edited by - krys on 10/24/2006 15:50:49

brace

Russia
358 Posts

Posted - 10/24/2006 :  15:55:42
навскидку не вдаваясь в детали
вот статья про коннекторы...

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devref/HTML/DVS_19_Automating_connections_in_a_Visio_solution_317.asp
Go to Top of Page

krys

55 Posts

Posted - 10/25/2006 :  12:45:32
Привет.
Для теста я создал два макроса:
Sub Drop()
Application.ActiveWindow.Page.Shapes.ItemFromID(3).Duplicate
Dim UndoScopeID1 As Long
UndoScopeID1 = Application.BeginUndoScope("Drop and Move")

Dim vsoCell3 As Visio.Cell
Dim vsoCell4 As Visio.Cell

Set vsoCell1 = Application.ActiveWindow.Page.Shapes.ItemFromID(4).CellsU("BeginX")
Set vsoCell2 = Application.ActiveWindow.Page.Shapes.ItemFromID(1).CellsSRC(7, 4, 0)
vsoCell1.GlueTo vsoCell2
Set vsoCell1 = Application.ActiveWindow.Page.Shapes.ItemFromID(4).CellsU("EndX")
Set vsoCell2 = Application.ActiveWindow.Page.Shapes.ItemFromID(2).CellsSRC(7, 4, 0)
vsoCell1.GlueTo vsoCell2

Application.EndUndoScope UndoScopeID1, True
End Sub

Sub Glue2()
Dim UndoScopeID1 As Long
UndoScopeID1 = Application.BeginUndoScope("Glue")
Dim vsoCell1 As Visio.Cell
Dim vsoCell2 As Visio.Cell

Set vsoCell1 = Application.ActiveWindow.Page.Shapes.ItemFromID(4).CellsU("BeginX")
Set vsoCell2 = Application.ActiveWindow.Page.Shapes.ItemFromID(4).CellsU("BeginY")
vsoCell1.FormulaForceU = "126.0 mm"
vsoCell2.FormulaForceU = "84.0 mm"
Application.EndUndoScope UndoScopeID1, True


End Sub

Item1(ID=1) и Item2(ID=2): Пумпы-тип центрифуга, Item3 (ID=3) главный Трубопровод(без стрелок). Item4(ID=4) Дупликат трубопровода.
Я не могу точно сказать как называется шаблон по-русски , вроде как "технология"

Трубопровод концами подключен к пунктам соединения Connections.X5,Connections.Y5 обоих пумп.
Удерживая левую кнопку мыши на середине "основания" линии я вытягиваю линию.(концы линии зафиксированы)

Если я через меню по очереди выполняю операции прописанные в макросах, то я получаю результат отличный от того который я получаю при выполнении ниже показанного макроса.

Sub DuG2()
Drop
Glue2
End Sub

В первом случае начальный пункт дупликата получает новые координаты, но положение фигуры на чертеже не меняется. Во втором случае вся фигура смещается относительно начальной точки

Может мне кто-то обьяснить в чем разница.


Edited by - krys on 10/30/2006 02:41:05
Go to Top of Page

brace

Russia
358 Posts

Posted - 10/30/2006 :  09:23:21

если нужно чтобы шейп не сдвигался со своего места
можно запретить ему это дело !!!
Format > Protection выходит окно Protection в котором поставь птички в нужных местах.
Go to Top of Page

krys

55 Posts

Posted - 10/30/2006 :  18:50:23
мне нужно что бы дубликат вел себя так же как и оригинал поетому не желательно вообще что либо менять:(. Меня же интересует почему дублицат в вроде бы схожих ситуациях ведет себя по разному .Может между операциями значения каких-то ячеек меняются?
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 10/30/2006 :  18:59:41
Может быть разница в том, что ручные операции не проходят на защищенных ячейках, а vsoCell1.FormulaForceU преодолевает Guard?
Go to Top of Page

krys

55 Posts

Posted - 10/31/2006 :  14:03:00
Вручную ничего и не делается. Я ведь в обоих случаях выполняю одни и те же Макросы.
Go to Top of Page

brace

Russia
358 Posts

Posted - 10/31/2006 :  18:16:22

чтобы шейп не двигался надо поставиь 1 в ячейки
Lock Move X и Lock Move Y см. ShapeSheet секция Protection.
это можно сделать пограммно ...
Go to Top of Page

krys

55 Posts

Posted - 10/31/2006 :  21:08:27
Спасибо за подсказку.
У меня вот какой вопрос:
Как можно программно изменить путь динамического коннектора и как можно выбросить ненужные колени линии( а то если я один из концов коннектора приклеиваю к другой фигуре, он иногда так выкручивается, что и не поймешь, где начало где конец).
Я попытался через изменение значений в ячейках Секции "Геометрия", но если ObjType=2, то я не вижу никаких перемен(переключение на 4 и обратно ничего не дает.)

Edited by - krys on 10/31/2006 21:09:43
Go to Top of Page

brace

Russia
358 Posts

Posted - 11/01/2006 :  09:14:12

я конечно не знаю в каких ячейках чего надо менять
если надо узнать -- делаю так :
1. просматриваю ShapeSheet до изменений формы шейпа
2. делаю нужные изменения шейпа
3. просматриваю ShapeSheet еще раз и смотрю что изменилось.

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)