Студія візуальних рішень - плагін - вимірювання довжини кривих

У цьому уроці ми спробуємо створити найпростіший і на мій погляд потрібний і так не вистачало корелу плагін вимірює довжину кривих. Можливо для дизайнерів це абсолютно непотрібна функція, в той час людям, які використовують Corel для різноманітних технічних цілей це дуже необхідна функція. Зауважте, не потрібні ніякі сторонні програми, не потрібно буде нічого качати, будь-який навіть незнайомий з програмуванням людина зможе швидко і легко вирішити для себе цю непросту на перший погляд завдання.

Використовуючи властивість кривої "Length", можна побачити довжину кривої не вдаючись до жодних програмним хитрощів. Дивно, чому така характеристика кривої як довжина, що не винесена в вікно властивостей самого корела. Мабуть залишено для "нововведень" майбутніх версій. Отже створюємо нову функцію, назвемо її наприклад MyLength:

Далі використовуючи властивість кривої Length, виведемо інформаційне вікно зі значенням довжини виділеної кривої:

Sub MyLength ()
Dim S As Shape
Dim Ln As Double
Set S = ActiveShape 'присвоюємо змінної S все властивості виділеної кривої
Ln = S.Curve.Length 'зчитуємо значення довжини кривої
MsgBox Ln 'виводимо значення довжини за допомогою інформаційного повідомлення
End Sub

Найпростіший варіант плагіна по визначенню довжини кривої готовий. Тепер саме час перевірити наш код в дії. Малюємо будь векторний елемент, обов'язково конвертуючи його в криву ( "convert To Curves" Ctrl + Q) для кореловскіх примітивів таких як еліпс, прямокутник, полігон. Потім відкриваємо дерево плагінів Tools / Macros / MacroManager (Alt + Shift + F11), знаходимо назву нашого проекту, в ньому поточний модуль в якому будуть всі функції які ми створюємо, в тому числі MyLength. Запускаючи його ми видем числове значення дорівнює довжині виділеній кривої.

Але виділяти кожен раз по одній кривій досить незручно і ми хочемо, щоб наш плагін виводив значення всіх виділених кривих. Для цього використовуємо цикл, в якому перебираємо всі наші криві, а в змінну підсумовуємо всі ці значення. Також попередньо конвертуємо про всяк випадок всі наші елементи в криві і робимо разгруппировки виділення. А групуючи всі наші дії і зробивши скасування в кінці, після отримання значення довжини всіх елементів, повертаємо всі зроблені конвертації і разгруппировки до первісного стану. Отримуємо готовий плагін:

Public Sub MyLength ()

ActiveDocument.Unit = cdrMillimeter 'Вказуємо за замовчуванням одиницю виміру
ActiveDocument.BeginCommandGroup 'Вказуємо що звідси починається група програмного коду, яка скасовується одним натисканням "скасування"
ActiveSelectionRange.UngroupAll 'Разгруппіровиваем виділені об'єкти, якщо такі є
ActiveSelectionRange.ConvertToCurves 'Конвертуємо всі елементи в криві, тому що свойст довжини доступно тільки для кривих

Dim S As Shape
Dim Ln As Double

For Each S In ActiveSelectionRange
Ln = Ln + S.Curve.Length
Next

ActiveDocument.EndCommandGroup 'Вказуємо що тут заказчівается група наших дій
ActiveDocument.Undo 'Так як значення сумарної довжини вже зберігається в змінної Ln, скасовуємо всі зроблені зміни з кривими до їх первісного стану

MsgBox Ln "Мм". "Довжина кривих" 'Виводимо значення сумарної довжини всіх виділених елементів.

Слід враховувати, що отримаємо помилку при обчисленні довжини кривих таких об'єктів які не можна перетворити в криві, наприклад, растрові зображення, тіні.