lokster Posted June 21, 2007 Share Posted June 21, 2007 (edited) This script draws fractals based on l-systems. For more info on l-systems read this.The core is written in FreeBasic - the part wihich calculates the l-system. It can be done in autoit too, but it's very slow, so I made it with FB.It's a command line application, which can be used separately from the autoit script which draws the gererated system.The frontend (the GUI) is written in autoit.The complete fractal generator is here: l_systems.zip - extract it somewhere and run lsystem-fe.au3.Here are some screenshots: Here is the autoit script:and here is the FreeBasic source(this is just for informative purpose, if someone thinks that lsystem.exe is something that will harm his sistem... ):lsystem.basexpandcollapse popupFunction Split(inpstr As String, separator As String, xRes() As String) Dim i,n Dim a(Len(inpstr)) i=0 a(i)=1 Do i+=1 a(i)=Instr(a(i-1),inpstr,separator)+1 Loop Until a(i)=1 a(i)=Len(inpstr)+2 Redim xres(i+1) For n=0 To i-1 xres(n+1)=Mid$(inpstr,a(n),a(n+1)-a(n)-1) Next Return i End Function Function lsystem ( s() As String, _ r() As String, _ Byval axiom As String, _ Byval level As Integer _ ) As String Dim axiom_ As String Dim axiom__ As String Dim iter As Integer Dim i As Integer Dim c As String Dim i1 As Integer axiom_ = axiom For iter = 0 To level-1 axiom__ = "" For i = 1 To Len(axiom_) c = Mid(axiom_,i,1) For i1 = 0 To Ubound(s)-2 If (c=s(i1)) Then c=r(i1) End If Next axiom__ += c Next axiom_ = axiom__ Next Return axiom_ End Function If Command$(3)="" Then Print "L-System calculator by lokster (c)2007" Print "" Print "Usage: lsystem.exe <axiom> <rules> <level>" Print "" Print "Example (gererate the ""Dragon"" fractal at level 10):" Print "" Print " lsystem.exe FX ""F%F&X%X+YF+&Y%-FX-Y"" 10" Print "" Print "Please note, that the second parameter MUST be surrounded by double-quotes!" Else Dim a As String Dim res() As String a = Ucase( Command$(2)) Split(a,"&",res()) Dim s(Ubound(res)) As String Dim r(Ubound(res)) As String For rep = 1 To Ubound(res)-1 Dim par() As String Split(res(rep),"%",par()) s(rep-1) = par(1) r(rep-1) = par(2) Next Print lsystem(s(),r(),Ucase(Command$(1)),Valint(Command$(3))) End IfEnjoy! Edited June 21, 2007 by lokster Link to comment Share on other sites More sharing options...
jvanegmond Posted June 21, 2007 Share Posted June 21, 2007 (edited) Awesome. Edit: Don't try 25 iterations.. Edited June 21, 2007 by Manadar github.com/jvanegmond Link to comment Share on other sites More sharing options...
lordofthestrings Posted June 21, 2007 Share Posted June 21, 2007 I get an error.. would have loved to see this work.. I checked to solve it myself, but I didn't see the mistake immediately) probably the space in teh path to lsystems.exe. too busy at work to put too much effort in it at the moment (and I'm sure you'll know what this error is about) :-) >Running:(3.2.4.9):C:\Program Files\AutoIt3\autoit3.exe "C:\Documents and Settings\gii761\Desktop\Scripting\fractals based on L-system\lsystem-fe.au3" C:\Documents and Settings\gii761\Desktop\Scripting\fractals based on L-system\lsystem-fe.au3 (119) : ==> Unable to execute the external program.: $pid = Run(@ScriptDir & "\lsystem.exe " & $axiom & " """ & $rules & """ " & $level, @ScriptDir, @SW_HIDE, $STDOUT_CHILD) Link to comment Share on other sites More sharing options...
lokster Posted June 21, 2007 Author Share Posted June 21, 2007 Corrected. The problem was that the path contained spaces, and I forgot to surround it with quotes. Link to comment Share on other sites More sharing options...
lordofthestrings Posted June 21, 2007 Share Posted June 21, 2007 may I also suggest following easy rule for string concatenation: (small tip) follow kix methodology.. meaning start a string with a single quote. then if you need to place a double quote simply place one double quote. in vbscript you can build strings with series of 4 double quotes in a row.. not clean code, you're asking for errors here hope you get it to work man! have a nice day! Link to comment Share on other sites More sharing options...
RazerM Posted June 21, 2007 Share Posted June 21, 2007 This is really nice! Good work. My Programs:AInstall - Create a standalone installer for your programUnit Converter - Converts Length, Area, Volume, Weight, Temperature and Pressure to different unitsBinary Clock - Hours, minutes and seconds have 10 columns each to display timeAutoIt Editor - Code Editor with Syntax Highlighting.Laserix Editor & Player - Create, Edit and Play Laserix LevelsLyric Syncer - Create and use Synchronised Lyrics.Connect 4 - 2 Player Connect 4 Game (Local or Online!, Formatted Chat!!)MD5, SHA-1, SHA-256, Tiger and Whirlpool Hash Finder - Dictionary and Brute Force FindCool Text Client - Create Rendered ImageMy UDF's:GUI Enhance - Enhance your GUIs visually.IDEA File Encryption - Encrypt and decrypt files easily! File Rename - Rename files easilyRC4 Text Encryption - Encrypt text using the RC4 AlgorithmPrime Number - Check if a number is primeString Remove - remove lots of strings at onceProgress Bar - made easySound UDF - Play, Pause, Resume, Seek and Stop. Link to comment Share on other sites More sharing options...
gseller Posted June 21, 2007 Share Posted June 21, 2007 Very Nice! Thanx... Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now