Плагин "Создание радиуса и фаски"

    В этой статье я расскажу, как написать плагин для Corel, который будет делать фаску или скругление в любой точке кривой, где это возможно сделать. Для этого будем использовать стандартные метода Fillet и Chamfer из набора VBA для точки на кривой.

    Как и куда вставляется код плагина я описывал прежде - Создание плагинов для Corel Draw. Теперь немного усложняем задачу. Рассмотрим на примере создания фаски, создание радиуса будет заключаться лишь в подмене метода Chamfer на Fillet.

      Если cказать простым языком, то для того, чтоб нарисовать фаску 2х2 (единицы измерения задаются в коде) во второй точке выделенной кривой достаточно будет следующего кода:

Public Sub My_Chamfer()
ActiveShape.Curve.SubPaths(1).Nodes(2).Chamfer 2, 2
End Sub

 

     Но так как нам нужна уневерсальная функция, которая будет вставлять фаску в выбранную точку, то и придется немного помудрить.  Мы будем использовать встроенную функцию GetUserClick, которая позволяет получать координаты точки при нажатии левой кнопки мыши.

 

Public Sub My_Chamfer()
ActiveDocument.Unit = cdrMillimeter  'Задаем единицы измерения в которых будут проводиться все вычисления
Dim x As Double, Y As Double
Dim sh As Shape
Dim shp As ShapeRange
Dim sp As SubPath
Dim N As Node

Set shp = ActiveSelectionRange    'Назначаем переменной shp все выделенные контуры (аналогия - массив кривых со всеми своими свойствами)
Radx = InputBox("Фаска", "Введите значение", 5)  'Выводим окно для пользовательского значения фаски


While ActiveDocument.GetUserClick(x, Y, 0, 100, False, cdrCursorNodeEdit) = 0  'Пока не нажата кнопка Esc выполняем цикл, каждый цикл - одно нажатие мышки с присвоением координат переменным x и y

'Перебираем все точки всех кривых и сравниваем их координаты с координатами x и y, если стремятся к нулю, значит это точка в которую и "целился" пользователь; в этой точке и вставляем фаску
For Each sh In shp

        For Each sp In sh.Curve.SubPaths

            For Each N In sp.Nodes
             If Abs(N.PositionX - x) < 1 And Abs(N.PositionY - Y) < 1 Then
                N.Chamfer Radx, Radx
             Exit For<
            End If
            Next N
        Next sp

Next sh
Wend
   

ActiveDocument.EndCommandGroup
End Sub