_DrawCube - Erweiterung für GDI+

  • Anbei meine kleine UDF.
    Sie ermöglicht das einfache Zeichnen eines Würfels mit GDI+.

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ; Function Name: _DrawCube
    ; Description:: The function draws a cube with GDI+. The length of the cube's edge is inserted by the user.
    ; Parameters: $Fenstertitel: Title of the parent window.
    ; $Grafik: Handle to the graphics-object.
    ; $KantenlaengeWuerfel: Length of the cube's edge.
    ; $Stift: Handle to a pen.
    ; Requirement: Inclduing GDIPlus.au3 ("#Include<GDIPlus.au3>")
    ; Author: meistertogo
    ; Example:
    ;Lines marked with "°" are not necessary for the function itself.
    #include-once;°
    #include <GDIPlus.au3>
    #include <GUIConstants.au3>;°

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

    Opt("GUIOnEventMode", 1);°

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

    Dim $Position[4], $Fensterbreite, $Fensterhoehe, $KantenlaengeWuerfel, $Stift, $Grafik

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

    $Fensterbreite = InputBox("Schritt 1: Zeichnen eines Würfels", "Wie breit soll die Zeichenfläche sein [in Pixeln]?");°
    $Fensterhoehe = InputBox("Schritt 2: Zeichnen eines Würfels", "Wie hoch soll die Zeichenfläche sein [in Pixeln]?");°
    $KantenlaengeWuerfel = InputBox("Schritt 3: Zeichnen eines Würfels", "Wie lang sollen die Kanten des Würfels sein [in Pixeln]?");°

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

    $Zeichenflaeche = GUICreate("Zeichenfläche", $Fensterbreite, $Fensterhoehe);°
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Beenden");°
    GUISetState(@SW_SHOW);°

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

    _GDIPlus_Startup()

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

    $Grafik = _GDIPlus_GraphicsCreateFromHWND($Zeichenflaeche)
    _GDIPlus_GraphicsClear($Grafik)
    $Stift = _GDIPlus_PenCreate(0xFF00FF00)

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

    _DrawCube("Zeichenfläche", $Grafik, $KantenlaengeWuerfel, $Stift)

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

    Func _DrawCube ($FensterTitel, $Grafik, $KantenlaengeWuerfel, $Stift)
    $Position = WinGetPos($FensterTitel)
    _GDIPlus_GraphicsDrawRect($Grafik, ($Position[2]-$KantenlaengeWuerfel)/2, ($Position[3]-$KantenlaengeWuerfel)/2, $KantenlaengeWuerfel, $KantenlaengeWuerfel, $Stift);der Startpunkt der folgenden Zeichenvorgänge ist die obere linke Ecke des gezeichneten Rechtecks, das die Frontseite des Würfels darstellt
    _GDIPlus_GraphicsDrawLine($Grafik, ($Position[2]-$KantenlaengeWuerfel)/2, ($Position[3]-$KantenlaengeWuerfel)/2, ($Position[2]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2-0.5*$KantenlaengeWuerfel, $Stift);vom Startpunkt nach hinten
    _GDIPlus_GraphicsDrawLine($Grafik, ($Position[2]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2-0.5*$KantenlaengeWuerfel, ($Position[2]-$KantenlaengeWuerfel)/2+1.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2-0.5*$KantenlaengeWuerfel, $Stift);vom Punkt hinter dem Startpunkt nach rechts
    _GDIPlus_GraphicsDrawLine($Grafik, ($Position[2]-$KantenlaengeWuerfel)/2+1.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2-0.5*$KantenlaengeWuerfel, ($Position[2]-$KantenlaengeWuerfel)/2+$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2, $Stift);vom Punkt rechts des Punkts hinter dem Startpunkt nach vorne, zum Punkt rechts des Startpunkts
    _GDIPlus_GraphicsDrawLine($Grafik, ($Position[2]-$KantenlaengeWuerfel)/2+1.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2-0.5*$KantenlaengeWuerfel, ($Position[2]-$KantenlaengeWuerfel)/2+1.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, $Stift);vom Punkt rechts des Punkts hinter dem Startpunkt nach unten
    _GDIPlus_GraphicsDrawLine($Grafik, ($Position[2]-$KantenlaengeWuerfel)/2+1.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, ($Position[2]-$KantenlaengeWuerfel)/2+$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2+$KantenlaengeWuerfel, $Stift);vom Punkt raumdiagonal gegenüber des Startpunkts nach vorne
    _GDIPlus_GraphicsDrawLine($Grafik, ($Position[2]-$KantenlaengeWuerfel)/2, ($Position[3]-$KantenlaengeWuerfel)/2+$KantenlaengeWuerfel, ($Position[2]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, $Stift);vom Punkt unter dem Startpunkt nach hinten
    _GDIPlus_GraphicsDrawLine($Grafik, ($Position[2]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, ($Position[2]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2-0.5*$KantenlaengeWuerfel, $Stift);vom Punkt unter und hinter dem Startpunkt nach oben
    _GDIPlus_GraphicsDrawLine($Grafik, ($Position[2]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, ($Position[2]-$KantenlaengeWuerfel)/2+1.5*$KantenlaengeWuerfel, ($Position[3]-$KantenlaengeWuerfel)/2+0.5*$KantenlaengeWuerfel, $Stift);vom Punkt unter und hinter dem Startpunkt nach rechts
    EndFunc

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

    Do;°
    Until GUIGetMsg() = $GUI_EVENT_CLOSE;°

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

    Func _Beenden ()
    _GDIPlus_PenDispose($Stift)
    _GDIPlus_GraphicsDispose($Grafik)
    _GDIPlus_Shutdown()
    Exit
    EndFunc
    ;
    ;===============================================================================
    ;

    [/autoit]


    P.S.: Mir ist klar, dass man auch 2 Rechtecke und 4 Linien oder 5 Rechtecke hätte zeichnen können.