CGraphic'i test etme - sorular ve öneriler - sayfa 4

 
Roman Konopelko :

Bunları sanal yaparak bile , CGraphics sınıf üyelerine tam erişim olmadan normal aşırı yüklemeler yapamazsınız, bu nedenle hepsinin (çoğu) korumalı olarak bildirilmesi gerekir.

ve bu ***Plot işlevleri sadece korunur


 
o_O :

ve bu ***Plot işlevleri sadece korunur

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 sınıfının üyelerinden bahsettim, şimdi hepsi özel ve varisteki m_canvas, m_dx, m_dy ve diğer aşırı yük üyelerine erişim olmadan çalışmayacak.
 
Roman Konopelko :
CGraphic sınıfının üyelerinden bahsettim, şimdi hepsi özel ve varisteki m_canvas, m_dx, m_dy ve diğer aşırı yük üyelerine erişim olmadan çalışmayacak.

tamam o zaman herşey senin elinde) Bekleyeceğim.

bu arada geçici olarak yerel olarak değiştirildi

 

bazı işlevlerde (her yerde değil) bir bölme varsa, 0'ı kontrol etmeden yapılır.

Örneğin

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() ise zero_devide burada ortaya çıkar

ayrıca Axis::CalcStepSize / CalcBoundedStepSize / SelectAxisScale vb.

 
o_O :

bazı işlevlerde (her yerde değil) bir bölme varsa, 0'ı kontrol etmeden yapılır.

Örneğin

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() ise zero_devide burada ortaya çıkar

ayrıca Axis::CalcStepSize / CalcBoundedStepSize / SelectAxisScale vb.

Teşekkürler, düzelteceğim.

Kitaplığı birçok kontrolle aşırı yüklememek için Axis::SelectAxisScal yöntemindeki tüm durumları dikkate almaya çalıştım.

Dosyalar:
Axis.mqh  11 kb
 

1. bu enum ENUM_AXIS_TYPE tarafından sabah düzenlemeleri olmayan bir dosya gibi görünüyor

---

2. ENUM_AXIS_TYPE çalışmasını önceki sayfadan test etti

ValuesFunctionFormat işlevini geri çağırma işlevi tarzında yaptığınız için, işlevde bazı void* parametreleri döndürmeniz gerekir.

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

CAxis'e ekle

   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 ; }


CGraphic'te:: HesaplaXAxis

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

...

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


----

Bu geri çağırma parametresi, arrX dizisinin nerede olduğunu bilen bir nesneye bir işaretçi iletmek için gereklidir.

Çünkü işlev özünde statiktir ve onu tam olarak neyin adlandırdığını bilmek imkansızdır.


not.

Ve prensipte, zaman serilerini göstermenin sonucu zaten böyle görünüyor (göstergeleri olan satırları daha sonra soracağım, koordinatları almanın bir sakıncası var :)

 
o_O :

Ve prensipte, zaman serilerini göstermenin sonucu zaten böyle görünüyor (göstergeleri olan satırları daha sonra soracağım, koordinatları almanın bir sakıncası var :)

Lütfen grafik boş olduğu andan itibaren bir video veya daha uzun bir animasyon yapın. GIF'ten ne olduğunu bilmiyordum.
 
fxsaber :
Lütfen grafik boş olduğu andan itibaren bir video veya daha uzun bir animasyon yapın. GIF'ten ne olduğunu bilmiyordum.

bu daha iyi?

bu uzman Canvas + CGraphic Roman üzerinde çalışıyor

bu durumda, birkaç enstrümandan P / L inşa ediyorum
 
o_O :

bu uzman Canvas + CGraphic Roman üzerinde çalışıyor

bu durumda, birkaç enstrümandan P / L inşa ediyorum

Şimdi daha net. Artı işareti (ve muhtemelen diğer etkileşimler) - İncil Roman'ın yerleşik (gerekli) bir işlevi mi yoksa miras eklediniz mi?

SB grafiklerinde etkileşim unsurlarını görmek istiyorum - artı işareti, yakınlaştırma (her iki yönde) ve imleç değerlerini vurgulama.

Onlar. Bir danışman/gösterge aracılığıyla GraphPlot yapıyorum ve bu işlevi hemen elde ediyorum.

 
fxsaber :

Şimdi daha net. Artı işareti (ve muhtemelen diğer etkileşimler) - İncil Roman'ın yerleşik (gerekli) bir işlevi mi yoksa miras eklediniz mi?

Evet, miras yoluyla eklendi.

SB grafiklerinde etkileşim unsurlarını görmek istiyorum - artı işareti, yakınlaştırma (her iki yönde) ve imleç değerlerini vurgulama.

Ana ile iletişim kuracağız. Benim de bir şeye ihtiyacım var.

- vurgulama (eğer değilse, en azından GetNearY/X işlevi) gereklidir. Vurgulama, devralma yoluyla uygulamak için hala daha iyidir. Herkese göre değişir.)

- artı işaretinin kendisine henüz ihtiyaç yoktur, çünkü henüz İncil ile ilgisi olmayan grafik olaylarının sonucudur.

- piksel koordinatı tarafından belirlenen ölçek değerlerinin elde edilmesi - bu gereklidir.

- Zumomo zor. Kaydırma çubuğu olmadığından. Ve dürüst olmak gerekirse, onların bu sınıfa dahil edilmesini istemezdim. Şu anda yalnızca CCanvas kullanıyor ve başka nesneler istemiyor. Ve bu çok iyi.
Yakınlaştırmayı kalıtım yoluyla kendi başıma uygulamayı planlıyorum, kaydırma çubukları koyacağım ve gerektiği gibi ölçeklendireceğim.