Как-то встретилась задача, в которой нужно было провести несколько измерений и собрать данные в отчет. А если ближе к теме, то рассчитать длину новогодних гирлянд для украшения дома. Причем для заказчика - это повторяющаяся задача, то есть желательно было ее автоматизировать.
На входе имеется фотография дома. Напрашивается решение - импортировать в Visio картинку, нарисовать на ней гирлянды и подсчитать длину.
В принципе, в Visio есть метод Shape.LengthIU, который позволяет получить значение периметра (в данном случае длину гирлянды). Правда, только в дюймах, но это не проблема. Остается только сделать удобное масштабирование.
С масштабированием - два варианта: либо выбрать масштаб рисунка, а потом подгонять под него картинку, либо оптимально разместить картинку, и уже к ней подогнать масштаб документа. Для этой задачи наиболее удобным показался второй способ.
Чтобы не тратить каждый раз время на ручные расчеты, решено сделать шейп-измеритель. Идея следующая: нужно найти на картинке пару точек, расстояние между которыми известно, приложить к ним измеритель и автоматически изменить масштаб документа. В итоге получилось вот такая система, как на картинке выше.
Пришлось сделать 4 процедуры:
- Prepare - пересчет масштаба и установка свойств страницы.
- Calculate - использование LengthIU и отображение данных на рисунке.
- Clear - очистка отображенных данных (мало ли, вдруг потребуется).
- Report - вывод результатов в Excel.
Код разместился в шаблоне документа из двух страниц. Первая - на которой рисуются гирлянды. Вторая - фоновая, на нее импортируется картинка и там же работает измеритель. Масштабы обеих страниц изменяются синхронно.
В целом процесс такой:
- создаем документ по шаблону, помещаем картинку на второй лист;
- добавляем измеритель из трафарета документа, растягиваем его между точками с известным расстоянием;
- текстом на измерителе пишем это расстояние, обязательно с единицами измерения;
- через меню страницы выполняем функцию Prepare.
Этим завершается подготовка. Изображение практически не изменяется, но масштаб документа теперь позволяет проводить прямые измерения. Далее:
- рисуем гирлянды и выполняем функцию Calculate (на первой странице). Результаты измерения отображаются на шейпах гирлянд;
- нажимаем Report - отчет с длинами уходит в файл Excel.
В принципе, подобные задачи встречаются в практике нередко. Да и не только оформителям нужны измерения по картинке. Так что, надеюсь, статья будет полезной.
Шаблон GaugeTest.vst