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

На входе имеется фотография дома. Напрашивается решение - импортировать в Visio картинку, нарисовать на ней гирлянды и подсчитать длину.

В принципе, в Visio есть метод Shape.LengthIU, который позволяет получить значение периметра (в данном случае длину гирлянды). Правда, только в дюймах, но это не проблема. Остается только сделать удобное масштабирование.

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

Чтобы не тратить каждый раз время на ручные расчеты, решено сделать шейп-измеритель. Идея следующая: нужно найти на картинке пару точек, расстояние между которыми известно, приложить к ним измеритель и автоматически изменить масштаб документа. В итоге получилось вот такая система, как на картинке выше.

Пришлось сделать 4 процедуры:

  • Prepare - пересчет масштаба и установка свойств страницы.
  • Calculate - использование LengthIU и отображение данных на рисунке.
  • Clear - очистка отображенных данных (мало ли, вдруг потребуется).
  • Report - вывод результатов в Excel.

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

В целом процесс такой:

  • создаем документ по шаблону, помещаем картинку на второй лист;
  • добавляем измеритель из трафарета документа, растягиваем его между точками с известным расстоянием;
  • текстом на измерителе пишем это расстояние, обязательно с единицами измерения;
  • через меню страницы выполняем функцию Prepare.

Этим завершается подготовка. Изображение практически не изменяется, но масштаб документа теперь позволяет проводить прямые измерения. Далее:

  • рисуем гирлянды и выполняем функцию Calculate (на первой странице). Результаты измерения отображаются на шейпах гирлянд;
  • нажимаем Report - отчет с длинами уходит в файл Excel.

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

Шаблон GaugeTest.vst