Пунктирные и размерные линии на VBA CorelDraw


Займёмся расширением кругозора по командам VBA CorelDraw. В этой небольшой заметке мы научимся создавать пунктирные и размерные линии с помощью макроса VBA.

Не буду заставлять вас долго ждать, вот функция VBA, которая рисует пунктирную линию:

Sub DrawCurve(node1X, node1Y, node2X, node2Y)
    Dim s As Shape
    Dim crv As Curve
    Dim sp As SubPath
    Dim cdrType As cdrDimensionType
    Set crv = CreateCurve(ActiveDocument)
    Set sp = crv.CreateSubPath(node1X, node1Y)
    sp.AppendLineSegment node1X, node1Y, False
    sp.AppendLineSegment node2X, node2Y, False
    Set s = ActiveLayer.CreateCurve(crv)
    s.Outline.SetProperties Width:=0.2, Style:=OutlineStyles(8), DashDotLength:=4#
End Sub
В строках 2-5 мы вводим необходимые переменные, в шестой инициализируем кривую для данного активного документа. В строках 7-9 добавляем сегмент и точки для данного сегмента (как бы конструируем контур). В 10 непосредственно создаем абрис, а в 11 устанавливаем необходимые параметры для него: толщина и тип прерывистой линии. Если теперь после выполнения данного кода заглянуть в параметры созданного объекта, то увидим примерно такую картину:



Дальше для этого абриса необходимо проставить размерную линии. И для этого есть встроенные средства CоrelDraw. Готовая функция для рисования:

Sub DrawRazmer(x, sx, y, sy, cdrType, r)
    Dim pt1 As SnapPoint, pt2 As SnapPoint
    Dim s As Shape
    ActiveDocument.Unit = cdrMillimeter
    Set pt1 = CreateSnapPoint(x, y)
        
    If cdrType = cdrDimensionHorizontal Then
        Set pt2 = CreateSnapPoint(x + sx, y)
        Set s = ActiveLayer.CreateLinearDimension(cdrType, pt1, pt2, True, , , cdrDimensionStyleDecimal, False, False, Placement:=cdrDimensionWithinLine, HorizontalText:=False, BoxedText:=False, LeadingZero:=True, Prefix:="", Suffix:="", OutlineWidth:=-1, Arrows:=ArrowHeads(1), OutlineColor:=CreateCMYKColor(75, 68, 67, 90), TextFont:="Verdana", TextSize:=10, TextColor:=CreateCMYKColor(75, 68, 67, 90))
        s.Dimension.TextShape.SetPosition x + sx / 2, y + r
    Else
        Set pt2 = CreateSnapPoint(x, y + sy)
        Set s = ActiveLayer.CreateLinearDimension(cdrType, pt1, pt2, True, , , cdrDimensionStyleDecimal, False, False, Placement:=cdrDimensionWithinLine, HorizontalText:=False, BoxedText:=False, LeadingZero:=True, Prefix:="", Suffix:="", OutlineWidth:=-1, Arrows:=ArrowHeads(1), OutlineColor:=CreateCMYKColor(75, 68, 67, 90), TextFont:="Verdana", TextSize:=10, TextColor:=CreateCMYKColor(75, 68, 67, 90))
        s.Dimension.TextShape.SetPosition x + r, y
    End If
End Sub
Здесь мы на вход принимаем координаты первоначальной точки, смещение, направление (горизонтально или вертикально), а также отступ. Интересно, что функция CreateLinearDimension немного по-разному работает в разных версиях CorelDraw. Например, в шестом кореле отключение отображения единиц измерения работает, а вот в 2018 – нет, все равно ставятся миллиметры или дюймы.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, макросы, CorelDraw, VBA




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Урок 9. Переменные JavaScript: введение
Урок 13. Математические операторы присваивания
Бесплатный хостинг с php и mysql для студентов