Anbei meine kleine UDF.
Sie ermöglicht das einfache Zeichnen eines Würfels mit GDI+.
Spoiler anzeigen
;===============================================================================
; 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>;°
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]?");°
$Zeichenflaeche = GUICreate("Zeichenfläche", $Fensterbreite, $Fensterhoehe);°
GUISetOnEvent($GUI_EVENT_CLOSE, "_Beenden");°
GUISetState(@SW_SHOW);°
_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$Grafik = _GDIPlus_GraphicsCreateFromHWND($Zeichenflaeche)
_GDIPlus_GraphicsClear($Grafik)
$Stift = _GDIPlus_PenCreate(0xFF00FF00)
_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
Do;°
Until GUIGetMsg() = $GUI_EVENT_CLOSE;°
Func _Beenden ()
_GDIPlus_PenDispose($Stift)
_GDIPlus_GraphicsDispose($Grafik)
_GDIPlus_Shutdown()
Exit
EndFunc
;
;===============================================================================
;
P.S.: Mir ist klar, dass man auch 2 Rechtecke und 4 Linien oder 5 Rechtecke hätte zeichnen können.