Программирование

Создание внутреннего контура в CorelDRAW 2018 CreateContour

В CorelDRAW 2018 можно задать внутренний контур через Shape.CreateContour, указав отрицательное смещение Offset и тип ContourTypeInner. Пример кода ниже.

Как в VBA для CorelDraw 2018 использовать функцию CreateContour(), чтобы при создании внутреннего контура (например 5 мм) он создавал внутренний контур, а не внешний, даже если объект имеет размер 5,1 мм?

Внутренний контур в CorelDRAW 2018 создаётся с помощью метода Shape.CreateContour.
Ключевой момент – отрицательное смещение Offset и явное указание типа контура ContourType.
При этих двух значениях CorelDRAW всегда рисует контур внутри объекта, даже если размеры объекта чуть больше требуемой ширины контура.


Содержание


Что такое CreateContour и какие параметры?

Метод Shape.CreateContour возвращает объект Contour и имеет следующий прототип:

Function CreateContour( _
    Offset As Double, _
    Stroke As Long, _
    Fill As Long, _
    Style As Long, _
    Opacity As Double, _
    Pattern As Long, _
    PatternFill As Long, _
    PatternType As Long, _
    PatternScale As Double, _
    PatternRotation As Double, _
    PatternOffset As Double, _
    PatternMirror As Boolean, _
    PatternReversed As Boolean, _
    ContourType As ContourTypeEnum _
) As Contour
  • Offset – расстояние от края исходной фигуры до контура.
    + значения → наружный контур, – значения → внутренний контур.
    Убедитесь, что единицы измерения совпадают с настройками документа (см. ActiveDocument.Units).

  • ContourType – перечисление ContourTypeEnum с двумя возможными значениями:
    cContourTypeOuter и cContourTypeInner.
    Если параметр не указан, CorelDRAW сам выбирает тип в зависимости от знака Offset.

Справка по методу:
Shape.CreateContour (CorelDRAW 2018 VBA Reference)


Как задать внутренний контур?

  1. Установите отрицательное смещение – это гарантирует, что линия будет находиться внутри фигуры.
    Для внутреннего контура шириной 5 мм используйте Offset = -5.

  2. Укажите тип контураContourType = cContourTypeInner.
    Это защищает от того, что CorelDRAW может переключиться на наружный контур, если размеры фигуры слишком малы.

  3. Проверьте единицы измерения – если активный документ использует миллиметры, смещение в 5 мм будет корректным.
    Если используется дюймы, передайте значение в дюймах (5 / 25.4).

Пример вызова:

vb
Set cont = shp.CreateContour( _
    -5,          ' Offset (мм, отрицательный – внутрь)   _
    0,           ' Stroke (цвет)                          _
    0,           ' Fill (цвет)                            _
    0,           ' Style                                  _
    1,           ' Opacity (100 %)                         _
    0,           ' Pattern                                _
    0,           ' PatternFill                           _
    0,           ' PatternType                           _
    1,           ' PatternScale                          _
    0,           ' PatternRotation                       _
    0,           ' PatternOffset                         _
    False,       ' PatternMirror                         _
    False,       ' PatternReversed                       _
    cContourTypeInner) ' ContourType (внутренний)     _

Полный пример кода

Ниже – макрос, который создаёт прямоугольник 5,1 мм × 5,1 мм и добавляет к нему внутренний контур шириной 5 мм.

vb
Sub CreateInnerContourExample()
    ' Устанавливаем единицы измерения в миллиметры
    ActiveDocument.Units = cUnitsMM
    
    ' 1. Создаём прямоугольник 5,1 × 5,1 мм
    Dim shp As Shape
    Set shp = ActiveLayer.CreateRectangle(0, 0, 5.1, 5.1)
    shp.Fill.UniformColor = cWhite
    
    ' 2. Создаём внутренний контур 5 мм
    Dim cont As Contour
    Set cont = shp.CreateContour( _
        -5,          ' Offset (мм, отрицательный)   _
        cBlack,      ' Stroke (черный)               _
        cNoFill,     ' Fill (нет заливки)            _
        0,           ' Style                        _
        1,           ' Opacity (100 %)              _
        0, 0, 0, 1, 0, 0, False, False, _
        cContourTypeInner) ' Тип контура – внутренний
    
    ' 3. При желании можно настроить параметры контура
    cont.StrokeWeight = 0.1   ' Толщина линии 0,1 мм
    cont.Stroke = cRed        ' Цвет контура красный
End Sub

Важно: если исходная фигура меньше 10 мм по высоте/ширине, внутренний контур шириной 5 мм может быть обрезан. В таком случае уменьшайте ширину контура в соответствии с размерами фигуры.


Часто задаваемые вопросы

Вопрос Ответ
Почему при отрицательном смещении всё равно создаётся наружный контур? В CorelDRAW 2018 при слишком маленькой фигуре система «переходит» в наружный контур, чтобы не получить нулевую площадь. Уточните размеры объекта и уменьшите ширину контура.
Можно ли задать только тип контура, не указывая Offset? Нет, Offset обязателен – это расстояние до контура. Отрицательный Offset + cContourTypeInner гарантирует внутренний контур.
Как изменить цвет контура после его создания? Объект Contour имеет свойства Stroke и Fill. Например, cont.Stroke = cBlue.
Можно ли использовать CreateContour для объектов с несколькими путями? Да, но каждый путь будет обрабатываться отдельно. Для сложных объектов лучше использовать CreateContour для каждой части вручную.

Заключение

  • Внутренний контур создаётся при отрицательном смещении Offset и явном указании ContourType = cContourTypeInner.
  • Убедитесь, что размеры объекта позволяют разместить контур нужной ширины – иначе CorelDRAW может вернуть наружный контур.
  • В примере выше показано, как быстро вывести в работу макрос, который автоматически создаёт внутренний контур, сохраняя при этом все параметры заливки и цвета.

Источники

  1. Shape.CreateContour (CorelDRAW 2018 VBA Reference) – официальная документация по методу.
  2. CorelDRAW 2018 VBA Reference – ContourType Enum – перечень возможных значений ContourType.
  3. CorelDRAW 2018 Developer Guide – Working with Contours – руководство по работе с контуром в макросах.
Авторы
Проверено модерацией
Модерация