Mit GDIPlus Um Punkt Drehen

  • Hallo,
    wie kann ich die Linie in diesem Script um die Ellipse wie einen Uhrzeiger drehen?

    Spoiler anzeigen
    [autoit]


    #include <GuiConstantsEx.au3>
    #include <GDIPlus.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    _Main()

    [/autoit] [autoit][/autoit] [autoit]

    Func _Main()
    Local $hGUI, $hWnd, $hGraphic

    [/autoit] [autoit][/autoit] [autoit]

    ; Erstellt eine GUI
    $hGUI = GUICreate("GDI+", 400, 400)
    $hWnd = WinGetHandle("GDI+")
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    $hPen = _GDIPlus_PenCreate(0xFFFF0000)
    $Line = _GDIPlus_GraphicsDrawLine($hGraphic, 200, 200, 300, 200, $hPen)
    $Ellipse = _GDIPlus_GraphicsDrawEllipse($hGraphic, 180, 196, 10, 10, $hPen)

    [/autoit] [autoit][/autoit] [autoit]

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

    [/autoit] [autoit][/autoit] [autoit]

    ; Ressourcen freigeben
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_Main

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Einmal editiert, zuletzt von xp_fan (31. Januar 2010 um 17:01)

  • Guck mal in den AutoIt Example Ordern, da ist iwo ein script "Clock.au3". Schau das mal an. Auswenig weis ich das etz auch net
    C:\Programme\AutoIt\Examples\GUI\Advanced\Clock.au3

    mfg

  • Danke, leider werde ich daraus auch nicht schlau, weil da sehr viele Sachen bewegt und berechnet werden. Ich hab' auch gestern erst angefangen mich intensiv mit GDIPlus zu befassen, ich würde mich freuen, wenn mir das nochmal jemand anhand meines Scriptes erklären könnte.

  • Das hat nicht viel mit GDI+ zu tun, sondern eher was mit Mathe! ;)

    Spoiler anzeigen
    [autoit]


    #include <GuiConstantsEx.au3>
    #include <GDIPlus.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)
    Global $hWnd, $hGraphic, $hPen, $x1, $x2, $y1, $y2, $grad, $clock
    Global $iX = 400, $iY = 400, $rI = 30, $rO = 180, $i = 180
    Global $Pi = 4 * ATan(1), $Pi_Div_180 = $Pi / 180, $w_mid = $iX / 2, $h_mid = $iY / 2
    ; Erstellt eine GUI
    $hWnd = GUICreate("GDI+", $iX, $iY)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup() ;initialisiere GDI+
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd) ;erstelle Grafik Objekt in Verbindug mit der GUI
    _GDIPlus_GraphicsSetSmoothingMode($hGraphic, 4) ;aktiviere Kantenglättung
    _GDIPlus_GraphicsClear($hGraphic, 0xFF000000) ;lösche Grafik
    $hPen = _GDIPlus_PenCreate(0xFFFF0000, 4) ;erstelle Stift mit 4 Pixel Breite
    $Ellipse = _GDIPlus_GraphicsDrawEllipse($hGraphic, $iX / 2 - 10, $iY / 2 - 10, 20, 20, $hPen) ;zeichne Kreis in der Mitte

    [/autoit] [autoit][/autoit] [autoit]

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit") ;Aktiviere Exit wenn $GUI_EVENT_CLOSE ausgelöst wird

    [/autoit] [autoit][/autoit] [autoit]

    Do
    $grad = Mod(180 - $i, 360) ;berechne Winkel (0 - 359)
    $clock = Floor($grad / 30) ;berechne Uhrzeit (0-11)
    WinSetTitle($hWnd, "", "GDI+ Demo by UEZ -=> " & $grad & "° / " & $clock) ;schreibe Infos in die Windows Titelleiste
    $x1 = $rI * Sin($i * $Pi_Div_180) + $w_mid ;berechne Punkt x1 vom inneren Kreis
    $y1 = $rI * Cos($i * $Pi_Div_180) + $h_mid ;berechne Punkt y1 vom inneren Kreis
    $x2 = $rO * Sin($i * $Pi_Div_180) + $w_mid ;berechne Punkt x2 vom äußeren Kreis
    $y2 = $rO * Cos($i * $Pi_Div_180) + $h_mid ;berechne Punkt y2 vom äußeren Kreis
    _GDIPlus_PenSetColor($hPen, "0xF0" & Hex(Random(0x111111, 0xFFFFFF, 1), 6)) ;kreiere neue Stiftfarbe zufällig
    _GDIPlus_GraphicsDrawLine($hGraphic, $x1, $y1, $x2, $y2, $hPen) ;zeichne Linie
    $i -= 1
    Until Not Sleep(20)

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    ; Ressourcen freigeben
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_Shutdown()
    Exit
    EndFunc

    [/autoit]


    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    4 Mal editiert, zuletzt von UEZ (25. Dezember 2009 um 12:29)

  • Meinst du den Zeiger gegen den Uhrzeiger? Wenn ja, dann einfach die Zeile in $i += 1 editieren!

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯