All Forums
 Категория Visio
 Форум Вопросы и ответы
 Проблема с именем мастер шейпа
Author Previous Topic Topic Next Topic  

AlexeyM

Russia
4 Posts

Posted - 02/04/2005 :  12:41:11
Мне необходимо определять тип шейпа. Проще всего это делать по имени его мастер шейпа, но есть проблема. Если я создаю мастер шейп с именем, например, Прямоугольник и создаю несколько шейпов в документе на его основе (просто перетаскиваю его на документ), то все ОК - все эти шейпы получают имена Прямоугольник.ID (впрочем, имена самих шейпов меня не интересуют), а имя мастер шейпа для всех является Прямоугольник. Теперь допустим мне необходимо немного изменить сам мастер шейп в трафарете или вобще пересоздать его. Для этого удаляю мастер шейп Прямоугольник из трафарета или создаю новый трафарет, затем помещаю на трафарет другой мастер шейп и даю ему то же имя Прямоугольник. Теперь если добавить к документу новый шейп на основе нового мастер шейпа Прямоугольник, то для всех шейпов имя мастер шейпа будет не Прямоугольник, а Прямоугольник.X, т.е. к имени мастер шепа будет добавлено определенное число. Еще раз подчеркиваю, что это именно имя мастер шейпа для всех образованных шейпов, а не имена самих шейпов. Почему-то в документе запоминается, что в нем уже существовали шейпы образованные от мастер шейпа с таким именем (Прямоугольник) и теперь, если создать новый мастер шейп с таким именем и добавить к документу шейпы на его основе, то для этих шейпов к имени мастер шейпа будет добавляться определенный ID. Это будет происходить, даже если удалить предварительно старый мастер шейп и все шейпы в документе образованные от него, и только потом создавать его заново. На самом же трафарете мастер шейп имеет необходимое имя - без добавления ID, и если открыть новый документ, то в нем для всех шейпов будет также имя мастера без добавления ID. Т.е. все из-за того, что в старом документе запоминаются имена мастеров когда-либо добавлявшихся к нему.
Фу-у-у... Я надеюсь, что понятно объяснил.

Сейчас еще раз это проверил и вобще в тупике теперь. У меня Visio2000. Создаю новый документ и трафарет, рисую любой шейп в документе, кидаю его на трафарет (создаю мастер шейп), изменяю имя мастер шейпа, например, Супер. Затем кидаю несколько копий мастер шейпа на документ. Удаляю все шейпы из документа и мастер шейп из трафарета. Теперь заново также создаю мастер шейп с тем же именем. И если теперь снова кидаю копии этого мастера на документ, то кроме того, что имя мастер шейпа у шейпов будет с ID, у одного из шейпов имя будет Sheet.ID вместо Супер.ID - это вобще беспредел какой-то.

Что за глюки и как быть?

Я помню, что где-то лазия по Visio я выводил дерево объектов в документе, в том числе и всех шейпов. В том дереве насколько я помню присутствовали даже удаленные шейпы. Наверное проблема в этом - нужно удалить информацию обо всех удаленных шейпах из документа. Но как?

Edited by - AlexeyM on 02/04/2005 12:46:00

AlexeyM

Russia
4 Posts

Posted - 02/04/2005 :  12:44:53
Если точнее, у меня Visio2000 SR1.
Go to Top of Page

immortal

Russia
391 Posts

Posted - 02/04/2005 :  13:39:22  Visit immortal's Homepage
можно идентефецировать шейп по какому нибудь другому оригинальному свойству, я это делаю в шейп-листе в ячейках пользователя, даю оригинальное имя типа user.my_original и если имя не совподает то это не мой "прямоугольник"

визио 2003 форэвер

...а вобще-то я белый и пушистый.
Go to Top of Page

asleep

8 Posts

Posted - 02/04/2005 :  15:07:53
разумнее всего воспользоваться предыдущим советом и не страдать с глюками Visio ибо в нем таких залеп еще куча

на самом деле документ не запоминает имена мастеров
он хранит сами мастера в своем стенсиле (Document Stencil)
выйти на него можно через Drawing Explorer->Masters->Document Stencil
программно он тоже доступен

документ использует этот стенсил чтобы не хранить несколько одинаковых копий шейпов, вместо дублирования их внутренностей ему достаточно знать координаты и размеры элемента а начинку он берет из соответствующего мастера в своем стенсиле
он не чистит этот стенсил при удалении последней копии мастера с листа
можно написать соответствующую функцию самому

добавление в стенсил происходит в момент добавления на лист шейпа созданного на основе мастера
имя в данном случае не имеет значения
если в стенсил добавляется мастер с именем уже используемым в стенсиле то к имени добавляется номер

этой штукой можно пользоваться для подмены изображений шепов наследующих себя из мастеров

наследование обрывается если на основе шейпа создать новый мастер
в шейпах нового мастера не будет ссылки на мастера из которых эти самые шейпы изначально были созданы
возможно есть еще способы потери родителя (как минимум удаление родителя из Document Stencil)
Go to Top of Page

Julia

Russia
23 Posts

Posted - 04/07/2005 :  13:19:17
Хотелось бы еще уточнения, что произойдет, если в Drawing Explorer удалить все мастера, которые находятся в рисунке? и как быть, если создано какое-то количество рисунков и в них необходимо поменять мастер-шейпы. я видела предложение по переводу рисунка в XML, но это удобно только для одиночных, а если их десяток?
Go to Top of Page

immortal

Russia
391 Posts

Posted - 04/07/2005 :  15:56:30  Visit immortal's Homepage
quote:
Originally posted by Julia

Хотелось бы еще уточнения, что произойдет, если в Drawing Explorer удалить все мастера, которые находятся в рисунке?



удаляться ссылки на между мастером и шейпом на рисунке и будет
Меню Формат - Особый - Мастер: <нет мастера>
если не удалять то
Меню Формат - Особый - Мастер: Имя мастера

quote:
и как быть, если создано какое-то количество рисунков и в них необходимо поменять мастер-шейпы. я видела предложение по переводу рисунка в XML, но это удобно только для одиночных, а если их десяток?


не понятно как надо менять мастер-шейпы, что конкретно менять?

визио 2003 форэвер

...а вобще-то я белый и пушистый.

Edited by - immortal on 04/07/2005 15:59:32
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 04/07/2005 :  19:31:07
В общем случае заменить мастер-шейпы нельзя. Но для частных случаев может быть что-то и удастся сделать. Какие у Вас ограничения? Опишите поконкретнее:
- шейпы простые или группы;
- отличаются ли новые от старых размерами;
- шейпы на рисунке соединяются универсальными коннекторами или обычными линиями;
- существуют ли специальные точки связи;
- тип рисунка (например, схема сети, организационная диаграмма и т.д.).
Вполне возможно, что Ваш рисунок можно перевести в некоторое описание, топологию, а потом восстановить по нему уже с новыми мастерами.
Go to Top of Page

Julia

Russia
23 Posts

Posted - 04/08/2005 :  11:38:49
quote:
Originally posted by Tumanov

В общем случае заменить мастер-шейпы нельзя. Но для частных случаев может быть что-то и удастся сделать. Какие у Вас ограничения? Опишите поконкретнее:
- шейпы простые или группы;
- отличаются ли новые от старых размерами;
- шейпы на рисунке соединяются универсальными коннекторами или обычными линиями;
- существуют ли специальные точки связи;
- тип рисунка (например, схема сети, организационная диаграмма и т.д.).
Вполне возможно, что Ваш рисунок можно перевести в некоторое описание, топологию, а потом восстановить по нему уже с новыми мастерами.


это один и тот же мастер-шейп, но в нем исправлены свойства, параметры, геометрия не менялась, состоят из групп, коннекотры отсутствуют, тип рисунка - схема ВЛ из собственных Шейпов.
Go to Top of Page

immortal

Russia
391 Posts

Posted - 04/08/2005 :  12:21:51  Visit immortal's Homepage
свойства и параметры поменять конечно можно, и в моих разработках это меняется, т.е. выделяем элементы, и применяем ко всем выделенным элементам свойства элемента который выделен первым, либо применяем свойства которые выбрали из базы данных.
способ второй, тоже основан на другой моей разработке, делается visio - excel, в екселе исправляются свойства, и делаем обратно excel - visio,
вобще кустом проперти можно менять и без всяких макросов, достаточно выделить шейпы и поменять проперти, проперти поменяются во всех выделенных шейпах

визио 2003 форэвер

...а вобще-то я белый и пушистый.
Go to Top of Page

Julia

Russia
23 Posts

Posted - 04/12/2005 :  13:11:09
quote:
Originally posted by immortal

свойства и параметры поменять конечно можно, и в моих разработках это меняется, т.е. выделяем элементы, и применяем ко всем выделенным элементам свойства элемента который выделен первым, либо применяем свойства которые выбрали из базы данных.
способ второй, тоже основан на другой моей разработке, делается visio - excel, в екселе исправляются свойства, и делаем обратно excel - visio,
вобще кустом проперти можно менять и без всяких макросов, достаточно выделить шейпы и поменять проперти, проперти поменяются во всех выделенных шейпах



представте наработано уже десятки рисунков, в них так же достаточное количество измененных мастер-шейпов. появилось распоряжение добавить в некоторые параметры, как во всех рисунках можно это сделать? НЕ ВОЗМОЖНО ЖЕ ОТКРЫВАТЬ ВСЕ. рисунки в последствии используются не только для печати, но и для просмотра...
Go to Top of Page

immortal

Russia
391 Posts

Posted - 04/12/2005 :  13:29:14  Visit immortal's Homepage
А свойство которое необходимо менять уже есть?
вобще если свойство уже есть, то необходимо выгрузить всё в ексель, можно даже только это свойство, потом изменить значение этого свойства в екселе и сделать excel -> visio, данную процедуру можно проделать с помощью моей програмки visio2excel.exe которую можно взять тут http://www.immortal.vstu.edu.ru/visio/visio.htm обсуждение и предложения по программе тут topic.asp@TOPIC_ID=478.html

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


визио 2003 форэвер

...а вобще-то я белый и пушистый.
Go to Top of Page

Julia

Russia
23 Posts

Posted - 04/12/2005 :  16:39:28
quote:
Originally posted by immortal

А свойство которое необходимо менять уже есть?
вобще если свойство уже есть, то необходимо выгрузить всё в ексель, можно даже только это свойство, потом изменить значение этого свойства в екселе и сделать excel -> visio, данную процедуру можно проделать с помощью моей програмки visio2excel.exe


и что поменяются свойства автоматом во всех созданных рисунках?

что я имею ввиду: пользователи создали, например, схемы контуров РП (рисунки)10 штук, и вдруг им понадобилось изменить/добавить свойство/поведение, но чтобы это было видно и в уже созданных рисунках (желательно чтоб автоматом обновлялись уже поставленные шейпы, то что предлагаете необходимо проводить с каждым рисунком?
Go to Top of Page

immortal

Russia
391 Posts

Posted - 04/13/2005 :  08:23:40  Visit immortal's Homepage
описанный мной способ позволит поменять все необходимые свойства во всех шейпах на одном листе, для изменения на другом листе операцию необходимо повторить, на счёт автоматом: при выгрузке свойств в ексель вам необходимо поменять свойства а ручную в екселе, если свойства одинаковые, то делаем это простым копированием, далее после изменения свойств делаем обратно ексель -> визио и все свойства которые вы сделали в екселе изменяться на листе визио.
попробуйте поэксперементируйте и задайте вопрос конкретно по работе программы (или предложение по модернизации, доработке программы)

визио 2003 форэвер

...а вобще-то я белый и пушистый.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 04/13/2005 :  19:08:46
Здесь нужно думать об эффективности решения.
Если задача возникает неоднократно, то можно написать программу, перебирающую все файлы Visio, лежащие в определенной папке, выбирающую в них шейпы определенного типа и изменяющую нужные свойства.
Можно сделать несколько более универсально. Дать программе отсканировать один измененный шейп, выбрать изменившийся набор свойств и применить этот набор ко всем файлам в папке.
Вопрос только - стоит ли тратить, например, день на написание такой программы, если применяться она будет раз в год, а вручную или с программой, предлагаемой immortal, того же результата можно добиться за пару часов.
Хотя, второй вариант я собираюсь со временем реализовать. Тем более что похожие программы существуют. Например, Ravelin Essential Visio-tools стоимостью около 100 евро; там в пакете несколько функций, в том числе копирование секции шейп-листа, но больше применительно к этапу разработки шейпов. Есть еще VisiTools 2003 for Visio 2003 с программой VisiClone 2003
всего за 80$; по рекламе она "Easily copies any characteristics from one shape to others"
А программку для частного случая (первый вариант) написать довольно легко.
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)