Writing Scripts Part
#1
Load the script editor and press the New
button at the top of the toolbar. Running a blank script
will force the main flame to recalculate, but nothing will change. Before you go any
further load
the transform editor and position it so that you can watch it as you run scripts.
Type "Rotate(45);"
(without the quotes, but take note of the semi-colon at the end) into the script
editor and press
the Run button. You'll see the triangle that's selected in the transform editor
rotate by 45 degrees.
If you keep hitting the Run button the triangle will continue to rotate until it gets
back its starting
point.
By default scripts are set up to operate on
the selected transform, and there are a number of
functions that you can use to change it.
- Rotate(n) rotates the transform by n degrees.
Any value for n is acceptable. Positive values
rotate the transform clockwise and negative values rotate it
counter-clockwise.
- Scale(n) scales the transform by n. A value of
0.5, for instance, would create a triangle half
the size of the original. Keep the value of n within reasonable bounds. If the
triangle of the
selected transform is already close to the size of the reference triangle then you
wouldn't it to
get much bigger, and really small transforms don't usually improve the look of a
flame.
- Translate(x, y) moves the transform...but not
necessarily by x and y.
Here the documentation is going to get fuzzy
because the functions mentioned so far use matrix
multiplication, and I'm not up to explaining that at the moment (if I ever will be!).
One thing that
it means is that the order of operations is important. Translate(1, 1) will move a
triangle of the
same size and position as the reference triangle one unit to the right and one unit
upward, but if
you've already scaled the transform by 0.5 then it would only move the transform half
a unit to the
right, and half a unit upward. Transforms with triangles that are off to the side,
rotated and scaled
arbitrarily, will move in an unpredictable manner. There is a way to move transforms
predictably,
but I'll get to that later.
These functions can operate on any transform
in the flame, not just the one selected in transform
editor, but you have to tell the script which one you want to be the "active
transform". You do this
with the SetActiveTransform method. The format is...
SetActiveTransform(i);
...where i is the index of the transform that
you intend to alter. Indexing starts from zero, so to
work on the transform that is labeled 1 in the transform editor you would type
"SetActiveTransform(0);". Once you've done that all further operations will
affect only that
transform, until you call SetActiveTransform again with a different index.
Usually you wouldn't use SetActiveTransform
with a fixed number (a "constant"), but with a
variable that changes as the script progresses. You see this in most of the example
scripts I
supplied. Here's how you would perform the same operation on all of the transforms in
a flame
(in this case scaling):
for i := 0 to Transforms - 1 do
begin
SetActiveTransform(i);
Scale(1.1);
end;
You can copy that and paste it into the script
editor to see what is does, if you like (there's a
pop-up menu in the script editor with a paste function--Ctrl+V won't work, but
Shift+Insert
will). You could also try changing Scale to one of the other functions I've
mentioned, or put a
few of them in there (make sure they come after the SetActiveTransform statement, and
before the
"end", and don't forget to put the semi-colon at the end of the line).
Index |