Wave:AnalysisFactory
From BlueM
Anleitung zur Erstellung einer neuen Analysefunktion
Um eine neue Analysefunktion in Wave einzubauen, muss man lediglich
- Die neue Analysefunktion in der
AnalysisFactorybekannt machen - Eine neue Analysefunktionsklasse schreiben, die von der Klasse
Analysiserbt
Die neue Analysefunktion wird automatisch ins Benutzerinterface integriert.
1. Neue Analysefunktion in AnalysisFactory bekannt machen:
Datei Analysis\AnalysisFactory.vb an 2 Stellen ergänzen:
(die beiden Stellen sind mit <------------ gekennzeichnet)
''' <summary> ''' Fabrik zum Erzeugen von Analyse-Objekten ''' </summary> Module AnalysisFactory ''' <summary> ''' Liste der Analysefunktionen ''' </summary> Public Enum AnalysisFunctions Monatsauswertung = 1 Doppelsummenalyse = 2 MeineAnalyseFunktion = 3 '<------------ Hier die Analysefunktion benennen und eine freie Nummer vergeben End Enum ''' <summary> ''' Fabrikmethode zur Erzeugung eines Analyse-Objekts ''' </summary> ''' <param name="analysisfunction">Typ des zu erzeugenden Analyse-Objekts</param> ''' <param name="zeitreihen">Collection von zu analysierenden Zeitreihen</param> ''' <returns>Das Analyse-Objekt</returns> Public Function CreateAnalysis(ByVal analysisfunction As AnalysisFunctions, zeitreihen As List(Of Zeitreihe)) As Analysis Dim oAnalysis As Analysis Select Case analysisfunction Case AnalysisFunctions.Monatsauswertung oAnalysis = New Monatsauswertung(zeitreihen) Case AnalysisFunctions.Doppelsummenalyse oAnalysis = New Doppelsummenanalyse(zeitreihen) Case AnalysisFunctions.MeineAnalyseFunktion '<------------ Fallunterscheidung zur Instanzierung der neuen Analysefunktion ergänzen oAnalysis = New MeineAnalyseFunktion (zeitreihen) Case Else Throw New Exception("Analysefunktion nicht gefunden!") End Select Return oAnalysis End Function End Module
2. Neue Analysefunktionsklasse erstellen:
Die neue Analysefunktionsklasse muss von der Klasse Analysis erben. Sie kriegt eine Collection von Zeitreihen und kann als Ergebnis wahlweise Text, ein Array von Werten, und ein Diagramm zurückgeben.
Beispiel Analysis\MeineAnalyseFunktion.vb:
''' <summary> ''' MeineAnalyseFunktion analysiert Zeitreihen ''' </summary> ''' <remarks>http://130.83.196.154/BlueM/wiki/index.php/Wave:MeineAnalyseFunktion</remarks> Public Class MeineAnalyseFunktion Inherits Analysis ''' <summary> ''' Flag, der anzeigt, ob die Analysefunktion einen Ergebnistext erzeugt ''' </summary> Public Overrides ReadOnly Property hasResultText() As Boolean Get Return True/False End Get End Property ''' <summary> ''' Flag, der anzeigt, ob die Analysefunktion Ergebniswerte erzeugt ''' </summary> Public Overrides ReadOnly Property hasResultValues() As Boolean Get Return True/False End Get End Property ''' <summary> ''' Flag, der anzeigt, ob die Analysefunktion ein Ergebnisdiagramm erzeugt ''' </summary> Public Overrides ReadOnly Property hasResultChart() As Boolean Get Return True/False End Get End Property ''' <summary> ''' Konstruktor ''' </summary> ''' <param name="zeitreihen">zu analysierende Zeitreihen</param> Public Sub New(ByRef zeitreihen As List(Of Zeitreihe)) 'Konstruktor der Basisklasse aufrufen! Call MyBase.New(zeitreihen) 'Prüfung: Anzahl erwarteter Zeitreihen (in diesem Beispiel genau 2) If (zeitreihen.Count <> 2) Then Throw New Exception("Für MeineAnalyseFunktion müssen genau 2 Zeitreihen ausgewählt werden!") End If End Sub ''' <summary> ''' Analyse durchführen ''' </summary> Public Overrides Sub ProcessAnalysis() 'Hier die Analyse durchführen 'Auf die zu analysierenden Zeitreihen kann so zugegriffen werden: Dim zre1 As Zeitreihe = Me.mZeitreihen.Item(0) Dim zre2 As Zeitreihe = Me.mZeitreihen.Item(1) 'Vor der Analyse ggf. Stützstellen mit NaN- und Infinity-Werte aus den Zeitreihen entfernen! zre1 = zre1.getCleanZRE() zre2 = zre2.getCleanZRE() End Sub ''' <summary> ''' Ergebnisse aufbereiten ''' </summary> Public Overrides Sub PrepareResults() 'Hier je nach Bedarf die verschiedenen Ergebnistypen aufbereiten 'Ergebnistext Me.mResultText = "Mein Ergebnis" 'Ergebniswerte Me.mResultValues.Add("ErgebnisWert1", 10) Me.mResultValues.Add("ErgebnisWert2", 5) 'Ergebnisdiagramm Me.mResultChart = New Steema.TeeChart.Chart() '...Diagramm einrichten... End Sub End Class
- Stand: r178 (v1.2)