All Forums
 Категория Visio
 Форум Вопросы и ответы
 Скрытие части схемы
Next Page
Author Previous Topic Topic Next Topic

bdfy

Belarus
267 Posts

Posted - 09/15/2008 :  20:10:35
Есть большая исходная схема электрической сети. курсовой по ней нужно сделать. желательно даже несколько курсовых :) так что ищу средства автоматизации. в идеале конечно есть мечта автоматическое сворачивание схемы к простейшему виду сделать, но думаю слишком сложно. пока задача попроще:
есть полная схема в визио.
подписи над прямоугольниками элементов - связанные ячейки Excel, т.е значения (снизу черты) и номера (сверху черты ) генеряться автоматически согласно задания.
есть элементы которых на схеме быть не должно. у них пустой номер сейчас на рисунке (см. справа вверху например). надо их из схемы как-то автоматически убирать. каждому обьекту в екселе соответсвует ячейка 0/1 - присутсвует ли на схеме. вот как согласно значению в ячейке екселя убрать (скрыть, цвет белым сделать или тп) элемент ?
такую задачу я часто встречаю - хочеться разобраться...
Скриншот здесь - http://img142.imageshack.us/my.php?image=50135943zt9.gif (15 кб)

Tumanov

Russia
1198 Posts

Posted - 09/16/2008 :  15:21:37
Управление видимостью элементов осуществляется через ячейки NoFill, NoLine, NoShow секций геометрии. Текстом можно управлять через ячейку HideText секции Miscellaneous.
Это, конечно, не единственный вариант. Иногда может быть удобнее пользоваться цветом или образцом (Pattern) линии или закраски. Можно даже менять геометрические размеры шейпа, например, сворачивать его в точку...
Типовой путь при необходимости управления данными:
К шейпу добавляется Custom Properties. Назовем его Visible. Если входные данные принимают значения 0 и 1, то тип свойства выбирается "Number".
В ячейке NoShow делается ссылка на добавленное свойство - =NOT(Prop.Visible). Функция NOT нужна для конвертирования логического входа.
Теперь при записи в Custom Properties то нолика, то единички шейп начнет моргать.
Если в шейпе несколько секций Geometry, то управление нужно прописывать для каждой секции. Формулы могут быть разные. Значит при изменении одной и той же входной ячейки одна секция может скрываться, а вторая отображаться. Получаем эффект переключения изображения.
Секции Geometry Visio обычно генерирует сам. Если шейп более или менее сложен, секций геометрии будет несколько.
Вмешаться в этот процесс можно либо на уровне шейп-листа, заполняя ячейки вручную, либо комбинируя несколько более простых шейпов. Например, рисуем квадратик и пару линий и применяем к ним операцию Join. Все компоненты становятся одним шейпом, имеющим три секции геометрии.
Go to Top of Page

bdfy

Belarus
267 Posts

Posted - 09/16/2008 :  16:52:49
я так понимаю у вас Visio 2003/2002, а я 2007 поставил...
quote:
The former Custom Properties window and dialog box have new names in Microsoft Office Visio 2007. The Custom Properties dialog box is now the Shape Data dialog box and the Custom Properties window is now the Shape Data window. Nothing else about them has changed.

т.е Custom Properties переименовали в Shape Data. якобы больше изменений нет. только вот ячейки NoShow я упорно не вижу...
http://img154.imageshack.us/my.php?image=visio1vj4.jpg
и самое главное - как значение 0 и 1 взять из ячейки екселя ? это возможно вообще (так чтоб без макросов желательно ) ?
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 09/16/2008 :  18:13:31
Это не интересная картинка :)
Custom Properties действительно переименовали в Shape Data, но это не очень существенно.
Важно другое. Каждый шейп в Visio сопровождается шеп-листом (ShapeSheet). Это большая расчетная таблица, в которой описано все поведение шейпа. Чтобы ее открыть нужно селектировать шейп, затем в меню выбрать Window / Show ShapeSheet. Вот тут-то она и появится. И в ней нужно искать секцию Geometry и ячейку NoShow. В ячейки шейп-листа нужно вписывать формулы типа =NOT(Prop.Visible).
Пример работы с шейп-листом можно посмотреть в http://visio.artberg.ru/biblio/st011.htm
И название Visible нужно вписывать тоже в шейп-листе. Без этого строки будут называться Row_1, Row_2 и т.д.
А как связаться с Excel для Visio 2007 без макросов напишу попозже.
Go to Top of Page

bdfy

Belarus
267 Posts

Posted - 09/16/2008 :  19:19:58
гхм. нашел. но... геометрии в свойствах обьекта нет. и отобразить нельзя.
quote:
View Sections dialog box...
If a section is dimmed, it is not available because it does not exist for the selected shape or object.

т.е геометрии у обьекта якобы нету. обьект создавался из примитивов (кружочек, прямоугольник ) - потом сгруппирован в один обьект. разгруппировка помогает. и с одним шейпом все получается. но неудобно это. хочется обьеденить.
quote:
Например, рисуем квадратик и пару линий и применяем к ним операцию Join.

group и join не одно и то же получается ?
можно еще insert section принудительно, геометрия появляется, но не работает как надо.

Edited by - bdfy on 09/16/2008 19:33:19
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 09/16/2008 :  20:09:48
Группа - это особый тип шейпов. У него нет геометрии.
Но у группы есть коллекция входящих в нее шейпов, у которых геометрия есть (если они в свою очередь не являются группами). В принципе, ими можно управлять точно так же, только ссылаться придется на ячейку родительского шейпа - на шейп-группу. Но удобнее, если возможно, группировкой в данном случае не пользоваться.
Join - это совсем другое. Шейп получается один. Только секций геометрии несколько.
Go to Top of Page

bdfy

Belarus
267 Posts

Posted - 09/16/2008 :  20:58:45
quote:
Join - это совсем другое. Шейп получается один

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

Edited by - bdfy on 09/16/2008 21:23:39
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 09/17/2008 :  16:39:22
Связь с Excel 2007
Вариантов много, поэтому я не буду здесь распыляться на все, а опишу тот, который сформировался первым. Иллюстрация к нему на рис.
Как я понял, в данной задаче предполагается, что управляемые шейпы будут одинаковыми. Значит в Excel должна быть одна таблица и каждая ее строка будет связываться с одним шейпом на рисунке.
1. Подготовка файла Excel
В Excel есть такое понятие, как именованная область (Named Region). Работать с ним удобно, поэтому с него и начнем.
Открывается Excel, создается новый документ.
Отводим для таблицы несколько столбцов, в первой строке задаем их имена.
Выделяем область, в которую войдут эти столбцы и некоторое количество строк (смотря сколько может понадобиться в будущем).
Кликаем на этой области правой кнопкой, в контекстном меню выбираем Name of Range и вписываем имя, например ttt_tab.
В дальнейшем Visio будет видеть этот регион, как таблицу в БД.
Пусть в этой таблице первая колонка (у меня t) будет играть роль ключа, а вторая (tt) будет управлять видимостью шейпов. Заполним первую (несколько строк) возрастающей последовательностью чисел, а вторую - единичками и ноликами.
Сохраняем файл под именем Book1.xlsx.
2. Связываем Visio с данными
Открываем Visio, создаем рисунок из чистого листа.
Выбираем в меню Data / Link Data to Shapes.
Появляется форма Data Selector.
Выбрать Microsoft Office Excel workbook, выбрать созданный файл Excel, нажать Next.
Наш именованный регион обнаруживается автоматически и предлагается к выбору как таблица ttt_tab. Выбираем все колонки, все строки, соглашаемся с тем, что первый столбец будет ключевым. Жмем Finish.
Открываетcя поле (окно) External Data с указанными столбцами
3. Подготовка мастер-шейпа
Рисуем квадрат (для простоты) - это будет управляемый шейп.
Открываем окно Shape Data. Это делается для контроля, само окно не очень-то и нужно. Селектируем шейп, видим, что окно Shape Data пустое.
Перетаскиваем первую строку из External Data на нарисованный шейп. В окне Shape Data сразу появляются данные, а в строке окна External Data появляется значок, говорящий о наличии связи этой строки с шейпом. Значит в шейпе появилась секция Shape Data и в нее внесены данные.
Открываем Document Stencil. Забрасываем в него подготовленный шейп, переименовываем его в M1.
Открываем мастер-шейп M1 на редактирование, открываем его шейп-лист и в ячейку NoShow секции геометрии вводим формулу =NOT(Prop.VisDM_tt).
VisDM_tt - это имя строки Shape Data, которое визард связи с данными присвоил по умолчанию для второго столбца наших данных.
Закрываем редактирование мастер-шейпа. Теперь все готово к работе.
4. Проверка работоспособности.Набрасываем на рисунок четыре копии мастера M1.
Открываем файл Excel и вводим в первые строки второго столбца данные 1, 0, 1, 0.
Записываем и закрываем файл.
Переносим мышкой первую строку External Data на первый шейп.
Таким же образом связываем остальные три строки с остальными тремя шейпами.
Вызываем окно Refresh Data (через меню Data / Refresh Data). Нажатием на кнопку при селектированном источнике заставляем данные обновиться. (В опциях можно установить периодическое обновление.)
Из четырех шейпов на рисунке два становятся невидимыми.
Открываем файл Excel, прописываем единички во все 4 строки и вновь выполняем Refresh Data.
На рисунке проявляются все 4 шейпа.
Значит управление работает.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 09/17/2008 :  16:43:40
Да, в форум это явно не лезет :)
Надо будет как-нибудь в виде статьи оформить.
А по поводу сохранения значения для возврата - в таких случаях часто пользуются коэффициентами. Типа width*0, width*1. В первом случае сворачивается в точку, во втором полностью разворачивается.
Go to Top of Page

bdfy

Belarus
267 Posts

Posted - 09/17/2008 :  18:59:55
ура! спасибо. все получилось. сделал с группами через nonprinting
quote:
Кликаем на этой области правой кнопкой, в контекстном меню выбираем Name of Range и вписываем имя, например ttt_tab.

в моем Excel 2003 Вставка - Имя - присвоить. в контекстном опции нет.
еще один момент - поверх шейпа рисуется имя столбца-индентификатора и его значение. name H6 на скрине. как убрать ?
http://img154.imageshack.us/my.php?image=visio2rb7.jpg
интересно, а можно ли формулу NoShow/nonprintong прописать одну и ту же сразу для всех шейпов на листе (а еще лучше для всех шейпов - связанных с внешн. данными ) ? а то муторно ведь немного лазить по меню...

Edited by - bdfy on 09/17/2008 19:07:13
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 09/17/2008 :  19:27:25
quote:
name H6 на скрине. как убрать

В качестве текста шейпа выводится одно из Shape Data. Если ввести в текст шейпа пробел, то формула затрется и дальше мешать не должна.
quote:
а можно ли формулу NoShow/nonprintong прописать одну и ту же сразу для всех шейпов на листе

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

bdfy

Belarus
267 Posts

Posted - 09/17/2008 :  19:34:37
quote:
В качестве текста шейпа выводится одно из Shape Data.

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

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

Edited by - bdfy on 09/17/2008 19:35:19
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 09/17/2008 :  19:56:12
quote:
вот ничего не понял. это где ?

Обычно в текстовом поле шейпа формул нет. Если просто нарисовать квадратик, он будет пустой. По двойному щелчку на нем текст открывается для редактирования.
Однако, можно сделать так, что в качестве текста будет выводиться, например, ширина шейпа. Для этого в текст вставляется формула, ссылающаяся на ячейку с шириной шейпа. Точно так же в качестве текста может выводиться и значение Custom Properties (или Shape Data). Вот, по-видимому, при связывании визард у Вас и ввалил такую формулу.
Вот только посмотреть ее нельзя :( Но если в шейп просто ввести текст (например, один пробел), то формула должна затереться этим пробелом и больше не мешать.
А может быть проще будет отключить показ текста группы вообще. Это делается в меню Format / Behavior / Group Data - выбрать Hide. При этом передача данных останется, но показываться они не будут.
Go to Top of Page

zhuravsky

Russia
115 Posts

Posted - 09/18/2008 :  12:12:29
А в Визио 2003 такие фокусы как делаются (я имею ввиду связь с XLS)?
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 09/18/2008 :  16:01:40
Почти так же, только там один визард разбит на четыре разных, совсем другой принцип хранения ссылок на БД в Visio и отсутствует табличка с данными External Data. И кнопок чуть побольше нажимать приходится.
А принцип тот же. Визард выбирает поля для связи, создает Custom Properties, есть аддон, который данные рефрешит. Вот только хорошей документации на это дело даже на английском нет.
А полный набор визардов для этого дела лежит в Tools / Add-ons / Visio Extras / и там все, которые со словом Database.
Go to Top of Page

bdfy

Belarus
267 Posts

Posted - 09/18/2008 :  16:19:58
quote:
Но если в шейп просто ввести текст (например, один пробел), то формула должна затереться этим пробелом и больше не мешать.

все равно не понял :) впрочем оказалось эту подпись можно просто выделить и удалить - столбец из связи с фигурой исчезнет. на этом и остановился.
Go to Top of Page
Previous Topic Topic Next Topic  
Next Page
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)