Canvas - это круто! - страница 2

Nikolai Semko
8273
Nikolai Semko  
fxsaber:

CCanvas - обертка ResourceCreate.  Поэтому, например, есть у Вас уже 20 готовых картинок в виде массивов. Если захотите их сменять через канвас, то надо будет постоянно делать дорогой ArrayCopy+Update.

А если делать без CCanvas, то все выльется только в ResourceCreate+ChartRerdraw. В кодобазу выкладывал несколько работ с динамическим рисованием. Там было очевидно, что CCanvas не годится.

Я согласен, что это обертка Ресурса. Нужно определиться в определениях. Канвас (холст) в моем понимании, это не класс CCanvas, а прямоугольный графический рессурс, т.е. массив точек. Из класса CCanvas мне нужно то несколько функций по созданию, обновлению и удалению. В нем это достаточно грамотно реализовано, остальные функции видятся мне бесполезными ввиду пиксельной (несглаженной) реализации. Так же канвас мне интересен как векторная графика, а не растровая, т.е. другими словами, когда я формирую изображение сам, а не загружая картинки. Поэтому, варианту с 20 готовыми картинками не вижу практического применения, не делать же на MT5 видеоплеер. Задача векторной графики сводится к тому, чтобы нарисовать изображение менее чем за 30 (а лучше менее 10) миллисекунд. Т.к. человеческий глаз все равно не будет видеть смену картинки чаше 30 раз в секунду. В основном канвас в MT5 с этой задачей справляется хорошо. Правда эти цветные вихри на пределе возможностей (т.е. один кадр формируется около 30 миллисекунд на моем средненьком ноутбуке), но на MT4 уже тормозит.

Я сейчас по мере наличия свободного времени делаю класс CCanvasPro, в котором хочу сделать все чуть лучше. 
Вот что пока с окружностями получается (сглаженные с тенями). Код, сорри, пока не открываю. Ввиду сыроватости.

Это тоже скрипт.

Файлы:
khorosh
13957
khorosh  
Evgeniy Zhdan:
Классный радужный график! Еще бы сделать чтобы свечи плясали под музыку и крутились между собой!

А прибыль это будет увеличивать?) За каждую пляску бонус, тогда я за.)))

Rashid Umarov
Админ
17464
Rashid Umarov  
Nikolai Semko:

Конечно поможет, но будут жуткие тормоза.

Замедление небольшое будет, но жутких тормозов нет. По крайней мере, визуально ничего не изменилось


Nikolai Semko
8273
Nikolai Semko  
Rashid Umarov:

Замедление небольшое будет, но жутких тормозов нет. По крайней мере, визуально ничего не изменилось


Ну кончено, насчет жутких, я погорячился. Но все равно - приблизительно на 10% будет медленнее от общей производительности. 

Nikolai Semko
8273
Nikolai Semko  
Rashid Umarov:

Замедление небольшое будет, но жутких тормозов нет. По крайней мере, визуально ничего не изменилось


Проверил не на профилировании, а  через GetMicrosecondCount

Получилось замедление 3-4% на 1000 кадрах. В принципе, да, не очень критично. 

while(!IsStopped())
     {
      static ulong t0=GetMicrosecondCount();
      int pos=int(i%size);
      if(pos==0)
        {
         C.Update();
         //Sleep(30);
         X1= Width-(sin((double)j/100)*(double)Width);
         Y1= Height-(cos((double)j/140)*(double)Height);
         X2= Width+(cos((double)j/80)*(double)Width);
         Y2= Height+(sin((double)j/20)*(double)Height);
         if (j==101000) Print(GetMicrosecondCount()-t0);
         j++;
        }
      int X=pos%Width;
      int Y=int(pos/Width);
      double d= ((X1-X)*(X1-X)+(Y1-Y)*(Y1-Y))/(((X1-X)*(X1-X)+(Y1-Y)*(Y1-Y))+((X2-X)*(X2-X)+(Y2-Y)*(Y2-Y)));
      //C.m_pixels[pos]=XRGB(h[int(d*11520)],h[int(d*17920)],h[int(d*6400)]);
      C.PixelSet(X,Y,XRGB(h[int(d*11520)],h[int(d*17920)],h[int(d*6400)]));
      i++;
     }


Alexey Volchanskiy
27918
Alexey Volchanskiy  
Nikolai Semko:

Поставил себе задачу: коротким кодом эффектно продемонстрировать возможности пользовательской графики через класс CCanvas.

Вот что из этого получилось.

Данный скрипт работает как на MQL5, так и на MQL4. Только на MT5 гораздо быстрее.

Каждый кадр уникален и не повторяется, то есть скрипт не цикличный.


Необходимо перед компиляцией в файле Canvas.mqh перенести массив m_pixels[] из protected: в public:

пол-часа смотрел, ждал, когда эта штука взлетит ))

Nikolai Semko
8273
Nikolai Semko  
Alexey Volchanskiy:

пол-часа смотрел, ждал, когда эта штука взлетит ))

:))
Georgiy Merts
9959
Georgiy Merts  

Откровенно говоря, не пойму, в чем фишка.

Ну, да, красиво, цветасто, радужно... Но как это повлияет на работу эксперта ?

Я бы понял, если бы мы тут писали игры - вот там такая возможность ох, как востребована бы была... А тут...

На мой взгляд, необходимо как раз наоборот - избавляться от любых лишних действий, чтобы получившийся код как можно меньше нагружал систему (требовал бы денег в облаке). Да и в поддержке чтобы был полегче.

Разве что - "вау-эффект" для покупателей... Думаю, и правда, красиво оформленный вывод позволяет срубить больше бабла во Фрилансе...

transcendreamer
8789
transcendreamer  
Очень круто, спасибо, теперь торговля будет идти намного радужнее, в прямом смысле.
Alexey Volchanskiy
27918
Alexey Volchanskiy  
George Merts:

Откровенно говоря, не пойму, в чем фишка.

Ну, да, красиво, цветасто, радужно... Но как это повлияет на работу эксперта ?

Я бы понял, если бы мы тут писали игры - вот там такая возможность ох, как востребована бы была... А тут...

На мой взгляд, необходимо как раз наоборот - избавляться от любых лишних действий, чтобы получившийся код как можно меньше нагружал систему (требовал бы денег в облаке). Да и в поддержке чтобы был полегче.

Разве что - "вау-эффект" для покупателей... Думаю, и правда, красиво оформленный вывод позволяет срубить больше бабла во Фрилансе...

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