Консультация № 180508
30.10.2010, 22:12
0.00 руб.
0 17 1
Как в CorelDraw можно использовать свои формулы рисования графических кривых линий? Например СВОЮ формулу рисования окружности. А не то что есть уже в примитивах CorelDraw.

Обсуждение

давно
Мастер-Эксперт
680
2811
03.11.2010, 13:02
общий
Что значит "свою формулу рисования окружности"?
Видимо, Вы имеете в виду создание какого-то нового графического примитива?
Там можно использовать макросы, с помощью которых можно нарисовать все что угодно.
Вот пример использования макроса (уже готового, но он платный): создание гильоширных элементов в Corel Draw с помощью макроса SecuriDesig

Его можно скачать с сайта производителя - пробная версия полнофункциональна в течении 14 дней, выбрать там из набора именно для Вашей версии Corel Draw.
Неизвестный
03.11.2010, 14:12
общий
Адресаты:
А можно ли самому создать свой макрос? И как?
Прикрепляю один из многих тысяч пример работы моей формулы
Прикрепленные файлы:
07a422b2b1251971751d58076d0c6991.png
давно
Мастер-Эксперт
680
2811
03.11.2010, 16:51
общий
Да, можно. Вообще это VBA.

После обсуждения на форуме я поняла, что вы хотели бы в Corel Draw рисовать те самые свои кривые?
В CorelDraw Graphic Suite X3 руководство по программированию на VBA входит в состав программы (на английском языке).

Можете попробовать.

Инструменты - VisualBasic - Запись.
Выбираете FreeHand (свободная форма) или нажимаете F5. Рисуете отрезок. Завершаете запись.
Открываете ее в редакторе. Разбираетесь, что означает запись, числа в ней, кто из них X, кто Y. Там указаны X и Y одного конца отрезка, потом другого.
А далее, в принципе, так же, как при использовании других языков программирования, можно нарисовать любую вычисляемую функцию отрезками, используется рисование линий. Координаты концов вычисляются в цикле по написанным Вами формулам.
Можно и иначе.
Неизвестный
03.11.2010, 17:24
общий
Адресаты:
Спасибо за внимание. Да это те самые рисунки, которые в Corel Draw можно было бы редактировать, "доводить до ума".
А VBA это что такое? Ну Corel Draw есть все, что предлагает интернет, то есть все. Но пользуюсь пока CorelDRAW X4.
Рисунки получаются необычные, которые трудно вообразить. Конечно много случайного, но с опытом приходит чутье.
Неизвестный
03.11.2010, 17:29
общий
Адресаты:
Ну а пока преобразую битмап в вектор. Качество не очень хорошее. Сильно сказываются приближенные вычисления моей программы. А сглаживать изгибы, делать плавнее что-то не получается.
давно
Мастер-Эксперт
680
2811
03.11.2010, 17:52
общий
VBA - это Visual Basic for Application (вижуал бейсик для приложений).
Встроенное средство программирования в MS Office и других приложениях.
Неизвестный
03.11.2010, 17:58
общий
Адресаты:
Я так и подумал, что это Visual Basic. А есть ли доступные образцы листингов макросов для Corel Draw, которые я мог бы переработать под свою формулу?
С ноля мне трудно начинать.
давно
Мастер-Эксперт
680
2811
03.11.2010, 21:38
общий
это ответ
Здравствуйте, Serafim Stefanovich!
Да, свою кривую в Corel Draw нарисовать по собственной формуле можно.
Делается это рисованием с помощью VBA (средства встроенные).
Привожу самый простой вариант, когда функцию отрисовываем короткими линиями, начало и конец которых вычисляются по необходимой нам формуле. В данном случае это будет формула построения окружности с постоянным радиусом, равным 1, точки которой рисуются с шагом 1 (от 0 до 360 градусов, градусы в программе будут переведены в радианы). Координаты точки вычисляются по формуле
x = x0 + Cos(i * 3.14 / 180)
y = y0 + Sin(i * 3.14 / 180)
где x0, y0 - координаты центра окружности

Для того, чтобы попробовать на простом примере, нужно запустить запись макроса командой Инструменты - VisualBasic - Запись (в англоязычной версии Tools - Visual basic - Records), взять любой инструмент (например, свободную форму - Free Hand) и нарисовать отрезок.
Затем изменить макрос на тот, который приведен ниже.
Для этого дать команду Tools - Visual Basic - Play и в появившемся окне нажать кнопку Edit (редактировать, изменить).
Откроется окно редактора, в котором тот текст, который там есть, стираем, и вставляем этот код:

Код:
Sub Macro1()
'
' Recorded 03.11.2010
'
' Description:
'
'


Dim s5 As Shape
Dim crvs5 As Curve

For i = 0 To 359
x = 5 + Cos(i * 3.14 / 180)
y = 5 + Sin(i * 3.14 / 180)

Set crvs5 = CreateCurve(ActiveDocument)
With crvs5.CreateSubPath(x, y)
.AppendLineSegment 5 + Cos((i - 1) * 3.14 / 180), 5 + Sin((i - 1) * 3.14 / 180)
End With
Set s5 = ActiveLayer.CreateCurve(crvs5)

Next i


End Sub


Прямо в редакторе можно запустить рисование (Run Sub) или сохранить макрос и запускать командой Tools - Visual Basic - Play и в появившемся окне нажать кнопку Run.

Так можно нарисовать любую другую функцию, в том числе и те, для которых x и y вычисляются параметрически (как в данном примере для окружности)
Вот пример для удлиненной циклоиды:
Код:
Sub Macro1()
'
' Recorded 03.11.2010

' Description:
'

Dim s5 As Shape
Dim crvs5 As Curve
a = 0.3
b = 3
lam = 1.8
For i = 0 To 360
x = 5 + (b - a) * Cos(i * 3.14 / 180) + lam * a * Cos((b - a) * (i * 3.14 / 180) / a)
y = 5 + (b - a) * Sin(i * 3.14 / 180) + lam * a * Sin((b - a) * (i * 3.14 / 180) / a)

Set crvs5 = CreateCurve(ActiveDocument)
With crvs5.CreateSubPath(x, y)
.AppendLineSegment 5 + (b - a) * Cos((i - 1) * 3.14 / 180) + lam * a * Cos((b - a) * ((i - 1) * 3.14 / 180) / a), 5 + (b - a) * Sin((i - 1) * 3.14 / 180) + lam * a * Sin((b - a) * ((i - 1) * 3.14 / 180) / a)
End With
Set s5 = ActiveLayer.CreateCurve(crvs5)

Next i


End Sub

Вот она сама:

давно
Мастер-Эксперт
680
2811
03.11.2010, 21:51
общий
Вот сделала для Вас образец, надеюсь, он доступный.
Если что непонятно - обращайтесь, пожалуйста!
Неизвестный
03.11.2010, 21:59
общий
Адресаты:
Спасибо огромное, Татьяна Михайловна!
Это как раз то о чем я мечтал!
Надеюсь разберусь теперь.
Прикрепленные файлы:
c61c30e7305b192be868db7f989c2398.gif
Неизвестный
04.11.2010, 13:15
общий
Циклоида это качение одной окружности по другой. То есть жестко связаны ТОЧКИ ДВУХ ОКРУЖНОСТЕЙ.
Одно колесо катится по другому неподвижному колесу снаружи или внутри.
Карандаш находится на жестко закрепленном вращающемся радиусе катящегося колеса и может быть прямо на окружности этого колеса, или ближе к центру от окружности, или дальше от центра от окружности.
Пример - спирограф с колесиками с зубчиками и отверстиями для карандаша.
А у меня цепочка жестко связаных ЦЕНТРОВ последующих окружностей с самой предидущей ОКРУЖНОСТЬЮ.
То есть цепочка циркулей где каждая игла следующего циркуля сидит на карандаше предидущего от единого центра, циркуле и все они вращаются равномерно с разными скоростями в разные стороны. Рисовать может любой циркуль или даже несколько одновременно. Окружность создается прямыми короткими отрезками от точки к токе с заданным шагом. И я прорисовываю другие линии соединяющие эти точки с движущимся центром этой окружности и даже с центром любой другой окружности, что нередко создает красивый рисунок.
Это принципиальное различие приводящее к совершенно другому эффекту.
Прикрепленные файлы:
916339a9eda3aeaa26574d1c729d36a4.gif
Неизвестный
04.11.2010, 13:20
общий
Адресаты:
Пока не получается рисовать составные окружности в макросе. Прорисовываются почему-то радиусы а не смежные точки второй окружности. И не получается сохранить макрос никак
Прикрепленные файлы:
80e726cbfd3a65c5196484a4fcb4baae.png
давно
Мастер-Эксперт
680
2811
13.12.2010, 21:24
общий
Макрос Вы сохраняете вместе с файлом.
Или же отдельно можно экспортировать в формате bas в Редакторе VisualBasic. Там будет именно текст Вашего макроса.

Насчет процесса рисования - я поняла, что Вы имеете в виду под Вашей кривой. Да, в циклоидах скорость вращения одинакова и направление тоже. Мне кажется, чтобы превратить циклоиду в Вашу кривую, можно задавать разные скорости вращения, изменяя шаг в цикле (сейчас он 1 градус) и направление (yt от нуля к 360, а по убыванию). Для множества же "циркулей", может быть, лучше будет сперва просчитать массив точек и их прямоугольных координат на листе, а затем уже прорисовать их последовательно?

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

Очень красивые у Вас кривые.
Неизвестный
14.12.2010, 16:29
общий
Адресаты:
Спасибо, за внимание к теме! Посылаю Вам результат в Corel Draw 12. Думаю не окончательный. Можете дорабатывать, использовать, хорошо бы с упоминанием моего имени. Хочется оставить хоть такой маленький след на земле. Сейчас я сделал случайный неуправляемый процесс. Так быстрее, но бесконтрольно. Можно задавать в макросе каждый раз свои настройки. Но это не совсем удобно. Я думаю в ВБА есть возможность создания макроса с меню ввода данных.
Прикрепленные файлы:
13b8c0ed7e82c7420db1b1a62b2adf66.rar
Неизвестный
14.12.2010, 16:35
общий
Адресаты:
Всё таки эта ЦЕПОЧКА ЦИРКУЛЕЙ это не ЦИКЛОИДА! Там другая зависимость. Другие взаимосвязи, другие формулы.
Прикрепленные файлы:
2c2e1531aeaa56dfb47f9d933920a967.jpg
Неизвестный
14.12.2010, 17:13
общий
Адресаты:
А вот программа на Паскале моя последняя. Можно использовать для специфического дизайна, как заготовку, скелет более сложного рисунка.
Правда, Паскаль при переходе от более сложного рисунка к более простому почему-то создает маленькую досадную помеху, которую можно обойти.
Прикрепленные файлы:
fbf11d76e9df5e2555f17e2bd7068aa4.rar
Неизвестный
16.12.2010, 23:40
общий
В последнем послании я поторопился и отправил старые описания программ 3DSeraphsRhythmics6.01.
И забыл добавить программу UnFREEz.exe для создания GIF анимации.
Исправляю свою ошибку сейчас. Посмотрели ли Вы мой макрос для CorelDrav?
Прикрепленные файлы:
1d9781c3243c904dff2b453decab3e6e.rar
Форма ответа