Habe folgendes Problem:
Ich male eine Linie von einem Punkt zu einem Anderen und wenn ich dann den Punkt verschiebe bewegt sich die alte Linie mit o_O
Kann das grad nicht so gut erklären probiert es selbst aus.
"Add Vertex" fügt einen Punkt hinzu.
!Bewegt als erstes den Punkt woanders hin!
Dann 2. Punkt erstellen.
Dann Auf 1. Punkt klicken und dann auf den 2. -> Linie kommt.
Und dann könnt ihr mal rumspielen und sehen was passiert. Der Fehler liegt irgendwo in der letzten Funktion (edge_create) glaube ich.
Quelltext
Spoiler anzeigen
#include <GuiConstants.au3>
[/autoit] [autoit][/autoit] [autoit]; AutoIt Version: 3.2.10.0
; Author: Nozdrum
#region Graphical User Interface
Const $g_pfad = @ScriptDir & "\Images\"
Const $header = "GraphMaker"
$g_v_height = 10
GUICreate("GraphMaker",800,600)
$g_p_upperleft = GUICtrlCreatePic($g_pfad & "Rahmen\o_l.bmp",10 ,10 , 3, 3)
$g_p_upper = GUICtrlCreatePic($g_pfad & "Rahmen\o.bmp" ,13 ,10 ,651, 3)
$g_p_upperright = GUICtrlCreatePic($g_pfad & "Rahmen\o_r.bmp",663,10 , 5, 4)
$g_p_right = GUICtrlCreatePic($g_pfad & "Rahmen\r.bmp" ,665,14 , 3,573)
$g_p_lowerright = GUICtrlCreatePic($g_pfad & "Rahmen\u_r.bmp",664,587, 4, 5)
$g_p_left = GUICtrlCreatePic($g_pfad & "Rahmen\l.bmp" ,10 ,13 , 3,578)
$g_p_lowerleft = GUICtrlCreatePic($g_pfad & "Rahmen\u_l.bmp",10 ,588, 4, 4)
$g_p_lower = GUICtrlCreatePic($g_pfad & "Rahmen\u.bmp" ,13 ,589,651, 3)
$g_g = GUICtrlCreateGraphic(13,13,652,576)
$g_b_vertex_add = GUICtrlCreateButton("Add Vertex",677,10,114,25)
$g_b_end = GUICtrlCreateButton("End",677,567,114,25)
$g_b_clear = GUICtrlCreateButton("Clear",677,10*4+25*4,114,25)
$g_i_vertex_height = GUICtrlCreateInput("20",677,464,114,20,$ES_Number)
$g_l_vertex_height = GUICtrlCreateLabel("Vertex-Height: ",680,448,114,15)
GUICtrlSetGraphic($g_g,$GUI_GR_PENSIZE,3)
GUICtrlSetGraphic($g_g,$GUI_GR_COLOR, 0x000000,0x000000)
#endregion
[/autoit] [autoit][/autoit] [autoit]Global $f[51][55]
Init($f,$g_g)
GUISetState(@SW_SHOW)
#cs
f - Info
f[0][0] = Anzahl der Knoten
f[0][1] = Irgendwas selektiert ? (0/1)
f[0][2] = selektierter Knoten ( Nummer )
f[x][0] = Anzahl der Kanten
f[x][1] = x-Pos
f[x][2] = y-Pos
f[x][3] = wert ( falls bewerter Graph )
f[x][4..50] = zu welchen Knoten verbunden
#ce
While 1
$msg = GUIGetMsg()
Select
Case ( $msg = $Gui_Event_Close ) Or ( $msg = $g_b_end )
Exit
Case $msg = $g_b_vertex_add
vertex_add($f,$g_g,$g_v_height)
Case $msg = $g_i_vertex_height
$g_v_height = Int(Round(GUICtrlRead($g_i_vertex_height)/2,0))
Case $msg = $g_b_clear
Init($f,$g_g)
Case $msg = $g_g
$g_mouse = GUIGetCursorInfo()
If IsArray($g_mouse) Then
$z = vertexthere($f,$g_g,$g_mouse[0]-13,$g_mouse[1]-13,$g_v_height)
If $z Then
If $f[0][1] Then
If $z = $f[0][2] Then
vertexunselect($f,$g_g,$g_v_height)
Else
If edgethere($f,$z) Then
;edge_destroy
Else
edge_create($f,$g_g,$g_v_height,$z)
EndIf
EndIf
Else
vertexselect($f,$g_g,$z,$g_v_height)
EndIf
ElseIf $f[0][1] Then
vertexmove($f,$g_g,$g_mouse[0]-13,$g_mouse[1]-13,$g_v_height,$f[0][2])
EndIf
EndIf
EndSelect
WEnd
Func vertexthere($f,$g_g,$x,$y,$g_v_height)
For $i = 1 To $f[0][0]
For $j = $x-$g_v_height To $x+$g_v_height
For $k = $y-$g_v_height to $y+$g_v_height
If ( $f[$i][1] = $j ) And ( $f[$i][2] = $k ) Then Return $i
Next
Next
Next
Return 0
EndFunc
Func edgethere($f,$n)
For $i = 4 To 50
If $f[$f[0][2]][$i] = $n Then Return 1
Next
Return 0
EndFunc
Func vertex_add(ByRef $f, ByRef $g_g,$g_v_height)
If Not( $f[0][0] <= 50 ) Then
MsgBox(0,$header,"Maximum number of vertex reached.")
Return 1
EndIf
$f[0][0] += 1
$f[$f[0][0]][1] = 326
$f[$f[0][0]][2] = 288
GUICtrlSetGraphic($g_g,$GUI_GR_PIE,326,288,$g_v_height,0,360)
GUICtrlSetGraphic($g_g,$GUI_GR_REFRESH)
EndFunc
Func Init(ByRef $f, ByRef $g_g)
For $i = 0 to 50
for $j = 0 to 50
$f[$i][$j] = 0
Next
Next
GUICtrlSetBkColor($g_g,0xffffff)
GUICtrlSetGraphic($g_g,$GUI_GR_COLOR,0xffffff,0xffffff)
GUICtrlSetGraphic($g_g,$GUI_GR_RECT,0,0,652,576)
GUICtrlSetGraphic($g_g,$GUI_GR_REFRESH)
GUICtrlSetGraphic($g_g,$GUI_GR_COLOR,0x000000,0x000000)
Return 0
EndFunc
Func vertexmove(ByRef $f,ByRef $g_g,$x,$y,$g_v_height,$n)
GUICtrlSetGraphic($g_g,$GUI_GR_COLOR,0xffffff,0xffffff)
GUICtrlSetGraphic($g_g,$GUI_GR_PIE,$f[$n][1],$f[$n][2],$g_v_height,0,360)
GUICtrlSetGraphic($g_g,$GUI_GR_COLOR,0x000000,0x000000)
GUICtrlSetGraphic($g_g,$GUI_GR_PIE,$x,$y,$g_v_height,0,360)
GUICtrlSetGraphic($g_g,$GUI_GR_REFRESH)
$f[$n][1] = $x
$f[$n][2] = $y
$f[0][1] = 0
$f[0][2] = 0
Return 0
EndFunc
Func vertexselect(ByRef $f,ByRef $g_g,$n,$g_v_height)
GUICtrlSetGraphic($g_g,$GUI_GR_COLOR,0xFF00ff,0xFF00ff)
GUICtrlSetGraphic($g_g,$GUI_GR_PIE,$f[$n][1],$f[$n][2],$g_v_height,0,360)
GUICtrlSetGraphic($g_g,$GUI_GR_COLOR,0x000000,0x000000)
GUICtrlSetGraphic($g_g,$GUI_GR_REFRESH)
$f[0][1] = 1
$f[0][2] = $n
Return 0
EndFunc
Func vertexunselect(ByRef $f, ByRef $g_g,$g_v_height)
GUICtrlSetGraphic($g_g,$GUI_GR_COLOR,0x000000,0x000000)
GUICtrlSetGraphic($g_g,$GUI_GR_PIE,$f[$f[0][2]][1],$f[$f[0][2]][2],$g_v_height,0,360)
GUICtrlSetGraphic($g_g,$GUI_GR_REFRESH)
$f[0][1] = 0
$f[0][2] = 0
Return 0
EndFunc
Func edge_create(ByRef $f, ByRef $g_g,$g_v_height,$n)
GUICtrlSetGraphic($g_g,$GUI_GR_COLOR,0x000000,0x000000)
GUICtrlSetGraphic($g_g,$gui_GR_LINE,$f[$n][1],$f[$n][2])
GUICtrlSetGraphic($g_g,$GUI_GR_REFRESH)
$f[$f[0][2]][0] +=1
$f[$f[0][2]][$f[$f[0][2]][0]+4] = $n
$f[$n][0] +=1
$f[$n][$f[$n][0]+4] = $f[0][2]
vertexunselect($f,$g_g,$g_v_height)
Return 0
EndFunc