vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
PathGeometry: Datenquelle an Polylinesegment binden 
Autor: Maas
Datum: 11.11.09 17:15

Hallo Leute,
ich möchte eine Polyline in einem Image darstellen, was auch mit PathGeometry, PathFigure etc. kein Problem ist. Das schöne am Polylinesegment ist, dass es eine PointCollection besitzt und auf Veränderung sofort reagiert. Das bedeutet, ich brauche nur die Punkte ändern, wenn ich das Bild verändern will und muss es nicht komplett neu zeichnen.
Mein Problem ist jetzt, dass ich eine Datenquelle (Source) habe, welche ich irgendwie an diese PointCollection binden will. In der Datenquelle gibt es nur ein Array von Doubles. Dann habe ich auch schon die Routine zum Umwandeln der Werte in Points.
Zur Zeit habe ich die PointCollection noch global deklariert und mit der der Polyline verknüpft, damit man darauf zugreifen kann, wenn man die Werte verändern will. Ich bräuchte jetzt natürlich eine direkte Lösung ohne globale Deklaration, da es nicht nur um ein Array mit Werten und auch nicht nur um eine Source geht, sondern das Ganze variabel sein muss.
Ich hatte überlegt, die PointCollection und die Umwandlung der Werte in die Source zu verlagern, aber eigentlich sollte das Source-Object nur die Daten halten, nicht verarbeiten.

Hier mal der bisherige Code:
Class Window1 
 
    Private mSource As New Source
    Private mPoints As New PointCollection
 
    Private mMin As Double = 0
    Private mMax As Double = 1
 
    Private Sub Window1_Loaded(ByVal sender As System.Object, ByVal e As _
      System.Windows.RoutedEventArgs) Handles MyBase.Loaded
        Dim dg As New DrawingGroup
        Using dc As DrawingContext = dg.Open
            Dim pen As New Pen(Brushes.DarkBlue, 2)
            Dim geo As New PathGeometry
            Dim fig As New PathFigure
            Dim pl As New PolyLineSegment
            pl.Points = mPoints
            pl.IsStroked = True
            fig.Segments.Add(pl)
            geo.Figures.Add(fig)
            dc.DrawGeometry(Brushes.Transparent, pen, geo)
            dc.DrawRectangle(Brushes.Transparent, New Pen(Brushes.Black, 4), _
              New Rect(0, 0, 1000, 500))
        End Using
        Draw()
        Image1.Source = New DrawingImage(dg)
    End Sub
 
    Public Sub Draw()
        With mSource
            mPoints.Clear()
            Dim points As Point() = ConvertValuesToPoints(mSource.Values, 1000, _
              500, mMin, mMax)
            For Each p As Point In points
                mPoints.Add(p)
            Next
        End With
    End Sub
 
    Private Function ConvertValuesToPoints(ByVal values As Double(), ByVal solX _
      As Double, ByVal solY As Double, ByVal min As Double, ByVal max As _
      Double) As Point()
        Dim points As New List(Of Point)
        Dim intervalX As Double = solX / values.Length
        For i As Integer = 0 To values.Length - 1
            If values(i) > min And values(i) < max Then
                Dim abstandOben As Double = max - values(i)
                points.Add(New Point(i * intervalX, (abstandOben / (max - min)) _
                  * solY))
            End If
        Next
        Return points.ToArray
    End Function
 
 
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
      System.Windows.RoutedEventArgs) Handles Button1.Click
        mMin += 0.1
        mMax += 0.1
        Draw()
    End Sub
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As _
      System.Windows.RoutedEventArgs) Handles Button2.Click
        mMin -= 0.1
        mMax -= 0.1
        Draw()
    End Sub
End Class
 
Public Class Source
    Private mValues As Double()
 
    Public Property Values() As Double()
        Get
            Return mValues
        End Get
        Set(ByVal value As Double())
            mValues = value
        End Set
    End Property
 
    Public Sub New()
        Dim r As New Random
        Dim lst As New List(Of Double)
        For i As Integer = 0 To 100
            lst.Add(r.Next(0, 100) / 100)
            Randomize()
        Next
        mValues = lst.ToArray
    End Sub
End Class
Danke im Voraus

Maas

Beitrag wurde zuletzt am 11.11.09 um 17:16:28 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
PathGeometry: Datenquelle an Polylinesegment binden1.375Maas11.11.09 17:15

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel