Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Даже сделав их virtual вы не сможете делать нормальные перегрузки без полного доступа к членам класса CGraphics, следовательно их все(большинство) нужно объявлять как protected.
а эти функции ***Plot как раз protected
а эти функции ***Plot как раз protected
{
private:
CArrayObj m_arr_curves;
CCanvas m_canvas;
//--- parameters background
int m_height;
int m_width;
//--- parameters work space
int m_left;
int m_right;
int m_up;
int m_down;
//--- default parameters work space
int m_left0;
int m_right0;
int m_up0;
int m_down0;
//--- size of dash on the axes
int m_mark_size;
//--- scaling parameters
double m_dx;
double m_dy;
Я говорил про члены класса CGraphic, сейчас они все private, а без доступа в наследнике к m_canvas, m_dx, m_dy и другим членам перегрузки не получатся сделать.
ок, тогда всё в ваших руках) буду ждать.
пока что временно локально у себя поменял
в некоторых функциях (не везде) если есть деление, то оно без проверки на 0.
например
{
...
...
double x_size=(m_x.Max()-m_x.Min());
double xf_size=xf2-xf1;
//--- keep scaling parameters
m_dx=xf_size/x_size;
тут возникнет zero_devide если х.Max() == Min()
также в Axis::CalcStepSize / CalcBoundedStepSize / SelectAxisScale и т.д
в некоторых функциях (не везде) если есть деление, то оно без проверки на 0.
например
{
...
...
double x_size=(m_x.Max()-m_x.Min());
double xf_size=xf2-xf1;
//--- keep scaling parameters
m_dx=xf_size/x_size;
тут возникнет zero_devide если х.Max() == Min()
также в Axis::CalcStepSize / CalcBoundedStepSize / SelectAxisScale и т.д
Спасибо, исправлю.
Что бы не перегружать библиотеку множеством проверок постарался учесть все случаи в методе Axis::SelectAxisScal.
1. кажется это файл без утренних правок по enum ENUM_AXIS_TYPE
---
2. протестил работу ENUM_AXIS_TYPE c предыдущей страницы
так как вы делаете ValuesFunctionFormat в стиле callback функции, то в функции надо возвращать некий void* параметр.
в CAxis добавить
void* m_cbdata; // <---
...
// изменить
void ValuesFunctionFormat(DoubleToStringFunction func, void* cbdata) { m_values_func=func; m_cbdata=cbdata; }
// добавить получение этого void*
void* ValuesFunctionFormatCBData(void) const { return m_cbdata; }
в CGraphic::CalculateXAxis
void* cbdata=m_x.ValuesFunctionFormatCBData(); // <---
...
case AXIS_TYPE_CUSTOM:
{
m_xvalues[i]=(xfunc==NULL) ? NULL : xfunc(x, cbdata); // <---
----
Этот callback параметр нужен для передачи указателя на объект, который знает где находится массив arrX.
Ибо функция по сути static, и знать что именно её вызывало невозможно.
ЗЫ.
А вот так в принципе уже выглядит результат показа таймсерии (о линиях с показаниями я еще буду просить позже, там есть неудобство получения координат :)
А вот так в принципе уже выглядит результат показа таймсерии (о линиях с показаниями я еще буду просить позже, там есть неудобство получения координат :)
Сделайте, пожалуйста, видео или более длинную анимацию с момента пустого чарта. По GIF-у не понял, что это.
так лучше?
это эксперт работает на Canvas + CGraphic Романа
в данном случае я строю на нём P/L от нескольких инструментовэто эксперт работает на Canvas + CGraphic Романа
в данном случае я строю на нём P/L от нескольких инструментовТеперь яснее. Перекрестье (и, возможно, другая интерактивность) - это встроенный (нужный) функционал библы Романа, или Вы дописали наследованием?
Хочется видеть в СБ-графики элементы интерактивности - перекрестье, зум (в обе стороны) и подсветка значений курсора.
Т.е. делаю GraphPlot через советник/индикатор, и получаю сразу такой функционал.
Теперь яснее. Перекрестье (и, возможно, другая интерактивность) - это встроенный (нужный) функционал библы Романа, или Вы дописали наследованием?
Да, дописал наследованием.
Хочется видеть в СБ-графики элементы интерактивности - перекрестье, зум (в обе стороны) и подсветка значений курсора.
Будем общаться с главным. Мне тоже кое что надо.
- подсветка (если не она, то как минимум функция GetNearY/X) нужна. Подсветку все равно лучше реализовывать наследованием. Она у каждого в своём представлении разная )
- само перекрестие пока не надо, ибо оно это результат чартовых событий, которые к библе пока не имеют отношения.
- получение значений шкалы - которое по пиксельной координате определяется - это надо.
- С зумомо сложно. Так как нет полос прокруток. И если честно я бы не хотел чтоб их внедряли в этот класс. Он сейчас юзает только CCanvas, и не просит других объектов. И это очень хорошо.
Зум я планирю реализовывать самостоятельно наследованием, поставлю полосы прокрутки и отмасштабирую как надо.