вторник, 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

вторник, 24 ноября 2015 г.

Где мои терабайты?

Где мои терабайты?
Распространенный вопрос? Для меня - да.
Вроде, поставишь новый диск, места полно... А через некоторое время раз - и кончилось. И начинаешь долго и нудно просматривать, чем же оно забито.
Так вот, способ есть! Берем TreeMap, говорим: "Раскрыть диск (папку)" - и видим самые толстые объекты, первые клиенты на удаление.
Сделано это в виде шаблона Visio. Нужные макросы внутри.
Раньше это был шаблон VisioTreeView. Про него я уже писал. А теперь в тот же шаблон добавлен еще один режим раскрытия папок.
Вид получается примерно такой
 Все управление на контекстных меню. Самое первое - показать диски (это меню страницы).
Так как тысячи файлов Visio рисовал бы медленно, при сканировании диска введены некоторые ограничения. За одну операцию раскрываются только два уровня. Если нужно смотреть дальше, выбираем нужный прямоугольник и углубляемся в него, повторяя операцию.
Если в папке обнаруживаются более 100 дочерних объектов, мелочь тоже начинает отбрасываться. Все равно сольется в линию.
Прямоугольники подкрашиваются в зависимости от расширений файлов.
В виде надписи выводится имя папки или файла. Если прямоугольник узкий, имя не умещается и не выводится. Тогда нужно открывать окно "Данные шейпа" и смотреть в нем. Там же приведен объем файла, путь к нему и состояние.  В данном случае состояние - это свертка из расширений имен файлов, используемая для передачи цвета.

С точки зрения программирования
Поле названо состоянием для универсальности. Дело в том, что подобная задача разбивается на две части: сбор дерева структуры и его отображение. Отображение одинаковое, а на входе данные могут быть ну очень разные. У меня это приспособлено для взвешивания файлов. Но такой же тип отображения можно использовать для сравнения доходов, площади территорий, населения и т.д. Поэтому сечение содержит довольно универсальные атрибуты: текст, вес, состояние.
Собственно модуль отображения представляет собой класс, который умеет рисовать себя и своих потомков (иерархически). Данные передаются через указанные выше атрибуты. Так что по аналогии можно будет делать сменные входные приставки для других областей применения.
Универсальный, не привязанный к прокладной области тест выглядит вот так:
 Sub aTest()       'Tree for test
    Set c0 = New c
    Set c0.shp0 = ActivePage.Shapes(1)
   
    'CurrNode.AddItem Weight, State, Text, Path
    c0.AddItem 32, 0, "Text1", ""
    c0.AddItem 5, 1, "Text2", ""
    c0.AddItem 12, 2, "Text3", ""
    Set c2 = c0.AddItem(25, 3, "Text4", "")
    Set c1 = c0.AddItem(7, 4, "Text5", "")
   
    c1.AddItem 30, 0, "Text21", ""
    c1.AddItem 20, 1, "Text22", ""
    c1.AddItem 40, 2, "Text23", ""
    c1.AddItem 5, 3, "Text24", ""
   
    c2.AddItem 5, 5, "Text31", ""
    c2.AddItem 16, 6, "Text32", ""
    c2.AddItem 30, 7, "Text33", ""
    c2.AddItem 10, 8, "Text34", ""
   
    c0.DrawLevel c0, 1
End Sub
и рисует вот такую картину.
Скачать
Шаблон условно платный:
Для "богатых" стоит $5 - https://gum.co/dTHz
Для бедных бесплатно - https://www.dropbox.com/s/w7299qq37wlir9b/TreeMap.vst?dl=0

Остальные варианты по договоренности.

суббота, 4 апреля 2015 г.

О выполненных проектах

Попробовал собрать в кучку проекты, с которыми сталкивался в Visio. Чтобы выявить наиболее актуальные направления.  Получилось "портфолио" из полутора десятков работ. Дальше вспоминать не стал, решил, что для статистики достаточно.
1. Самые крупные проекты:
Два построителя оргсхем: один совсем большой, другой поменьше.
Графический редактор сети (для программирования устройства управления сетью).
Мини-САПР (для проектирования времянок из типовых конструкций и оборудования).
То есть для управления предприятием, управления сетью и конструирования. Все связано с базами данных. И обмен данными с базой обычно двусторонний.
2. Несколько проектов помельче накручены вокруг PDM системы. Причем в разных областях: мониторинг состояния на фоне состава изделий, формирователи технических документов, измерение показателей с графическим отображением. Опять же непременное присутствие баз данных.
3. Несколько систем моделирования. Причем чаще всего заказывается графическая часть: отображение модели, ввод данных, изменение конфигурации то есть графический пользовательский интерфейс. А остальная часть выполняется другими силами. Раздел происходит обычно на уровне базы данных.
4. Наконец, разрабатывалось множество более-менее мелких утилит. Формирователи отчетов по файлу Visio, конверторы, специальные функции, используемые при рисовании. Пожалуй, только в этих работах взаимодействие с базой не требовалось.
Какие же можно сделать выводы.
1. Так получилось что наиболее крупные проекты относятся к сфере управления. Исключение составляют формирователи документов и системы типа САПР, но их доля относительно невелика.
2. Практически все крупные и средние работы связаны с базами данных. Причем связи двусторонние и не примитивные.
P.S. Я понимаю, что у других разработчиков статистика может отличаться. Но у меня сложилась вот такая.

воскресенье, 15 февраля 2015 г.

Копирующий коннектор в трафарете

Задача копирования фрагментов шейпа при разработке возникает довольно часто. Решается, естественно, по-разному. Кто-то делает все вручную, кто-то автоматизирует это дело макросом, кто-то ищет готовую утилиту.
Когда-то давно я пытался использовать для копирования данных между шейпами промежуточное хранилище в виде файла Excel. Работало, но выглядело довольно громоздко. А сейчас, кажется, получилось более прогрессивное решение.
Особенности:
1. Весь программный код убран в трафарет. В нужный момент его можно открыть в любом рисунке, поработать и закрыть, на искажая основного файла.
2. Риббоны, тулбары и т.д. не искажаются. Управление идет через контекстные меню мастер-шейпа из трафарета.
3. Нет никаких диалоговых окон. Соединяем копирующим коннектором шейп-источник с шейпом-приемником и перекачиваем по нему данные. Кое-какие режимы устанавливаются через окошко Shape data того же коннектора.
4. Так как код в макросах, становятся безразличны версии и разрядность Windows и Visio. Не нужны инсталляторы. (Правда, макросы придется разрешать, что не всем понравится).
5. Шейпы могут быть как обычными, так и внутри групп. Лишь бы их можно было соединить коннектором.
Перед копированием можно сравнить шейпы. Различия пишутся в лог (поподробнее) и опять же в Shape data коннектора (короткая форма). Посмотрев различия, можно скопировать либо формулы из отдельных ячеек, либо целиком секции.
Результат сравнения (log) удобно использовать для документирования шейпа.
Короче, стремился сделать как можно удобнее.
Трафарет выложен как бесплатный, но на Gumroad (то есть вроде как в магазин).
Немного побольше написано здесь.
Прямой адрес на страничку в Gumroad здесь.

воскресенье, 23 ноября 2014 г.

VisioGraphLab - дополнение Visio для работы с графами

В прилагаемом файле находится дистрибутив VisioGraphLab.
VisioGraphLab - дополнение Visio для работы с графами. Дополнение позволяет строить графы вручную, импортировать их из Excel и даже из самого Visio. В частности, автоматически может отображаться граф зависимостей между ячейками шейп-листа Visio.
Реализованы типовые операции с графами: топологическая сортировка, поиск кратчайшего пути, нахождение максимального потока.
Из разряда простейших инструментов упорядочения изображения графов предлагается функция выделения связанного подграфа, содержащего выбранную вершину.
По степени готовности дополнение находится где-то на уровне бета-версии. Заявленные функции работоспособны, проверены в Visio 2007 и Visio 2010. Ошибки пока возможны и будут устраняться по мере обнаружения.
Цель публикации - получение отклика от возможных пользователей, сведений об обнаруженных ошибках и предложений по изменению или расширению функциональных возможностей.
Инструкция по работе с приложением входит в состав установочного пакета, а также при желании может быть загружена отдельно без установки всего пакета (в формате PDF).
Примеры работы дополнения:
Расчет потока
Граф взаимозависимостей ячеек шейп-листа Visio
Дополнительное меню в Visio 2007
 Дополнительное меню в Visio 2010
P.S. Неудачно выбранное название GraphLab заменено на VisioGraphLab. В инструкции пока остается старая редакция.
Также доступна загрузка с основного сайта.
-----------------------
25.11.2014 Обновлена версия - 1.0.2. Исправлена пара ошибок, внесены изменения в сетап для более "дружественной" установки.