Total found: 238
Dragging a sequence to start from another position is sometimes necessary just to start a sequence in the right place around a stadium. The user interface can also be used to generate interesting choreography by repeating a sequence multiple times starting at different positions progressing along a line or around a circle of positions. All of the use cases require that the sequence wraps around the line or circle of positions. The sequence in Figure 1 goes around all the positions in the circle, beginning at Pos-01 at the front. This sequence is easy to construct using the “clockwise” or “position names” options of the “Make into sequence…” dialog. You can easily imagine a sequence like this going around a sports stadium, starting in the end zone of home team. But what if you wanted the sequence to begin in the end zone of the visiting team? Referring back to the position names of Figure 1, you might want the sequence to begin at Pos-25 and wrap around from Pos-50 to Pos-01 and back to Pos-24. To create the sequence in this phase requires two steps. First, create the sequence normally. Second, with all the items in the sequence selected, drag the effect at Pos-01 to Pos-25 in the 3D view. Doing so shifts the entire sequence to start at Pos-25 and wrap around. The wrap around from Pos-50 to Pos-01 is based on their names. Wrapping relies on the premise that the relevant positions are sorted by their names and that the names have a common stem (“Pos-” in this example) followed by a number. Dragging the sequence from position N to position N + M moves all the effects + M in the sequence. If any of those positions don’t exist, the effects wrap around through the lowest numbered position with the same stem. Figure 1 – If you want the sequence to start at the other side of the circle, it would need to start at Pos-25. If the show contained a Pos-51 somewhere outside the circle and unrelated to the sequence, it would be important that dragging the sequence didn’t drag it through Pos-51. To avoid Pos-51, you would need to rename it with a different stem from the positions involved in the sequence. A position named Front-51, for example, wouldn’t interfere with the sequence on Pos-01 through Pos-50 as it is dragged around the circle.
The “Make into sequence…” function in Finale 3D arranges the selected effects in a sequence, as shown in Figure 1. The function can arrange the effects in a variety of patterns like center-to-outside or in-pairs. The function can sort the effects according to their position coordinates left-to-right on the screen or around a circle, or according to their angles. The function can create multiple cycles of the sequence. It can “bounce” the cycles back and forth, and optionally remove the doubled up turnarounds on the ends. The function can handle chains and G-key groups to make sequences of subsequences. The function can keep pairs together. In combination with some drag-and-drop user interface, the function can create sequences at different phases. In short, while the “Make into sequence…” function is a simple concept, you can use it in a variety of ways in your choreography. Figure 1 – Select the effects and do “Make into sequence…” to spread them out evenly in time. Aside from the duration and interval, which have obvious meaning, the “Make into sequence…” dialog offers selectors for sorting the effects and for handling groups of effects. With the default choices of Figure 2, the sequence will sort the effects by position first, breaking ties by time. It will treat each effect as a separate time point, with the one exception of chains which it treats atomically as single time points without affecting the internal timing of their shells. The default settings from Figure 2 make sense if the sequence runs across a line of positions, but if the sequence is applied to a fan of effects at a single position, then sorting effects by position name doesn’t have any effect. If you are putting a fan into a sequence, you should sort effects by angle, choosing any of the bottom four options in Figure 3. Figure 2 – The “Sort effects by” selector has patterns options. The angle options at the bottom of Figure 3 offer four patterns for the sequence. The position options also include the same four patterns, for three different manners of sorting the positions — by their name, by their coordinates left-to-right on the screen, and clockwise around a circle. Figure 3 – Four different patterns are possible for angles or positions (and three sorting options for the positions). The default setting for the “Groups of effects” selector — “Spread out in the sequence normally” — treats every effect as a separate time point (with the exception of chains). If you change the selector to “Stick together as subsequences” then groups of effects at the same position, angle, time, or G-key group will be treated atomically as subsequences. This option enables you to put subsequences into sequences without interfering with the internal timing of the subsequences. If the “Sort effects by” selector is any of the position based sorts, then the “Stick together as subsequences” option will recognize all the effects at each position as a subsequence, and will keep them together; if all the effects are at the same position, then the option will recognize effects at the same effect time as subsequences, like pairs or flights on the timeline which are a kind of subsequence. If the “Sort effects by” selector is any of the angle based sorts, then the “Stick together as subsequences” option will recognize effects at the same angle as a subsequence; if all the effects are at the same angle, then the option will recognize effects at the same effect time as subsequences. If any of the selected items are in G-key groups (from the “Script > Groups > Combine as group” menu item), then the groups are treated atomically if the “Stick together as subsequences” option is chosen, and all effects not in the groups will be treated as independent time points in the sequence. Figure 4 – The “Groups of effects” selector enables sequencing subsequences or making multiple sequences. The final two options in the “Groups of effects” selector produce multiple cycles of the sequence. These options use only the existing selected effects for the cycles; they do not clone or add effects. Thus if you want N cycles of a sequence, you need to begin with N copies every effect in the sequence. Consider the sequence of Figure 1, which has just nine effects, one at each position. If you selected those nine effects and duplicated them (Control-D) a couple times into four times as many effects in total, then you’d have the right number of effects to make four cycles of the sequence. This simple example is a fine way of producing multiple cycles of a sequence: Select all nine positions. Click one of the effects in the effects window to add one effect to all nine positions. Click again, N times in total if you want N cycles of the sequence. Select all 9 * N effects, and do “Make into sequence…” Choose either of the multiple cycles options in the “Groups of effects” selector. That’s it! Figure 5 – Bouncing sequences across positions usually look better if the turnarounds are not doubled up. The term “bouncing” means a sequence whose cycles go back and forth, like the zig-zagging shown in Figure 6. Bouncing sequences across positions generally look better if the turnarounds are not doubled up, but that means fewer effects are needed at the end points. When you select the bouncing option, Finale 3D recognizes if the end points would be doubled up and offers to remove the duplicates, as shown in Figure 5. If the selected effects already have the proper number of effects at the turnarounds then you won’t get the dialog. The dialog just makes it easier to create bouncing sequences, since it is easy to add the same number of effects to every position. Figure 6 shows a bouncing sequence across a line of positions. Bouncing also applies to fan sequences. Unlike sequences across positions, bouncing sequences in cakes such as X-shape or Z-shape cakes usually do have doubled up effects on the turnarounds due to the way they are constructed in slices. So if you are using the “Make into sequence…” function to create a cake simulation you will probably select “No” to the dialog of Figure 5. Figure 6 – Zig-zags are just one of the bouncing patterns that are fun to watch. Referring back to the beginning of this article, the first paragraph mentions a drag-and-drop user interface for creating sequences at different phases. The word phase just means starting the sequence from a different position. If you want to start a sequence going around a stadium at a particular spot, you’ll need to drag-and-drop the sequence to start at a different position after creating it. The technique is described in Dragging a sequence to start from another position.
The online Finale 3D community features a forum, private messaging, your own personal homepage, a global user map, a monthly photo contest, and more. As you explore community areas, you will likely encounter references to “Pyro Points”. This article is all about pyro points – what they are, how you get them, why you want them, and how you can use them. What are pyro points? Pyro points are the virtual currency of the Finale 3D community. As a Finale 3D user and member of the online community, you can earn pyro points, spend points points, and even tip pyro points to other users. Pyro points exist only within the Finale 3D community, they can’t be acquired or spent anywhere else. Why do I want pyro points? There are multiple reasons you want pyro points. For starters, because the amount of pyro points your earn directly corresponds to your pyro status. Your pyro status conveys your level of engagement and standing in the community. Your status can be viewed by others on your public homepage and along side each of your forum posts. Figure 1 – Pyro status as it appears on your personal homepage and along side a forum post. How can I earn pyro points? If you’re just starting out, the quickest way to earn pyro points is by completing the pyro points rewards activities on your My Profile page. By completing the pyro points rewards activities, you can earn up to 100 pyro points. The rewards activities are also a great introduction to the community and the Finale 3D software. In addition to rewards, you will also earn 1 pyro point each time another user likes one of your forum posts or directly gives you a pyro point. Last but not least, you can win pyro points by entering the monthly photo contest and other Finale 3D design competitions. Figure 2 – Pyro points rewards on My Profile page. Where can I see how many pyro points I have? You can check your pyro points balance any time by visiting your My Profile page. To view a complete list of all your pyro points transactions, use the View History link displayed under your pyro points balance. Figure 3 – Pyro points balance and link to view points transaction history on My Profile page. How does the number of pyro points I have correspond to my pyro status? Your pyro status is derived from the maximum number of pyro points you have earned in any calendar year. The more points you earn, the higher your status. Once you achieve a specific status level, you will never lose it. This means you will keep your current status until you earn a higher status; using your pyro points or entering a new calendar year will not affect your status. Figure 4 – Pyro statuses and the amount of pyro points you need to earn within a calendar year to achieve each status. Can others see my pyro points? Your pyro points balance, the number of points you have earned in the current calendar year, and your pyro points transaction history are private and visible only to you. Your pyro status, which is based on the highest number of pyro points you have earned in a any calendar year, is visible to all users. What can I do with my pyro points? When you like a forum post, you give the author of the post a pyro point. You can also give any user a pyro point for any reason directly from your My Profile page. When you give a pyro point, you can enter a description which will appear in the user’s pyro points transaction history. Figure 5 – Liking a forum post and giving another user a pyro point from within My Profile.
Reports sometimes need to represent multiple position names in a single row, but only one position column is possible. Getting multiple position names into a single row is a conundrum. The solution is to use position groups to create nicknames for the groups of positions that appear in a single row. The circled cell in Figure 1 shows a row representing multiple positions in the Pinboard Cue Sheet report. Cue 05/A fires shots on Pos-01 and Pos-02. Rather than displaying the position names in a list (which is not an option), the report tests if the set of positions to be displayed matches a position group. If so, the report shows the group name. You can make position group names that are recognizable, like “Front” or “Shell Positions” or “Rooftop-A”, etc. It is easy to tell position group names apart from position names themselves — position group names always begin with the at-sign. Figure 1 – The Pinboard Cue Sheet shows position group names in Position column for rows that represent multiple positions. You can make position group names by selecting a set of positions and doing the menu item, “Positions > Position groups > Create position group…” Finale 3D automatically creates position groups when you insert effects into multiple positions at once. The position groups are displayed as orange flowers on the left side of the screen, as shown in Figure 2. You can click on the name of the position group underneath the flower to rename or delete it. Figure 2 – The orange flower position group names are displayed in rows that represent multiple positions. Sometimes the automatic creation of position groups is overwhelming, so it is worth mentioning that you can turn off the automatic creation of position groups with a setting in the “Show > Show settings” submenu. If you print a report and notice that one of the cells in the position column is blank, it is more than likely that the row represents multiple positions and that you don’t have a position group created that is an exact match. The position cell will be blank in that circumstance.
Reports like the Wiring Script report shown in Figure 1 use conditional formatting to highlight columns or rows, change colors, and add borders based on the information in the cells. Figure 1 – The Wiring Script report uses a variety of conditional formatting options for highlighting and borders. In the example of Figure 1, the horizontal lines group the rows by rail and pin. If multiple shells of different effect types are fired together from the same rail and pin then they will be split out across multiple rows, but the horizontal lines give an indication that the rows go together with the same pin. Alternatively, you can turn on the light gray zebra striping and use conditional formatting to group rows with the same rail and pin in the same light gray highlighting, as shown in Figure 2. Figure 2 – Alternative formatting options employ light gray zebra-striping to group rows together instead of borders between rows. From the Script window’s blue gear menu, do “Edit report template…” and choose “basic_wiring_script_portrait” to see the original Wiring Script report’s configuration dialog. Paragraph 6 of the dialog controls the conditional formatting, as in Figure 3. Figure 3 – The conditional formatting options employed by the original Wiring Script report. A summary of the conditional formatting choices for original Wiring Script report is, Option A and G invert the colors of the Rail and Pin columns. Option C groups the rows with the same rail and pin, putting lines between the groups. Option D and E add the colors for angled effects. Option F highlights in yellow the rows whose pins have multiple e-matches. The full expression in the box is, “[or [= fullAddress prev.fullAddress] [= fullAddress next.fullAddress] [and [not chainRef] [> numDevices 1]]]”. Options D-H are programming language expressions. If you are not a programmer, you can copy/paste examples from existing report templates. Option H highlights the notes in red if they are not blank. Figure 4 shows the conditional formatting choices for the modified Wiring Script of Figure 2. Figure 4 – The modification highlights every-other-row, except it keeps rows that have the same address highlighted together. The differences in Option C are a good jump off point for describing the how the conditional formatting options work. Conditional formatting options The conditional formatting Option C provides two selectors for terms, and a selector to choose how to compare them. If the comparison is true, then the choice in the formatting selector applies to the choice in the “applies to” selector. The terms are all the fields of the report rows. For each field you actually have an option of “this row” or “previous row” or “next row”, which enables you to compare a cell value in a row to a cell value in the row above it or below it in the report. For some uses, comparing to the previous or next row is what you need to do. For other uses, you may compare two different fields of the same row. The examples of Figure 3 and Figure 4 compare the same field of a row to the previous row. The expression in Figure 3 is true if the fields are the same; the expression in Figure 4 is true if the fields are different. Looking back at Figure 1 and 2, the table of Figure 1 adds border above every row that has a different address from the row above it. This logical expression matches the selectors in Figure 3. The table of Figure 2 extends the light gray zebra striping to additional rows if they have the same address as the light gray shaded or white row above it. This logical expression matches the selectors in Figure 4. Option A and Option B are simpler types of expressions. Option A is the simplest of all. It doesn’t even have any terms. The expression is true if you check the checkbox, and it will apply to every row in the report. This option offers an easy way to change the formatting for an entire column without any special conditions. Option B has a single term, which is a field of your choice. As the wording around option B explains, the expression is true whenever the field value is not blank or zero. Options D-H are programming language expressions. If you are not a programmer, you can copy/paste examples from existing report templates. If you are a programmer, the terms and function names are explained below. All options A-H are expressions. Option A is trivially true whenever you check the box. Option B is true based on the value of a single field. Option C compares two fields. Options D-H are free form expressions that can compare multiple fields. Options D-H can also be just simple expressions if you know what to type. For example, Option G in Figure 3 and 4 is the expression “true” which is not surprisingly true all the time. So Option G in this example is just like the checkbox Option A. Similarly, any expression that can be represented in Option B and C can also be represented in Options D-H. Options A, B, and C are just an easier user interface. Precedence for Options A-H When Options A-H apply formatting to the row or to cells in the row, their formatting styles are combined. If the styles apply to different properties, such as the boldness of the text versus the background color of the cell, then the styles do not interact. If the styles apply to different cells, they obviously do not interact. If one style affects the entire row and another style affects a cell within the row, the style affecting a cell within the row overrides the style of that cell, leaving the rest of the row’s styles unaffected. However, if two styles affect the same property of the same row or cell then the result is undefined. It is not the case that Options A-H have a precedence in their application. Thus, if two options affect the same property of the same row or cell, please ensure that the conditions of those options ensure that only one of them applies at a time. Free-form expressions (Options D-H) Free form expressions are written in a simple programming language that has access to the field values of the current, previous, and next row. An expression in the programming language is either a term, or a function with terms as parameters. The terms themselves are field values of the rows, or literals like numbers or strings, or the result of functions operating on terms. Functions are written as square brackets containing the function name followed by the terms that the function operates on, separated by spaces. For example, the expression in Option F of Figure 3 and 4 that highlights the Devices in yellow if multiple e-matches connect to the pin is: [or [= fullAddress prev.fullAddress] [= fullAddress next.fullAddress] [and [not chainRef] [> numDevices 1]]] The interpretation of this expression in English phrasing is, ( fullAddress = prev.fullAddress ) OR ( fullAddress = next.fullAddress ) OR ( ( NOT chainRef ) AND ( numDevices > 1 ) ) This is a complicated expression, explained in Wiring Script report. In addition to counting the devices associated with the pin, it has to take into consideration that chains represent multiple devices but require only a single e-match (yet multiple chains can be e-matched to the same pin together). The conditional formatting is applied if the expression value converted to a boolean value is true. Most comparison functions return a boolean result, true or false. Other functions like abs (absolute value) return numbers. Term values are various types including numbers, strings, booleans, and a few other types. If the expression value is not boolean, it is converted to a boolean value following these rules: 1) undefined is false; 2) the number zero is false; 3) empty string is false; 4) everything else is true. Table 1 – Functions in conditional expressions Function Arguments Description and One or more terms Logical conjunction of terms. or One or more terms Logical disjunction of terms. = Two terms Compares if two terms are equal according to the following rules: 1) numbers compare to each other naturally; 2) symbols compare to each other naturally; 3) boolean values compare to each other naturally; 4) strings compare to each other naturally (case sensitive comparisons of characters in the strings); 4) undefined is equal to undefined; 5) all other comparisons between terms of different types are false. < Two terms Compares if two terms for the “less than” relationship according to the following rules: 1) numbers compare to each other naturally; 2) symbols compare to each other lexicographically (case sensitive comparisons of characters in the symbols); 3) boolean values compare to each other naturally, false being less than true; 4) strings compare to each other lexicographically (case sensitive comparisons of characters in the strings); 4) undefined is not less than undefined; 5) all other comparisons between terms of different types are the result of comparing the types themselves in an enumerated order, not comparing the values. > Two terms Similar to less than comparison. <= Two terms Similar to less than comparison. >= Two terms Similar to less than comparison. != Two terms Similar to equal comparison (but the opposite). not One term True if and only if the term’s value is false or undefined. If the term is zero or empty string, the result of not is false (in some programming languages this is not the case). abs One term Absolute value function. containsSubstring Two terms and then optionally the symbol :caseSensitive True if the first term contains the second term as a substring, after converting terms to strings if they are symbols or string-type arrays. The search function is not case sensitive unless you add the :caseSensitive parameter. + One or more terms Adds the terms and returns the result. – One or more terms Subtracts the terms after the first term from the first term and returns the result. * One or more terms Multiplies the terms and returns the result. / One or more terms Divides the first term by the remaining terms and returns the result. round One term Rounds the number to the nearest integer. if Three terms If the first term converted to a boolean value is true, then return the second term; else return the third term. stringsEqual Two terms and then optionally the symbol :caseSensitive Compare two terms, after converting them to strings if they are symbols or string-type arrays. Returns true if they are the same. The function is not case sensitive unless you add the :caseSensitive parameter. string One term Convert the term to a string if it is a number or symbol or string-type array or already a string. symbol One term Convert the term to a symbol if it is a number or string or string-type array or already a symbol. int One term Convert the term to an integer if it is a double or already an integer (rounding down). double One term Convert the term to a floating point number if it is an integer or already a floating point number. type One term Return the type of the term, :bool, :string, :symbol, :int, :double, or :array. numberFromString One term Convert the term from a string to a number, after converting the term to a string if it is a symbol or string-type array. The conversion to a number permits both a dot or comma character as the decimal radix and allows characters after the number that are part of the number in the string, and allows leading whitespace. For example, " 1,23abc" converts to the number 1.23. The type of the returned number is integer if has no fraction; otherwise it is a floating point number. stringLength One term and then optionally the symbol :utfi Returns the length of the string, after converting the term to a string if it is a symbol or string-type array. The length is in Unicode characters (code points), unless the optional symbol :utfi is present, in which case the length is in UTF-8 or UTF-16 or UTF-32 code units, which is platform dependent. On Windows, :utfi means UTF-16 code units, and the length of the string is equivalent to the C++ function wcslen(). Table 2 – Terms in conditional expressions Term Example Description All row fields fullAddress The internal name (not the English name and not the localized name) of any script column, as defined in Script table columns. Terms are case sensitive, so exact capitalization is required. The value of the term is based on the internal representation of the field value, not the formatted representation. The value is the internal representation itself unless: 1) if the field is a numeric field and its value is undefined (blank), then the value of the term is zero; 2) if the field’s internal representation is a symbol, then the value of the term is the symbol converted to a string. Literals “red”, 0.0762, or ‘pos1 Strings, numbers, and quoted symbols. Strings and symbols can contain backslash and double quotes internally if preceded by backslash. For example, “2.5\”” is the string that prints out as: 2.5″. A quoted symbol is a symbol preceded by single quote. If a symbol contains spaces or certain punctuation characters, it should be written as: #<“MYSYMBOL”> to avoid breaking apart. Since row fields are converted from symbols to strings automatically the need for quoted symbol literals is uncommon. prev prev.fullAddress A representation of the previous row in which the fields of the row can be accessed with the dot character. next next.fullAddress A representation of the next row in which the fields of the row can be accessed with the dot character. The script table has a field named “next” which conflicts with the term “next” that means the next row. To access the value of the field name, write: “this.next” instead of just “next”. this this.fullAddress A representation of the current row in which the fields of the row can be accessed with the dot character. Since fields themselves are also defined terms, this “this” term merely provides an alternative representation for the fields themselves. Typing “this.fullAddress” is the same as typing “fullAddress” (both expressions without quotations). true true A boolean term whose value is true. false false A boolean term whose value is false. undefined undefined A term whose value is the undefined value. Numerical comparisons All functions including numerical comparisons operate on the internal representation of the field values, which are defined in Script table columns. Non-integer numerical comparisons require care because you need to know what the internal representation is, and you may need to take into account possible precision error such as with the conversions between inches and millimeters. In Finale 3D, distances and lengths are always represented internally in meters, with the exception of effect size which internally is a floating point number representing typed microns (1/1000th of a millimeter), for which the integer part of the number is the actual size and the fraction part of the number is type information indicating whether the size is to be displayed as inches or millimeters. Since a fraction of a micron is insignificant in pyro it doesn’t affect the size in a meaningful amount, but it can affect comparisons for equality with literals. For example, you should not directly compare a size to 75mm using the expression [= size 75000] because even if the size is 75mm the type information in the fraction will make the comparison false. If you want to compare to 75mm explicitly you could use the expression, [= [round [/ size 1000]] 75]. For pyro it is usually not a great idea to compare effect sizes for equality because the conversion between inches and millimeters in pyro is extremely loosey goosey (is a 3″ shell 75mm or 76.2?). If you need to compare sizes, compare in ranges. Instead of [= size 75000] please write something like [< [abs [- size 75000]] 2000] for whatever error tolerance you want. Types of numbers Numbers are either integers or floating point numbers. For comparisons, the type of a number doesn’t matter because comparison functions will convert integers to floating point numbers when necessary. However math expressions involving only integers use “integer math” in which all intermediate and final values are themselves integers, incapable of representing fractional values. For example, [/ 3 2] is 1, whereas [/ 3.0 2] is 1.5 because the terms of the first expression are all integers and the terms of the second expression are not all integers. Expressions involving integers and floating point numbers will automatically convert the integers to floating point so the calculation can be completed entirely in floating point math. Comparing to the previous example, [/ [+ 3 0.0] 2] is 1.5, because [+ 3 0.0] converts the type of the number 3 from integer to floating point so it can be added to a floating point number. From that point, the final result of the expression is the same as [/ 3.0 2], which is 1.5. An equivalent expression to [/ [+ 3 0.0] 2] is [/ [double 3] 2]. Using integer math and the available functions in Table 1, you can test if a number is even or odd using an expression like [= [/ chainRef 2] [/ chainRef 2.0]], which has the value true if the variable chainRef (which holds an integer value) is even.
The Pinboard Cue Sheet report presents the list of cues for an operator to take some action in a manually fired show: to press a button on a firing system controller or to electrify a pin on a manual firing pinboard. Each cue is a pin number or a pin/bank number if the controller has multiple banks of pins. Since the cues are sequential for the benefit of the operator, the distinguishing characteristic of manually fired show scripts is that the pin or pin/bank numbers of the show are always in chronological order. In Finale 3D, the banks of pins are represented by the “Rail” addresses, which are often letters. Thus, analogous to how the the rail/pin address represents a module/pin or module/slat/pin for a computer fired show, the rail/pin address represents the bank/pin for a manually fired show, the only difference being that the rail/pin addresses in the manually fired shows are in chronological order. The Pinboard Cue Sheet report lists the pin number first and highlights it for the operator since the pin number is the button the operator needs to press for every action. The operator doesn’t need to concern himself with the rail address for every single cue, only when the bank changes. Since banks of pins may have 25 or 50 or even 300 pins, the bank switching actions are relatively rare. Whenever a bank switch is required, Pinboard Cue Sheet reports calls attention to the fact with a black outline around the bank number. You can see in Figure 1 that bank “A” is outlined on the first row; and that the next outlined bank is “B”, twenty-five rows later! Figure 1 – The Pinboard Cue Sheet shows position group names in Position column for rows that represent multiple positions. Every line in the Pinboard Cue Sheet report is a separate action. If an action fires effects from multiple positions in parallel, the names of all the positions involved would need to be combined somehow into the Position column in the report, but there would rarely be enough room to list them all on the page. The circled cell in Figure 1 shows the solution to this formatting conundrum. Cue 05/A fires shots on Pos-01 and Pos-02. Rather than displaying the position names in a list, the report shows a position group name chosen by the user for the group of positions. In this case “Pos-01/02” is shorter than “Pos-01, Pos-02” but it could be even better. The user can make position group names that are recognizable, like “Front” or “Shell Positions” or “Rooftop-A”, etc. You can make position group names by selecting a set of positions and doing the menu item, “Positions > Position groups > Create position group…” Finale 3D automatically creates position groups when you insert effects into multiple positions at once. The position groups are displayed as orange flowers on the left side of the screen, as shown in Figure 2. You can click on the name of the position group underneath the flower to rename or delete it. Figure 2 – The orange flower position group names are displayed in rows that represent multiple positions. Combining all events with the same rail/pin onto the same row is a little different from the combining that the Wiring Script report does. Notably, the Wiring Script requires that combined rows have the same Position, but the Pinboard Cue Sheet report does not. You can see the Pinboard Cue Sheet report’s combination criteria in paragraph 2 of its report configuration dialog, which you can get from the Script window’s blue gear menu by doing “Edit report template…” and choosing “basic_cue_sheet_portrait”. The word “Position” is not in any of the selectors of Figure 3. Figure 3 – Script rows are combined only if they have the same Rail, Pin, and Effect Time; but having the same Position is not required. The Pinboard Cue Sheet report also highlights non-empty notes fields in red, to call your attention to the notes. The highlighting and the outlining of the rail addresses are accomplished with the conditional formatting options in paragraph 6 of the report configuration dialog shown in Figure 4. Figure 4 – The conditional formatting parameters highlight fields based on logical expressions. Conditional formatting From the Script window’s blue gear menu, do “Edit report template…” and choose “basic_cue_sheet_portrait” to see the configuration dialog with the paragraph 6 shown in Figure 4. For this report, Option A inverts the colors of the Pin column. Option B highlights the notes in red if they are not blank. Option C outlines the Rail cell whenever it changes from the row before. Option D and E add the colors for angled effects. The checkbox at the bottom turns on the zebra striping of every other row in light gray.
The Safety Distance report lists the positions and the relevant safety distance information. The “Position Safety Distance” is a property of the positions themselves, editable in the Positions window or in the Position Properties dialog. For each position, the report compares the Position Safety Distance with the maximum “Safety Distance” field of the effects launched at the position. Rows with inadequate Position Safety Distance values are highlighted in red. Figure 1 – The Safety Distance report highlights rows for positions with inadequate safety distances. The Safety Distance report is generated from the script rows by sorting the rows by position and combining together all the rows for each position. The combining operation for the effects’ Safety Distance field takes the maximum value of the combined rows. Figure 2 shows the combining operation in the report configuration dialog, which you can edit from the Script window’s blue gear menu, “Edit report template…” Figure 2 – Script rows at the same position are combined, resulting in one row per position. The highlighted rows of Figure 1 result from conditional formatting settings in the report configuration dialog. Option C of paragraph 6 in the dialog compares the “Effect Safety Distance” of each row to the Position Safety Distance, as shown in Figure 3. The Effect Safety Distance in script rows is simply a reference to the Safety Distance field of the effect definitions in the Effects window. Figure 3 – The conditional formatting parameters highlight fields based on logical expressions.
The Wiring Script report contains the information to wire up the effects in the show. Sorted by rail and pin, the rows in the script provide the position, effect part number and name, size, number of devices, angle, and notes. Notably, the report also has conditional formatting to group together rows that are on the same firing pin, and to highlight pins with multiple e-matches, angled effects, or notes. Report customization (Required Finale 3D Pro) Since every pyro display company has its own style, you may want to customize this report to add or remove fields or to change the formatting. The default report works for most purposes, and is also a good basis to work from if you make your own report. Figure 1 – The Wiring Script report contains the information to wire up the effects — and some fancy formatting. The first two columns are inverted colors just to emphasize them and to make this report recognizable. The horizontal lines group the rows by rail and pin. If multiple shells of the same effect type are fired together from the same rail and pin, then they will appear as a single row in the script with the Devices column counting the number of shells; but if the shells are of different effect types, then they are split out across multiple rows, one for each type of effect. From the Script window’s blue gear menu, do “Edit report template…” and choose “basic_wiring_script_portrait” to see the report configuration dialog. Paragraph 2 of the dialog controls what script rows are combined together versus listed separately in the report. As shown in Figure 2, script rows are combined only if they have the same Rail, Pin, Position, and Part Number; or if they are chains. Figure 2 – Script rows are combined only if they have the same Rail, Pin, Position, and Part Number; or if they are chains. In the example in Figure 1, the group of three rows on 01/01 represent three shells; the group of three rows on 01/03 represent four shells; the single row for 02/03 represents two shells; and the single row 02/04 represents six shells. The yellow highlights call out any row whose pin has multiple e-matches attached to it. The yellow sections in the Figure 1 illustrate the e-match counting logic. It is easy to see why the yellow cells are yellow, but what about the “3” cell just above the yellow “6” cell at the bottom of the page? Why isn’t it yellow? The red notes fields offer a hint. The effects on rail, pin 02/05 and /02/06 are in chains of three shells. Thus the 02/05 row only requires a single e-match for the chain and is therefore NOT yellow; whereas the 02/06 row has two chains of three shells and therefore requires two e-matches, turning it yellow. Figure 3 – The conditional formatting parameters highlight fields based on logical expressions. Conditional formatting From the Script window’s blue gear menu, do “Edit report template…” and choose “basic_wiring_script_portrait”, to see the configuration dialog with the paragraph 6 shown in Figure 3. For this report, Option A and G invert the colors of the Rail and Pin columns. Option C groups the rows with the same rail and pin, putting lines between the groups. Option D and E add the colors for angled effects. Option F highlights in yellow the rows whose pins have multiple e-matches. The full expression in the box is, “[or [= fullAddress prev.fullAddress] [= fullAddress next.fullAddress] [and [not chainRef] [> numDevices 1]]]”. Options D-H are programming language expressions. If you are not a programmer, you can copy/paste examples from existing report templates. Option H highlights the notes in red if they are not blank.
If you sort by angle when addressing and your racks have fixed angle tubes, there is a possibility of gaps in module number sequences in the racks as shown in Figure 1. Why would the first rack have modules 01 and 03 instead of 01 and 02? Fortunately, there’s a good reason, and there’s a good solution. You just need to understand what is going on. Or if you just want to know the solution, Figure 3 sums it up. Figure 1 – A gap in the module number sequence. Why does the first rack have module 01 and 03 instead of 01 and 02? Figure 2 shows the addressing sort order that produces the rack assignments of Figure 1. Figure 2 looks pretty normal. There’s nothing strange about about sorting by “Position > Angle > Event Time”. So why is Figure 1 so weird? You would need to know a little more information. The racks in these figures are PyroLamas single shot racks with fixed angle tubes in 15 degree increments between the rows. The left-most row of tubes has -45 degree angling tubes to the left, the next row over to the right has -30 degree angling tubes, and so on to the right-most row of tubes at 45 degrees to the right. Thus in the first rack, the shots 0-9 of module 01 are all -45 degree shots, and A-F of module 01 are all -30 degree shots. Figure 2 – Sorting by “Position > Angle” can yield gaps if your rack tubes have fixed angles. The addressing procedure The apparent gaps in the module number sequence arise from the addressing procedure, which is: Sort the effects according to the sort criteria in paragraph 2 of the addressing dialog. For the effect that is first in the sorted list, follow step (3) on any unused pins of partially allocated rails (modules) and if none of them work then allocate a new rail and try its first pin. For the pin, try to find a rack and tube such that all the constraints in paragraph 3 of the addressing dialog are satisfied; if successful, assign the pin and tube to the effect being addressed. Repeat. The gap in Figure 1 can now be understood by walking through the addressing procedure: Sorted by angle, the first 10 effects easily fit in the left row of the first rack. The next 6 effects being assigned are also -45 degrees to the left (that’s how many pins fill into the left-most rows of tubes in Figure 1). The problem is, the first rack doesn’t have any more tubes angling that direction, so they must go into the second rack. But the “Rack Cluster” constraint in paragraph 3 of the addressing dialog prevents modules from being shared across racks that are not in the same cluster. Hence these 6 effects in the second rack get module 02. At this point, a gap in the module number sequence of the first rack is assured. Sorting by “Same Rack” or “Rack Number” Following the addressing procedure, you can see that the only way to avoid a gap in the module sequence in the first rack would be to sort the effects such that the effects that fit into the first rack get sorted first, before the effects that spill over into the next rack. The addressing sort options include a term that does just that — Same Rack. Figure 3 shows where to put it. Figure 3 – Add the term “Same Rack” before “Angle” to fill out a rack before moving onto the next. The Same Rack term gives priority to effects that can fit into the same rack as the previous assignment. In this example, after filling the first 10 effects at -45 degrees into the first rack, the remaining -45 degree effects can no longer fit in that rack so they receive a lower sort priority. The -30 degree effects are the left-most effects that can fit into the empty tubes of the first rack, so they get allocated next. The result is shown in Figure 4. Figure 4 – Sorting by “Same Rack” avoids the gaps in module number sequences. Finale 3D has other special sort terms like Same Rack that can solve similar problems. The term “Rack Number” would also work fine in this example in place of Same Rack. Rack Number not only fills one rack before moving onto the next; it fills the racks in order of their Rack Number. Rack Number enables you to avoid gaps while filling racks according to how you’ve arranged them visually, as described in detail in Addressing based on layout of racks (Rack Number). The full set of special sort terms, useful for all kinds of purposes, is given in Special sort terms.
To create and export a pyro or DMX script for the Pyrotronix firing system, please follow these steps: Address the show for Pyrotronix (“Addressing > Address show”). Export the script (“File > Export > Export firing system script files(s)…“). Place the script file on a USB flash drive at the path \PTX-C4\Projects\Import\ Step 2 creates the script file, which has the “PTX2” extension. The file format details are described in this section. Figure 1 – Pyrotronix firing system master DMX overview The Pyrotronix system supports DMX fixtures by triggering pre-programmed or user-created presets on the controller. Please refer to your PTX C4 instructions for creating presets, and then create effect libraries to match your presets in Finale 3D as described below. The DMX instructions for scripting in Finale 3D ( DMX basic instructions ) do apply but there are two differences for Pyrotronix, since the script exported from Finale 3D will contain only the triggers for pre-programmed presets and not the actual DMX channel data that implement the effects according to the fixture’s DMX personality. The two differences are: (1) you need to create your own effect libraries in Finale 3D to match your presets (see below), and (2) you need to configure DMX fixture positions in Finale 3D as “<Any fixture type>” from the DMX Fixture Type selector after right clicking the positions and doing “Configure position as DMX fixture” from the context menu. Table 1 – File format and encoding File format Extension Text encoding Field delimiter End-of-line Text .PTX2 ASCII Semicolon CRLF Structure of PTX2 script file The PTX2 script file contains three sections: project, DMX devices, and ignition data, as shown in the example file in Figure 2. As exported from Finale 3D, the first section of the script, the project section, is the text: [Project] version=1.0 type=IN The last line is either “type=IN” for a script with individual events or “type=SQ” for a script with sequences. See the Sequences row in Table 2, below, for further details. The second section, the DMX devices section, contains a mapping of “Device Name” to “Device Type” and “DMX Channel Base”. The Device Type is defined by the Category field of the DMX effect in Finale 3D, and must match the Device Type of the pre-programmed presets in the Pyrotronix controller exactly. The DMX Channel Base is defined by the DMX Channel Base field of the positions in Finale 3D, once they are configured as DMX fixtures. The Device Name is constructed synthetically from the Device Type and DMX Channel Base trivially by concatenating them together with a space in between. The syntax of the rows is simply <Device Name>=<Device Type>@<DMX Channel Base>. This DMX devices section is only present if the script contains DMX events. [DMX devices] Explo X2 Wave Flamer 1=Explo X2 Wave Flamer@1 Explo X2 Wave Flamer 7=Explo X2 Wave Flamer@7 Explo X2 Wave Flamer 13=Explo X2 Wave Flamer@13 The third section contains the ignition data and DMX preset triggers, intermixed and sorted by event time. [Ignition data] 1;A;2760;1020;1;1;;Red Chrysanthemum; 2;A;3760;1020;2;1;;Red Chrysanthemum; 3;A;4760;1020;3;1;;Red Chrysanthemum; 4;A;10000;2400;DMX;;;Explo X2 Wave Flamer 1:PRG31; 5;A;11000;2400;DMX;;;Explo X2 Wave Flamer 7:PRG31; 6;A;12000;2400;DMX;;;Explo X2 Wave Flamer 13:PRG31; The ignition data fields are described in Table 3: Table 2 – Special characteristics Special characteristics Description Sort order of rows Rows sorted ascending by event time. What rows represent Each row represents a unique firing event, for pyro a module/pin/event-time combination, and for DMX a device name / preset identifier combination. For example, a pyro chain of five shells will be one row, not five. A pair of shells shot together from the same position will be one row, not two, even if the shells are different effects. A flight of shells shot together from multiple positions with the same module-pin using scab wire is still one row. DMX examples are given below. Sequences (Tracks) The user can divide a script into separately triggered sequences by tagging the script rows with <Sequence Group>.<Sequence Number> pairs in the Track field in Finale 3D, beginning with “1.1”. Pyrotronix supports up to four sequence groups, with thirty-two sequence triggers (buttons) per group. Each sequence can have up to twenty ignitions. Time resolution The Pyrotronix system supports 1/100th second resolution. DMX support The Pyrotronix system supports DMX fixtures by triggering pre-programmed or user-created presets on the controller. The PTX2 script exported from Finale 3D contains triggers based on the Device Type and Preset Identifiers of the effects in Finale 3D (from the Category and Custom Part Field fields), which must match the presets defined on the controller exactly. The triggers do not contain any parameters for the presets, so it is not possible to script parameterized effects like effects that depend on the angle or duration that the user can adjust in the Finale 3D user interface. The DMX instructions for scripting in Finale 3D, ( DMX basic instructions ) do apply, except you need to create your own effect libraries in Finale 3D to match your presets (except for the Explo X2 Wave Flamer, for which Finale 3D‘s effect library matches the pre-defined presets in the Pyrotronix PTX C4 controller), and you need to configure the fixture positions in Finale 3D to “<Any fixture type>” from the DMX Fixture Type selector in the “Configure position as DMX fixture” context menu from right clicking the positions (except for the Explo X2 Wave Flamer, which you should select instead if desired). Bandwidth limitations Finale 3D provides options for automatically guaranteeing a minimum delay between firing events to accommodate communication bandwidth limitations on the controller. The two options are 60ms (“Cable + Radio”) and 30ms (“Cable”) minimum delays. The module type selector in the addressing dialog provides these options. The minimum delays are the only differences between the “Cable + Radio” and “Cable” options. Electrical limitations Finale 3D also provides options to limit the number of simultaneously firing channels to 20, to accommodate electrical limitations on some Pyrotronix controllers. The options are available from the module type selector in the addressing dialog. Support for CSV script format for older controllers Finale 3D also supports exporting the CSV file format script for older Pyrotronix controllers. In the addressing dialog in Finale 3D, select the PTX module type options for the old CSV script file formats, or the new PTX2 module type options for the new script formats for the C4 controller. Only the PTX2 options have DMX capabilities. DMX safety channel requirement warning disabled Finale 3D ‘s warning for missing safety channels for DMX effects is disabled for Pyrotronix exports based on the assumption that Pyrotronix users will handle safety channels manually on the controller, not within the script exported from Finale 3D. When you export a firing script for Pyrotronix, Finale 3D presents an “Export Options” dialog with the choices shown in Table 3. Table 3 – Export options Option name Description Version Choose the PTX2 version or the old-style CSV version. Separation Time Choose the minimum separation time between shots — 30ms for wire connected modules and 60ms for radio connected modules. Limit Choose the limit of maximum simultaneous firing channels. Some versions of PTX hardware have a limit of 20; others have no limit. Each ignition row in the ignition rows section of the script contains a number of fields separated by the semicolon character. The names of the fields and their descriptions are in following table. Table 4 – Specifications of ignition row fields Field name Description Cue The cue number beginning with 1 and incrementing at each new event time Ignition type The letter “A” for a non-sequence event, or “S” for an event that is part of a sequence. Event time The ignition time in milliseconds Duration The duration in milliseconds Module number The module number, 1-99. Pin number The pin number, 1-16. Hazard class A hazard classification for purpose of disabling part of the show during a performance, a number 1-24 or blank. Description For pyro, this field contains the name of the effect; for DMX, this field contains the <Device Name>:PRG<Preset Number>, where Preset Number is a two digit number corresponding to a pre-programmed or user-defined preset on the Pyrotronix controller. The Device Name is constructed from the Device Type in the effects’ Category field and the DMX Channel Base from the position, as described above in the Structure of PTX2 script file section. The Preset Number comes from the Custom Part Field field of the effect. Finale 3D automatically adds the PRG before the Preset Number in the script. The PRG letters thus should not be in the effects’ Custom Part Field. All pre-programmed and user-defined Preset Identifiers of presets on the Pyrotronix controller must be of the form PRGXX, where XX is a two digit number. The effects from the predefined X2 Wave Flamer Flame Machine in Finale 3D already contain the numbers that correspond to built in presets on the Pyrotronix PTX C4 controller in the Custom Part Field; versions of Finale 3D prior to Oct 1 2025 also contained the “Explo X2 Wave Flamer” Device Type in the Category field of these effects, which was correct for Pyrotronix exporting. Versions of Finale 3D after Oct 1 2025 may have different text in the Category field for X2 Wave Flamer Flame Machine effects, which you will need to change to “Explo X2 Wave Flamer” before exporting. For other fixtures and effects you will need to create your own DMX effect libraries for Pyrotronix, as described below. Sequence The sequence is either blank, or X.Y where X is the sequence group number 1-4 and Y is the sequence button number 1-32. Either all script events must contain sequence numbers, or none of them. Use the Track field in Finale 3D to specify the sequences (right click on the events in the script window and do “Set track…”). The example script shown in Figure 2 is also available for download in Table 5. [Project] version=1.0 type=IN [DMX devices] Explo X2 Wave Flamer 1=Explo X2 Wave Flamer@1 Explo X2 Wave Flamer 7=Explo X2 Wave Flamer@7 Explo X2 Wave Flamer 13=Explo X2 Wave Flamer@13 [Ignition data] 1;A;2760;1020;1;1;;Red Chrysanthemum; 2;A;3760;1020;2;1;;Red Chrysanthemum; 3;A;4760;1020;3;1;;Red Chrysanthemum; 4;A;10000;2400;DMX;;;Explo X2 Wave Flamer 1:PRG31; 5;A;11000;2400;DMX;;;Explo X2 Wave Flamer 7:PRG31; 6;A;12000;2400;DMX;;;Explo X2 Wave Flamer 13:PRG31; Figure 2 – Example Pyrotronix script for pyro and DMX Creating DMX effect libraries to match presets on your Pyrotronix controller Since Pyrotronix scripts control DMX fixtures by triggering pre-programmed or user-defined presets on the controller, the script exported from Finale 3D will contain only the triggers and not the actual DMX channel data. The DMX Patch field of the effects in Finale 3D is thus unused, as its purpose is to translate the effect definition into the DMX channel data that implement it. In its place, the Category field and Custom Part Field field of the effects in Finale 3D hold the Pyrotronix Device Type and Preset Number that together identify the preset to be triggered. The Category field must contain the Device Type of the pre-programmed or user-defined preset on the controller exactly, except for optional capitalization. The Custom Part Field contains an integer identifying a preset for that Device Type. The number in the Custom Part Field is just an integer. Finale 3D automatically formats the integer as two digits with a leading zero if necessary and prepends the letters “PRG” to the front, such as for example PRG01, PRG02, and PRG03 for the first three presets. The preset identifiers on the Pyrotronix controller must match these presets — including the PRG — exactly. Since the Device Type of the preset is specified in the effects, the Fixture Type field of the positions in Finale 3D is not required for Pyrotronix script exports. You can thus set the Fixture Type to “<Any DMX Fixture>” or set it to any of the predefined fixtures in Finale 3D, your choice. The advantage to setting it to a pre-defined fixture in Finale 3D is that Finale 3D‘s channel allocation functions will be able to allocate channel ranges back-to-back for your fixtures if the you choose pre-defined fixtures. If you use “<Any DMX Fixture>” then you will need to set the DMX Channel Base of the fixture positions manually in the positions window or by right clicking the positions and editing the position properties. Since the DMX presets on Pyrotronix and their triggers do not have any parameters, it is not possible for the presets to depend on user-adjustable parameters in the Finale 3D user interface like the angle or duration of an effect. If you want to shoot a moving head wave flamer effect in a particular direction, you need to define a preset for that specific direction on your Pyrotronix controller and create a corresponding effect in Finale 3D with the matching Device Type and Preset Identifier. Example files Example files for a mixed pyro and DMX show are available for download in Table 5. The example show contains three DMX fixture positions and three pyro positions. The DMX fixture positions each contain a single shot of the Explo X2 Wave Flamer fixture, firing macro #31. They do not contain safety channel events; and the safety channel requirement warning is disabled for Pyrotronix script exports. The three pyro positions each contain one shell. The timeline for the example show is shown in Figure 3. Figure 3 – Timeline for example mixed pyro and DMX show — 3 pyro shots, 3 DMX shots. Table 6 – Downloads Download link Explanation test-pyrotronix-dmx.fin Example show file test-pyrotronix-dmx.ptx2 Example exported file (PTX2)