All Forums
 Категория Visio
 Форум Вопросы и ответы
 Как преобразовать "Dynamic connector" в "Straight
Author Previous Topic Topic Next Topic  

VladimirALenin

5 Posts

Posted - 05/13/2008 :  16:49:59
Есть макрос, который рисует два сервера, соединеяет иx с помощью "Dynamic connector", а затем преобразует его в "Straight Connector".
Все обращения к элементам происходят через ItemFromID(31), где 31 - это значение ObjectID
Цитата:
Property ItemFromID(ObjectID As Long) As Document

откуда вытащить, как получить это ObjectID ?

Текст макроса (рисовал схему, записывался макрос):
Цитата:
Sub Macro1()

Application.Windows.ItemEx("Drawing1").Activate
Application.ActiveWindow.Page.Drop Application.Documents.Item("PERIPH_M.VSS").Masters.ItemU("Server"), 2.007874, 6.692913

Application.Windows.ItemEx("Drawing1").Activate
Application.ActiveWindow.Page.Drop Application.Documents.Item("PERIPH_M.VSS").Masters.ItemU("Server"), 5.748031, 1.377953

Dim UndoScopeID1 As Long
UndoScopeID1 = Application.BeginUndoScope("Drop On Page")
Application.Windows.ItemEx("Drawing1").Activate
Application.ActiveWindow.Page.Drop Application.Documents.Item("Drawing1").Masters.ItemU("Dynamic connector"), 0#, 0#
Dim vsoCell1 As Visio.Cell
Dim vsoCell2 As Visio.Cell
Set vsoCell1 = Application.ActiveWindow.Page.Shapes.ItemFromID(31).CellsU("BeginX")
Set vsoCell2 = Application.ActiveWindow.Page.Shapes.ItemFromID(1).CellsSRC(7, 0, 0)
vsoCell1.GlueTo vsoCell2
Set vsoCell1 = Application.ActiveWindow.Page.Shapes.ItemFromID(31).CellsU("EndX")
Set vsoCell2 = Application.ActiveWindow.Page.Shapes.ItemFromID(16).CellsSRC(7, 0, 0)
vsoCell1.GlueTo vsoCell2
Application.EndUndoScope UndoScopeID1, True

Dim UndoScopeID2 As Long
UndoScopeID2 = Application.BeginUndoScope("Straight Connector")
Application.ActiveWindow.Page.Shapes.ItemFromID(31).CellsSRC(visSectionObject, visRowShapeLayout, visSLOLineRouteExt).FormulaU = 1
Application.ActiveWindow.Page.Shapes.ItemFromID(31).CellsSRC(visSectionObject, visRowShapeLayout, visSLORouteStyle).FormulaU = 16
Application.EndUndoScope UndoScopeID2, True

Application.ActiveWindow.DeselectAll

End Sub



Заранее благодарю!

Tumanov

Russia
1198 Posts

Posted - 05/13/2008 :  17:59:52
ObjectID - свойство, возвращающее объект, в данном случае шейп.
Вам проще получить ссылку на шейп другим образом. Вместо
Application.ActiveWindow.Page.Drop Application.Documents.Item("Drawing1").Masters.ItemU("Dynamic connector"), 0#, 0#
использовать
Set ShapeConnector = Application.ActiveWindow.Page.Drop Application.Documents.Item("Drawing1").Masters.ItemU("Dynamic connector"), 0#, 0#
Тогда ниже везде вместо
Application.ActiveWindow.Page.Shapes.ItemFromID(31)
можно будет писать просто
ShapeConnector
Например,
Set vsoCell1 = ShapeConnector.CellsU("BeginX")
Go to Top of Page

VladimirALenin

5 Posts

Posted - 05/13/2008 :  20:29:32
Tumanov, СПАСИБО!
Но это лишь позволит сократить код макроса.
Возможно, я "криво" сформулировал конечную цель.
Макрос должен соединять объекты, которые уже нарисованы.

Для этого нужно либо в процессе их переноса на лист определять их ObjectID, либо просканировать все объекты, которые уже нарисованы и для каждого определить его номер.
Я не могу догадаться как же подобраться к номеру объекта.

Нумерация хитрая:
"pc" нумеруются с шагом объекта 27, т.е. если первый был 1, то второй будет 28.
"Server" с шагом 15.
"Switch" с шагом 25.
Т.е. у каждого шэйпа свой "шаг" нумерации.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 05/14/2008 :  04:15:47
Нет.
Сокращение кода - это мелкий побочный эффект. Основное - это то, что у Вас появляется ссылка на объект, которую Вы можете использовать вместо нумерации.
А искать закономерности в нумерации бесполезное занятие.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 05/14/2008 :  04:54:11
Хотя, используя ссылку, Вы можете и номер получить. Например,
ObjectID = ShapeConnector.ID
Go to Top of Page

VladimirALenin

5 Posts

Posted - 05/15/2008 :  12:59:01
Tumanov, СПАСИБО!
Это то, что мне было нужно.
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)