System drawing linie

0
public partial class wykres : Form
    {
        List<Rysowaniee> linie = new List<Rysowaniee>();
        public wykres()
        {
            LinieDoRysowania linia = new LinieDoRysowania()
            {
                Poczatek = new PointF(0, 0),
                Koniec = new PointF(0, 0)
            };
            InitializeComponent();
            timer1.Start();
        }
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            foreach (var o in linie)
            {
                o.Rysuj(e.Graphics);
            }
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            DataSetTableAdapters.MineralyTableAdapter TableAdapter = new DataSetTableAdapters.MineralyTableAdapter();
            
            var liniedata = TableAdapter.GetData();
            foreach (DataSet.MineralyRow m in liniedata.Rows)
            {
                LinieDoRysowania linia = new LinieDoRysowania()
                {
                Poczatek = new PointF(((float) , (float)),
                Koniec = new PointF(((float)m.JakasliczbaZbazy, (float))
                };
               
                linie.Add(linia);
            }
            pictureBox1.Refresh();
        
        }
    }
 

Kod ma za zadanie od x=0 y=0 pokolei ryzsowac linie (taki wykresik) których dane są pobierane z bazy danych.
Baza to zestaw liczb w formie float.
x y z k l a
10 20 30 40 50 60
11 21 31 41 51 61
Czyli np wybiorę by zrobić wykres zmiennej X to od 0 , 0 zaczyna robic linie nastepna linia ma y = 10 i x który odpowiada całej skali osi OX / 30 (chodzi o pokazanie ze w tym dniu linia poszla do gory). Po 30 ma sie resetowac i od nowa.

Na czym polega problem. Rysuje mi jakieś linie. Pierwsza linia to nie problem ale druga tak ponieważ do określenia punktu początkowego i końcowego potrzebuje 2 danych z innych wierszy. Nie wiem jak zrobić by wziąć daną z wiersza poprzedniego.

0

Jeśli celem jest stworzenie wykresu to proponuję klasę Chart.

0

wiem ,że jest chart ,ale potrzebuje tak.

0

To przed foreachem utwórz sobie obiekt PointF helper, przypisz mu nulla na początku, potem w foreachu, jeśli helper==null, to tworzysz linię tak jak teraz masz w kodzie, jednocześnie przypisujesz do tego helpera to samo co masz w Koniec. Jeśli helper nie jest nullem, to tworzysz linię z tego punku z helpera i kolejnego z obliczeń, i oczywiscie aktualizujesz wartosć helpera znów na wartośc z Koniec

0

jak przypisuje nulla pojawia się cannot convert null to System.Drawing.Point.
Ale pomysł dobry.zobacze co się z tym da zrobić.

0
private void timer1_Tick(object sender, EventArgs e)
        {
            PointF helper = new PointF();
           DataSetTableAdapters.MineralyTableAdapter mineralyTableAdapter = new DataSetTableAdapters.MineralyTableAdapter();
            var liniedata = mineralyTableAdapter.GetData();
            foreach (DataSet.MineralyRow m in liniedata.Rows)
            {
                if (helper.IsEmpty == true)
                {
                    LinieDoRysowania linia = new LinieDoRysowania()
                    {
                        Poczatek = new PointF((float)+0, (float)+0),
                        Koniec = new PointF((float) + 100, ((float)(m.Tritanium) * 5))
                        
                    };
                    helper = new PointF((float) + 100, ((float)(m.Tritanium) * 5));
                    linie.Add(linia);

                }
                else
                {
                    LinieDoRysowania linia = new LinieDoRysowania()
                    {
                        Poczatek = helper,
                        Koniec = new PointF((float) + 100, ((float)(m.Tritanium) * 5))

                    };
                    helper = new PointF((float) + 100, ((float)(m.Tritanium) * 5));
                    linie.Add(linia);
                }
            }
            pictureBox1.Refresh();
        
        }
 

Popracowałem i się da ....ale też jest problem i to dość .... śmieszny.

Koniec = new PointF((float) + 100, ((float)(m.Tritanium) * 5)) 

Pierwsza linia wychodzi dobrze a druga punkt X końcowy ma taki sam jak początkowy.
Podejrzewam ,że to + 100 jest stałe i nie zwiększa co wykonanie pętli o 100 tylko wszędzie X końcowy będzie równy 0 + 100.
Mała pomoc z tą drobnostką i temat do zamknięcia =).

0
 
PointF helper = new PointF();
            int licznik =0;
            DataSetTableAdapters.MineralyTableAdapter mineralyTableAdapter = new DataSetTableAdapters.MineralyTableAdapter();
            var liniedata = mineralyTableAdapter.GetData();
            foreach (DataSet.MineralyRow m in liniedata.Rows)
            {
                licznik++;
                
                SizeF zwiekszpunktx = new SizeF( 10 * licznik, 0);
                if (helper.IsEmpty == true)
                {
                    LinieDoRysowania linia = new LinieDoRysowania()
                    {
                        Poczatek = new PointF(((float) + 1), (float) + 1),
                        Koniec = new PointF((((float) + 10)* licznik), ((float)(m.Tritanium) * 5))
                        
                    };
                    helper = new PointF((((float) + 10) * licznik), ((float)(m.Tritanium) * 5));
                    linie.Add(linia);

                }
                else
                {
                    LinieDoRysowania linia = new LinieDoRysowania()
                    {
                        Poczatek = helper,
                        Koniec = PointF.Add( (new PointF((((float) + 10) * licznik) , ((float)(m.Tritanium) * 5))) , zwiekszpunktx)
                        
                    };
                    
                    helper = linia.Koniec;
                    linie.Add(linia);
                }
            }
            pictureBox1.Refresh();

Ogarnięte. Temat do zamknięcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1