хочу написать в VisualStudio .Net плагин для Visio, который бы работал с диаграммами UML. и никак не могу разобраться — как получить доступ к данным Visio? к примеру, есть диаграмма UML описывающая класс — как "опросить" на С++ эту UML-фигуру?
Здравствуйте, bebabo, Вы писали:
B>хочу написать в VisualStudio .Net плагин для Visio, который бы работал с диаграммами UML. и никак не могу разобраться — как получить доступ к данным Visio? к примеру, есть диаграмма UML описывающая класс — как "опросить" на С++ эту UML-фигуру?
Никак. Visio не предоставляют данные модели для UML-диаграм.
Почти что FAQ в microsoft.public.visio.developer
FYI, на самом деле, UML в Visio реализован тоже как плагин.
Здравствуйте, bnk, Вы писали:
bnk>Никак. Visio не предоставляют данные модели для UML-диаграм. bnk>Почти что FAQ в microsoft.public.visio.developer bnk>FYI, на самом деле, UML в Visio реализован тоже как плагин.
наверное я не совсем правильно сформулировал вопрос. меня интересуют не данные объекта, для которого рисуется диаграмма,
а чтение и анализ самой диаграммы. в принципе, я уже научился, как опрашивать фигуры и извлекать из них данные. к примеру, если есть фигура State — я могу получить тип этой фигуры, ее название (вписанное в фигуру), но никак не получается извлечь такие данные, как EntryActions... если вдруг кто знает — буду очен признателен )
Здравствуйте, bebabo, Вы писали:
B>Здравствуйте, bnk, Вы писали:
bnk>>Никак. Visio не предоставляют данные модели для UML-диаграм. bnk>>Почти что FAQ в microsoft.public.visio.developer bnk>>FYI, на самом деле, UML в Visio реализован тоже как плагин.
B>наверное я не совсем правильно сформулировал вопрос. меня интересуют не данные объекта, для которого рисуется диаграмма, B>а чтение и анализ самой диаграммы. в принципе, я уже научился, как опрашивать фигуры и извлекать из них данные. к примеру, если есть фигура State — я могу получить тип этой фигуры, ее название (вписанное в фигуру), но никак не получается извлечь такие данные, как EntryActions... если вдруг кто знает — буду очен признателен )
Ну дак я про то же и говорю. Это и есть "данные модели". Под "Данными модели" я имел в виду все практически все, что не отображается явно на диаграмме, но существует (для UML). Visio UML addon эти данные хранит в бинарном виде в собственном (проприетарном, недокументированном) формате. Физически они хранятся в DocumentStencil-е — заводится отдельный скрытый "мастер" (который называется "UML"), в который все эти данные как BLOB все и сливаются. Где-то попадался даже анализ данных этого BOLB-а, но в общем это дело весьма хлопотное и достаточно бесперспективное, если вы не любитель дизассемлирования.
В принципе существует несколько "выходов" из данной ситуации (с классами, методами, параметрам вполне прокатывает, но насчет StateChart я не уверен):
— Использовать Visio UML To XMI Export, для экспорта данных UML модели из Visio стандартный XMI формат, который уже можно обрабатывать (или передавать в другие программы).
— Использовать команду создания отчетов "Report" для UML (есть в Visio EA который идет с Visual Studio), потом из отчетов выколупывать нужные вам данные.
Здравствуйте, bnk, Вы писали:
bnk>Ну дак я про то же и говорю. Это и есть "данные модели". Под "Данными модели" я имел в виду все практически все, что не отображается явно на диаграмме, но существует (для UML). Visio UML addon эти данные хранит в бинарном виде в собственном (проприетарном, недокументированном) формате. Физически они хранятся в DocumentStencil-е — заводится отдельный скрытый "мастер" (который называется "UML"), в который все эти данные как BLOB все и сливаются. Где-то попадался даже анализ данных этого BOLB-а, но в общем это дело весьма хлопотное и достаточно бесперспективное, если вы не любитель дизассемлирования.
bnk>В принципе существует несколько "выходов" из данной ситуации (с классами, методами, параметрам вполне прокатывает, но насчет StateChart я не уверен):
bnk>- Использовать Visio UML To XMI Export, для экспорта данных UML модели из Visio стандартный XMI формат, который уже можно обрабатывать (или передавать в другие программы).
bnk>- Использовать команду создания отчетов "Report" для UML (есть в Visio EA который идет с Visual Studio), потом из отчетов выколупывать нужные вам данные.
Большое спасибо! Буду пробовать )
И еще один вопрос. Если данные модели явно отображаются на диаграмме (можно прописать "внутри" фигуры различные действия, сделать их видимыми, и они будут следовать под названием фигуры, отделенные горизонтальной чертой) — как получить эти данные? Если не ошибаюсь, подобная фигура (с видимыми действиями) — на самом деле группа фигур. Пробовал разгруппировать ее Shape-методом, но ничего не получилось. Пока нашел только один — зверский — способ: пересохранить документ в vdx и прочитать его как xml (кстати, таким образом можно извлечь некоторые скрытые данные фигуры), но этот способ плох тем, что в xml-формате все фигуры изначально раздельны и сложно установить между ними связь.
Здравствуйте, bebabo, Вы писали:
B>Большое спасибо! Буду пробовать ) B>И еще один вопрос. Если данные модели явно отображаются на диаграмме (можно прописать "внутри" фигуры различные действия, сделать их видимыми, и они будут следовать под названием фигуры, отделенные горизонтальной чертой) — как получить эти данные? Если не ошибаюсь, подобная фигура (с видимыми действиями) — на самом деле группа фигур. Пробовал разгруппировать ее Shape-методом, но ничего не получилось. Пока нашел только один — зверский — способ: пересохранить документ в vdx и прочитать его как xml (кстати, таким образом можно извлечь некоторые скрытые данные фигуры), но этот способ плох тем, что в xml-формате все фигуры изначально раздельны и сложно установить между ними связь.
Это можно. У каждой Shape есть проперти Shapes, если пройтись рекурсивно, то вполне можно все что видно на диаграмме достать.
Кстати, не разгруппировывается потому, что там для UML-шейпов установлена "защита от разгруппировки". Ее в принципе можно легко убрать через ShapeSheet (поставить все поля в секции Protection в 0)
Здравствуйте, bebabo, Вы писали:
B>Если данные модели явно отображаются на диаграмме (можно прописать "внутри" фигуры различные действия, сделать их видимыми, и они будут следовать под названием фигуры, отделенные горизонтальной чертой) — как получить эти данные? Если не ошибаюсь, подобная фигура (с видимыми действиями) — на самом деле группа фигур.
Пример как достать то что есть на диаграмме (EntryActions для State):
Вообще, для просмотра того чего где есть и как сгруппировано,
есть такая полезная вещь как View -> Drawing Explorer Window
B>Пробовал разгруппировать ее Shape-методом, но ничего не получилось.
Про это уже написал