вторник, 15 ноября 2016 г.

Восстановление VSDX

Рассматривается один из случаев восстановления документа Visio в формате VSDX. Предыстория. Файл неожиданно перестал открываться. При попытке открытия Visio выдает ошибку.
Способ основан на том, что файл в формате VSDX представляет собой архив ZIP, со-держащий множество вложенных файлов. И этими файлами можно манипулировать. Но не всегда. В сломанном архиве часть операций блокируется. Ниже показан один из вариантов действий в такой ситуации.
Попытка открыть архив с помощью ZIP выводится сообщение, что файл открыть не удается.

Смотрим, чем может помочь RAR.

При попытке протестировать архив получаем сообщение, что он поврежден или имеет неизвестный формат.
Пытаемся просто открыть его. При поиске файла указываем "Все файлы", потому что по умолчанию RAR не считает VSDX архивным файлом.

Что-то открывается, но выводится сообщение о неожиданном конце архива. То есть ошибка в структуре.
Но RAR умеет восстанавливать архивы. Выполняем команду "Восстановить архив".

RAR выводит перечень файлов, которые ему удалось найти, и создает новый (восстановленный) файл.

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

Судя по размещению (папка embeddings) и имени (oleObject.bin), сломан внедренный OLE-объект. Можно предположить, что после его удаления и удаления всех ссылок на него, ос-тавшаяся часть архива будет воспринята Visio как нормальный документ
Однако поиск и исправление ссылок – довольно кропотливая работа. Поэтому реально при восстановлении данного документа пошли другим путем. В Visio был создан пустой файл-приемник. Этот файл также открыт как архив. И из восстановленного архива в новый архив переброшены папки masters, pages и файл Content_Types.xml.
Полученный файл открывается в Visio без сообщения об ошибке и содержимого оказа-лось достаточно для продолжения работы.


четверг, 6 октября 2016 г.

Шейп-импортер (в трафарете)

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

Шейп импортер

Получился шейп-импортер. Нужно сунуть в него некоторое количество строк, селектировать какой-нибудь мастер и выполнить пункт меню "Нарисовать массив". Появляется массив шейпов с текстами из этих строк.
По умолчанию массив строится в 10 колонок. Количество строк - сколько получится.
На всякий случай шейпы соединены коннекторами в гирлянду (для соблюдения очередности). При необходимости избавиться от коннекторов легко - нужно сделать слой с коннекторами невидимым и скопировать массив в другое место. Скопируются только 2D шейпы.

Форма управления массивом

Еще один мастер превращается в формочку для управления таким массивом: изменить количество колонок, сдвинуть, раздвинуть.
Массив нужно селектировать и нажать на кнопку захвата. Теперь с помощью стрелочек на форме можно его сжимать - разжимать. Действуют также стрелки на клавиатуре. С шифтом шаг перемещения уменьшается в 10 раз.
Если поставить галочку "Колонки", то вместо изменения расстояния между шейпами будет увеличиваться или уменьшаться количество колонок.

Построение дерева

Если строки будут из двух полей ("узел" - "с чем связан", через табуляцию), то можно строить деревья.
В первой версии задействовано два типа авторазмещения. Один больше походит на оргструктуру, второй - для произвольных графов. Естественно, результат потом можно переразместить штатными командами или вручную.
При копировании данных из Excel или БД удобно перебрасывать их сначала, например, в "Блокнот", потом в шейп. Тогда и табуляция, и нарезка на строки получаются в нужном виде.

Способ применения

Все это добро лежит в трафарете import.vss - https://yadi.sk/d/UC9J99H0wNnh5
Трафарет скачать и положить, куда нужно. Например, в My Documents\My Shapes или папку, которая прописана в настройках Visio. Тогда его будет удобно открывать с любым нужным документом.
На данном этапе интересны: мнения, критика, советы по совершенствованию и развитию. Обсуждение ведется (или будет вестись) в форуме http://visio.getbb.ru/viewtopic.php?f=3&t=1033&p=9940#p9940

воскресенье, 25 сентября 2016 г.

Памятка по наконечникам Visio Line ends

Штатный набор из 45 штук. Можно рисовать и добавлять свои (пользовательские).

В режиме без масштабирования в качестве опоры берется основная линия (та, к которой крепится наконечник). Расчеты ведутся от ее толщины. Сильно влияет также переключатель размеров. Размеры образца практически не принимаются во внимание.
В режиме с масштабированием отсчет начинается от размеров образца. И этот размер сохраняется постоянным во всех образованных от него экземплярах. Свои наборы можно делать как с масштабированием, так и без него.
Штатные наборы - отличаются тем, что зависимость от толщины основной линии ослаблена. Основное управление - от переключателя размеров.

Штатные наконечники

Образец выбирается из выпадающего списка в окне форматирования линии.

В том же окне есть и переключатель размеров на 7 положений. Диапазон изменения - примерно в 10 раз. При толщине линии 01 для штатного образца 01 и масштабе документа 1:1 размер наконечника для разных значений переключателя изменяется от 0,6 до 6,5 мм.
От толщины основной линии размер практически не зависит. Порядка 10% на весь диапазон (например, от 6,5 до 7,5 мм).
Толщина линии наконечника всегда равна толщине основной линии. Цвет наконечника тоже берется от основной линии.

При изменении масштаба документа видимый размер наконечника (на экране) не изменяется. Значит в реальных единицах он изменяется пропорционально масштабу. То есть если при масштабе 1:1 наконечник оценивался в 7.5 мм, то при масштабе 1:5 он будет оценен уже в 37.5 мм.
  

Пользовательские без масштабирования

Фрагменты образца обязательно должны быть соединены или сгруппированы. То есть образец - это всегда один шейп.
Размер рассчитывается от толщины основной линии и сравним с ней. При положении переключателя "Средний" группа точно выравнивается по толщине основной линии. Реальный размер в окне редактирования образца не имеет значения.
Для увеличения размера изображение приходится выводить за группу.

В приведенном примере наконечник будет в 10 раз больше толщины основной линии (при положении переключателя Средний).
Основная линия будет доходить до левого края группы, поэтому для стрелок центр вращения группы смещают влево. И изображение утыкают в ту же точку.
Зависимости от толщины и переключателя размеров:
  
Специальный прием - для отслеживания толщины основной линии толщина линии наконечника устанавливается в 0pt. Иначе она будет постоянной.
Если линии у наконечника черные, они будут принимать цвет основной линии. Во избежание этого нужно делать их "не совсем черными".

Пользовательские масштабируемые

Фрагменты образца также должны быть соединены или сгруппированы.
Размер строго соответствует размеру в окне редактирования образца. Положение в окне не существенно, можно рисовать в любом месте.
Выводить изображение за группу нет смысла, все равно размер будет реальным.
Толщина линии в экземплярах тоже строго соответствует образцу. То есть при изменении толщины основной линии толщина линии наконечника не изменится.
Наконечник масштабируется вместе со страницей и другими шейпами.
  

Размещение и дополнительное управление

Штатные наконечники показываются только в списке в окне формата линии. Перечень не изменяется.
Пользовательские наконечники показываются в том же окне (перечисляются наименования). Причем этот список управляемый.
Пользовательскими образцы управляются через Document stencil, хотя их там не видно.
Можно скрыть образцы из списка образцов в окне формата линии
ActiveDocument.Masters(2).Hidden = True
Можно через бит-маску PatternFlags управлять некоторыми свойствами образцов
ActiveDocument.Masters(2).PatternFlags = &H402&
Управление аналогично ручному переключению "Поведения" и "Масштаба" в форме свойств образца.

Выводы


  • Штатные наконечники хороши для иллюстраций, деловой графики. Полезно отслеживание толщины и цвета основной линии. Но нужно быть готовым к тому, что при изменении масштаба документа все настройки наконечников придется переделывать.
  • У пользовательских немасштабируемых наконечников применение примерно такое же. Добавляется зависимость размера от толщины основной линии. Иногда это может мешать.
  • Пользовательские масштабируемые наконечники хороши для схем, чертежей, более строгих по сравнению с деловой графикой. Характеризуются независимостью размера и толщины линии от условий применения.

Ссылки


Полезно заглянуть в MSDN - https://msdn.microsoft.com/en-us/library/aa200997%28office.10%29.aspx
и в статью Грэхэма Вайдмана - http://grahamwideman.wikispaces.com/Visio+fill%2C+line+and+end+patterns