Введение в CorelDraw для работы со скриптами

Microsoft Visual Basic for Applications (VBA) - простое и удобное средство программирования в Word, Excel, AutoCAD и СorelDraw. Уникальность VBA заключается в сочетании простоты с возможностями создания профессиональных приложений любой сложности. Благодаря этим качествам VBA стал самым массовым языком программирования. Редактор VBA можно вызвать из CorelDraw одновременным нажатием клавиш Alt и F11. Идентичный редактор таким же образом вызывается из Microsoft Word, Excel, AutoCAD.
    Итак наша задача на языке Corel Basic  научится писать простейшие макросы, что позволило бы "...автоматизировать рутинную работу" в CorelDraw.

Макросы можно:
- создавать автоматически,
- писать "с нуля",
- и среднее между первым и вторым.

Создавать автоматически.
Для этого в CorelDraw есть специальные возможности:
1) Командой "Записать" (Инструмент -> Visual Baisic -> Записать) (рис) создаем имя макроса и указываем, что дальше идет запись действий (не всех), которые вы хотите записать для автоматического воспроизводства.
2) Командой "Стоп" (Инструмент -> Visual Baisic -> Стоп) указываете, что запись закончена.
3) Воспроизвести выполненные действия - выполяете комаду "Проиграть" (Инструмент -> Visual Baisic -> Проиграть).
Сохраняя документ CorelDraw в формате *.cdr, вы автоматически сохраняете и структура макросов данного сеанса, правде при загрузке этого файла надо указать (система спросит)
"Enamle Macros". Примеры же автоматической организации макросов дан в уроке 1.

Писать "с нуля".
Здесь надо знать основы языка программирования
Visual Basic for Applications (см. например здесь), команды CorelDraw на VBA, Learning CorelSCRIPT  и т.д., что довольно скучное занятие и под силу опытным программистам
(например, текст этого макроса через "Блокнот" или WordPad сохраните в файле с расширением *.csc (смотрите внимательно) и затем запустите макрос ("Инструмент -> Запустите скрипт"). Вы получили макрос, написанный с нуля, правда, без всяких кодов CorelDraw.

Макросы - среднее между создавать их автоматически и писать "с нуля"
Чаще приходится дублировать действия. Одно действие при этом можно создать  автоматически, а дальше дело техники (точнее некоторых приемов создания циклов на Visual Baisic). Поэтому требуется модернизировать макросы, созданные автоматически. При этом в той структуре (проектах), куда они записываются автоматически.

Пример 1. Создать макрос вращение отрезка вокруг его начальной точки.
 
Вот его текст
Sub Macro1()
   Dim i As Integer
    x1 = 4
    y1 = 5
    r = 4
    ug0 = 0
    num = 41
    ugi = 6.28 / num
    For i = 1 To num
        ug = ug0 + i * ugi
        x2 = x1 + r * Sin(ug)
        y2 = y1 + r * Cos(ug)
        Dim s104 As Shape
        Dim crvs104 As Curve
        Set crvs104 = CreateCurve(ActiveDocument)
        With crvs104.CreateSubPath(x1, y1)
            .AppendLineSegment x2, y2
        End With
        Set s104 = ActiveLayer.CreateCurve(crvs104)
        k = k + 1
        Next i
End Sub

Видно, что код создания отрезка (взят из автоматической записи макроса для отрезка) состоит из 6 строк:

        Dim crvs104 As Curve
        Set crvs104 = CreateCurve(ActiveDocument)
        With crvs104.CreateSubPath(x1, y1)
            .AppendLineSegment x2, y2
        End With
        Set s104 = ActiveLayer.CreateCurve(crvs104)
где x1,y1 и  x2,y2  - координаты начала и конца отрезка.

Цикл организован так:
    For i = 1 To num

        Next i



Пример 2. Организовать перебор точек на отрезке прямой линии.

Sub Macro2()
    Dim i As Integer
    num = 25
    r1 = -0.1
    r2 = -0.1
    r3 = 0.1
    r4 = 0.1
    x1 = 1
    y1 = 1
    x2 = 10
    y2 = 7
    tb = 1 / num
    For i = 0 To num
    t = i * tb
    x = (1 - t) * x1 + t * x2
    y = (1 - t) * y1 + t * y2
        Dim s45 As Shape
        Set s45 = ActiveLayer.CreateEllipse((x + r1), (y + r2), (x + r3), (y + r4), 90#, 90#, False)
    s45.Fill.UniformColor.CMYKAssign 0, 100, 100, 0
    Next i

    Dim s104 As Shape
    Dim crvs104 As Curve
    Set crvs104 = CreateCurve(ActiveDocument)
    With crvs104.CreateSubPath(x1, y1)
        .AppendLineSegment x2, y2
    End With
    Set s104 = ActiveLayer.CreateCurve(crvs104)
End Sub

Для изображения точки и ее заливки цветом использован код:
Dim s45 As Shape
Set s45 = ActiveLayer.CreateEllipse((x + r1), (y + r2), (x + r3), (y + r4), 90#, 90#, False)
s45.Fill.UniformColor.CMYKAssign 0, 100, 100, 0



Пример 3. Определить минимальное расстояние от точки до отрезка. Показать ЦФ расстояния от точки до отрезка.

Вот цикл (полный текст Макры 3 см. здесь) (для CorelDraw 10 здесь)

For i = 0 To num
    t = i * tb
    x = (1 - t) * x1 + t * x2
    y = (1 - t) * y1 + t * y2
    Set s45 = ActiveLayer.CreateEllipse((x + r1), (y + r2), (x + r3), (y + r4), 90#, 90#, False)
    s45.Fill.UniformColor.CMYKAssign 0, 100, 100, 0
     Set crvs104 = CreateCurve(ActiveDocument)
    With crvs104.CreateSubPath(x, y)
        .AppendLineSegment x3, y3
    End With
    Set s104 = ActiveLayer.CreateCurve(crvs104)
    s = Sqr((x - x3) * (x - x3) + (y - y3) * (y - y3))
     Set s46 = ActiveLayer.CreateEllipse((x - r5), (s - r5 + 1), (x + r5), (s + r5 + 1), 90#, 90#, False)
    s46.Fill.UniformColor.CMYKAssign 0, 100, 100, 100
    If s < s99 Then
        s99 = s
     Set s47 = ActiveLayer.CreateEllipse((x - r5), (s - r5 + 2), (x + r5), (s + r5 + 2), 90#, 90#, False)
    s47.Fill.UniformColor.CMYKAssign 0, 100, 100, 100
    End If
    Next i

В цикле происходит:
- перебор отрезков от точки до прямой,
- перебор точек на прямой,
- перебор точек на ЦФ на всей области существования ЦФ
- перебор точек на ЦФ до минимума расстояния от точки до прямой.

Чтобы загрузить текст макросов (все три макры здесь ) (для CorelDraw 10 здесь) в CorelDraw, нужно выполнить
1. Откройте CorelDraw (новый документ).
2. Создайте пустую запись макроса (Инструмент -> Visual Baisic -> Записать) (см. рис)
3. После того, как вы щелкните по "Записать" появится окно (рис), в котором после команды ОК вы создадите Макрос (пустой), который можно редактировать, в частности, записать в него свои тексты своих макросов.
4. Откойте макрос: (Инструмент -> Visual Baisic -> Проиграть)
5. После выполнений команды "Проиграть" появится окно, в котором надо выполнить команду Edit (редактирование).
6. Выполнив команду "Edit", вы автоматически попадате в редактор  Visual Baisic, где будет текст  вашего пустого  макроса (рис.)
7. Через буфер (Ctrl + c) скопируйте туда  набор данных макросов.
8. Запустите тот или иной макрос (Инструмент -> Visual Baisic -> Проиграть-> Макро 1,2,3 -> Run)
9. А сохранив файл CorelDraw, вы сохраните в нем и проект макросов.



Далее рассмотрим примеры построение муаров и использование случайных чисел (тексты 4-х макросов здесь) (для CorelDraw 10 здесь).

Пример 5. Муар на квадрате (Макро1)

Пример 6. Муар на треугольнике (Макро2)

Пример 7. Разбросать окружности на листе A4 случайным образом со случайной  заливкой.

Пример 8. На листе A4 создать три формы: круг, квадрат и треугольник со случайной их  заливкой.

Как загрузить макры в CorelDraw см. выше.

Примечание. При копировании текстов в рекдактор CorelSCRIPT строки могут быть скопированы с переносом, что вызовет ошибку (эти строки будут выделены), поэтому попытайтесь их сдвинуть влево. 


Встроенные диалоговые окна: окна ввода и вывода

Пример 9. Из окна ввода ввести  фамилию,  в окно вывода  вывести фамилию и то и другое поместить ее в графическом коде на рабочее поле.

Sub Macro1()
Dim zF As String, zI As String
zF = InputBox("Ваша фамилия", "Окно ввода")
Dim s As Shape
Set s = ActiveLayer.CreateArtisticText(0, 0, zF)
 With s.Text.FontProperties
  .Name = "Arial"    ' "Arial Black" "TimesET"
  .Size = 40
 End With
zI = "Борис"
Dim s1 As Shape
MsgBox "Ваша имя, братец, будет: " & zI
Set s1 = ActiveLayer.CreateArtisticText(2, 0, zI)
 With s1.Text.FontProperties
  .Name = "Arial"
  .Size = 40
 End With
End Sub



При выполнении графических работ требуется соблюдать ГОСТ, в частности, чертежи должны иметь основную надпись. Каждый раз ее чертить довольно трудоемкая работа. Можно хранить чертеж основной надписи в  формате .cdr  и им  пользоваться, однако удобнее иметь макрос, с помощью которого можно  в диалоге быстро внести свои данные

Пример 10. Написать макрос, который бы автоматически исполнял основую надпись с вводом в диалоге постоянных данных и переменных: фамилию, номер задания, лист, количество листов, название группы.  Начала системы коордимнат поместим в нижний правй угол.
Решение задачи.
1. Выполним рамку и заполним ее на листе с сохранением сценария.
2. Организуем ввод и заполнении переменных данных через диалоговое окно ввода.

Протокол ввод текста на рабочее поле  не записывает. Поэтому сначала рисуем прямоугольники (с левого нижнего угла вверх), а потом берем эти координаты и подставляем их в коды вывода нужного текста. Внизу в макросе показан этот прием.

Sub Macro2()
    Dim s980 As Shape
    Set s980 = ActiveLayer.CreateRectangle(2.786543, 2.676874, 5.645953, 3.549236, 0, 0, 0, 0)
    Set s3 = ActiveLayer.CreateArtisticText(2.786543, 2.676874, "Проба")
 With s3.Text.FontProperties
  .Name = "Arial"
  .Size = 24
 End With
End Sub
Макрос (CorelDraw11) построения "Основной надписи" с вводом в диалоге фамилий: кто выполнил, кто проверил, номер задания, название группы, номер варианта здесь.
Основнуюнадпись с макросом  ввода своих данных в формате .cdr скачать отсюда.


Резюме. Используя макросы, можно автоматизировать некоторые часто повторяющиеся виды построений при графических работах. В данном наборе макросов собраны базовые элементы: отрезок прямой, окружность, прямоугольник, многоугольник и т.д.
В другом наборе задаются аксонометрические оси 5-ти стандартных аксонометрических проекций (изометрия, диметрия, фронтальная косоугольная изометрия и диметрия, горизонтальная косоугольная изометрия - зенитная проекция), применяемых в начертательной геометрии и черчении.