Все круто, только вот сглаживания и в помине нет. Рисовать пиксельными квадратиками - значит отставать от жизни.
Вот пример, который демонстрирует, что сглаживание существует в природе:
А код?
А код?
А пожалуйста:
#property copyright "2009-2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property description "Demonstrating Canvas features" #property script_show_inputs //--- #include <Canvas\CanvasPro.mqh> //+------------------------------------------------------------------+ //| inputs | //+------------------------------------------------------------------+ input int pause = 20; // задержка в миллисекундах между выводом на экран input bool top = false; // рисовать под графиком? input ENUM_COLOR_FORMAT format=COLOR_FORMAT_ARGB_NORMALIZE; //Способ обработки цвета input int Ncirl =30; // число окружностей input int MaxSizeCircle = 200; // максимальный размер окружностей //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ int OnStart(void) { double r1[],r2[],k1[],k2[]; int x[],y[]; uint col[]; int j=0; ArrayResize(r1,Ncirl); ArrayResize(r2,Ncirl); ArrayResize(k1,Ncirl); ArrayResize(k2,Ncirl); ArrayResize(x,Ncirl); ArrayResize(y,Ncirl); ArrayResize(col,Ncirl); ChartSetInteger(0,CHART_FOREGROUND,top); int Width =(ushort)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS); // получаем Ширину окна int Height=(ushort)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS); // получаем Высоту окна uint ColorScreen=(color)ChartGetInteger(0,CHART_COLOR_BACKGROUND,0);// получаем цвет фона окна CCanvasPro canvas; if(!canvas.CreateBitmapLabel("SampleCanvas",0,0,Width,Height,format)) { Print("Error creating canvas: ",GetLastError()); return(-1); } canvas.SetBack(false); canvas.Erase(ColorScreen); canvas.Update(); srand(GetTickCount()); for(int i=0;i<Ncirl;i++) { x[i]=rand()%Width; y[i]=rand()%Height; r1[i]=rand()%MaxSizeCircle; r2[i]=rand()%MaxSizeCircle; k1[i]=(double)(rand()%10)/1000; k2[i]=(double)(rand()%10)/1000; col[i]=XRGB(rand()%255,rand()%255,rand()%255); } while(!IsStopped()) { canvas.Erase(ColorScreen); for(int i=0;i<Ncirl;i++) canvas.CircleSS(x[i],y[i],r1[i]*fabs(sin(j*k1[i])),r2[i]*fabs(sin(j*k2[i])),col[i]); Sleep(pause); canvas.Update(); j++; } ObjectDelete(0,"SampleCanvas"); canvas.Destroy(); return(0); }
А код?
В стандартном сCanvas уже ведь есть несколько методов сглаживания для всех форм.
Увы. Даже последняя функция окружности на основе метода Ву, содержит баги и даёт заметную погрешность в сглаживании в диагональных местах окружности из-за примитивности этого метода, и очень не оптимальная в плане скорости. Тем более сглаженных фигур с заливкой просто не существует.
А код?
Ну тогда мне остается только присоединиться к вопросу.
Странно, почему этот вопрос вы задаете мне. Я не работаю в компании Metaquotes, хотя и мечтаю там работать. Вот если бы я работал в этой компании, тогда бы я смог хорошо поработать над этим вопросом, а также не только над вопросом сглаживания в библиотеке CCanvas, но и , например, полноценными 3D функциями в канвасе.
Но сейчас пока только эксперименты, собранные на скорую руку на коленках, которые и публиковать то стрёмно, т.к. знаю, что можно сделать лучше, но для этого нужно время.
Странно, почему этот вопрос вы задаете мне. Я не работаю в компании Metaquotes, хотя и мечтаю там работать. Вот если бы я работал в этой компании, тогда бы я смог хорошо поработать над этим вопросом, а также не только над вопросом сглаживания в библиотеке CCanvas, но и , например, полноценными 3D функциями в канвасе.
Но сейчас пока только эксперименты, собранные на скорую руку на коленках, которые и публиковать то стрёмно, т.к. знаю, что можно сделать лучше, но для этого нужно время.
В 10-й раз тема отмечается непрочитанной, хотя ни правок сообщений, ни новых сообщений нет.
Кто-то шалит или форум ключит?
В 10-й раз тема отмечается непрочитанной, хотя ни правок сообщений, ни новых сообщений нет.
Кто-то шалит или форум ключит?
У меня подозрение, что авторы (автор?) правит свой пост.
Ещё вариант: кто-то начал писать пост и бросил, теперь этот пост висит в режиме редактирования, а форум каждую минуту (5, 10 минут?) отмечает, что в теме что-то происходит.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Пользовательские индикаторы и инфографика в CCanvas:
В статье рассматриваются новые виды индикаторов с более сложной структурной реализацией. Описывается построение псевдообъемных типов индикаторов и создание динамично изменяющейся инфографики.
Мы уже рассмотрели классы и принципы построения сложных фигур с помощью примитивов. А в классе построения индикаторов гистограммного типа частично была затронута тема построения в двухмерном пространстве объектов, кажущихся объемными (рис.13) за счет цветовой подборки. Однако пирамида — не плоская фигура, поэтому при ее построении в заданной двухмерной системе координат мы используем ее изометрическую проекцию. Базовая структура не отличается большим числом элементов (рис.14), но тем не менее, способ построения проекции пирамиды и ее визуализация — основная часть реализации этого класса.
Рис.14. Базовая структура класса CPyramid.
Автор: Alexander Fedosov