Skocz do zawartości

Visual C++ 2008 Express Edition - Wykresy


Athem

Pomocna odpowiedź

Witam,
Mam spory problem z utworzeniem jakiegokolwiek wykresu.

Dane dostaje co 100ms, X Y Z. Chce je przedstawić na wykresie, tak by mi je rysowało "na żywo". (lub co jakiś czas)

Przeszukiwałem Google wiele godzin, ale nie znalazłem informacji jak to zrobić.

Zedgraph, DevExpress próbowałem ale za nic nie mogę wstawić danych "na żywo".

Proszę o konkrety, jak to wykonać, jakiś porządny tutorial.

I piszę w C++ nie C# CB czy innym.

Link do komentarza
Share on other sites

Co rozumiesz przez pojęcie na żywo? Po za tym jak ten wykres ma wyglądać? Większość bibliotek GUI umożliwia rysowania linii, krzywych itp i bez problemu można z tego wykres stworzyć.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Gdybym to umiał, to bym tu pisał o pomoc?

Mam okno Form1 i w nim chce mieć pole w którym będzie się rysował wykres na podstawie danych otrzymywanych na bieżąco.

Np. otrzymuje dane i zapisuje do X Y Z w czasie 0 i rysuje początek linii. Następnie otrzymuje kolejne dane w czasie 1,2,... i zapisuje je do tego X Y Z i rysuje kolejne punkty linii. Ewentualnie na koniec zapisuje wykres jako obrazek.

Czy rzeczywiście to jest tak skomplikowane w Visual C++? Zwykły prosty wykres.

Link do komentarza
Share on other sites

A dlaczego nie skorzystałeś ze standardowej kontrolki chart? Przykładowy wykres z mojego projektu poniżej:

O tym jak używać chart'a jest masa tutoriali.

Link do komentarza
Share on other sites

Problem polega na tym właśnie, że nie mam właśnie tej kontrolki chart.

Skleiłem coś takiego i działa (prawie dobrze).

       zedGraphControl1->GraphPane->Title->Text="Wykres przyspieszeń";
zedGraphControl1->GraphPane->Title->FontSpec->Size=25;
zedGraphControl1->GraphPane->XAxis->Title->Text="Time";
zedGraphControl1->GraphPane->XAxis->Title->FontSpec->Size=20;
zedGraphControl1->GraphPane->YAxis->Title->Text="Acceleration [g]";
zedGraphControl1->GraphPane->YAxis->Title->FontSpec->Size=20;
zedGraphControl1->GraphPane->XAxis->Scale->Max=t+5;
zedGraphControl1->GraphPane->XAxis->Scale->Min=t-50;

PointPairList ^list = gcnew PointPairList();
PointPairList ^list2 = gcnew PointPairList();
PointPairList ^list3 = gcnew PointPairList();

//list->Add(0, 0);
//list2->Add(0, 0);
//list3->Add(0, 0);

list->Add(t,AcX);
list2->Add(t,AcY);
list3->Add(t,AcZ);
t++;

zedGraphControl1->GraphPane->Legend->Fill->Color::set(Color::AliceBlue);
zedGraphControl1->GraphPane->Fill->Color::set(Color::LightGoldenrodYellow);

zedGraphControl1->GraphPane->AddCurve("", list, Color::Red, SymbolType::Star);
zedGraphControl1->GraphPane->AddCurve("", list2, Color::Green, SymbolType::Star);
zedGraphControl1->GraphPane->AddCurve("", list3, Color::Blue, SymbolType::Star);

zedGraphControl1->AxisChange();
zedGraphControl1->Refresh();

Umieściłem to w timerze tak samo jak odczyt danych z USB. Aktualnie problem polega na tym, że nie rysuje linii tylko same pkt. Gdy od komentuję:

	//list->Add(0, 0);
//list2->Add(0, 0);
//list3->Add(0, 0);

Rysuje się linia, ale z tym problemem, że co przejście wstawia się pkt 0,0 co daje efekt, że linia idzie od 0 potem do pkt i do 0 i znów do pkt itd.

Podobnym problem ma legenda, gdyż co przejście wstawia się kolejna ta sama i rośnie aż zniknie całość.

Kolejnym problemem który napotkałem jest to, że po kilkunastu sekundach program zaczyna się strasznie "mulić". Nie usuwa z listy starych danych.

__________

Poprawione

__________

Komentarz dodany przez: Treker

Kody programu proszę umieszczać w tagach !




     
            
   

			
		
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.