Author |
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. |
|
|
immortal
Russia
391 Posts |
Posted - 02/04/2005 : 13:39:22
|
можно идентефецировать шейп по какому нибудь другому оригинальному свойству, я это делаю в шейп-листе в ячейках пользователя, даю оригинальное имя типа user.my_original и если имя не совподает то это не мой "прямоугольник"
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
asleep
8 Posts |
Posted - 02/04/2005 : 15:07:53
|
разумнее всего воспользоваться предыдущим советом и не страдать с глюками Visio ибо в нем таких залеп еще куча
на самом деле документ не запоминает имена мастеров он хранит сами мастера в своем стенсиле (Document Stencil) выйти на него можно через Drawing Explorer->Masters->Document Stencil программно он тоже доступен
документ использует этот стенсил чтобы не хранить несколько одинаковых копий шейпов, вместо дублирования их внутренностей ему достаточно знать координаты и размеры элемента а начинку он берет из соответствующего мастера в своем стенсиле он не чистит этот стенсил при удалении последней копии мастера с листа можно написать соответствующую функцию самому
добавление в стенсил происходит в момент добавления на лист шейпа созданного на основе мастера имя в данном случае не имеет значения если в стенсил добавляется мастер с именем уже используемым в стенсиле то к имени добавляется номер
этой штукой можно пользоваться для подмены изображений шепов наследующих себя из мастеров
наследование обрывается если на основе шейпа создать новый мастер в шейпах нового мастера не будет ссылки на мастера из которых эти самые шейпы изначально были созданы возможно есть еще способы потери родителя (как минимум удаление родителя из Document Stencil) |
|
|
Julia
Russia
23 Posts |
Posted - 04/07/2005 : 13:19:17
|
Хотелось бы еще уточнения, что произойдет, если в Drawing Explorer удалить все мастера, которые находятся в рисунке? и как быть, если создано какое-то количество рисунков и в них необходимо поменять мастер-шейпы. я видела предложение по переводу рисунка в XML, но это удобно только для одиночных, а если их десяток? |
|
|
immortal
Russia
391 Posts |
Posted - 04/07/2005 : 15:56:30
|
quote: Originally posted by Julia
Хотелось бы еще уточнения, что произойдет, если в Drawing Explorer удалить все мастера, которые находятся в рисунке?
удаляться ссылки на между мастером и шейпом на рисунке и будет Меню Формат - Особый - Мастер: <нет мастера> если не удалять то Меню Формат - Особый - Мастер: Имя мастера
quote: и как быть, если создано какое-то количество рисунков и в них необходимо поменять мастер-шейпы. я видела предложение по переводу рисунка в XML, но это удобно только для одиночных, а если их десяток?
не понятно как надо менять мастер-шейпы, что конкретно менять?
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
Edited by - immortal on 04/07/2005 15:59:32 |
|
|
Tumanov
Russia
1198 Posts |
Posted - 04/07/2005 : 19:31:07
|
В общем случае заменить мастер-шейпы нельзя. Но для частных случаев может быть что-то и удастся сделать. Какие у Вас ограничения? Опишите поконкретнее: - шейпы простые или группы; - отличаются ли новые от старых размерами; - шейпы на рисунке соединяются универсальными коннекторами или обычными линиями; - существуют ли специальные точки связи; - тип рисунка (например, схема сети, организационная диаграмма и т.д.). Вполне возможно, что Ваш рисунок можно перевести в некоторое описание, топологию, а потом восстановить по нему уже с новыми мастерами. |
|
|
Julia
Russia
23 Posts |
Posted - 04/08/2005 : 11:38:49
|
quote: Originally posted by Tumanov
В общем случае заменить мастер-шейпы нельзя. Но для частных случаев может быть что-то и удастся сделать. Какие у Вас ограничения? Опишите поконкретнее: - шейпы простые или группы; - отличаются ли новые от старых размерами; - шейпы на рисунке соединяются универсальными коннекторами или обычными линиями; - существуют ли специальные точки связи; - тип рисунка (например, схема сети, организационная диаграмма и т.д.). Вполне возможно, что Ваш рисунок можно перевести в некоторое описание, топологию, а потом восстановить по нему уже с новыми мастерами.
это один и тот же мастер-шейп, но в нем исправлены свойства, параметры, геометрия не менялась, состоят из групп, коннекотры отсутствуют, тип рисунка - схема ВЛ из собственных Шейпов.
|
|
|
immortal
Russia
391 Posts |
Posted - 04/08/2005 : 12:21:51
|
свойства и параметры поменять конечно можно, и в моих разработках это меняется, т.е. выделяем элементы, и применяем ко всем выделенным элементам свойства элемента который выделен первым, либо применяем свойства которые выбрали из базы данных. способ второй, тоже основан на другой моей разработке, делается visio - excel, в екселе исправляются свойства, и делаем обратно excel - visio, вобще кустом проперти можно менять и без всяких макросов, достаточно выделить шейпы и поменять проперти, проперти поменяются во всех выделенных шейпах
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
Julia
Russia
23 Posts |
Posted - 04/12/2005 : 13:11:09
|
quote: Originally posted by immortal
свойства и параметры поменять конечно можно, и в моих разработках это меняется, т.е. выделяем элементы, и применяем ко всем выделенным элементам свойства элемента который выделен первым, либо применяем свойства которые выбрали из базы данных. способ второй, тоже основан на другой моей разработке, делается visio - excel, в екселе исправляются свойства, и делаем обратно excel - visio, вобще кустом проперти можно менять и без всяких макросов, достаточно выделить шейпы и поменять проперти, проперти поменяются во всех выделенных шейпах
представте наработано уже десятки рисунков, в них так же достаточное количество измененных мастер-шейпов. появилось распоряжение добавить в некоторые параметры, как во всех рисунках можно это сделать? НЕ ВОЗМОЖНО ЖЕ ОТКРЫВАТЬ ВСЕ. рисунки в последствии используются не только для печати, но и для просмотра... |
|
|
immortal
Russia
391 Posts |
Posted - 04/12/2005 : 13:29:14
|
А свойство которое необходимо менять уже есть? вобще если свойство уже есть, то необходимо выгрузить всё в ексель, можно даже только это свойство, потом изменить значение этого свойства в екселе и сделать excel -> visio, данную процедуру можно проделать с помощью моей програмки visio2excel.exe которую можно взять тут http://www.immortal.vstu.edu.ru/visio/visio.htm обсуждение и предложения по программе тут topic.asp@TOPIC_ID=478.html
если же свойства нет, тогда надо писать программу чтобы это свойство добовлялось, что в принципе тоже возможно, наверно я это добавлю в свою програмку.
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
Julia
Russia
23 Posts |
Posted - 04/12/2005 : 16:39:28
|
quote: Originally posted by immortal
А свойство которое необходимо менять уже есть? вобще если свойство уже есть, то необходимо выгрузить всё в ексель, можно даже только это свойство, потом изменить значение этого свойства в екселе и сделать excel -> visio, данную процедуру можно проделать с помощью моей програмки visio2excel.exe
и что поменяются свойства автоматом во всех созданных рисунках?
что я имею ввиду: пользователи создали, например, схемы контуров РП (рисунки)10 штук, и вдруг им понадобилось изменить/добавить свойство/поведение, но чтобы это было видно и в уже созданных рисунках (желательно чтоб автоматом обновлялись уже поставленные шейпы, то что предлагаете необходимо проводить с каждым рисунком? |
|
|
immortal
Russia
391 Posts |
Posted - 04/13/2005 : 08:23:40
|
описанный мной способ позволит поменять все необходимые свойства во всех шейпах на одном листе, для изменения на другом листе операцию необходимо повторить, на счёт автоматом: при выгрузке свойств в ексель вам необходимо поменять свойства а ручную в екселе, если свойства одинаковые, то делаем это простым копированием, далее после изменения свойств делаем обратно ексель -> визио и все свойства которые вы сделали в екселе изменяться на листе визио. попробуйте поэксперементируйте и задайте вопрос конкретно по работе программы (или предложение по модернизации, доработке программы)
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
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" А программку для частного случая (первый вариант) написать довольно легко. |
|
|
|
Topic |
|
|
|