Frage zu TChartSeries
-
Hallo Zusammen!
Ich hab eine Frage zur Funktion AddXY(....)
Ich habe ein Diagramm, in dem ich bis zu 10 Kurven gleichzeitig aufzeichnen kann.
Auf meinem Diagramm kann ich bis zu 720 Bildpunkte pro Kurve darstellen.
Sobald die Kurven sich in der Diagrammmitte befinden,
habe ich einen zunehmenden Performanceverlust in der Kommunikation mit meinem Messgerät(Kommunikationaustausch erfolgt über einen Thread).Jetzt wollt ich fragen:
1. ob bei Ausführung der Funktion AddXY die Kurve komplett neu gezeichnet wird?
2. ob die Darstellung der Kurve irgendwie rechenintensiv ist?
Sobald ich die Diagrammansicht schließe,
steigt die Performance in der Kommunikation wieder an,
obwohl im Hintergrund die Kuve weiterhin aufgezeichnet wird?
-
mr_crabs schrieb:
1. ob bei Ausführung der Funktion AddXY die Kurve komplett neu gezeichnet wird?
Ja, normalerweise schon. Du kannst aber deine AddXY in ein BeginUpdate()/EndUpdate einschliessen, dann wird es erst danach gemacht.
mr_crabs schrieb:
2. ob die Darstellung der Kurve irgendwie rechenintensiv ist?
Das kann schon sein.
Die Linie muss neu gezeichnet werden.
evtl. müssen die Achsen neu skaliert werden (wenn auf auto)
-
Mein Diagramm besteht aus einem Panel und auf diesem Panel befindet sich ein TChart. Ich weiß nicht, wie ich die Funktion AddXY in ein BeginUpdate()/EndUpdate() einschliessen kann?
Außerdem bin ich mir nicht sicher ob der Aufruf der Funktion AddXY den Performanceverlust verursacht,
denn wenn ich das Panel mit dem TChart invisble mache, wird ja trotzdem die Funktion AddXY ausgeführt und dann habe ich wieder volle Leistung bei der Kommunikation.In der Diagrammfunktion kann man angeben, in welchem Intervall die Messwerte skizziert weden sollen.
Und sobald das Diagramm sichtbar ist und ein weitere Messwert gezeichnet werden, wird die Kommunikation kurz unterbrochen.
Bei Intervallen von 10sekunden lässt sich das verkraften aber nicht wenn jede sekunde gezeichnet wird.Für weiter Tipps bin sehr dankbar!
-
AddXY selber verursacht ja wahrscheinlich auch nicht das problem sondern eher ein daraus resultierendes Update oder so. Wenn das Chart nicht zu sehen ist wird dann wohl auch nichts gemacht.
Das mit dem Update geht dann etwa soseries->BeginUpdate(); series->AddXY(...); ... series->EndUpdate();
Solange du etwas mit der Serie zwischen den beiden Funktionen machst wird kein Refresh aufgerufen. Das passiert dann erst bei EndUpdate().
Welche TChart Version hast du denn?
-
habe nun versucht die Funktion BeginnUpdate() und EndUpdate() einzubinden, aber es kommt zur Fehlermeldung,dass BeginnUpdate bzw. EndUpdate kein Elemnt von TFastLineSeries ist.
Habe versucht es so zu realsieren:
TFastLineSeries *tflCurve; . . . Chart[wCnt1].Kurve[wCnt2].tflCurve->BeginnUpdate(); Chart[wCnt1].Kurve[wCnt2].tflCurve->AddXY(tdtNow, wValue, "", clColor); Chart[wCnt1].Kurve[wCnt2].tflCurve->EndUpdate();
-
Man ruft das so auf ohne 'Chart' davor, da in einem Projekt die Series eindeutige Namen haben und auch bei mehreren Charts nicht doppelt sind:
Series1->FunctionType->BeginUpdate();
Steht aber bei dem Beispiel von Braunstein so da.
Gruß myerscola
-
BeginnUpdate schreibt sich mit einem n.
Ich wiederhole nochmal die Frage. Welche TChart version hast du?
Ist es die mitgelieferte oder eine professional version?
BeginUpdate etc. wurden (glaube ich) erst mit Version 5 eingeführt. Wenn du ein altes DecisionCubePackage hast (beim BCB5 und 6 dabei) basiert das auf Version 4.
-
ich benutze die Version, die beim Borland von BCB5 dabei ist.
Ich habe mir die Eigenschaften von TFastLineSeries angeschaut und die Eigenschaft AuotRepaint auf false gesetzt und schon gibt es keine Performanceverluste mehr.
Vielen Dank für euere Hilfe!