Методы создания штампов и вопросы автопозиционирования

Все кто работает в Visio, не раз задумывались над рамкой или штампом и чтобы сам равнялся по странице, в нужном месте. Но обычно просто рисовалась таковая от руки и все. Если страниц в чертеже одна, а если 20 и с разным масштабом и ориентацией страниц. Тогда и необходимо придумать универсальный инструмент. Его мы и создадим, но сначала немного теории.

В Visio мы работаем с объектами независимо от того что чертим, все это для Visio одинаковые объекты с хвостиком настроек. Для примера создадим прямоугольник. Прямоугольник, это объект с длинным хвостом параметров, текстовая надпись это тот же прямоугольник, но без заливки и контура, и линия как ни странно тоже прямоугольная фигура, но только нулевой толщины.

Что касается группы, то при ее создании создается новый объект, т.е. это сама группа как объект + все входящие в эту группу фигуры и как следствие увеличение числа параметров. Все это можно посмотреть выделив прямоугольник и открыть Таблицу Фигур (Окно > Показать Таблицу Фигур) в Visio 2000 Ru. В этой таблице собраны все параметры которые описывают фигуру. Все параметры разбиты на разделы для удобства. Обратите внимание на раздел Геометрия 1, в нем описано формулами создание этого прямоугольника, а нам показывается его графическое представление.

Соответственно один раздел на геометрию и по одному разделу параметров этой фигуры. Если мы создадим штамп сразу из прямоугольников, то получим несколько десятков прямоугольников и сразу заметим как начнет притормаживать программа при работе с этим штампом. Произойдет это потому, что у нас, предположим, 50 прямоугольников и 50 разделов параметров этих фигур. Но все можно упростить. Если создать, например, 20 фигур и применить к ним команду Присоединение (Фигуры > Операции > Присоединение), то посмотрев снова в Таблицу Фигур, мы увидим что Разделов Геометрия стало больше, а остальных параметров всего по одному разделу.

И получившаяся фигура будет обрабатываться намного быстрее, чем группа созданная из них. По такому принципу и будем уменьшать количество фигур в штампе.

Итак, приступим

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

1) Малая сетка, как на рисунке (это 1 объект, составленный из 14 линий)

2) Основной контур (это 1 объект, состоящий из 1 прямоугольника по контуру и 7 линий)

3) Надписи (4 объекта. Можно и в 3 сделать, но для удобства лучше 4)

Только с надписями есть одна тонкость, необходимо выставить все отступы на 0 мм и между надписями в фигуре делать пробел размером шрифта 6 ед. Пока получилось 6 объектов.

Далее малая боковая таблица

1 надпись и 1 объект (1 прямоугольник и 4 линии) и последний объект это собственно рамка. Вот и все. 8 правильно составленных объектов и вся рамка.

Теперь займемся автопозиционированием

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

1) Группа большой таблицы (размерами 181,3*54,2334 мм)
2) Группа малой таблицы (размерами 143*14,7 мм)

Размеры немного меньше ГОСТ’овских, но это сделано специально для того, чтобы все элементы уместились в зону печати и не заходили на непечатаемые отступы.

Далее все эти 3 фигуры: Большая Таблица + Малая Таблица + Рамка, располагаем (как показано на рисунке) так как они должны стоять (Малую таблицу необходимо повернуть на 90 градусов) и группируем, далее заходим в Таблицу Фигур получившейся группы. Делаем вставку раздела Ячейки пользователя (в Таблице Фигур нажать правую кнопку мыши и выбрать > Вставка раздела > Ячейки пользователя) и создать 4 строки с названиями.

И ввести следующие формулы:

1) =ThePage!DrawingScale/ThePage!PageScale
2) =ThePage!DrawingScale*ThePage!PageScale/1 mm^2
4) =ThePage!PageWidth

и ввести названия этих параметров в ячейки Promt, как показано на рисунке.

Теперь нам необходимо узнать ID данной группы, для этого зайдите в «Специальное…» (Формат > Специальное) и запомните номер ID группы (13-й к примеру), далее он нам понадобится.

С группой пока все. Далее займемся рамкой. Для этого необходимо выделить ее из группы двойным нажатием и вызвать Таблицу Фигур для нее. Теперь необходимо снова создать такие же строки, но написать другое:

1) =Sheet.13!User.Row_1
2) =Sheet.13!User.Row_2
3) =Sheet.13!User.Row_3
4) =Sheet.13!User.Row_4

Где вместо 13 впишите свой ID главной группы. Мы создали ссылку на значение этих ячеек в Главной группе, т.к. проще 1 раз вычислить какое-то значение и потом давать ссылку на него, чем вычислять каждый раз.

В разделе Трансформация Фигуры, внесите следующие изменения:

В ячейку Width: =IF(User.Row_4=1;GUARD(ThePage!PageWidth-(28,7 mm*User.Row_1)); GUARD(ThePage!PageWidth-(14 mm*User.Row_1)))
В ячейку Height: =IF(User.Row_4=1;GUARD(ThePage!PageHeight-(14 mm*User.Row_1)); GUARD(ThePage!PageHeight-(28,7 mm*User.Row_1)))
В ячейку Angle: = GUARD (0 deg)
В ячейку PinX: =IF(User.Row_4=1;GUARD(21,7 mm/User.Row_1);GUARD(7 mm/User.Row_1))
В ячейку PinY: =IF(User.Row_4=1;GUARD(7 mm/User.Row_1);GUARD(7 mm/User.Row_1))
В ячейку LocPinX: =GUARD(0)
В ячейку LocPinY: =GUARD(0)

С рамкой все — она «прижалась» к правому верхнему краю листа. Далее займемся большой таблицей. Для этого необходимо выделить ее из группы двойным нажатием и вызвать Таблицу Фигур для нее. Далее надо снова создать такие же строки в разделе Ячейки пользователя, и так же заполнить:

5) =Sheet.13!User.Row_1
6) =Sheet.13!User.Row_2
7) =Sheet.13!User.Row_3
8) =Sheet.13!User.Row_4
Где вместо 13 впишите свой ID главной группы.

В разделе Трансформация Фигуры большой таблицы, внесите следующие изменения:

В ячейку Width: =GUARD(181,3 mm*User.Row_1)
В ячейку Height: =GUARD(54,2334 mm*User.Row_1)
В ячейку Angle: =IF(User.Row_4=1;GUARD(90 deg*User.Row_3);GUARD(-90 deg*User.Row_3))
В ячейку PinX: =IF(User.Row_4=1;IF(User.Row_3=0;GUARD(ThePage!PageWidth-(7 mm*User.Row_1)); GUARD(ThePage!PageWidth-7 mm*User.Row_1));IF(User.Row_3=0; GUARD(ThePage!PageWidth-7 mm*User.Row_1);GUARD(7 mm*User.Row_1)))
В ячейку PinY: =IF(User.Row_3=0;IF(User.Row_4=0;GUARD(7 mm*User.Row_1); GUARD(7 mm*User.Row_1));IF(User.Row_4=0;GUARD(7 mm*User.Row_1); GUARD(ThePage!PageHeight-7 mm*User.Row_1)))
В ячейку LocPinX: =GUARD(Width)
В ячейку LocPinY: =GUARD(0)

С большой таблицей все и она тоже «прижалась» к рамке. Далее займемся малой таблицей. Для этого необходимо выделить ее из группы двойным нажатием и вызвать Таблицу Фигур для нее. теперь необходимо снова создать такие же строки в разделе Ячейки пользователя, и так же заполнить:

9) =Sheet.13!User.Row_1
10) =Sheet.13!User.Row_2
11) =Sheet.13!User.Row_3
12) =Sheet.13!User.Row_4
Где вместо 13 впишите свой ID главной группы.

В разделе Трансформация Фигуры малой таблицы, внесите следующие изменения:

В ячейку Width: =GUARD(143 mm*User.Row_1)
В ячейку Height: =GUARD(14,7 mm*User.Row_1)
В ячейку Angle: =IF(User.Row_4=1;GUARD(90 deg);GUARD(0 deg))
В ячейку PinX: =GUARD(7 mm*User.Row_1)
В ячейку PinY: =IF(User.Row_4=1;GUARD(7 mm*User.Row_1); GUARD(ThePage!PageHeight-(7 mm*User.Row_1)))
В ячейку LocPinX: =GUARD(0)
В ячейку LocPinY: =GUARD(Height)

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

И наконец внести еще поправки в Главную группу. Для этого ее опять необходимо открыть в Таблице Фигур и создать раздел Действия (нажать на правую кнопку мыши>Вставка раздела>Действия). Затем заполнить:

В ячейку Actions: =IF(User.Row_3=1;SETF(«User.Row_3»;0);SETF(«User.Row_3»;1))
В ячейку Menu: =»Горизонтально/Вертикально»

В разделе Трансформация Фигуры Главной группы, внесите следующие изменения:

В ячейку Width: =GUARD(ThePage!PageWidth)
В ячейку Height: =GUARD(ThePage!PageHeight)
В ячейку Angle: = GUARD(0 deg)
В ячейку PinX: =GUARD(0)
В ячейку PinY: =GUARD(0)
В ячейку LocPinX: =GUARD(0)
В ячейку LocPinY: =GUARD(0)

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

Это очень удобно, если необходимо в одном документе чертить листы разной ориентации. Просто поворачиваем нужные страницы(Ctrl+0 и переместить на угол листа), меняем ориентацию рамки и работаем. Теперь тестируем на всех масштабах, поправляем надписи, если где съехали и все.

Как можно было заметить у нашей рамки отступ не 5 мм, а 7. Это сделано из-за того, что Visio сам имеет отступ 6,5 мм «мертвой зоны», где принтер не печатает. Наша автопозиционирующаяся рамка готова. Всего фигур получилось 12.


Теперь несколько замечаний и советов

1) В трафаретах можно хранить узоры заливки, линии и т.д.
2) При изменении размеров фигуры угловым маркером, зажать Shift, то будут меняться высота и ширина независимо.

Пока все. В следующий раз будут статьи «Как создать будильник в Visio?» (статья будет посвящена интерактивности в Visio 2000 и Visio 2002) и «Градиентные заливки линий в Visio«.

Брязгин Дмитрий Егорович
Брязгин Дмитрий Егорович

Системный аналитик с внушительным стажем. Занимаюсь разработкой дополнительных решений для Microsoft Visio с 2013 года.

Оцените автора
VisioPort
Добавить комментарий