This is part four of the Beginners Guide to Writing Fractal formulas. Please do one two and three before doing this tutorial. On a scale from 1 to 5 1 being easy and 5 being hard this is probably a 3.5. I am going to take a break from writing tutorials for a day or two for everyone to digest these 4 tutorials. And are we getting excited about the julia switch part or what? that will soon LOL. In preparation: Start UF Load FTtutorial3 Click the edit to open the ufm in the editor Copy and paste a new instance of FTtutorial3 Change the title of the new instance to FTtutorial4 This tutorial is actually two rolled into one. We are going to do a simple If elseif loop and enumerate our choices. What does that mean any ways? Enumeration is a way of introducing choices in our formula, and making them available to the enduser. The basic enumeration format is Param "name" Caption = "some descriptor" Enum = "choice1" "choice2" "choice3"b &.as many as you want Default = the number of any of your choices (the first choice on your list is numbered 0 zero) endparam so lets do one for our tests. We have two tests that we can use, the default test |Z| < 4 and the elliptical test X^2/M^2 + Y^2/N^2 <= 1 so lets create. Param FTTEST Caption = "Bailout Test" Enum = "Circle" "Ellipse" Default = 0 End param That was real easy I hope for everyone. Lets talk about IF loops. The basic format or an IF..Elseif..Endif loop is. IF condition Do this Elseif condition Do this Endif You can add as many elseifs and new if's as long as you keep track of your endifs. So lets apply it to our formula. At this point I want to introduce a variable called STOP. Its value is either a one or zero and we will make it our new conditional trap. We want this condition to let the formula keep on iterating as long as STOP is equal to zero and stop if its one. Lets comment out the other two balout condition and add this line to the bailout section: BAILOUT: ;|Z| < 4 ;X^2/M^2 + Y^2/N^2 <=1 stop != 0 Whats that != (surprised equals) doing there? UF has some logic operators that you need to learn. You know <= and >=. Let me introduce a couple more. == means is equal to != means not equal to && means and when you want to combine two conditions || means or when you want to use either condition ! means not and eliminates that condion as a possibility For now only the == and != matter to us. Back to our formula, we have introduced a new variable so lets initialize it in the INIT section by adding STOP = 0 What we're doing is telling the compiler to set Test=0 every time a new iteration starts. How are we going to switch the 0 to a 1? You must follow carefully now or you'll be lost in the nether world of logic traps. I will develop the logic slowly. Remember FTTEST we defined well were gonna use it now. If @FTTEST == 0 Use the circle trap Elseif @FTTEST == 1 Use the ellipse trap Endif Simple and greatly over complicated by programmers and coders. Let us figure out how to trip the STOP variable to a 1 for the circle trap only. If |Z| < 4 Stop=1 Else Stop=0 Endif Why did you use an else instead of an elseif? if i had some other condition that needed to be checked i'd of used an elseif but i only care about the oposite condition of my test condition. Hey I know what I'll do, I'll paste this into my if..endif for the test. Good thinking! If @FTTEST == 0 If |Z| < 4 Stop=1 Else Stop=0 End if Elseif @FTTEST == 1 Use the ellipse trap Endif Now I am going to do the same for the elliptical trap. If X^2/M^2 + Y^2/N^2 <=1 Stop=1 Else Stop=0 Endif Paste it into the if..endif for the test If @FTTEST == 0 If |Z| < 4 Stop=1 Else Stop=0 End if Elseif @FTTEST == 1 If X^2/M^2 + Y^2/N^2 <=1 Stop=1 Else Stop=0 Endif Endif OK but where does this go? I can only stick conditionals in the bailout section. This needs to go into the loop section because that is where Z,X,Y are being generated so lets put this into the loop section. So lets review: We figured out how to make an IF..Else(if)..Endif loop We created a parameter called FTTEST and enumerated the options We introduced a variable STOP for our new conditional for bailout We initialized STOP to zero And we added the complicated IF..Endif command into the the loop section. And now Your formula should look like this: FTtutorial4{ ; If this tutorial goes any slower I'll have to go to the dentist. ; All right I made the appointment for the dentist INIT: Z = #PIXEL A = @FTA B = @FTB C = #PIXEL STOP = 0 LOOP: Z = A * Z^3 + B * Z + C X = real(Z) Y = imag(Z) M = @FTM N = @FTN IF @FTTEST == 0 if |Z| < 4 STOP =1 else STOP =0 endif Elseif @FTTEST == 1 if X^2/M^2 + Y^2/N^2 <=1 STOP =1 else STOP =0 Endif Endif BAILOUT: STOP != 0 DEFAULT: ;It's a great habit to just comment PARAM FTA Default = (1.0,0.0) Caption ="Coeff A" Hint = "A in AZ^3+BZ+C" Endparam PARAM FTB Default = (1.0,0.0) Caption ="Coeff B" Hint = "B in AZ^3+BZ+C" Endparam Param FTM Default = 2.0 Caption = "Ellipse Xaxis Width" Hint = "the xaxis length for the elliptical trap" Endparam Param FTN Default = 1.0 Caption = "Ellipse Yaxis Width" Hint = "the yaxis length for the elliptical trap" Endparam Param FTTEST Caption = "Bailout Test" Enum = "Circle" "Ellipse" Default = 0 Endparam } this is pretty intense for a tutorial. Writing good formulas is like building a chiminey you just gotta make sure the bottom bricks are solid.