1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. o2candoo

Beiträge von o2candoo

  • MoveToMouse

    • o2candoo
    • 20. Juni 2024 um 19:35

    Bin nach einiger Zeit wieder hier vorbeigestolpert und habe dieses Thema gesehen.

    Ich habe in der Zwischenzeit ein Algorithmus in Python geschriben, der ziemlich flüssig läuft.

    Es ist immernoch umgesetzt mit den Punkten als Platzhalter, daher frage ich nochmals ob jemand bock hat die Layer für obengenannte Vorschläge zu zeichnen :)


    Bei Interesse gerne auf mich zukommen. Teile auch gerne den Pythoncode.

  • Matrix Falling Code

    • o2candoo
    • 14. April 2023 um 19:48

    Hi Guys,

    Ich arbeite normalerweise mit Python, habe aber mit AutoIT vor Jahren angefangen zu programmieren... So back to the roots :D

    Habe eine Matrix code erstellt, just 4 fun. Da ich kein AutoIT Experte bin, kann mir jemand erklären, warum die frame rate droped nach einer kurzen Zeit (sofern die Maus nicht bewegt wird) ?

    Danke für die Inputs,

    LG O2 :rock:

    Dateien

    Matrix_Eigen.au3 2,74 kB – 327 Downloads
  • MoveToMouse

    • o2candoo
    • 23. Juli 2020 um 16:26

    Hi Leute

    Wiedermal ein neues "Just4Fun-Script" :)

    Die Idee stammt aus folgendem Link:

    Orca

    Wenn der Link nicht funktioniert, findet man das Prinzip unter folgendem YT Video:

    YT-Orca


    - In diesem Skript ist das ganze mit Kreisen als Platzhalter umgesetzt.

    Das Ziel ist es jeden Kreis durch ein gezeichnetes layer zu ersetzen, um auch ein solches Orca Bild wie im Link zu erhalten.

    (Hat jemand bock diese Layer für mich zu zeichnen? Muss nicht zwingend ein Orca sein, kann auch ein Vogel oder sonstiges abbilden)

    - Damit nicht immer der ganze Bildschirm gerendert werden muss (was alles verlangsamt),

    habe ich den Bildschirm 'Gekachelt' in 9 Segmente in welche das Gui springt

    --> Nachteil: Es Flackert bei den Übergängen und bei schneller Mausbewegung.

    --> Lösungsansatz: Das Fenster permanent mit der Maus mitbewegen und die Objektpositionierung dementsprechend anpassen

    (Mache ich sobald ich Zeit und Lust dazu habe)

    - Die Objektbewegung kann je nach rechenpower variieren. Sie ist derzeit mit der Funktion in Zeile 37 als erster Näherungsansatz umgesetzt (nach gefühl).


    Teilt mir eure Gedanken mit wenn Ihr lust dazu habt und wie immer bin ich offen für Ideen und Verbesserungsvorschläge :thumbup:


    LG

    Dateien

    MoveToMouse.au3 4,91 kB – 635 Downloads
  • GDI+ DoppelPendel

    • o2candoo
    • 11. Februar 2020 um 16:53
    Zitat von Schmunke

    Ups ... irgendwie scheint dein Panel nen Geschwindigkeitsrausch gekriegt zu haben :)

    sah lustig aus, wie es immer schneller routierte :)

    Erst wurde die Energie immer weniger ... dann immer mehr :)

    pasted-from-clipboard.png

    Ups, da war doch noch was ^^'

    Ja macht spass zuzuschauen, vorallem wenn man unterschiedliche Startparameter wählt :)

    Das mit dem ausufern ist im neu angehängten file "GDI+_Pendel_friction.au3" behoben mit der Reibungsvariablen $f

  • ChaosEquations

    • o2candoo
    • 13. September 2019 um 08:32

    Vielen Dank für diese Rückmeldungen!

    Das freut und motiviert mich natürlich umso mehr etwas daran rumzutüfteln :):thumbup:

    Andy Danke, dass Du mich vor grösserem "Schaden" im Bezug auf Assembler bewahrst ^^

    Auch die weiteren Ausführungen und Tipps von Dir werde ich bei Gelegenheit sehr gerne versuchen umzusetzen.

    Allem voran den Vorschlag, dies mit OpenCL kombiniert mit OpenGL zu realisieren.

    Zudem werde ich evtl. versuchen, etwas in Python zu coden (nur um Vergleiche ziehen zu können und just 4 Fun).

    UEZ Dies habe ich noch nicht getan, ist aber ein guter nächster Schritt

    (habe ich zuerst gemieden, da ich auch in C++ noch keine Erfahrung habe und ich zunächst mehr Zeit brauche, um diese Sprache zu lernen).


    LG

  • ChaosEquations

    • o2candoo
    • 12. September 2019 um 16:55

    Hi Community

    Das hier angehängte Skript bezieht sich auf folgenden YouTube Beitrag von CodeParade, welches das Funktionsprinzip auch gleich erklärt:

    Chaos Equations - Simple Mathematical Art

    Dieses video hat mich dazu inspiriert, eine Umsetzung in AutoIT zu versuchen.

    Das Resultat ist meiner Meinung nach mehr oder weniger zufriedenstellend.

    Jedoch möchte ich gerne bei den AutoIT Experten noch folgendes in Erfahrung bringen falls möglich:

    - Im Video sieht man so etwas ähnliches wie einen "Pfad" der einzelnen Punkte, was einen coolen Effekt hervorbringt. Dies habe ich auch versucht, indem ich alle Punkte des vorherigen Schrittes in einem Array gespeichert habe, und lediglich Verbindungslinien von "alten" zu "neuen" punkten gezeichnet habe. Jedoch sieht das ziemlich blöd aus und ist ziemlich ineffizient denke ich.

    Ist der Ansatz mit einem transparenten clearing besser? Wenn ja, wie?

    - Im Video sieht es ziemlich flüssig aus. Ich denke dass dies nur mit Assembler möglich ist, oder gibt es da noch einen anderen Weg mein Skript zu beschleunigen? Wenn Assembler die einzige Lösung ist (habe ich btw. 0 Erfahrung), kann mir dann jemand etwas unter die Arme greifen, bzw. einen guten Link empfehlen, um sich in Assembler etwas einzuarbeiten?

    - Eine andere Möglichkeit wäre alles komplett durchrechnen zu lassen und dann erst zu visualisieren, bspw. mittels einem Gif? Gibt es da bereits etwas ähnliches?


    Info zu den Makros in meinem Skript:

    c --> Säubern

    h --> Verlauf ON/OFF

    r --> Neue zufällige Summanden (im Modus "Random" ersichtlich)

    m --> Moduswechsel

    t --> ToolTip ON/OFF

    a --> Animation ON/OFF

    f --> Animation schneller

    l --> Animation langsamer

    s --> Animationsbereich kleiner

    b --> Animationsbereich grösser

    i --> Info (oben links) ON/OFF

    Mauserad --> Zoom

    Mausposition in Horizontaler Richtung --> Zeitschritt-Update (wenn Animation OFF)

    Ansonsten wünsche ich viel Spass beim Ausprobieren und Entdecken von neuen Kombinationen :)

    LG

    Dateien

    ChaosEquations.au3 13,41 kB – 614 Downloads star.png 115,71 kB – 0 Downloads star_2.png 95,85 kB – 0 Downloads tornado.png 152,6 kB – 0 Downloads square_2.png 121,62 kB – 0 Downloads party.png 98,85 kB – 0 Downloads
  • FlyingDots with BASS

    • o2candoo
    • 17. Juli 2019 um 13:56

    Vielen Dank, genau sowas hab ich gemeint :saint:

  • FlyingDots with BASS

    • o2candoo
    • 17. Juli 2019 um 13:23

    Hi Community

    Dieser Beitrag lehnt sich an einen bereits existierenden Beitrag von mir:

    FlyingDots

    Da es bei diesem neuen Code jedoch einige Abweichungen zum älteren Beitrag gibt, erschien mir ein neues Thema zu erstellen der richtige Weeg.

    INHALT:

    - GDI+ Spielerei, abhängig von div. Inputs wie z.B. Musik, Mausposition und Tastatureingaben (in progress!).

    - Audio Funktion on/off

    - Normal Modus / Zoom Modus

    - History Funktion (nur in Normal Modus möglich)

    HotKey's:

    - Pfeiltaste Hoch --> Anzahl Punkte erhöhen

    - Pfeiltaste Runter --> Anzahl Punkte vermindern

    - h --> History Funktion on/off

    - a --> Audio Funktion on/off

    - z --> Zoom Funktion on/off

    - c --> Clear Screen

    - t --> ToolTip on/off

    - Mausrad --> Zoom-Speed

    Geplante Features:

    - Gegenwärtige Situation der Einstellungen speichern, z.B. unter "Favoriten" oder als "Playlist", um veränderungen zu automatisieren oder Voreinstellungen laufen zu lassen

    - Weitere Formen oder Mathematische Strukturen einbinden wie z.B. Fraktale geometrien, mit der Möglichkeit Abläufe zu speichern

    - Nicht nur RightChLvl und LeftChLvl von BASS verwenden, sondern komplettes Frequenzband einbinden (HILFE, KENN MICH NICHT GUT MIT BASS UDF AUS :D)

    - Flüssige Umsetzung auch bei FullScreen inkl. FPS Anzeige (AUCH HIER BITTE ICH UM HILFE BEI DEN GDI+ PROFIS)

    TIPP:

    - Bei einer Anzahl von n > 200 sieht es meist besser aus


    Bei Fragen, Anregungen oder Ideen einfach melden :rock:

    LG

    Dateien

    FlyingDots with BASS.zip 2,44 MB – 546 Downloads
  • FlyingDots

    • o2candoo
    • 29. Mai 2019 um 11:46

    Hi Community

    Hab mal wieder ein kleines Skript zum Zeitvertreib erstellt :)

    Es erstellt lediglich eine am Anfang wählbare anzahl Kreise, welche um ein variables Zentrum rotieren und dabei das Bild im Hintergrund grösser oder kleiner angefügt wird.

    Ein Bild sagt mehr als tausend Worte, daher siehe Bilder von Beispielen im Anhang.

    Steuerbar ist alles über die Maus:

    --> oben nach unten = Grösse der Kreise

    --> links nach rechts = Abstand der Kreise

    --> Mausrad = Richtung


    Möglicher Ausblick:

    Ein weiteres Ziel ist noch einen Ablauf zu kreieren, abhängig von einer auf dem PC gespielten Musik.

    Ich habe noch nichts im bereich vom Equalizing probiert, klingt aber spannend und vielversprechend :)

    Gemacht --> FlyingDots with BASS

    Viel Spass und Rückmeldung/Verbesserungsvorschläge erwünscht :rock:

    LG

    Dateien

    bsp3.png 1,88 MB – 0 Downloads FlyingDots.au3 4,73 kB – 518 Downloads bsp1.png 1,52 MB – 0 Downloads bsp2.png 2,93 MB – 0 Downloads
  • GDI+ DoppelPendel

    • o2candoo
    • 5. April 2019 um 00:21
    Zitat von Tuxedo

    Nicht genau das selbe wie du, aber etwas ähnliches gab es mal. Es nannte sich Chaospendel von @FR34Q

    ChaosPendel-Simulation (mit GDI+)

    Eventuell kannst du dort Inspiration für dein Script finden.

    Dein Pendel sieht schon mal brauchbar aus und macht schon mal realistische Bewegungen.

    Mag sein, daß es irgendwann mal aus dem Ruder läuft, aber bis jetzt tuts schon mal ordentlich.

    Aus der Lehrzeit weiss ich, daß auch ein normales mechanisches Pendel durchaus auch schon mal

    völlig unerwartete Bewegungen hervorbringen kann.

    Alles anzeigen

    Vielen Dank für Deinen Input!

    Diesen Link kenne ich und finde ich super! Habe sogar schon etwas "eigenes" dazu erstellt, jedoch wirklich Anfänger mässig :)

    Das Prinzi ist (fast) dasselbe, jedoch ohne eine solch schöne GUI...

    Dateien

    Draw_Lines.au3 2,37 kB – 599 Downloads
  • GDI+ DoppelPendel

    • o2candoo
    • 4. April 2019 um 22:18

    Hi Community :)

    Da ich online noch kein Skript eines Doppelpendels seitens AutoIT gefunden habe, habe ich mich selbst an einer Umsetzung versucht.

    Jedoch ist in dieser Ausführung die Reibung nicht berücksichtigt... Zudem kann es sein, dass das Pendel bei div. Einstellungen eine "Eigenfrequenz" erreicht und es unendlich schnell rotiert bis es verschwindet...

    wie kann ich dem Abhilfe verschaffen?


    vielen Dank im Voraus :rock:

    UPDATE:

    Weiteres file "GDI+Pendel_friction.au3" angehängt in welchem die Reibung mit der variablen $f berücksichtigt ist --> ausufern wird so behoben

    Dateien

    GDI+Pendel_friction.au3 4,38 kB – 514 Downloads GDI+Pendel.au3 4,4 kB – 618 Downloads
  • GDI+ Spielerei

    • o2candoo
    • 5. November 2018 um 18:00
    Zitat

    NIEMALS Globale Variablen innerhalb von Funktionen deklarieren, da rastet dir Au3Check mit Warnungen nur aus, es ist auch kein sicherer Stil.

    Erstelle deine Globals ganz oben und in der Funktion weißt du den Wert dann zu.

    Ist aufgenommen und wird bei der nächsten Version angepasst sein. Danke für den Input :)

  • GDI+ Spielerei

    • o2candoo
    • 5. November 2018 um 17:49

    UPDATE 05.11.18 (Version 1.3) hinzugefügt

  • GDI+ Spielerei

    • o2candoo
    • 31. Oktober 2018 um 13:47

    UPDATE 31.10.18 (Version 1.2) hinzugefügt

  • GDI+ Spielerei

    • o2candoo
    • 30. Oktober 2018 um 12:21
    Zitat

    - Die Funktion ist schon recht schnell "fertig". Mir würde es gefallen, dass man noch einen Winkel festlegen könnte, um den das fertige Muster dann mehrfach gedreht werden würde. Letztendlich könnte man damit wunderschöne Mandalas kreieren.

    Das war auch mein Gedanke :) habe bereits versucht was umzusetzen. Was dabei herauskam ist im Anhang zu finden.

    Zitat
    - Interaktionen kommen immer gut, indem bspw. der User mit der Maus ins Bild klickert und dort dann eine Reaktion auslöst...

    Finde ich gut, evtl. könnte ich das in einen "Interaktionsmodus" einlagern, welcher dann beliebig ein-, bzw. ausgeschaltet werden kann.

    Dateien

    Bsp. Muster 1.png 315,48 kB – 0 Downloads Bsp. Muster 2.png 457,35 kB – 0 Downloads Bsp. Muster 3.png 186,04 kB – 0 Downloads
  • GDI+ Spielerei

    • o2candoo
    • 29. Oktober 2018 um 18:02
    Zitat

    Ok, ich hab mich mal kurz in dein Skript eingearbeitet und habs implementiert.

    Ich hätte das ganze anders strukturiert aber ich wollte das jetzt nicht komplett über den Haufen werfen, da es einfach zu viel Zeit kosten würde also hab ich das so mal beibehalten.

    Ich bin begeistert, vielen dank für diese super Hilfe ^^

    Für mich jungen "Hobby" Programmierer ist das bereits sehr viel Wert!

    Ich werde dann Updates mit weiteren Features Posten und bin auch dann gespannt und offen für Verbesserungsvorschläge 8)

  • GDI+ Spielerei

    • o2candoo
    • 29. Oktober 2018 um 16:43

    Ich habe versucht einen zweiten Buffer, sowie ein zweites Bitmap zu erstellen.

    Die funktion _Draw() habe ich nach besstem Wissen und gewissen angepasst wie folgt:

    Code
    Func _Draw()
    ;~    legs
       If _IsChecked($cb_legs) Then
          If _IsPressed("1B") Then _Exit()
          For $i = 1 To $anz
             If $i = 1 Then
                _GDIPlus_GraphicsDrawLine($hBuffer, $fix_x, $fix_y, $x[$i], $y[$i], $hPen[$i])
             Else
                _GDIPlus_GraphicsDrawLine($hBuffer, $x[$i-1], $y[$i-1], $x[$i], $y[$i], $hPen[$i])
             EndIf
          Next
       EndIf
    ;~       Hist
       If _IsChecked($cb_hist) Then
          _GDIPlus_GraphicsDrawLine($hBuffer2, $xHist, $yHist, $x[$anz], $y[$anz], $hPen_hist)
       EndIf
       _GDIPlus_GraphicsDrawImageRect($hGraphic,$hBitmap,0,0, $wWidth, $wHeight)
       _GDIPlus_GraphicsDrawImageRect($hGraphic,$hBitmap2,0,0, $wWidth, $wHeight)
       Sleep(10)
       _GDIPlus_GraphicsClear($hBuffer, 0xFFFFFFFF)
    EndFunc
    Alles anzeigen

    Ich denke ich habe es nicht richtig verstanden, denn es flackert immernoch :/

  • GDI+ Spielerei

    • o2candoo
    • 29. Oktober 2018 um 16:15

    Hi Community

    Das hier präsentierte Skript ist lediglich eine Spielerei von mir und NOCH NICHT FERTIG :) !

    Weitere Features (und zum Schluss natürlich Zeilen Optimierung) kommen noch dazu.

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    UPDATE 31.10.18 (Version 1.2):

    - Die Gui ist nun im OnEvent Modus

    - Die Variablendeklaration wurde überarbeitet, evtl. noch verbesserungswürdig (Vorschläge erwünscht)

    - Das "sizinig" ist etwas grösser, aber noch nicht fertig optimiert

    - Der Parameter "bias" sorgt für eine definierte "Verschiebung" der Kurve, was coole "Surfaces" erzeugen kann

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    UPDATE 05.11.18 (Version 1.3):

    - Button "RAND" hinzugefügt:

    Initialisiert neue "random" Settings"

    - Checkbox "SBS" (StepByStep) hinzugefügt:

    Wenn nicht angewählt, berechnet es 50 Schritte ($calc_forward) im Voraus und bildet diese danach ab.

    Jedoch fehlt immer der Zwischenschritt, welcher nicht gezeichnet wird (wirkt Skizzenhaft, wird jedoch noch behoben)

    - Slider "Fading" hinzugefügt (momentan mithilfe von "graphicsclear" um eine Vorstellung zu bekommen, wird evtl. noch optimiert)

    - Slider "Speed" hinzugefügt

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    AUSBLICK:

    - Farbenhandling

    - Beschriftungen im Skript (Nachvollziehbar) nachtragen

    - Speichern von Bildern, Settings

    - Laden von Settings

    - Zeilenoptimierung

    - Variablennamen Optimierung

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Falls das Skript bei jemandem Probleme macht, getestet habe ich es bisher nur auf meinem Laptop:

    - HP-Omen

    - Intel(R) Core(TM) i5-7300HQ

    CPU @ 2.50GHz (4 Kerne)

    - 8.00 GB RAM

    - 64-Bit,

    - 1920x1080


    V 1.3:

    C
    ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ; ~~~~~~~~~~~~~ GDI+ CarmiBrush ~~~~~~~~~~~~~~~~~~~~~~~
    ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ; Language:          English
    ; Author:            "o2candoo"
    ; Version:           1.3
    ; ----------------------------------------------------------------------------
    
    
    #Region Includes
    #include <GUIConstantsEx.au3>
    #include <ColorConstantS.au3>
    #include <WindowsConstants.au3>
    #include <Color.au3>
    #include <GDIPlus.au3>
    #include <Misc.au3>
    #EndRegion
    
    
    #Region Declarations
    ;~ Gui attributes
    Global $wWidth = 800
    Global $wHeight = 600
    Global $wCenter_x = $wWidth / 2
    Global $wCenter_y = $wHeight / 2
    Global $center_x = @DesktopWidth/2
    Global $center_y = @DesktopHeight/2
    
    ;~ Environment attributes
    Global $processi = 3.141592653589793
    
    ;~ Colors
    Global $col
    Global $colClear = 0xFFFFFFFF
    Global $fading_max = 1
    Global $fading = 0
    
    ;~ leg attributes
    Global $fix_x = $wCenter_x
    Global $fix_y = $wCenter_y
    Global $rotation[3]
    $rotation[1] = 1
    $rotation[2] = -1
    
    ;~ Leg variables
    _LegVar(5)
    
    ;~ Initialize leg variables
    Global $data_count, $values[10000], $xHist, $yHist
    _Initializer()
    
    ;~ Process variables
    Global $process = 2
    Global $calc_forward = 50
    Global $xses[$calc_forward+1], $yses[$calc_forward+1]
    $start = -1
    #EndRegion
    
    
    #Region Gui
    ;~ Main
    $hGui = GUICreate("Main", $wWidth, $wHeight, $center_x-($wWidth/2), $center_y-($wHeight/2),-2147483648)
    GUISetBkColor($COLOR_WHITE)
    
    ;~ Infolabels
    Global $lengthlabel[$quantity+1]
    $lengthlabel_pos = 5
    For $i = 1 To $quantity
       $text = String($i) & ":" & @CRLF & _
                "l = " & @TAB & $length[$i] & @CRLF & _
                "step = " & @TAB & $step[$i] & @CRLF
       $lengthlabel[$i] = GUICtrlCreateLabel($text, 10, $lengthlabel_pos, 70, 50)
       GUICtrlSetFont($lengthlabel[$i], 7)
       $lengthlabel_pos += 40
    Next
    
    ;~ Buttons
    $b_start = GUICtrlCreateButton("START", $wWidth-70, 10, 60, 50)
    GUICtrlSetFont($b_start, 12)
    GUICtrlSetOnEvent(-1, "StartPressed")
    $b_clear = GUICtrlCreateButton("CLEAR", $wWidth-70, 65, 60, 50)
    GUICtrlSetFont($b_clear, 12)
    GUICtrlSetOnEvent(-1, "ClearPressed")
    $b_rand = GUICtrlCreateButton("RAND", $wWidth-70, 120, 60, 50)
    GUICtrlSetFont($b_rand, 12)
    GUICtrlSetOnEvent(-1, "RandPressed")
    
    ;~ Slider Fading
    GUICtrlCreateLabel("Fading", 10, $wHeight-150, 70, 30)
    GUICtrlSetFont(-1, 16)
    $s_Fade = GUICtrlCreateSlider(10, $wHeight-120, 70, 30)
    GUICtrlSetLimit(-1, 20)
    GUICtrlSetData(-1, 0)
    
    ;~ Slider Speed
    GUICtrlCreateLabel("Speed", 10, $wHeight-80, 70, 30)
    GUICtrlSetFont(-1, 16)
    $s_Speed = GUICtrlCreateSlider(10, $wHeight-50, 70, 30)
    GUICtrlSetLimit(-1, 250)
    GUICtrlSetData(-1, 250)
    
    ;~ Checkboxes
    $cb_sbs = GUICtrlCreateCheckbox("SBS", $wWidth-80, $wHeight-120, 50, 30)
    $cb_legs = GUICtrlCreateCheckbox("legs", $wWidth-80, $wHeight-80, 50, 30)
    $cb_hist = GUICtrlCreateCheckbox("Hist", $wWidth-80, $wHeight-40, 50, 30)
    GUICtrlSetState(-1, $GUI_CHECKED)
    
    ;~ Gui State
    GUISetState(@SW_SHOW)
    #EndRegion
    
    
    #Region ### START GDI+ ###
    ;~ Startup
    _GDIPlus_Startup()
    
    ;~ Graphics
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui)
    
    ;~ Bitmaps
    $hGraphicBitmap = _GDIPlus_BitmapCreateFromGraphics($wWidth, $wHeight, $hGraphic)
    $hHistoryBitmap = _GDIPlus_BitmapCreateFromScan0($wWidth, $wHeight)
    $hLegBitmap = _GDIPlus_BitmapCreateFromScan0($wWidth, $wHeight)
    
    ;~ Buffers
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hGraphicBitmap)
    $hHistoryBuffer = _GDIPlus_ImageGetGraphicsContext($hHistoryBitmap)
    $hLegBuffer = _GDIPlus_ImageGetGraphicsContext($hLegBitmap)
    _GDIPlus_GraphicsSetSmoothingMode($hBuffer, 4)
    _GDIPlus_GraphicsSetSmoothingMode($hHistoryBuffer, 4)
    _GDIPlus_GraphicsSetSmoothingMode($hLegBuffer, 4)
    
    _GDIPlus_GraphicsClear($hBuffer, 0xFFFFFFFF)
    _GDIPlus_GraphicsClear($hHistoryBuffer, 0xFFFFFFFF)
    _GDIPlus_GraphicsClear($hLegBuffer, 0xFFFFFFFF)
    
    ;~ Pens
    Global $hPen[$quantity+1]
    For $i = 1 To $quantity
       $hPen[$i] = _GDIPlus_PenCreate(0xFFFF0000, 5)
    Next
    $hPenHist = _GDIPlus_PenCreate(0xFF000000, 2)
    #EndRegion ### END GDI+ ###
    
    
    #Region EventMode
    Opt("GUICoordMode", 2)
    Opt("GUIResizeMode", 1)
    Opt("GUIOnEventMode", 1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
    #EndRegion
    
    
    #Region Loop
    While 1
       If $start = 1 Then
          _Calc()
          _Draw()
       EndIf
       Sleep(250-GUICtrlRead($s_Speed))
    WEnd
    #EndRegion
    
    
    #Region Functions
    Func _LegVar($q = 5)
       Global $quantity = $q
       Global $length[$quantity+1]
       Global $x[$quantity+1], $y[$quantity+1], $alpha[$quantity+1], $step[$quantity+1]
    EndFunc
    
    
    Func _Initializer($s = 4, $m = 20, $b = 0.1)
    ;~ Variables
       Local $series = $s
       Local $max = $m
       Local $bias = $b
    
    ;~ Possible values == Series
       $data_count = Round($max/$series, 0)
       For $i = 1 To $data_count
          $values[$i] = $i * $series
       Next
    
    ;~ Initialize leg Variables (Normal)
       For $i = 1 To $quantity
          $alpha[$i] = 270
          $length[$i] = Round(Random(20,100), 0)
          If $i = 1 Then
             $x[$i] = $fix_x + ($length[1] * cos(($processi*$alpha[1])/180))
             $y[$i] = $fix_y + ($length[1] * sin(($processi*$alpha[1])/180))
             $step[$i] = ($values[Round(Random(1, $data_count), 0)]) * $rotation[Round(Random(1, 2), 0)]
          Else
             $x[$i] = $x[$i-1] + ($length[$i] * cos(($processi*$alpha[$i])/180))
             $y[$i] = $y[$i-1] + ($length[$i] * sin(($processi*$alpha[$i])/180))
             $step[$i] = ($values[Round(Random(1, $data_count), 0)] + $bias) * $rotation[Round(Random(1, 2), 0)]
          EndIf
       Next
    
    ;~ Initialize leg Variables (Hist)
       $xHist = $x[$quantity]
       $yHist = $y[$quantity]
    EndFunc
    
    
    Func _Calc()
       If _IsChecked($cb_sbs) Then
       ;~    Hist
          $xHist = $x[$quantity]
          $yHist = $y[$quantity]
       ;~    Normal
          For $i = 1 To $quantity
             $alpha[$i] += $step[$i]
             If $i = 1 Then
                $x[$i] = $fix_x + ($length[$i] * cos(($processi*$alpha[$i])/180))
                $y[$i] = $fix_y + ($length[$i] * sin(($processi*$alpha[$i])/180))
             Else
                $x[$i] = $x[$i-1] + ($length[$i] * cos(($processi*$alpha[$i])/180))
                $y[$i] = $y[$i-1] + ($length[$i] * sin(($processi*$alpha[$i])/180))
             EndIf
          Next
       Else
          For $j = 1 To $calc_forward
          ;~    Hist
             $xses[$j] = $x[$quantity]
             $yses[$j] = $y[$quantity]
          ;~    Normal
             For $i = 1 To $quantity
                $alpha[$i] += $step[$i]
                If $i = 1 Then
                   $x[$i] = $fix_x + ($length[$i] * cos(($processi*$alpha[$i])/180))
                   $y[$i] = $fix_y + ($length[$i] * sin(($processi*$alpha[$i])/180))
                Else
                   $x[$i] = $x[$i-1] + ($length[$i] * cos(($processi*$alpha[$i])/180))
                   $y[$i] = $y[$i-1] + ($length[$i] * sin(($processi*$alpha[$i])/180))
                EndIf
             Next
          Next
       EndIf
    EndFunc
    
    
    Func _Draw()
       If _IsChecked($cb_sbs) Then
           _GDIPlus_GraphicsDrawImageRect($hLegBuffer, $hHistoryBitmap, 0, 0, $wWidth, $wHeight)
       ;~    legs
          If _IsChecked($cb_legs) Then
             For $i = 1 To $quantity
                If $i = 1 Then
                   _GDIPlus_GraphicsDrawLine($hLegBuffer, $fix_x, $fix_y, $x[$i], $y[$i], $hPen[$i])
                Else
                   _GDIPlus_GraphicsDrawLine($hLegBuffer, $x[$i-1], $y[$i-1], $x[$i], $y[$i], $hPen[$i])
                EndIf
             Next
          EndIf
       ;~       Hist
          If _IsChecked($cb_hist) Then
             _GDIPlus_GraphicsDrawLine($hHistoryBuffer, $xHist, $yHist, $x[$quantity], $y[$quantity], $hPenHist)
          EndIf
          _GDIPlus_GraphicsDrawImageRect($hBuffer, $hHistoryBitmap,0, 0, $wWidth, $wHeight)
          _GDIPlus_GraphicsDrawImageRect($hBuffer, $hLegBitmap,0, 0, $wWidth, $wHeight)
          _GDIPlus_GraphicsDrawImageRect($hGraphic, $hGraphicBitmap, 80, 0, $wWidth-160, $wHeight)
       Else
          If $fading = $fading_max Then
             $colFade = "0x" & StringTrimLeft(Hex(GUICtrlRead($s_Fade)), 6) & "FFFFFF"
             ClearPressed($colFade)
             $fading = 0
          Else
             $fading += 1
          EndIf
          _GDIPlus_GraphicsDrawImageRect($hLegBuffer, $hHistoryBitmap, 0, 0, $wWidth, $wHeight)
          For $i = 1 To ($calc_forward-1)
             _GDIPlus_GraphicsDrawLine($hHistoryBuffer, $xses[$i], $yses[$i], $xses[$i+1], $yses[$i+1], $hPenHist)
          Next
          _GDIPlus_GraphicsDrawImageRect($hBuffer, $hHistoryBitmap,0, 0, $wWidth, $wHeight)
          _GDIPlus_GraphicsDrawImageRect($hBuffer, $hLegBitmap,0, 0, $wWidth, $wHeight)
          _GDIPlus_GraphicsDrawImageRect($hGraphic, $hGraphicBitmap, 80, 0, $wWidth-160, $wHeight)
       EndIf
    EndFunc
    
    
    Func _IsChecked($idControlID)
        Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
    EndFunc   ;==>_IsChecked
    
    
    Func _Exit()
       For $i = 1 To $quantity
          _GDIPlus_PenDispose($hPen[$i])
       Next
       _GDIPlus_PenDispose($hPenHist)
       _GDIPlus_GraphicsDispose($hBuffer)
       _GDIPlus_GraphicsDispose($hHistoryBuffer)
       _GDIPlus_GraphicsDispose($hLegBuffer)
       _GDIPlus_BitmapDispose ($hGraphicBitmap)
       _GDIPlus_BitmapDispose ($hHistoryBitmap)
       _GDIPlus_BitmapDispose ($hLegBitmap)
       _GDIPlus_GraphicsDispose($hGraphic)
       _GDIPlus_Shutdown()
       Exit
    EndFunc
    #EndRegion
    
    
    #Region Event Functions
    Func SpecialEvents()
       Select
          Case @GUI_CtrlId = $GUI_EVENT_CLOSE
             GUIDelete()
             _Exit()
       EndSelect
    EndFunc
    
    
    Func StartPressed()
       $start *= -1
       If $start = -1 Then
          GUICtrlSetData($b_start, "START")
       Else
          GUICtrlSetData($b_start, "STOP")
       EndIf
    EndFunc
    
    
    Func ClearPressed($col)
       If Not $col Then
          $col = $colClear
       Else
          $col = $col
       EndIf
       _GDIPlus_GraphicsClear($hBuffer, $col)
       _GDIPlus_GraphicsClear($hHistoryBuffer, $col)
       _GDIPlus_GraphicsClear($hLegBuffer, $col)
       _GDIPlus_GraphicsDrawImageRect($hBuffer, $hHistoryBitmap,0, 0, $wWidth, $wHeight)
       _GDIPlus_GraphicsDrawImageRect($hBuffer, $hLegBitmap,0, 0, $wWidth, $wHeight)
       _GDIPlus_GraphicsDrawImageRect($hGraphic, $hGraphicBitmap, 80, 0, $wWidth-160, $wHeight)
    EndFunc
    
    
    Func RandPressed()
       _Initializer()
       For $i = 1 To $quantity
          $text = String($i) & ":" & @CRLF & _
                "l = " & @TAB & $length[$i] & @CRLF & _
                "step = " & @TAB & $step[$i] & @CRLF
          GUICtrlSetData($lengthlabel[$i], $text)
       Next
       $start = -1
       GUICtrlSetData($b_start, "START")
    EndFunc
    #EndRegion
    Alles anzeigen


    Vielen Dank im Voraus für Eure Hilfe.:)

  • GDI+ Mandala Creator

    • o2candoo
    • 9. März 2017 um 10:40

    Danke für den Input, werde ich gerne einfliessen lassen.

    Den Backbuffer hatte ich anfänglich verwendet, um etwas auszuprobieren. Nachträglich muss ich vergessen haben, ihn wieder rauszulöschen ^^

  • GDI+ Mandala Creator

    • o2candoo
    • 9. März 2017 um 10:16

    "Mandala Creator" mithilfe von einfacher Vektorgeometrie:

    Dieses Skript habe ich im Eildurchgang erstellt, um etwas auszuprobieren, da wir derzeit die Vektorgeometrie im Studium behandeln.
    Natürlich ist es noch ausbaubar und ich bin offen für Ideen und Vorschläge aus dem Plenum :)
    Erstellt habe ich dieses Skript bei einer Auflösung von 1920x1080, andere Auflösungen habe ich noch nicht getestet.

    Hinweis: Bei den Inputs jeweils eine Zahl zwischen (>0) und (<360) einfügen und auf "GENERATE" klicken und schauen, was passiert ;)

    Viel Spass :)

    Dateien

    draw.au3 5,24 kB – 593 Downloads

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™