Hallo, ich hab vor einiger Zeit mal ein Skript geschrieben, indem man einen Tisch nach links oder nach rechts verschieben kann, und sich somit auch die Perspektiven zum Tisch ändert.
Jetzt wollte ich das Skript mal hier zeigen:
Spoiler anzeigen
#include <GDIPlus.au3>
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
Global $GUIWidth = 700
Global $GUIHeight = 500
Global $TischLinksiX1 = 230
Global $TischLinksiY1 = $GUIHeight / 4
Global $TischLinksiX2 = 200
Global $TischLinksiY2 = 300
Global $TischRechtsiX1 = 470
Global $TischRechtsiY1 = $GUIHeight / 4
Global $TischRechtsiX2 = 500
Global $TischRechtsiY2 = 300
Global $TischBeinLinksVorneRechts = $TischLinksiX2 + 49
Global $TischBeinLinksVorneLinks = $TischLinksiX2 + 22
Global $TischBeinRechtsVorneLinks = $TischRechtsiX2 - 48
Global $TischBeinRechtsVorneRechts = $TischRechtsiX2 - 21
Global $TischBeinLinksHintenLinks = $TischLinksiX1 + 14
Global $TischBeinLinksHintenLinksHinten = $TischLinksiX1 + 21
Global $TischBeinRechtsHintenRechtsHinten = $TischRechtsiX1 - 21
Global $TischLinieRunterHintenLinks = $TischLinksiY1 + 30
Global $TischLinieRunterVorneLinks = $TischLinksiY2 + (30 * 1.25)
Global $TischLinieRunterHintenRechts = $TischRechtsiY1 + 30
Global $TischLinieRunterVorneRechts = $TischRechtsiY2 + (30 * 1.25)
Global $TischBeinHintenHeight = $TischLinksiY1 + 200
[/autoit] [autoit][/autoit] [autoit]Global $TischLinksPunkte[4][2]
Global $TischRechtsPunkte[4][2]
Global $TischLinksPunkteUnten[4][2]
Global $TischRechtsPunkteUnten[4][2]
Global $PlatteFuellPunkte[5][2]
Global $PlatteLinksFuellPunkte[5][2]
Global $PlatteVorneFuellPunkte[5][2]
Global $PlatteRechtsFuellPunkte[5][2]
_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$GUI = GUICreate("3D Beispiel", $GUIWidth, $GUIHeight, -1, -1)
GUISetState()
$GDIPlusGUI = _GDIPlus_GraphicsCreateFromHWND($GUI)
$Bitmap = _GDIPlus_BitmapCreateFromGraphics($GUIWidth, $GUIHeight, $GDIPlusGUI)
$Buffer = _GDIPlus_ImageGetGraphicsContext($Bitmap)
_GDIPlus_GraphicsSetSmoothingMode($Buffer, 2)
_GDIPlus_GraphicsClear($Buffer, 0xFFFFFFFF)
$PenWidth2 = _GDIPlus_PenCreate(0xFF000000, 2, 2)
$PenWidth3 = _GDIPlus_PenCreate(0xFF000000, 3, 2)
$BrushWhite = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
GUIRegisterMsg($WM_PAINT, "_WM_PAINT")
[/autoit] [autoit][/autoit] [autoit]_Draw()
[/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg(1)
Switch $nMsg[0]
Case $GUI_EVENT_CLOSE
_Exit()
Case $GUI_EVENT_RESTORE
_WM_PAINT()
EndSwitch
If _IsPressed("25") Then
$TischLinksiX1 -= 1.5
$TischLinksiX2 -= 2.5
$TischRechtsiX1 -= 1.5
$TischRechtsiX2 -= 2.5
$TischBeinLinksVorneLinks -= 2.4
$TischBeinLinksVorneRechts -= 2.4
$TischBeinRechtsVorneLinks -= 2.4
$TischBeinRechtsVorneRechts -= 2.4
$TischBeinLinksHintenLinks -= 2.4
$TischBeinLinksHintenLinksHinten -= 1.45
$TischBeinRechtsHintenRechtsHinten -= 1.45
_Draw()
EndIf
If _IsPressed("27") Then
$TischLinksiX1 += 1.5
$TischLinksiX2 += 2.5
$TischRechtsiX1 += 1.5
$TischRechtsiX2 += 2.5
$TischBeinLinksVorneLinks += 2.4
$TischBeinLinksVorneRechts += 2.4
$TischBeinRechtsVorneLinks += 2.4
$TischBeinRechtsVorneRechts += 2.4
$TischBeinLinksHintenLinks += 2.4
$TischBeinLinksHintenLinksHinten += 1.45
$TischBeinRechtsHintenRechtsHinten += 1.45
_Draw()
EndIf
WEnd
Func _Draw()
_GDIPlus_GraphicsClear($Buffer, 0xFFFFFFFF)
$TischLinksPunkte[0][0] = 3
$TischLinksPunkte[1][0] = $TischLinksiX1
$TischLinksPunkte[1][1] = $TischLinksiY1
$TischLinksPunkte[2][0] = $TischLinksiX2 + 1
$TischLinksPunkte[2][1] = $TischLinksiY2
$TischLinksPunkte[3][0] = $TischLinksiX2 - 1
$TischLinksPunkte[3][1] = $TischLinksiY2
$TischRechtsPunkte[0][0] = 3
$TischRechtsPunkte[1][0] = $TischRechtsiX1
$TischRechtsPunkte[1][1] = $TischRechtsiY1
$TischRechtsPunkte[2][0] = $TischRechtsiX2 + 1
$TischRechtsPunkte[2][1] = $TischRechtsiY2
$TischRechtsPunkte[3][0] = $TischRechtsiX2 - 1
$TischRechtsPunkte[3][1] = $TischRechtsiY2
$TischLinksPunkteUnten[0][0] = 3
$TischLinksPunkteUnten[1][0] = $TischLinksPunkte[1][0]
$TischLinksPunkteUnten[1][1] = $TischLinieRunterHintenLinks
$TischLinksPunkteUnten[2][0] = $TischLinksPunkte[2][0]
$TischLinksPunkteUnten[2][1] = $TischLinieRunterVorneLinks
$TischLinksPunkteUnten[3][0] = $TischLinksPunkte[3][0]
$TischLinksPunkteUnten[3][1] = $TischLinieRunterVorneLinks
$TischRechtsPunkteUnten[0][0] = 3
$TischRechtsPunkteUnten[1][0] = $TischRechtsPunkte[1][0]
$TischRechtsPunkteUnten[1][1] = $TischLinieRunterHintenRechts
$TischRechtsPunkteUnten[2][0] = $TischRechtsPunkte[2][0]
$TischRechtsPunkteUnten[2][1] = $TischLinieRunterVorneRechts
$TischRechtsPunkteUnten[3][0] = $TischRechtsPunkte[3][0]
$TischRechtsPunkteUnten[3][1] = $TischLinieRunterVorneRechts
$PlatteFuellPunkte[0][0] = 4
$PlatteFuellPunkte[1][0] = $TischLinksiX1
$PlatteFuellPunkte[1][1] = $TischLinksiY1
$PlatteFuellPunkte[2][0] = $TischLinksiX2
$PlatteFuellPunkte[2][1] = $TischLinksiY2
$PlatteFuellPunkte[3][0] = $TischRechtsiX2
$PlatteFuellPunkte[3][1] = $TischRechtsiY2
$PlatteFuellPunkte[4][0] = $TischRechtsiX1
$PlatteFuellPunkte[4][1] = $TischRechtsiY1
$PlatteLinksFuellPunkte[0][0] = 4
$PlatteLinksFuellPunkte[1][0] = $TischLinksiX1
$PlatteLinksFuellPunkte[1][1] = $TischLinksiY1
$PlatteLinksFuellPunkte[2][0] = $TischLinksiX1
$PlatteLinksFuellPunkte[2][1] = $TischLinieRunterHintenLinks
$PlatteLinksFuellPunkte[3][0] = $TischLinksiX2
$PlatteLinksFuellPunkte[3][1] = $TischLinieRunterVorneLinks
$PlatteLinksFuellPunkte[4][0] = $TischLinksiX2
$PlatteLinksFuellPunkte[4][1] = $TischLinksiY2
$PlatteVorneFuellPunkte[0][0] = 4
$PlatteVorneFuellPunkte[1][0] = $TischLinksiX2
$PlatteVorneFuellPunkte[1][1] = $TischLinksiY2
$PlatteVorneFuellPunkte[2][0] = $TischLinksiX2
$PlatteVorneFuellPunkte[2][1] = $TischLinieRunterVorneLinks
$PlatteVorneFuellPunkte[3][0] = $TischRechtsiX2
$PlatteVorneFuellPunkte[3][1] = $TischLinieRunterVorneRechts
$PlatteVorneFuellPunkte[4][0] = $TischRechtsiX2
$PlatteVorneFuellPunkte[4][1] = $TischRechtsiY2
$PlatteRechtsFuellPunkte[0][0] = 4
$PlatteRechtsFuellPunkte[1][0] = $TischRechtsiX1
$PlatteRechtsFuellPunkte[1][1] = $TischRechtsiY1
$PlatteRechtsFuellPunkte[2][0] = $TischRechtsiX1
$PlatteRechtsFuellPunkte[2][1] = $TischLinieRunterHintenRechts
$PlatteRechtsFuellPunkte[3][0] = $TischRechtsiX2
$PlatteRechtsFuellPunkte[3][1] = $TischLinieRunterVorneRechts
$PlatteRechtsFuellPunkte[4][0] = $TischRechtsiX2
$PlatteRechtsFuellPunkte[4][1] = $TischRechtsiY2
_GDIPlus_GraphicsDrawLine($Buffer, $TischLinksiX1 + 20, $TischLinksiY1, $TischLinksiX1 + 20, $TischBeinHintenHeight, $PenWidth2)
_GDIPlus_GraphicsDrawLine($Buffer, $TischLinksiX1 + 20, $TischBeinHintenHeight, $TischLinksiX1 + 45, $TischBeinHintenHeight, $PenWidth2)
_GDIPlus_GraphicsDrawLine($Buffer, $TischLinksiX1 + 45, $TischLinksiY1, $TischLinksiX1 + 45, $TischBeinHintenHeight, $PenWidth2)
_GDIPlus_GraphicsDrawLine($Buffer, $TischBeinLinksHintenLinksHinten, $TischLinksiY1, $TischBeinLinksHintenLinksHinten, $TischLinksiY1 + 185, $PenWidth2)
_GDIPlus_GraphicsDrawLine($Buffer, $TischBeinLinksHintenLinksHinten, $TischLinksiY1 + 184, $TischLinksiX1 + 20, $TischBeinHintenHeight, $PenWidth2)
_GDIPlus_GraphicsDrawLine($Buffer, $TischBeinLinksHintenLinks, $TischLinksiY1, $TischBeinLinksHintenLinks, $TischLinksiY1, $PenWidth2)
_GDIPlus_GraphicsDrawLine($Buffer, $TischRechtsiX1 - 20, $TischRechtsiY1, $TischRechtsiX1 - 20, $TischBeinHintenHeight, $PenWidth2)
_GDIPlus_GraphicsDrawLine($Buffer, $TischRechtsiX1 - 45, $TischRechtsiY1, $TischRechtsiX1 - 45, $TischBeinHintenHeight, $PenWidth2)
_GDIPlus_GraphicsDrawLine($Buffer, $TischRechtsiX1 - 20, $TischBeinHintenHeight, $TischRechtsiX1 - 45, $TischBeinHintenHeight, $PenWidth2)
_GDIPlus_GraphicsDrawLine($Buffer, $TischBeinRechtsHintenRechtsHinten, $TischRechtsiY1, $TischBeinRechtsHintenRechtsHinten, $TischRechtsiY1 + 185, $PenWidth2)
_GDIPlus_GraphicsDrawLine($Buffer, $TischBeinRechtsHintenRechtsHinten, $TischRechtsiY1 + 184, $TischRechtsiX1 - 20, $TischBeinHintenHeight, $PenWidth2)
_GDIPlus_GraphicsFillPolygon($Buffer, $PlatteRechtsFuellPunkte, $BrushWhite)
_GDIPlus_GraphicsFillPolygon($Buffer, $PlatteVorneFuellPunkte, $BrushWhite)
_GDIPlus_GraphicsFillPolygon($Buffer, $PlatteFuellPunkte, $BrushWhite)
_GDIPlus_GraphicsFillPolygon($Buffer, $PlatteLinksFuellPunkte, $BrushWhite)
_GDIPlus_GraphicsDrawPolygon($Buffer, $TischLinksPunkte, $PenWidth2)
_GDIPlus_GraphicsDrawPolygon($Buffer, $TischRechtsPunkte, $PenWidth2)
If $TischLinksiX2 >= $TischLinksiX1 Then _GDIPlus_GraphicsDrawPolygon($Buffer, $TischLinksPunkteUnten, $PenWidth2)
If $TischRechtsiX2 <= $TischRechtsiX1 Then _GDIPlus_GraphicsDrawPolygon($Buffer, $TischRechtsPunkteUnten, $PenWidth2)
_GDIPlus_GraphicsDrawLine($Buffer, $TischLinksiX1 + 1, $TischLinksiY1, $TischRechtsiX1 - 1, $TischRechtsiY1, 0)
_GDIPlus_GraphicsDrawLine($Buffer, $TischLinksiX2, $TischLinksiY2, $TischRechtsiX2, $TischRechtsiY2, $PenWidth3)
If $TischLinksiX2 >= $TischLinksiX1 Then _GDIPlus_GraphicsDrawLine($Buffer, $TischLinksiX1, $TischLinksiY1, $TischLinksiX1, $TischLinieRunterHintenLinks, $PenWidth2)
_GDIPlus_GraphicsDrawLine($Buffer, $TischLinksiX2, $TischLinksiY2, $TischLinksiX2, $TischLinieRunterVorneLinks, $PenWidth3)
If $TischRechtsiX2 <= $TischRechtsiX1 Then _GDIPlus_GraphicsDrawLine($Buffer, $TischRechtsiX1, $TischRechtsiY1, $TischRechtsiX1, $TischLinieRunterHintenRechts, $PenWidth2)
_GDIPlus_GraphicsDrawLine($Buffer, $TischRechtsiX2, $TischRechtsiY2, $TischRechtsiX2, $TischLinieRunterVorneRechts, $PenWidth3)
_GDIPlus_GraphicsDrawLine($Buffer, $TischLinksiX2, $TischLinieRunterVorneLinks, $TischRechtsiX2, $TischLinieRunterVorneRechts, $PenWidth3)
_GDIPlus_GraphicsDrawLine($Buffer, $TischLinksiX2 + 20, $TischLinieRunterVorneLinks, $TischLinksiX2 + 20, $GUIHeight, $PenWidth3)
_GDIPlus_GraphicsDrawLine($Buffer, $TischLinksiX2 + 50, $TischLinieRunterVorneLinks, $TischLinksiX2 + 50, $GUIHeight, $PenWidth3)
If $TischLinksiX2 + 20 >= $TischBeinLinksVorneLinks Then _GDIPlus_GraphicsDrawLine($Buffer, $TischBeinLinksVorneLinks, $TischLinieRunterVorneLinks, $TischBeinLinksVorneLinks, $GUIHeight, $PenWidth3)
If $TischLinksiX2 + 50 <= $TischBeinLinksVorneRechts Then _GDIPlus_GraphicsDrawLine($Buffer, $TischBeinLinksVorneRechts, $TischLinieRunterVorneRechts, $TischBeinLinksVorneRechts, $GUIHeight, $PenWidth3)
_GDIPlus_GraphicsDrawLine($Buffer, $TischRechtsiX2 - 20, $TischLinieRunterVorneRechts, $TischRechtsiX2 - 20, $GUIHeight, $PenWidth3)
_GDIPlus_GraphicsDrawLine($Buffer, $TischRechtsiX2 - 50, $TischLinieRunterVorneRechts, $TischRechtsiX2 - 50, $GUIHeight, $PenWidth3)
If $TischRechtsiX2 - 50 >= $TischBeinRechtsVorneLinks Then _GDIPlus_GraphicsDrawLine($Buffer, $TischBeinRechtsVorneLinks, $TischLinieRunterVorneRechts, $TischBeinRechtsVorneLinks, $GUIHeight, $PenWidth3)
If $TischRechtsiX2 - 20 <= $TischBeinRechtsVorneRechts Then _GDIPlus_GraphicsDrawLine($Buffer, $TischBeinRechtsVorneRechts, $TischLinieRunterVorneRechts, $TischBeinRechtsVorneRechts, $GUIHeight, $PenWidth3)
_GDIPlus_GraphicsFillRect($Buffer, 0, 0, $GUIWidth, $TischLinksiY1, $BrushWhite)
If $TischLinksiX2 >= $TischLinksiX1 Then _GDIPlus_GraphicsFillRect($Buffer, 0, 0, $TischLinksiX1 - 1, $GUIHeight, $BrushWhite)
If $TischRechtsiX2 <= $TischRechtsiX1 Then _GDIPlus_GraphicsFillRect($Buffer, $TischRechtsiX1 + 1, 0, $GUIWidth, $GUIHeight, $BrushWhite)
_WM_PAINT()
EndFunc ;==>_Draw
Func _Exit()
_GDIPlus_BrushDispose($BrushWhite)
_GDIPlus_PenDispose($PenWidth3)
_GDIPlus_PenDispose($PenWidth2)
_GDIPlus_GraphicsDispose($Buffer)
_GDIPlus_ImageDispose($Bitmap)
_GDIPlus_GraphicsDispose($GDIPlusGUI)
_GDIPlus_Shutdown()
Exit
EndFunc ;==>_Exit
Func _WM_PAINT()
_GDIPlus_GraphicsDrawImageRect($GDIPlusGUI, $Bitmap, 0, 0, $GUIWidth, $GUIHeight)
EndFunc ;==>_WM_PAINT
Mit den Pfeiltasten <= (nach links) und => (nach rechts) kann man den Tisch verschieben.
Bitte Feedback geben.