CGraphicのテスト - 質問と提案 - ページ 4

 
Roman Konopelko:

仮想 化しても、CGraphicsクラスのメンバに 完全にアクセスできなければ、通常のオーバーロードはできないので、すべて(ほとんど)protectedとして 宣言すべきです。

で、これらの関数 ***Plot は単にプロテクトされて いるだけです。


 
o_O:

そして、これらの ***Plot 関数も同様に保護されて います。

class CGraphic
  {
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クラスのメンバについて ですが、現在はすべてプライベートになっており、m_canvas、m_dx、m_dyなどの子孫のメンバにアクセスしないと、オーバーロードが効きません。
 
Roman Konopelko:
CGraphicクラスのメンバについて ですが、現在はすべてプライベートになっており、m_canvas、m_dx、m_dyなどの子孫のメンバにアクセスしないと、オーバーロードが効きません。

OK、では全てお任せします)待ちます。

これまでは、ローカルで一時的に変更していました

 

一部の関数(どこでもというわけではありません)では、除算がある場合、0チェックなしです。

たとえば

void CGraphic::CalculateXAxis(void)
  {
...
...
   double x_size=(m_x.Max()-m_x.Min());
   double xf_size=xf2-xf1;
//--- keep scaling parameters  
   m_dx=xf_size/x_size;

ここで、x.Max() == Min()の場合、zero_devideが発生します。

Axis::CalcStepSize / CalcBoundedStepSize / SelectAxisScaleなどでも使用可能です。

 
o_O:

一部の関数(どこでもというわけではありません)では、除算がある場合、0チェックなしです。

例えば

void CGraphic::CalculateXAxis(void)
  {
...
...
   double x_size=(m_x.Max()-m_x.Min());
   double xf_size=xf2-xf1;
//--- keep scaling parameters  
   m_dx=xf_size/x_size;

x.Max() == Min()のとき、zero_devideが発生する。

Axis::CalcStepSize / CalcBoundedStepSize / SelectAxisScaleなどでも使用可能です。

ありがとうございます、訂正します。

複数のチェックでライブラリに負荷をかけないようにするため、Axis::SelectAxisScalメソッドですべてのケースを考慮するようにしたのです。

ファイル:
Axis.mqh  11 kb
 

1. enum ENUM_AXIS_TYPE に関する今朝の編集がないファイルであるようです。

---

2. 前ページの ENUM_AXIS_TYPE をテストした。

コールバック関数でValuesFunctionFormatを行っているため、関数内でvoid* パラメータを返す必要があります。

typedef string(*DoubleToStringFunction)(double, void*);

CAxisに 追加する。

   DoubleToStringFunction m_values_func;
   void* m_cbdata; // <---

...

// изменить
   void              ValuesFunctionFormat(DoubleToStringFunction func, void* cbdata) { m_values_func=func; m_cbdata=cbdata; }

// добавить получение этого void*
   void* ValuesFunctionFormatCBData(void)    const { return m_c bdata; }


in CGraphic::CalculateXAxis

   DoubleToStringFunction xfunc=m_x.ValuesFunctionFormat();
   void* cbdata=m_x.ValuesFunctionFormatCBData(); // <---

...

         case AXIS_TYPE_CUSTOM:
           {
            m_xvalues[i]=(xfunc==NULL) ? NULL : xfunc(x, cbdata); // <---


----

このコールバックパラメータは、arrX 配列がどこにあるかを知っているオブジェクトへの ポインタを渡すために必要です。

この関数は基本的に静的なものなので、一体何が呼び出したのかを知ることはできません。


ZSです。

そして、時系列表示の結果はすでにこんな感じです(読みのある線については後で詳しく聞きます。そこで座標を取得するのに不便な点があります)

 
o_O:

そして、時系列の結果は、原理的にはすでにこのようになっています(読みのある線については後で詳しく聞きますが、そこには座標を取得する厄介さがありますね :)。

空のチャートの瞬間から、ビデオか長めのアニメーションを作って ください。GIFを見ても何だかよくわからない。
 
fxsaber:
グラフが空になった瞬間から、ビデオか長めのアニメーションを作ってください。GIFではわからない。

が良いのでしょうか?

この専門家は、RomanのCanvasとCGraphicを 担当しています。

この場合、いくつかのツールからP/Lを構築しています。
 
o_O:

この専門家は、Roman's Canvas + CGraphicを担当しています。

この場合、私はその上にいくつかの楽器からP/Lを構築します。

よりクリアになりました。十字キー(と、おそらく他のインタラクティブ機能)は、Romanのライブラリのビルトイン(必要な)機能なのでしょうか、それとも継承されたのでしょうか?

十字キー、ズーム(両方向)、カーソル値のハイライトなど、SBグラフィックスにインタラクティブな要素が欲しいです。

例えば、EA/indicator経由でGraphPlotを行うと、そのような機能が一度に得られます。

 
fxsaber:

今、はっきりさせること。十字キー(と、おそらく他のインタラクティブ機能)は、Romanのバイブルにビルトイン(必要な)機能なのでしょうか、それとも継承したのでしょうか?

はい、受け継ぎました。

十字キー、ズーム(両方向)、カーソル値のハイライトなど、SBグラフィックスにインタラクティブな要素が欲しいです。

メインの方とお話します。私も何か必要です。

- バックライト(それでなくても、少なくともGetNearY/X関数)は必要です。強調表示はどうせなら継承で実装した方が良い。それぞれの表現で違うんです )

- は、まだライブラリとは関係のないチャートイベントの結果なので、十字線自体はまだ必要ありません。

- 画素座標で決まるスケール値の取得は必須です。

- zoomoの場合は、それが厄介なんです。スクロールバーがないため正直なところ、このクラスには実装してほしくありません。今はCCanvasだけを使っていて、他のオブジェクトは要求してきません。そして、これは非常に良いことです。
ズームは継承で独立して実装し、スクロールバーを つけ、必要に応じて再スケールする予定です。