vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

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

VB.NET - Ein- und Umsteiger
Rechteck mit Maus verändern 
Autor: Bazi
Datum: 20.06.16 22:29

Hallo,
ich versuche mich seit Tagen an einer Funktion um ein Rechteck im MouseMove-Event zu verändern.

Mein Rechteck besteht aus 2 Linien die im 90°-Winkel zueinander erzeugt wurden.
Im Programmverlauf möchte ich mittels der 2 Punkte der 2.Linie das Rechteck vergrößern - verkleinern.
Bislang habe ich es nicht geschafft.
Mein Ansatz war:
1. Winkel der Linie1 zur X-Achse ermitteln
2. Neuen Zielpunkt der 1. Linie mit Winkelfunktion berechnen
3. 2.Punkt der 1.Linie auf neuen Zielpunkt verschieben
4. 1.Punkt der 2.Linie syncron auf Zielpunkt verschieben
5. 2.Punkt der 2.Linie ebenfalls um die Differenz der Verschiebung schieben.

Das Ergebnis ist nicht wie gewünscht ein Rechteck, sondern wird irgendwann zur Raute.
Wo ist mein Fehler oder wie ginge es besser?

 Private Sub MoveRectanglePoint(ByVal pm As PlanMassRow, ByVal ptHov As _
   PointRow, ByVal newPoint As PointF)
        ' im Rechteck kann nur die letzte Linie ausgewählt werden, es ist also 
        ' die 2.Linie der pm
        Dim First = pm.GetLineRows.First
        Dim Last = pm.GetLineRows.Last
        Dim ptDiff = newPoint.Subtract(ptHov.Point)
 
        If ptHov Is Last.GetPointRows.First Then ' 1.Point
            Point.ActiveOnOff(False)    ' Events in Point DataTable ausschalten
            Dim rwPoints = First.GetPointRows
            Dim pts(1) As Point
            Array.ConvertAll(rwPoints, Function(rw) rw.Point.Round).CopyTo(pts, _
              0)
            ' der 90° Winkel muss erhalten bleiben, also die Verschiebung in 
            ' Y-Richtung mit berücksichtigen
            ' Winkel der vorhandenen Linie berechnen:
            Dim Angle_Rad = Angel_X_Radiant(pts(1), pts(0))
            Dim NeuX = pts(1).X + ptDiff.X
            'ptDiff.X ist die Ankathete des rechtwinkligen Dreiecks, Angle_Rad 
            ' der Winkel a
            Dim NeuY = CSng((Math.Tan(Angle_Rad) * ptDiff.X) + pts(1).Y)
            Dim nPt1 = New PointF(NeuX, NeuY)
            ptDiff = nPt1.Subtract(ptHov.Point) ' Verschiebung des Punktes 
            ' merken
            ptHov.MoveTo(nPt1)
            First.GetPointRows.Last.MoveTo(nPt1)    ' 2.Punkt der 1.Linie 
            ' syncron mitschieben
            Dim pt2 = Last.GetPointRows.Last.Point    ' 2.Punkt der 2.Linie 
            ' anpassen
            Last.GetPointRows.Last.MoveTo(pt2.Add(ptDiff))
            Point.ActiveOnOff(True) ' Events in Point DataTable einschalten
        ElseIf ptHov Is Last.GetPointRows.Last Then    ' dann ist es der 2.Point
 
        End If
 
    End Sub
Gruß Christian

Danke für die Hilfe

Gruß Christian

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Rechteck mit Maus verändern1.578Bazi20.06.16 22:29
Re: Rechteck mit Maus verändern688sv0001023.06.16 20:07

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-2024 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