Quickdraw Tutorial [Part1]

  • Hallo und herzlich willkommen zu diesem Tutorial.
    Hier geht es um die Grafikengine Quickdraw von moritz1243, die 100 mal schneller und für Anfänger leichter ist als GDI+.

    Grundlagen

    Mann braucht nicht viel um mit Quickdraw zu arbeiten.
    *Natürlich AutoIt(möglichst die neuste Version)
    *Grundlegende AutoIt Kenntnisse
    *Quickdraw (Bitte beide Parts downloaden)

    Dann nur noch entpacken und im Quickdrawordner ein neues AutoItscritp erstellen und los gehts.


    Arbeiten mit Quickdraw

    Linie zeichnen
    Da mann am Anfang immer leicht Anfängt, zeichnen wir mal eine einfache Linie.

    Und das geht so

    [autoit]

    #include "QuickDraw.au3"

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

    _QuickDraw_Enable("Quickdraw Tutorial",500,500,200,200,False) ; Quickdraw Fenster erstellen

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

    While _QuickDraw_Running() ; Gibt 1 zurück wenn Quickdraw läuft 0 wenn nicht
    Sleep(10) ; Damit die Prozessorlast nicht zu hoch wird
    _QuickDraw_ClearBuffer(0xFFFFFFFF) ;Denn Ausgabepuffer leeren und Weiß anmalen
    _QuickDraw_Line(50,50,100,100,0xFF000000) ; Die Linie zeichnen
    _QuickDraw_SwapBuffers() ; Von dem Backpuffer in den Frontpuffer zeichnen
    WEnd
    _QuickDraw_Disable() ; Das Fenster schließen und Resourcen aus dem Speicher laden

    [/autoit]
    Neue Befehle
    [autoit]

    ;## _QuickDraw_Enable
    ; Parameter #1 Name des Fensters
    ; Parameter #2 Breite des Fenster
    ; Parameter #3 Höhe des Fensers
    ; Parameter #4 X Position des Fenseers
    ; Parameter #5 Y Positin des Fensers
    ; Parameter #6 False für Fenstermodus True für Vollbild

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

    ;## _QuickDraw_Running
    ; Keine Parameter

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

    ;## _QuickDraw_ClearBuffer
    ; Hex Farbe

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

    ;## _QuickDraw_Line
    ; Parameter #1 Name des X Position von Linienanfang
    ; Parameter #2 Name des Y Position von Linienanfang
    ; Parameter #3 Name des X Position von Linienende
    ; Parameter #4 Name des Y Position von Linienende

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

    ;## _QuickDraw_SwapBuffers
    ; Keine Parameter

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

    ;## _QuickDraw_Disable
    ; Keine Parameter

    [/autoit]

    Wer nicht weiß was Front und Backpuffer ist der sollte sich merken: das die Doppelpuffertechnik eine kontinuierlichen Bildfrequenz ohne Flackern ermöglicht.

    Draw_Type und neue Objekte
    Als nächstes kommen wir zu dem Draw_Type Parameter und neuen Objekten.

    [autoit]

    #include "QuickDraw.au3"

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

    _QuickDraw_Enable("Quickdraw Tutorial",500,500,200,200,False) ; Quickdraw Fenster erstellen

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

    While _QuickDraw_Running()
    Sleep(10)
    _QuickDraw_ClearBuffer(0xFFFFFFFF)
    _QuickDraw_Line(50,50,100,100,0xFF000000)

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

    _QuickDraw_Rect(150,150,50,60,$Draw_Fill,0xFF000000); Ein gefülltes Rechteck zeichnen
    _QuickDraw_Rect(250,150,50,60,$Draw_Line,0xFF000000) ; Rechteck zeichnen (ungefüllt nur linien)
    _QuickDraw_Circle(50,150,50,$Draw_Line,0xFF000000); Ein Kreis zeichnen (ungefüllt)

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

    _QuickDraw_SwapBuffers()
    WEnd
    _QuickDraw_Disable()

    [/autoit]
    Neue Befehle
    [autoit]

    ;## _QuickDraw_Rect
    ; Parameter #1 X Position des Rechtecks
    ; Parameter #2 Y Position des Rechtecks
    ; Parameter #3 Breite des Rechtecks
    ; Parameter #4 Höhe des Rechtecks
    ; Parameter #5 DrawType
    ; Parameter #6 Hex Farbe die zum Zeichnen genutzt werden soll

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

    ;## _QuickDraw_Circle
    ; Parameter #1 X Position des Kreises
    ; Parameter #2 Y Position des Rechtecks
    ; Parameter #3 Radius des Kreises
    ; Parameter #4 Draw Type
    ;; Parameter #5 Hex Farbe zum zeichnen

    [/autoit]

    Wie mann im Beispiel sieht gibt der DrawType an wie ein Objekt gezeichnet werden soll.
    $Draw_Fill : Das Objekt wird gefüllt gezeichnet
    $Draw_Line : Nur die Ränder werden gezeichnet

    Text zeichnen
    Nachdem wir nun Linien, Kreise und Rechtecke zeichnen können kommen wir nun zu etwas Text.

    [autoit]

    #include "QuickDraw.au3"

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

    _QuickDraw_Enable("Quickdraw Tutorial", 500, 500, 200, 200, False) ; Quickdraw Fenster erstellen

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

    $hFont = _QuickDraw_CreateFont("Times New Roman") ;Lädt die Schriftart Times New Roman

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

    While _QuickDraw_Running()
    Sleep(10)
    _QuickDraw_ClearBuffer(0xFFFFFFFF)

    _QuickDraw_Text(50, 50, "Ich bin ein Text!", 20, $hFont, $Draw_Fill, 0xFF000000) ; Zeichnet einen Text

    _QuickDraw_SwapBuffers()
    WEnd

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

    _QuickDraw_FreeFont($hFont) ; Die Schriftart aus dem Speicher laden
    _QuickDraw_Disable()

    [/autoit]
    Neue Befehle
    [autoit]

    ;## _QuickDraw_CreateFont
    ;###Rückgabe: ein Handle zu der Schiftart
    ; Parameter #1 Name der Schriftart
    ; Parameter #2 legt fest ob die Schift kursiv gezeichnet werden soll (True um kursiv zu zeichnen)
    ; Parameter #3 legt fest ob die Schift unterstrichen gezeichnet werden soll
    ; Parameter #4 legt fest ob die Schift durchgestrichen gezeichnet werden soll

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

    ;## _QuickDraw_Text
    ; Parameter #1 X Position für den Text
    ; Parameter #2 Y Positin für den Text
    ; Parameter #3 Der zu Zeichnende Text
    ; Parameter #4 Schriftgröße
    ; Parameter #5 ein Handle zu einer geladenen Font (Rückgabe von _QuickDraw_CreateFont)
    ; Parameter #6 DrawType (sollte immer auf $Draw_Fill stehen damit es vernünftig gezeichnet wird)
    ; Parameter #7 Hex Farbe

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

    ;## _QuickDraw_FreeFont
    ; Parameter #1 ein Handle zu einer geladenen Font (Rückgabe von _QuickDraw_CreateFont)

    [/autoit]

    Wie ihr seht ist das Texte zeichnen viel kürzer und einfacher als mit GDI+. Ein guter ansporn um weiterzu lesen oder ;).


    Quad und Polygon
    Nur zur Erklärung mit einem Quad kann man unregelmäßige Rechtecke zeichnen und mit einem Polygon n-Ecke.

    [autoit]

    #include "QuickDraw.au3"

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

    _QuickDraw_Enable("Quickdraw Tutorial", 500, 500, 200, 200, False)

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

    Dim $aPolygon1[3][2] = [[10, 10], _ ;Einen Array mit Koordinaten Füllen
    [20, 75], _
    [100, 120]]

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

    $hFont = _QuickDraw_CreateFont("Arial")
    While _QuickDraw_Running()
    Sleep(10)
    _QuickDraw_ClearBuffer(0xFFFFFFFF)

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

    _QuickDraw_Text(0, 20, "Polygon", 20, $hFont, $Draw_Fill, 0xFF000000)
    _QuickDraw_Polygon(20, 20, $aPolygon1, 3, $Draw_Line, 0xFF000000);Zeichnet das Polygon

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

    _QuickDraw_Text(200, 20, "Quad", 20, $hFont, $Draw_Fill, 0xFF000000)
    _QuickDraw_Quad(240, 50, 270, 70, 280, 70, 230, 80, $Draw_Line, 0xFF000000);Zeichnet das Polygon

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

    _QuickDraw_SwapBuffers()
    WEnd
    _QuickDraw_FreeFont($hFont)
    _QuickDraw_Disable()

    [/autoit]
    Neue Befehle
    [autoit]

    ;## _QuickDraw_Polygon
    ; Parameter #1 X Position von dem Polygon
    ; Parameter #2 Y Positin von dem Polygon
    ; Parameter #3 Koordinaten Array (Muss 2 Dimensional sein bsp: [0][0] = X [0][1] = Y)
    ; Parameter #4 Anzahl wie viele Koordinaten verarbeitet, gezeichnet werden sollen
    ; Parameter #5 Draw Type
    ; Parameter #6 Hex Farbe

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

    ;## _QuickDraw_Quad
    ; Parameter #1 X Position vom Punkt oben Links
    ; Parameter #2 Y Position vom Punkt oben Links

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

    ; Parameter #3 X Position vom Punkt Rechts oben
    ; Parameter #4 Y Position vom Punkt Rechts oben

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

    ; Parameter #5 X Position vom Punkt unten Rechts
    ; Parameter #6 Y Position vom Punkt unten Rechts

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

    ; Parameter #7 X Position vom Punkt unten Links
    ; Parameter #8 Y Position vom Punkt unten Links

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

    ; Parameter #9 Draw Type
    ; Parameter #10 Hex Farbe

    [/autoit]

    Eigentlich recht nützliche Befehle aber wenn wir uns mal das Quad ansehen dann wirds auf dauer ziemlich unnübersichtlich mit den vielen Parametern.

    Wird fortgesetzt

  • Nettes Tutorial.
    Die Beschreibungen sind gut und detailliert.
    Also als anfänger hat man damit keine Probleme.
    Ich hoffe die nächsten Parts werden genauso gut und etwas fortgeschrittenere Inhalte beinhalten.
    MfG. PrideRage

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • Sorry für das Ausgraben des Themas, doch da es ein Tutorial ist, hoffe ich, dass ich keine auf den Deckel bekomme ;P

    Also:

    1.)

    [autoit]

    ;## _QuickDraw_Line
    ; Parameter #1 Name des X Position von Linienanfang
    ; Parameter #2 Name des Y Position von Linienanfang
    ; Parameter #3 Name des X Position von Linienende
    ; Parameter #4 Name des X Position von Linienende

    [/autoit]

    Müsste das nicht so lauten:

    [autoit]

    ;## _QuickDraw_Line
    ; Parameter #1 X Position von Linienanfang
    ; Parameter #2 Y Position von Linienanfang
    ; Parameter #3 X Position von Linienende
    ; Parameter #4 Y Position von Linienende

    [/autoit]

    2.)

    Wie kann ich ein Bild mit Quickdraw zeichen? Wie mache ich einen Hintergrund? Könntest du das Tutorial bitte auch fortsetzen?

  • Ja hast recht habs berichtigt.
    Sorry aber ich hab im moment nen anderes zu Programmieren das muss diese Woche noch fertig werden...
    Als erstes muss man das Bild mit

    _QuickDraw_LoadTexture() laden und dann kannst du das mit
    _QuickDraw_Rect(X, Y, Höhe, Breite, Rückgabe von LoadTexture , 0xFFFFFFFF)
    das Bild zeichnen.