Marker hinzufügen

Die Marker eines Charts befinden sich als SubMember unter den jeweiligen Achsen.
Um einen Marker hinzuzufügen, wird ein Objekt der Klasse Marker instanziiert und der Achse mit der Methode „AddMember“ hinzugefügt.
Nach dem Erstellen des Markers werden Methoden-Events hinzugefügt, um die Tabellen auf der Oberfläche zu aktualisieren.
Danach wird der neue Cursor inklusive seiner Farbe in der Tabelle hinzugefügt. Des Weiteren wird die Marker_NewMarkerValues-Methode aufgerufen, um die Werte in der Tabelle zu aktualisieren.

Der erstelle Marker wird standardmäßig immer bei der Position ‚0‘ eingefügt. Damit der Marker im sichtbaren Achsenbereich erscheint, kann an der zugehörigen Achse der aktuell sichtbare Bereich abgefragt werden, um die Position des Markers berechnen zu können. Der aktuell sichtbare Bereich kann mit dem Delegate „GetDisplayRange“ abgefragt werden. Die beiden übergebenen Parameter geben nach dem Aufruf den minimalen und maximalen Wert der sichtbaren Achse zurück.

private void btnAddXMarker_Click(object sender, EventArgs e)
{
    try
    {
        Marker marker = new Marker();
        marker.Position = 0;
        marker.Orientation = TwinCAT.Measurement.Scope.API.CursorAlignment.Vertical;
        marker.Locked = false;
        axisGroup.SubMember.OfType<MarkerContainer>().First().AddMember(marker);

        marker.NewMarkerValues += Marker_NewMarkerValues;
        marker.PositionChanged += XMarker_PositionChanged;
        dataGridView1.Rows.Insert(axisGroup.SubMember.OfType<MarkerContainer>().First().SubMember.OfType<Marker>().Where(x => x.Orientation == TwinCAT.Measurement.Scope.API.CursorAlignment.Vertical).Count() - 1, marker.Position, marker.Title);
        dataGridView1.Rows[axisGroup.SubMember.OfType<MarkerContainer>().First().SubMember.OfType<Marker>().Where(x => x.Orientation == TwinCAT.Measurement.Scope.API.CursorAlignment.Vertical).Count() - 1].Cells[1].Style.ForeColor = marker.DisplayColor;

        IndexAxis indexAxis = axisGroup.FirstOrDefault<IndexAxis>();
        if(indexAxis != null && indexAxis.GetDisplayRange != null)
        {
            indexAxis.GetDisplayRange.Invoke(out double min, out double max);
            marker.Position = min + ((max - min) / 2);
        }

        Marker_NewMarkerValues(marker, null);
    }
    catch (Exception) { }
}

private void btnAddYMarker_Click(object sender, EventArgs e)
{
    try
    {
        Marker marker = new Marker();
        marker.Orientation = TwinCAT.Measurement.Scope.API.CursorAlignment.Horizontal;
        marker.Locked = false;
        axisGroup.SubMember.OfType<MarkerContainer>().First().AddMember(marker);
        marker.PositionChanged += YMarker_PositionChanged;
        dataGridView2.Rows.Insert(axisGroup.SubMember.OfType<MarkerContainer>().First().SubMember.OfType<Marker>().Where(x => x.Orientation == TwinCAT.Measurement.Scope.API.CursorAlignment.Horizontal).Count() - 1, marker.Title, marker.Position);
        dataGridView2.Rows[axisGroup.SubMember.OfType<MarkerContainer>().First().SubMember.OfType<Marker>().Where(x => x.Orientation == TwinCAT.Measurement.Scope.API.CursorAlignment.Horizontal).Count() - 1].DefaultCellStyle.ForeColor = marker.DisplayColor;

        ValueAxis valueAxis = axisGroup.FirstOrDefault<ValueAxis>();
        if(valueAxis != null && valueAxis.GetDisplayRange != null)
        {
            valueAxis.GetDisplayRange.Invoke(out double min, out double max);
            marker.Position = min + ((max - min) / 2);
        }
    }
    catch (Exception) { }
}