Hi,
Hier möchte ich mein neues 3D Programm vorstellen.
Ich hoffe, es funktioniert und gefällt.
Verbesserungsvorschläge werden gerne entgegen genommen.
Spoiler anzeigen
#include <GDIPlus.au3>
#include <Misc.au3>
#include <WindowsConstants.au3>
Opt("GUIOnEventMode",1)
Opt("MouseCoordMode",2)
Global $iWidth = @DesktopWidth
Global $iHeight = @DesktopHeight
Global $iWidthmenu = 300
Global $iHeightmenu = 300
Global $iWidthhilfe = 500
Global $iHeighthilfe = 300
Global $alpha = 0.5
Global $nullpunktx = $iWidth/2
Global $nullpunkty = $iHeight/2
Global $feldlaengex = 200
Global $feldlaengey = 200
Global $feldlaengez = 200
Global $zoom = 1
Global $ansicht = 0.5
Global $gitter = 1
Global $wuerfelanzahl = 1
Global $wuerfelkante1X1[99] = [0]
Global $wuerfelkante1Y1[99] = [0]
Global $wuerfelkante1X2[99] = [0]
Global $wuerfelkante1Y2[99] = [0]
Global $wuerfelkante2X1[99] = [0]
Global $wuerfelkante2Y1[99] = [0]
Global $wuerfelkante2X2[99] = [0]
Global $wuerfelkante2Y2[99] = [0]
Global $wuerfelkante3X1[99] = [0]
Global $wuerfelkante3Y1[99] = [0]
Global $wuerfelkante3X2[99] = [0]
Global $wuerfelkante3Y2[99] = [0]
Global $wuerfelkante4X1[99] = [0]
Global $wuerfelkante4Y1[99] = [0]
Global $wuerfelkante4X2[99] = [0]
Global $wuerfelkante4Y2[99] = [0]
Global $arkoordX[99] = [0]
Global $arkoordY[99] = [0]
Global $arkoordZ[99] = [0]
Global $arwuerfelwidth[99] = [0]
Global $arwuerfelheight[99] = [0]
Global $arwuerfeldepth[99] = [0]
Global $zahl1 = 0
Global $hWnd = GUICreate("3D",$iWidth,$iHeight,0,-1,$WS_POPUPWINDOW)
Global $contextmenu = GUICtrlCreateContextMenu()
Global $datei = GUICtrlCreateMenu("Datei",$contextmenu)
Global $neu = GUICtrlCreateMenuItem("Neu",$datei,$contextmenu)
Global $oeffnen = GUICtrlCreateMenuItem("Öffnen",$datei)
Global $speichern = GUICtrlCreateMenuItem("Speichern",$datei)
Global $beenden = GUICtrlCreateMenuItem("Beenden",$datei)
Global $bearbeiten = GUICtrlCreateMenu("Bearbeiten",$contextmenu)
Global $rueckgaengig = GUICtrlCreateMenuItem("---",$bearbeiten)
Global $einfuegen = GUICtrlCreateMenu("Einfügen",$contextmenu)
Global $koerper = GUICtrlCreateMenuItem("Körper",$einfuegen)
Global $hilfemenu = GUICtrlCreateMenu("?",$contextmenu)
Global $hilfe = GUICtrlCreateMenuItem("Hilfe",$hilfemenu)
GUISetState(@SW_SHOW)
GUISetOnEvent(-3,"_exit")
GUICtrlSetOnEvent($beenden,"_exit")
GUICtrlSetOnEvent($neu,"_neu")
GUICtrlSetOnEvent($oeffnen,"_oeffnen")
GUICtrlSetOnEvent($speichern,"_speichern")
GUICtrlSetOnEvent($koerper,"_einfuegen")
GUICtrlSetOnEvent($hilfe,"_hilfe")
Global $hWndmenu = GUICreate("Körper einfügen",$iWidthmenu,$iHeightmenu,0,-1,-1,-1,$hWnd)
Global $tabkoerper = GUICtrlCreateTab(0,0,$iWidthmenu,$iHeightmenu - 40)
GUICtrlCreateTabItem("Würfel")
Global $wuerfelcheckbox = GUICtrlCreateCheckbox("",10,30,20,20)
GUICtrlCreateLabel("Würfelnummer: ",120,35,80,20)
Global $wuerfelnummer = GUICtrlCreateInput($wuerfelanzahl,200,35,40,20)
Global $wuerfelnummerminus = GUICtrlCreateButton("-",250,35,15,20)
Global $wuerfelnummerplus = GUICtrlCreateButton("+",267,35,15,20)
GUICtrlCreateLabel("(x/y/z) : (",$iWidthmenu/20,75,50,20)
Global $koordX = GUICtrlCreateInput("x",$iWidthmenu/20 + 50,75,40,20)
GUICtrlCreateLabel("/",$iWidthmenu/20 + 95,75,10,20)
Global $koordY = GUICtrlCreateInput("y",$iWidthmenu/20 + 110,75,40,20)
GUICtrlCreateLabel("/",$iWidthmenu/20 + 155,75,10,20)
Global $koordZ = GUICtrlCreateInput("z",$iWidthmenu/20 + 170,75,40,20)
GUICtrlCreateLabel(")",$iWidthmenu/20 + 215,75,10,20)
GUICtrlCreateLabel("Width: ",$iWidthmenu/20,115,40,20)
Global $wuerfelwidth = GUICtrlCreateInput("Width",$iWidthmenu/20 + 45,115,40,20)
GUICtrlCreateLabel("Height: ",$iWidthmenu/20,155,40,20)
Global $wuerfelheight = GUICtrlCreateInput("Height",$iWidthmenu/20 + 45,155,40,20)
GUICtrlCreateLabel("Depth: ",$iWidthmenu/20,195,40,20)
Global $wuerfeldepth = GUICtrlCreateInput("Depth",$iWidthmenu/20 + 45,195,40,20)
Global $okbutton = GUICtrlCreateButton("Hinzufügen",$iWidthmenu/3 - 50,$iHeightmenu - 35,100,30)
GUISetOnEvent(-3,"_hide")
GUICtrlSetOnEvent($wuerfelnummerminus,"_wuerfelnummerminus")
GUICtrlSetOnEvent($wuerfelnummerplus,"_wuerfelnummerplus")
GUICtrlSetOnEvent($okbutton,"_wuerfelzeichnen")
_GDIPlus_Startup()
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth,$iHeight,$hGraphics)
$hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
$hPenrot = _GDIPlus_PenCreate(0xFFFF0000)
$hPengruen = _GDIPlus_PenCreate(0xFF00FF00)
$hPenblau = _GDIPlus_PenCreate(0xFF0000FF)
$hBrushgruen = _GDIPlus_BrushCreateSolid(0xFF00FF00)
AdlibRegister("_draw",10)
[/autoit] [autoit][/autoit] [autoit]While 1
WEnd
Func _draw()
_GDIPlus_GraphicsClear($hBuffer,0xFF000000)
If $gitter = 1 Then
_GDIPlus_GraphicsDrawLine($hBuffer,$nullpunktx + Cos($alpha)*$feldlaengex*$zoom,$nullpunkty - Sin($alpha)*$feldlaengey*$zoom*$ansicht,$nullpunktx + Cos($alpha + 3.141)*$feldlaengex*$zoom,$nullpunkty - Sin($alpha + 3.141)*$feldlaengey*$zoom*$ansicht,$hPengruen)
_GDIPlus_GraphicsDrawLine($hBuffer,$nullpunktx + Cos($alpha+1.5705)*$feldlaengex*$zoom,$nullpunkty - Sin($alpha+1.5705)*$feldlaengey*$zoom*$ansicht,$nullpunktx + Cos($alpha + 4.7115)*$feldlaengex*$zoom,$nullpunkty - Sin($alpha + 4.7115)*$feldlaengey*$zoom*$ansicht,$hPenblau)
_GDIPlus_GraphicsDrawLine($hBuffer,$nullpunktx,$nullpunkty + $feldlaengez*(1-$ansicht)*$zoom,$nullpunktx,$nullpunkty - $feldlaengez*(1-$ansicht)*$zoom,$hPenrot)
EndIf
For $i = 1 To $wuerfelanzahl
$wuerfelkante1X1[$i] = $nullpunktx + Cos($alpha)*$arkoordX[$i]*$zoom + Cos($alpha + 1.5705)*$arkoordZ[$i]*$zoom
$wuerfelkante1Y1[$i] = $nullpunkty - Sin($alpha)*$arkoordX[$i]*$ansicht*$zoom - Sin($alpha + 1.5705)*$arkoordZ[$i]*$ansicht*$zoom - $arkoordY[$i]*(1-$ansicht)*$zoom
$wuerfelkante1X2[$i] = $wuerfelkante1X1[$i]
$wuerfelkante1Y2[$i] = $wuerfelkante1Y1[$i] + $arwuerfelheight[$i]*(1-$ansicht)*$zoom
$wuerfelkante2X1[$i] = $wuerfelkante1X1[$i] + Cos($alpha)*$arwuerfelwidth[$i]*$zoom
$wuerfelkante2Y1[$i] = $wuerfelkante1Y1[$i] - Sin($alpha)*$arwuerfelwidth[$i]*$ansicht*$zoom
$wuerfelkante2X2[$i] = $wuerfelkante2X1[$i]
$wuerfelkante2Y2[$i] = $wuerfelkante2Y1[$i] + $arwuerfelheight[$i]*(1-$ansicht)*$zoom
$wuerfelkante3X1[$i] = $wuerfelkante1X1[$i] + Cos($alpha)*$arwuerfelwidth[$i]*$zoom + Cos($alpha + 1.5705)*$arwuerfeldepth[$i]*$zoom
$wuerfelkante3Y1[$i] = $wuerfelkante1Y1[$i] - Sin($alpha)*$arwuerfelwidth[$i]*$ansicht*$zoom - Sin($alpha + 1.5705)*$arwuerfeldepth[$i]*$ansicht*$zoom
$wuerfelkante3X2[$i] = $wuerfelkante1X2[$i] + Cos($alpha)*$arwuerfelwidth[$i]*$zoom + Cos($alpha + 1.5705)*$arwuerfeldepth[$i]*$zoom
$wuerfelkante3Y2[$i] = $wuerfelkante1Y2[$i] - Sin($alpha)*$arwuerfelwidth[$i]*$ansicht*$zoom - Sin($alpha + 1.5705)*$arwuerfeldepth[$i]*$ansicht*$zoom
$wuerfelkante4X1[$i] = $wuerfelkante1X1[$i] + Cos($alpha + 1.5705)*$arwuerfeldepth[$i]*$zoom
$wuerfelkante4Y1[$i] = $wuerfelkante1Y1[$i] - Sin($alpha + 1.5705)*$arwuerfeldepth[$i]*$ansicht*$zoom
$wuerfelkante4X2[$i] = $wuerfelkante1X2[$i] + Cos($alpha + 1.5705)*$arwuerfeldepth[$i]*$zoom
$wuerfelkante4Y2[$i] = $wuerfelkante1Y2[$i] - Sin($alpha + 1.5705)*$arwuerfeldepth[$i]*$ansicht*$zoom
If $i <> GUICtrlRead($wuerfelnummer) Then
$hPenwechsel = $hPengruen
ElseIf $i = GUICtrlRead($wuerfelnummer) Then
$hPenwechsel = $hPenrot
EndIf
If MouseGetPos(0) > $wuerfelkante1X1[$i] - 3 And MouseGetPos(0) < $wuerfelkante1X1[$i] + 1 And MouseGetPos(1) >= $wuerfelkante1Y1[$i] And MouseGetPos(1) <= $wuerfelkante1Y2[$i] Then
$hPenwechsel = $hPenblau
EndIf
If MouseGetPos(0) > $wuerfelkante2X1[$i] - 3 And MouseGetPos(0) < $wuerfelkante2X1[$i] + 1 And MouseGetPos(1) >= $wuerfelkante2Y1[$i] And MouseGetPos(1) <= $wuerfelkante2Y2[$i] Then
$hPenwechsel = $hPenblau
EndIf
If MouseGetPos(0) > $wuerfelkante3X1[$i] - 3 And MouseGetPos(0) < $wuerfelkante3X1[$i] + 1 And MouseGetPos(1) >= $wuerfelkante3Y1[$i] And MouseGetPos(1) <= $wuerfelkante3Y2[$i] Then
$hPenwechsel = $hPenblau
EndIf
If MouseGetPos(0) > $wuerfelkante4X1[$i] - 3 And MouseGetPos(0) < $wuerfelkante4X1[$i] + 1 And MouseGetPos(1) >= $wuerfelkante4Y1[$i] And MouseGetPos(1) <= $wuerfelkante4Y2[$i] Then
$hPenwechsel = $hPenblau
EndIf
If MouseGetPos(0) > $wuerfelkante1X1[$i] And MouseGetPos(0) < $wuerfelkante2X1[$i] And MouseGetPos(1) > (($wuerfelkante2Y1[$i]-$wuerfelkante1Y1[$i])/($wuerfelkante2X1[$i]-$wuerfelkante1X1[$i]))*MouseGetPos(0)+$wuerfelkante1Y1[$i]-(($wuerfelkante2Y1[$i]-$wuerfelkante1Y1[$i])/($wuerfelkante2X1[$i]-$wuerfelkante1X1[$i]))*$wuerfelkante1X1[$i] - 3 And MouseGetPos(1) < (($wuerfelkante2Y1[$i]-$wuerfelkante1Y1[$i])/($wuerfelkante2X1[$i]-$wuerfelkante1X1[$i]))*MouseGetPos(0)+$wuerfelkante1Y1[$i]-(($wuerfelkante2Y1[$i]-$wuerfelkante1Y1[$i])/($wuerfelkante2X1[$i]-$wuerfelkante1X1[$i]))*$wuerfelkante1X1[$i] Then
$hPenwechsel = $hPenblau
ElseIf MouseGetPos(0) < $wuerfelkante1X1[$i] And MouseGetPos(0) > $wuerfelkante2X1[$i] And MouseGetPos(1) > (($wuerfelkante2Y1[$i]-$wuerfelkante1Y1[$i])/($wuerfelkante2X1[$i]-$wuerfelkante1X1[$i]))*MouseGetPos(0)+$wuerfelkante1Y1[$i]-(($wuerfelkante2Y1[$i]-$wuerfelkante1Y1[$i])/($wuerfelkante2X1[$i]-$wuerfelkante1X1[$i]))*$wuerfelkante1X1[$i] - 3 And MouseGetPos(1) < (($wuerfelkante2Y1[$i]-$wuerfelkante1Y1[$i])/($wuerfelkante2X1[$i]-$wuerfelkante1X1[$i]))*MouseGetPos(0)+$wuerfelkante1Y1[$i]-(($wuerfelkante2Y1[$i]-$wuerfelkante1Y1[$i])/($wuerfelkante2X1[$i]-$wuerfelkante1X1[$i]))*$wuerfelkante1X1[$i] Then
$hPenwechsel = $hPenblau
EndIf
If MouseGetPos(0) > $wuerfelkante2X1[$i] And MouseGetPos(0) < $wuerfelkante3X1[$i] And MouseGetPos(1) > (($wuerfelkante3Y1[$i]-$wuerfelkante2Y1[$i])/($wuerfelkante3X1[$i]-$wuerfelkante2X1[$i]))*MouseGetPos(0)+$wuerfelkante2Y1[$i]-(($wuerfelkante3Y1[$i]-$wuerfelkante2Y1[$i])/($wuerfelkante3X1[$i]-$wuerfelkante2X1[$i]))*$wuerfelkante2X1[$i] - 3 And MouseGetPos(1) < (($wuerfelkante3Y1[$i]-$wuerfelkante2Y1[$i])/($wuerfelkante3X1[$i]-$wuerfelkante2X1[$i]))*MouseGetPos(0)+$wuerfelkante2Y1[$i]-(($wuerfelkante3Y1[$i]-$wuerfelkante2Y1[$i])/($wuerfelkante3X1[$i]-$wuerfelkante2X1[$i]))*$wuerfelkante2X1[$i] Then
$hPenwechsel = $hPenblau
ElseIf MouseGetPos(0) < $wuerfelkante2X1[$i] And MouseGetPos(0) > $wuerfelkante3X1[$i] And MouseGetPos(1) > (($wuerfelkante3Y1[$i]-$wuerfelkante2Y1[$i])/($wuerfelkante3X1[$i]-$wuerfelkante2X1[$i]))*MouseGetPos(0)+$wuerfelkante2Y1[$i]-(($wuerfelkante3Y1[$i]-$wuerfelkante2Y1[$i])/($wuerfelkante3X1[$i]-$wuerfelkante2X1[$i]))*$wuerfelkante2X1[$i] - 3 And MouseGetPos(1) < (($wuerfelkante3Y1[$i]-$wuerfelkante2Y1[$i])/($wuerfelkante3X1[$i]-$wuerfelkante2X1[$i]))*MouseGetPos(0)+$wuerfelkante2Y1[$i]-(($wuerfelkante3Y1[$i]-$wuerfelkante2Y1[$i])/($wuerfelkante3X1[$i]-$wuerfelkante2X1[$i]))*$wuerfelkante2X1[$i] Then
$hPenwechsel = $hPenblau
EndIf
If MouseGetPos(0) > $wuerfelkante3X1[$i] And MouseGetPos(0) < $wuerfelkante4X1[$i] And MouseGetPos(1) > (($wuerfelkante4Y1[$i]-$wuerfelkante3Y1[$i])/($wuerfelkante4X1[$i]-$wuerfelkante3X1[$i]))*MouseGetPos(0)+$wuerfelkante3Y1[$i]-(($wuerfelkante4Y1[$i]-$wuerfelkante3Y1[$i])/($wuerfelkante4X1[$i]-$wuerfelkante3X1[$i]))*$wuerfelkante3X1[$i] - 3 And MouseGetPos(1) < (($wuerfelkante4Y1[$i]-$wuerfelkante3Y1[$i])/($wuerfelkante4X1[$i]-$wuerfelkante3X1[$i]))*MouseGetPos(0)+$wuerfelkante3Y1[$i]-(($wuerfelkante4Y1[$i]-$wuerfelkante3Y1[$i])/($wuerfelkante4X1[$i]-$wuerfelkante3X1[$i]))*$wuerfelkante3X1[$i] Then
$hPenwechsel = $hPenblau
ElseIf MouseGetPos(0) < $wuerfelkante3X1[$i] And MouseGetPos(0) > $wuerfelkante4X1[$i] And MouseGetPos(1) > (($wuerfelkante4Y1[$i]-$wuerfelkante3Y1[$i])/($wuerfelkante4X1[$i]-$wuerfelkante3X1[$i]))*MouseGetPos(0)+$wuerfelkante3Y1[$i]-(($wuerfelkante4Y1[$i]-$wuerfelkante3Y1[$i])/($wuerfelkante4X1[$i]-$wuerfelkante3X1[$i]))*$wuerfelkante3X1[$i] - 3 And MouseGetPos(1) < (($wuerfelkante4Y1[$i]-$wuerfelkante3Y1[$i])/($wuerfelkante4X1[$i]-$wuerfelkante3X1[$i]))*MouseGetPos(0)+$wuerfelkante3Y1[$i]-(($wuerfelkante4Y1[$i]-$wuerfelkante3Y1[$i])/($wuerfelkante4X1[$i]-$wuerfelkante3X1[$i]))*$wuerfelkante3X1[$i] Then
$hPenwechsel = $hPenblau
EndIf
If MouseGetPos(0) > $wuerfelkante4X1[$i] And MouseGetPos(0) < $wuerfelkante1X1[$i] And MouseGetPos(1) > (($wuerfelkante1Y1[$i]-$wuerfelkante4Y1[$i])/($wuerfelkante1X1[$i]-$wuerfelkante4X1[$i]))*MouseGetPos(0)+$wuerfelkante4Y1[$i]-(($wuerfelkante1Y1[$i]-$wuerfelkante4Y1[$i])/($wuerfelkante1X1[$i]-$wuerfelkante4X1[$i]))*$wuerfelkante4X1[$i] - 3 And MouseGetPos(1) < (($wuerfelkante1Y1[$i]-$wuerfelkante4Y1[$i])/($wuerfelkante1X1[$i]-$wuerfelkante4X1[$i]))*MouseGetPos(0)+$wuerfelkante4Y1[$i]-(($wuerfelkante1Y1[$i]-$wuerfelkante4Y1[$i])/($wuerfelkante1X1[$i]-$wuerfelkante4X1[$i]))*$wuerfelkante4X1[$i] Then
$hPenwechsel = $hPenblau
ElseIf MouseGetPos(0) < $wuerfelkante4X1[$i] And MouseGetPos(0) > $wuerfelkante1X1[$i] And MouseGetPos(1) > (($wuerfelkante1Y1[$i]-$wuerfelkante4Y1[$i])/($wuerfelkante1X1[$i]-$wuerfelkante4X1[$i]))*MouseGetPos(0)+$wuerfelkante4Y1[$i]-(($wuerfelkante1Y1[$i]-$wuerfelkante4Y1[$i])/($wuerfelkante1X1[$i]-$wuerfelkante4X1[$i]))*$wuerfelkante4X1[$i] - 3 And MouseGetPos(1) < (($wuerfelkante1Y1[$i]-$wuerfelkante4Y1[$i])/($wuerfelkante1X1[$i]-$wuerfelkante4X1[$i]))*MouseGetPos(0)+$wuerfelkante4Y1[$i]-(($wuerfelkante1Y1[$i]-$wuerfelkante4Y1[$i])/($wuerfelkante1X1[$i]-$wuerfelkante4X1[$i]))*$wuerfelkante4X1[$i] Then
$hPenwechsel = $hPenblau
EndIf
If MouseGetPos(0) > $wuerfelkante1X2[$i] And MouseGetPos(0) < $wuerfelkante2X2[$i] And MouseGetPos(1) > (($wuerfelkante2Y2[$i]-$wuerfelkante1Y2[$i])/($wuerfelkante2X2[$i]-$wuerfelkante1X2[$i]))*MouseGetPos(0)+$wuerfelkante1Y2[$i]-(($wuerfelkante2Y2[$i]-$wuerfelkante1Y2[$i])/($wuerfelkante2X2[$i]-$wuerfelkante1X2[$i]))*$wuerfelkante1X2[$i] - 3 And MouseGetPos(1) < (($wuerfelkante2Y2[$i]-$wuerfelkante1Y2[$i])/($wuerfelkante2X2[$i]-$wuerfelkante1X2[$i]))*MouseGetPos(0)+$wuerfelkante1Y2[$i]-(($wuerfelkante2Y2[$i]-$wuerfelkante1Y2[$i])/($wuerfelkante2X2[$i]-$wuerfelkante1X2[$i]))*$wuerfelkante1X2[$i] Then
$hPenwechsel = $hPenblau
ElseIf MouseGetPos(0) < $wuerfelkante1X2[$i] And MouseGetPos(0) > $wuerfelkante2X2[$i] And MouseGetPos(1) > (($wuerfelkante2Y2[$i]-$wuerfelkante1Y2[$i])/($wuerfelkante2X2[$i]-$wuerfelkante1X2[$i]))*MouseGetPos(0)+$wuerfelkante1Y2[$i]-(($wuerfelkante2Y2[$i]-$wuerfelkante1Y2[$i])/($wuerfelkante2X2[$i]-$wuerfelkante1X2[$i]))*$wuerfelkante1X2[$i] - 3 And MouseGetPos(1) < (($wuerfelkante2Y2[$i]-$wuerfelkante1Y2[$i])/($wuerfelkante2X2[$i]-$wuerfelkante1X2[$i]))*MouseGetPos(0)+$wuerfelkante1Y2[$i]-(($wuerfelkante2Y2[$i]-$wuerfelkante1Y2[$i])/($wuerfelkante2X2[$i]-$wuerfelkante1X2[$i]))*$wuerfelkante1X2[$i] Then
$hPenwechsel = $hPenblau
EndIf
If MouseGetPos(0) > $wuerfelkante2X2[$i] And MouseGetPos(0) < $wuerfelkante3X2[$i] And MouseGetPos(1) > (($wuerfelkante3Y2[$i]-$wuerfelkante2Y2[$i])/($wuerfelkante3X2[$i]-$wuerfelkante2X2[$i]))*MouseGetPos(0)+$wuerfelkante2Y2[$i]-(($wuerfelkante3Y2[$i]-$wuerfelkante2Y2[$i])/($wuerfelkante3X2[$i]-$wuerfelkante2X2[$i]))*$wuerfelkante2X2[$i] - 3 And MouseGetPos(1) < (($wuerfelkante3Y2[$i]-$wuerfelkante2Y2[$i])/($wuerfelkante3X2[$i]-$wuerfelkante2X2[$i]))*MouseGetPos(0)+$wuerfelkante2Y2[$i]-(($wuerfelkante3Y2[$i]-$wuerfelkante2Y2[$i])/($wuerfelkante3X2[$i]-$wuerfelkante2X2[$i]))*$wuerfelkante2X2[$i] Then
$hPenwechsel = $hPenblau
ElseIf MouseGetPos(0) < $wuerfelkante2X2[$i] And MouseGetPos(0) > $wuerfelkante3X2[$i] And MouseGetPos(1) > (($wuerfelkante3Y2[$i]-$wuerfelkante2Y2[$i])/($wuerfelkante3X2[$i]-$wuerfelkante2X2[$i]))*MouseGetPos(0)+$wuerfelkante2Y2[$i]-(($wuerfelkante3Y2[$i]-$wuerfelkante2Y2[$i])/($wuerfelkante3X2[$i]-$wuerfelkante2X2[$i]))*$wuerfelkante2X2[$i] - 3 And MouseGetPos(1) < (($wuerfelkante3Y2[$i]-$wuerfelkante2Y2[$i])/($wuerfelkante3X2[$i]-$wuerfelkante2X2[$i]))*MouseGetPos(0)+$wuerfelkante2Y2[$i]-(($wuerfelkante3Y2[$i]-$wuerfelkante2Y2[$i])/($wuerfelkante3X2[$i]-$wuerfelkante2X2[$i]))*$wuerfelkante2X2[$i] Then
$hPenwechsel = $hPenblau
EndIf
If MouseGetPos(0) > $wuerfelkante3X2[$i] And MouseGetPos(0) < $wuerfelkante4X2[$i] And MouseGetPos(1) > (($wuerfelkante4Y2[$i]-$wuerfelkante3Y2[$i])/($wuerfelkante4X2[$i]-$wuerfelkante3X2[$i]))*MouseGetPos(0)+$wuerfelkante3Y2[$i]-(($wuerfelkante4Y2[$i]-$wuerfelkante3Y2[$i])/($wuerfelkante4X2[$i]-$wuerfelkante3X2[$i]))*$wuerfelkante3X2[$i] - 3 And MouseGetPos(1) < (($wuerfelkante4Y2[$i]-$wuerfelkante3Y2[$i])/($wuerfelkante4X2[$i]-$wuerfelkante3X2[$i]))*MouseGetPos(0)+$wuerfelkante3Y2[$i]-(($wuerfelkante4Y2[$i]-$wuerfelkante3Y2[$i])/($wuerfelkante4X2[$i]-$wuerfelkante3X2[$i]))*$wuerfelkante3X2[$i] Then
$hPenwechsel = $hPenblau
ElseIf MouseGetPos(0) < $wuerfelkante3X2[$i] And MouseGetPos(0) > $wuerfelkante4X2[$i] And MouseGetPos(1) > (($wuerfelkante4Y2[$i]-$wuerfelkante3Y2[$i])/($wuerfelkante4X2[$i]-$wuerfelkante3X2[$i]))*MouseGetPos(0)+$wuerfelkante3Y2[$i]-(($wuerfelkante4Y2[$i]-$wuerfelkante3Y2[$i])/($wuerfelkante4X2[$i]-$wuerfelkante3X2[$i]))*$wuerfelkante3X2[$i] - 3 And MouseGetPos(1) < (($wuerfelkante4Y2[$i]-$wuerfelkante3Y2[$i])/($wuerfelkante4X2[$i]-$wuerfelkante3X2[$i]))*MouseGetPos(0)+$wuerfelkante3Y2[$i]-(($wuerfelkante4Y2[$i]-$wuerfelkante3Y2[$i])/($wuerfelkante4X2[$i]-$wuerfelkante3X2[$i]))*$wuerfelkante3X2[$i] Then
$hPenwechsel = $hPenblau
EndIf
If MouseGetPos(0) > $wuerfelkante4X2[$i] And MouseGetPos(0) < $wuerfelkante1X2[$i] And MouseGetPos(1) > (($wuerfelkante1Y2[$i]-$wuerfelkante4Y2[$i])/($wuerfelkante1X2[$i]-$wuerfelkante4X2[$i]))*MouseGetPos(0)+$wuerfelkante4Y2[$i]-(($wuerfelkante1Y2[$i]-$wuerfelkante4Y2[$i])/($wuerfelkante1X2[$i]-$wuerfelkante4X2[$i]))*$wuerfelkante4X2[$i] - 3 And MouseGetPos(1) < (($wuerfelkante1Y2[$i]-$wuerfelkante4Y2[$i])/($wuerfelkante1X2[$i]-$wuerfelkante4X2[$i]))*MouseGetPos(0)+$wuerfelkante4Y2[$i]-(($wuerfelkante1Y2[$i]-$wuerfelkante4Y2[$i])/($wuerfelkante1X2[$i]-$wuerfelkante4X2[$i]))*$wuerfelkante4X2[$i] Then
$hPenwechsel = $hPenblau
ElseIf MouseGetPos(0) < $wuerfelkante4X2[$i] And MouseGetPos(0) > $wuerfelkante1X2[$i] And MouseGetPos(1) > (($wuerfelkante1Y2[$i]-$wuerfelkante4Y2[$i])/($wuerfelkante1X2[$i]-$wuerfelkante4X2[$i]))*MouseGetPos(0)+$wuerfelkante4Y2[$i]-(($wuerfelkante1Y2[$i]-$wuerfelkante4Y2[$i])/($wuerfelkante1X2[$i]-$wuerfelkante4X2[$i]))*$wuerfelkante4X2[$i] - 3 And MouseGetPos(1) < (($wuerfelkante1Y2[$i]-$wuerfelkante4Y2[$i])/($wuerfelkante1X2[$i]-$wuerfelkante4X2[$i]))*MouseGetPos(0)+$wuerfelkante4Y2[$i]-(($wuerfelkante1Y2[$i]-$wuerfelkante4Y2[$i])/($wuerfelkante1X2[$i]-$wuerfelkante4X2[$i]))*$wuerfelkante4X2[$i] Then
$hPenwechsel = $hPenblau
EndIf
If $hPenwechsel = $hPenblau And _IsPressed("01") Then
GUICtrlSetData($wuerfelnummer,$i)
$hPenwechsel = $hPenrot
EndIf
If _IsPressed("02") Then
GUICtrlSetData($wuerfelnummer,$wuerfelanzahl)
EndIf
_GDIPlus_GraphicsDrawLine($hBuffer,$wuerfelkante1X1[$i],$wuerfelkante1Y1[$i],$wuerfelkante1X2[$i],$wuerfelkante1Y2[$i],$hPenwechsel)
_GDIPlus_GraphicsDrawLine($hBuffer,$wuerfelkante2X1[$i],$wuerfelkante2Y1[$i],$wuerfelkante2X2[$i],$wuerfelkante2Y2[$i],$hPenwechsel)
_GDIPlus_GraphicsDrawLine($hBuffer,$wuerfelkante3X1[$i],$wuerfelkante3Y1[$i],$wuerfelkante3X2[$i],$wuerfelkante3Y2[$i],$hPenwechsel)
_GDIPlus_GraphicsDrawLine($hBuffer,$wuerfelkante4X1[$i],$wuerfelkante4Y1[$i],$wuerfelkante4X2[$i],$wuerfelkante4Y2[$i],$hPenwechsel)
_GDIPlus_GraphicsDrawLine($hBuffer,$wuerfelkante1X1[$i],$wuerfelkante1Y1[$i],$wuerfelkante2X1[$i],$wuerfelkante2Y1[$i],$hPenwechsel)
_GDIPlus_GraphicsDrawLine($hBuffer,$wuerfelkante2X1[$i],$wuerfelkante2Y1[$i],$wuerfelkante3X1[$i],$wuerfelkante3Y1[$i],$hPenwechsel)
_GDIPlus_GraphicsDrawLine($hBuffer,$wuerfelkante3X1[$i],$wuerfelkante3Y1[$i],$wuerfelkante4X1[$i],$wuerfelkante4Y1[$i],$hPenwechsel)
_GDIPlus_GraphicsDrawLine($hBuffer,$wuerfelkante4X1[$i],$wuerfelkante4Y1[$i],$wuerfelkante1X1[$i],$wuerfelkante1Y1[$i],$hPenwechsel)
_GDIPlus_GraphicsDrawLine($hBuffer,$wuerfelkante1X2[$i],$wuerfelkante1Y2[$i],$wuerfelkante2X2[$i],$wuerfelkante2Y2[$i],$hPenwechsel)
_GDIPlus_GraphicsDrawLine($hBuffer,$wuerfelkante2X2[$i],$wuerfelkante2Y2[$i],$wuerfelkante3X2[$i],$wuerfelkante3Y2[$i],$hPenwechsel)
_GDIPlus_GraphicsDrawLine($hBuffer,$wuerfelkante3X2[$i],$wuerfelkante3Y2[$i],$wuerfelkante4X2[$i],$wuerfelkante4Y2[$i],$hPenwechsel)
_GDIPlus_GraphicsDrawLine($hBuffer,$wuerfelkante4X2[$i],$wuerfelkante4Y2[$i],$wuerfelkante1X2[$i],$wuerfelkante1Y2[$i],$hPenwechsel)
Next
_GDIPlus_GraphicsDrawImageRect($hGraphics,$hBitmap,0,0,$iWidth,$iHeight)
;LINKS
If _IsPressed("25") Then
$alpha -= 0.1
EndIf
;RECHTS
If _IsPressed("27") Then
$alpha += 0.1
EndIf
;HOCH
If _IsPressed("26") Then
$ansicht -= 0.1
EndIf
;RUNTER
If _IsPressed("28") Then
$ansicht += 0.1
EndIf
;U
If _IsPressed("55") Then
$zoom -= 0.1
EndIf
;I
If _IsPressed("49") Then
$zoom += 0.1
EndIf
If _IsPressed("01") And Not _IsPressed("11") Then
If $zahl1 = 0 Then
Global $alpha1 = $alpha
Global $mousex = MouseGetPos(0)
Global $ansicht1 = $ansicht
Global $mousey = MouseGetPos(1)
$zahl1 = 1
EndIf
$ansicht = $ansicht1 - ($mousey - MouseGetPos(1))/400
If MouseGetPos(1) < $nullpunkty Then
$alpha = $alpha1 + ($mousex - MouseGetPos(0))/400
ElseIf MouseGetPos(1) > $nullpunkty Then
$alpha = $alpha1 - ($mousex - MouseGetPos(0))/400
EndIf
EndIf
If Not _IsPressed("01") Then $zahl1 = 0
;Strg + LINKE MAUSTASTE
If _IsPressed("01") And _IsPressed("11") Then
$nullpunktx = MouseGetPos(0)
$nullpunkty = MouseGetPos(1)
EndIf
;J
If _IsPressed("4A")Then
$gitter = 0
;K
ElseIf _IsPressed("4B") Then
$gitter = 1
EndIf
;E
If _IsPressed("45") Then _einfuegen()
If $alpha < 0 Then $alpha = 6.282
If $alpha > 6.282 Then $alpha = 0
If $ansicht < 0 Then $ansicht = 0
If $ansicht > 1 Then $ansicht = 1
If $zoom < 0.25 Then $zoom = 0.25
If $zoom > 50 Then $zoom = 50
EndFunc
Func _wuerfelzeichnen()
If GUICtrlRead($wuerfelcheckbox) = 1 Then
$wuerfelanzahlbearbeiten = GUICtrlRead($wuerfelnummer)
If $wuerfelanzahlbearbeiten <= 98 Then
$arkoordX[$wuerfelanzahlbearbeiten] = GUICtrlRead($koordX)
$arkoordY[$wuerfelanzahlbearbeiten] = GUICtrlRead($koordY)
$arkoordZ[$wuerfelanzahlbearbeiten] = GUICtrlRead($koordZ)
$arwuerfelwidth[$wuerfelanzahlbearbeiten] = GUICtrlRead($wuerfelwidth)
$arwuerfelheight[$wuerfelanzahlbearbeiten] = GUICtrlRead($wuerfelheight)
$arwuerfeldepth[$wuerfelanzahlbearbeiten] = GUICtrlRead($wuerfeldepth)
Else
MsgBox(0,"","Maximale Anzahl Würfel erreicht.")
$wuerfelanzahlbearbeiten = 97
EndIf
If $wuerfelanzahlbearbeiten >= $wuerfelanzahl Then
$wuerfelanzahl += 1
EndIf
GUICtrlSetData($wuerfelnummer,$wuerfelanzahl + 1)
EndIf
EndFunc
Func _wuerfelnummerminus()
GUICtrlSetData($wuerfelnummer,GUICtrlRead($wuerfelnummer) - 1)
If GUICtrlRead($wuerfelnummer) < 1 Then GUICtrlSetData($wuerfelnummer,"1")
EndFunc
Func _wuerfelnummerplus()
GUICtrlSetData($wuerfelnummer,GUICtrlRead($wuerfelnummer) + 1)
If GUICtrlRead($wuerfelnummer) > 98 Then GUICtrlSetData($wuerfelnummer,"98")
EndFunc
Func _einfuegen()
GUISetState(@SW_SHOW,$hWndmenu)
EndFunc
Func _hide()
GUISetState(@SW_HIDE)
EndFunc
Func _neu()
For $i = 1 To $wuerfelanzahl
$arkoordX[$i] = ""
$arkoordY[$i] = ""
$arkoordZ[$i] = ""
$arwuerfelwidth[$i] = ""
$arwuerfelheight[$i] = ""
$arwuerfeldepth[$i] = ""
Next
$wuerfelanzahl = 1
GUICtrlSetData($wuerfelnummer,$wuerfelanzahl)
EndFunc
Func _oeffnen()
$inioeffnen = FileOpenDialog("Öffnen",@ScriptDir,"Alle (*.*)|Ini-Dateien (*.ini)",1,"",$hWnd)
$wuerfelanzahl = IniRead($inioeffnen,"Variablen","$wuerfelanzahl","")
Dim $arkoordX[99],$arkoordY[99],$arkoordZ[99],$arwuerfelwidth[99],$arwuerfelheight[99],$arwuerfeldepth[99]
For $i = 1 To $wuerfelanzahl
$arkoordX[$i] = IniRead($inioeffnen,"Variablen","$arkoordX[" & $i & "]","")
$arkoordY[$i] = IniRead($inioeffnen,"Variablen","$arkoordY[" & $i & "]","")
$arkoordZ[$i] = IniRead($inioeffnen,"Variablen","$arkoordZ[" & $i & "]","")
$arwuerfelwidth[$i] = IniRead($inioeffnen,"Variablen","$arwuerfelwidth[" & $i & "]","")
$arwuerfelheight[$i] = IniRead($inioeffnen,"Variablen","$arwuerfelheight[" & $i & "]","")
$arwuerfeldepth[$i] = IniRead($inioeffnen,"Variablen","$arwuerfeldepth[" & $i & "]","")
Next
EndFunc
Func _speichern()
$inispeichern = FileSaveDialog("Speichern",@ScriptDir,"Ini-Dateien (*.ini)",16,".ini",$hWnd)
IniWrite($inispeichern,"Variablen","$wuerfelanzahl",$wuerfelanzahl)
For $i = 1 To $wuerfelanzahl
IniWrite($inispeichern,"Variablen","$arkoordX[" & $i & "]",$arkoordX[$i])
IniWrite($inispeichern,"Variablen","$arkoordY[" & $i & "]",$arkoordY[$i])
IniWrite($inispeichern,"Variablen","$arkoordZ[" & $i & "]",$arkoordZ[$i])
IniWrite($inispeichern,"Variablen","$arwuerfelwidth[" & $i & "]",$arwuerfelwidth[$i])
IniWrite($inispeichern,"Variablen","$arwuerfelheight[" & $i & "]",$arwuerfelheight[$i])
IniWrite($inispeichern,"Variablen","$arwuerfeldepth[" & $i & "]",$arwuerfeldepth[$i])
Next
EndFunc
Func _hilfe()
GUICreate("Hilfe",$iWidthhilfe,$iHeighthilfe,-1,-1,-1,-1,$hWnd)
$tab = GUICtrlCreateTab(0,0,$iWidthhilfe,$iHeighthilfe)
GUICtrlCreateTabItem("Steuerung")
GUICtrlCreateLabel("LINKS" & @CRLF & "RECHTS" & @CRLF & "HOCH" & @CRLF & "RUNTER" & @CRLF & @CRLF & "I" & @CRLF & "U" & @CRLF & @CRLF & "Strg + Linke Maustaste" & @CRLF & @CRLF & "J" & @CRLF & "K" & @CRLF & @CRLF & "E",10,30,110,190)
GUICtrlCreateLabel("- Linksdrehen" & @CRLF & "- Rechtsdrehen" & @CRLF & "- Kippen -> Draufsicht" & @CRLF & "- Kippen -> Seitenansicht" & @CRLF & @CRLF & "- Heranzoomen" & @CRLF & "- Zurückzoomen" & @CRLF & @CRLF & "- Bewegen des Koordinatensystems" & @CRLF & @CRLF & "- Koordinatenachsen aus" & @CRLF & "- Koordinatenachsen ein" & @CRLF & @CRLF & "- Körpererstellen-Menü",130,30,170,190)
GUICtrlCreateTabItem("Körper erstellen")
GUICtrlCreateLabel("Zum erstellen eines neuen Körpers im Menü unter Einfügen->Körper das Menü zum Erstellen eines neuen Körpers aufrufen." & @CRLF & @CRLF & "Würfel:" & @CRLF & "Die x-,y-,und z-Koordinaten geben den Punkt vorne links oben des Würfels an. Von dort erfolgt die Rechnung mit Breite, Höhe und Tiefe." & @CRLF & "Um den Körper in das Koordinatensystem einzufügen bei den gewünschten Körpern die Checkbox markieren und auf 'Hinzufügen' klicken.",10,30,$iWidthhilfe - 20,110)
GUISetState(@SW_SHOW)
GUISetOnEvent(-3,"_hide")
EndFunc
Func _exit()
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_GraphicsDispose($hBuffer)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_PenDispose($hPenrot)
_GDIPlus_PenDispose($hPengruen)
_GDIPlus_PenDispose($hPenblau)
_GDIPlus_BrushDispose($hBrushgruen)
_GDIPlus_Shutdown()
Exit
EndFunc