Prüfung von CGraphic - Fragen und Anregungen - Seite 4

 
Roman Konopelko:

Selbst wenn Sie sie virtuell machen, werden Sie nicht in der Lage sein, normale Überladung ohne vollen Zugriff auf CGraphics Klassenmitglieder zu tun, so sollten sie alle (die meisten) als geschützt deklariert werden.

und diese Funktionen ***Plot sind nur geschützt


 
o_O:

und diese ***Plot-Funktionen sind ebenso geschützt

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;
Ich sprach über CGraphic Klassenmitglieder, jetzt sind sie alle privat, und ohne Zugriff auf m_canvas, m_dx, m_dy und andere Mitglieder in der Nachkommenschaft, Überladung wird nicht funktionieren.
 
Roman Konopelko:
Ich sprach über CGraphic Klassenmitglieder, jetzt sind sie alle privat, und ohne Zugriff auf m_canvas, m_dx, m_dy und andere Mitglieder in der Nachkommenschaft, Überladung wird nicht funktionieren.

OK, dann liegt alles in Ihrer Hand) Ich werde warten.

Bislang habe ich sie vorübergehend lokal geändert

 

In einigen Funktionen (nicht überall) erfolgt eine Division ohne 0-Prüfung.

z.B..

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;

hier tritt zero_devide auf, wenn x.Max() == Min()

auch in Axis::CalcStepSize / CalcBoundedStepSize / SelectAxisScale usw.

 
o_O:

In einigen Funktionen (nicht überall) erfolgt eine Division ohne 0-Prüfung.

zum Beispiel

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;

zero_devide tritt auf, wenn x.Max() == Min()

auch in Axis::CalcStepSize / CalcBoundedStepSize / SelectAxisScale usw.

Danke, ich werde es korrigieren.

Um die Bibliothek nicht mit zahlreichen Prüfungen zu überlasten, habe ich versucht, alle Fälle in der Methode Axis::SelectAxisScal zu berücksichtigen.

Dateien:
Axis.mqh  11 kb
 

1. dies scheint die Datei ohne die Änderungen von heute Morgen am enum ENUM_AXIS_TYPE zu sein

---

2. getestet ENUM_AXIS_TYPE von der vorherigen Seite

da Sie ValuesFunctionFormat in Callback-Funktion Stil tun, müssen Sie einige void * Parameter in der Funktion zurückgeben.

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

in CAxis zum Hinzufügen

   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); // <---


----

Dieser Callback-Parameter wird benötigt, um einen Zeiger auf ein Objekt zu übergeben , das weiß, wo sich das Array arrX befindet.

Da die Funktion im Wesentlichen statisch ist, ist es unmöglich zu wissen, was genau sie aufgerufen hat.


ZS.

Und so sieht das Ergebnis der Zeitreihendarstellung bereits aus (ich werde später mehr über Linien mit Messwerten fragen, es gibt eine Unannehmlichkeit, dort Koordinaten zu bekommen :)

 
o_O:

Und so sieht das Ergebnis der Zeitreihe im Prinzip schon aus (zu den Linien mit den Messwerten frage ich später mehr, da gibt es die Umständlichkeit, dort Koordinaten zu bekommen :)

Bitte machen Sie ein Video oder eine längere Animation von dem Moment der leeren Karte. Auf dem GIF verstehe ich nicht, was das ist.
 
fxsaber:
Bitte machen Sie ein Video oder eine längere Animation von dem Moment der leeren Karte. Ich verstehe das GIF nicht.

ist das besser?

dieser Experte arbeitet auf Roms Canvas + CGraphic

In diesem Fall baue ich eine P/L aus mehreren Tools auf
 
o_O:

dieser Experte arbeitet an Romans Canvas + CGraphic

In diesem Fall baue ich P/L aus mehreren Instrumenten auf

Jetzt wird es klarer. Ist das Fadenkreuz (und möglicherweise andere Interaktivität) eine eingebaute (notwendige) Funktion von Romans Bibliothek, oder haben Sie es geerbt?

Ich möchte Elemente der Interaktivität in SB-Grafiken sehen - Fadenkreuz, Zoom (in beide Richtungen) und Hervorhebung von Cursorwerten.

D.h. ich mache GraphPlot über EA/indicator, und ich bekomme diese Funktionalität sofort.

 
fxsaber:

Um es noch deutlicher zu machen. Ist das Fadenkreuz (und möglicherweise andere Interaktivität) eine eingebaute (notwendige) Funktion von Romans Bibel, oder haben Sie die Vererbung hinzugefügt?

Ja, ich habe es geerbt.

Ich möchte einige Elemente der Interaktivität in SB-Grafiken sehen - Fadenkreuz, Zoom (in beide Richtungen) und Hervorhebung von Cursorwerten.

Wir werden uns mit dem Hauptverantwortlichen unterhalten. Ich brauche auch etwas.

- Hintergrundbeleuchtung (wenn nicht sie, dann zumindest die Funktion GetNearY/X) wird benötigt. Die Hervorhebung ist ohnehin besser durch Vererbung zu realisieren. Es ist in jeder unserer Darstellungen anders )

- brauchen das Fadenkreuz selbst noch nicht, denn es ist das Ergebnis von Diagrammereignissen, die noch nichts mit der Bibliothek zu tun haben.

- Die Ermittlung der Skalenwerte - die durch die Pixelkoordinate bestimmt werden - ist ein Muss.

- Mit zoomo ist es schwierig. Da es keine Bildlaufleisten gibt. Und um ehrlich zu sein, würde ich nicht wollen, dass sie in dieser Klasse eingeführt werden. Im Moment verwendet es nur CCanvas und fragt nicht nach anderen Objekten. Und das ist sehr gut.
Ich habe vor, den Zoom unabhängig durch Vererbung zu implementieren, Scrollbalken einzufügen und ihn richtig zu skalieren.