Software Documentation

Software Documentation

ScriptingDocumentation

Integration Intermediate Last updated: June 28, 2022

9 Copy/paste

Copy/paste is at once one of the most basic features in Finale 3D and one of the most advanced features.  Anyone who has ever used a Windows computer knows that Control-C copies and Control-V pastes, and that about sums up the basic uses.  This article explains the advanced uses, including,

  • Copy/paste between Excel and Finale 3D, in both directions
  • Copy/pasting events including firing system addresses, or not
  • Copying a sequence of events from one position and pasting into multiple positions with one keystroke
  • Copying a sequence of events from multiple positions and pasting into a different set of positions
  • Copy/pasting between shows, with matching or non-matching position names
  • Copy/pasting models and attached positions between shows, creating multiple instances or just pasting the missing ones

To find these specific examples in the discussion below, search for “Advanced use from the list“.

 

The copy buffer

The foundation for understanding the advanced uses of copy/paste is the “copy buffer” and the rules governing what goes into the copy buffer when you copy, and how the contents of the copy buffer get applied when you paste.  Fortunately, the copy buffer is easy to access because it is just the computer system’s “clipboard”.  Moreover, the copy buffer is purely human readable text, which means that any time you want you can see the contents of the copy buffer simply by opening Notepad on your computer and pressing Control-V to paste.

If you copy a couple rows from the Effects window in Finale 3D, then the contents of the copy buffer will look something like Figure 1 when you paste into Notepad:

 

##partsHeader	insertButton	partNumber	used	quota	qoh	available	description	size	internalDelay	duration	height	numDevices	color	subtype	vdl	manufacturerPartNumber	manufacturer	partType	stdPrice	stdLocation	lockoutDefault	numTubes	category	customPartField	rackType	partNotes	dmxPatch	exNumber	ceNumber	unNumber	stdCost	safetyDistance	fuseDelay	remainingQuota	remainingQoh	remainingAvailable	weight	neq
##partsRow	G2SH1000	G2SH1000					Red Chrysanthemum	2"	2.24	1.02	50.0	1	Red	Chrysanthemum	Red Chrysanthemum	G2SH1000	Generic	shell	1.45				2" Assorted											0	0	0		
##partsRow	G2SH1001	G2SH1001					White Chrysanthemum	2"	2.24	1.02	50.0	1	White	Chrysanthemum	White Chrysanthemum	G2SH1001	Generic	shell	1.45				2" Assorted											0	0	0		

Figure 1 – The copy buffer after copying a couple rows from the Effects window

 

The copy buffer in this example represents rows of a table, analogous to a CSV file.  The top row is the list of fields; the following rows are the data rows.  There’s nothing special about the ## in the first fields.  That just signifies that the first field is identifying the purpose of the row.  In this case, the copied rows are from the Effects window, which the software internally calls “parts rows”.

 

Copy/paste between Excel and Finale 3D

Pasting into Excel makes the data easier to read because it lines up the columns.  Just as you pasted into Notepad by pressing Control-V, you can paste the data into Excel with Control-V, resulting in Figure 2:

 

Figure 2 – Pasting into Excel makes it easy to read

 

These first two examples have already illustrated the first advanced use from the list — pasting into Excel — at least in that direction.  To copy from Excel and paste into Finale 3D, try changing the description “Red Chrysanthemum” in column H of Excel to “Blue Chrysanthemum w/ Yellow Pistil” and copy that description to the VDL column P also.  Then copy rows 1 and 2 from Excel, i.e., the header row and the modified data row, using Control-C.  Then switch to Finale 3D and paste into the Effects window (not the 3D window).

 

Figure 3 – Copy/pasting from Excel to Finale 3D creates a new effect

 

The result in Figure 3 shows that Finale 3D pasted the data row as a new effect.  Since each effect must have a unique part number, the paste operation automatically added “(01)” to the pasted part number to differentiate it from the row above it.  Finale 3D even created a new blue and yellow icon based on your VDL description!

You could have typed anything into Excel and copy/pasted into the Effects window.  As long as the copied data has the ##partsHeader header row defining the fields and ##partsRow as the first field of the data rows, the data will be copied into Effects window.  Aside from the ## column, the only required column is the partNumber column.  The order of the columns doesn’t matter; they match up based on their names in the header row, which must match the non-localized, English, internal names that Finale 3D uses for the columns, which are listed in Table 1 of Effects table columns.

Although you can use copy/paste from Excel to the Effects window to import your own effects lists or inventory, the “File > Import > Import effects file…” function is usually easier since it fills out any missing columns of information intelligently by making inferences from whatever data are provided, such as pulling the size information out of the description field if the description includes a size.  Notwithstanding, there are many circumstances for which pasting rows to or from Excel into the Effects window is a useful procedure.

 

Technical details of copying and pasting rows in the table windows

In the example above, pasting into the Effects window modified the pasted part number to make it unique, adding “(01)” to the end.  Many of the other tables also have a key field like part number that needs to have a unique value, and pasting automatically makes the necessary modifications.

The script table doesn’t have a key field for its rows, but the script table has a few other fields for which pasting makes some necessary modifications or additions.   When you paste into the script window, the event’s actionTime will be adjusted to correspond to the playhead in the timeline.  If you’ve copied a sequence of events at different times, then their pasted times will be relative to the playhead.  The position column will also absorb the position name of currently selected position or positions (see below for discussion of pasting into multiple positions).  Some other fields modified for pasting into the script table are shown in Table 1.  The railAddress, pinAddress, tube and rack fields are cleared when pasted because copy/paste is commonly used to create clones, so the firing system and rack addresses may not apply to the clones.   You can change the user setting, “File > User settings > Pasted events include rail, pin and rack addresses” if you do not want pasting to clear those fields (another advanced use from the list!).

Since rows in the script table have dependencies on rows in other tables, the copy operation for the script table adds to the copy buffer the header row and data rows from the tables that the script rows depend on.   The script rows may depend on the Effects table, Positions table, and Models table since the events in the script reference a partNumber of an effect in the Effects table and reference a position name from the Positions table, which may be relative to a model from the Models table.  By combining all these headers and rows into the copy buffer, the copy operation eliminates outside dependencies from the copy buffer script data.

When pasting rows into the script table, the referenced partNumber’s effect row from the copy buffer will be copied to the Effects window, in the Per-show effects collection,  if it isn’t already present.  The positions and models rows in the copy buffer are ignored when pasting into the script table because the events will be added to the selected positions, not to the copied positions.  The copied script rows thus don’t depend on the position and model rows when pasting into the script table, but when copy/pasting between different shows and pasting into the 3D window, the position and model rows in the copy buffer may be required, as discussed below.

 

Table 1 – Technical details of copying and pasting rows for each type of table window

Table window Row signifiers Key field Other fields modified Dependencies copied Dependencies pasted
Effects table ##partsHeader, ##partsRow partNumber
Script table ##scriptHeader, ##scriptRow actionTime, position, railAddress, pinAddress, tube, rack, randomSeed, chainRef, group Referenced rows from Effects table, Positions table, and Models table Missing rows in Effects table
Positions table ##positionsHeader, ##positionsRow position Referenced rows from Models table Missing rows in Models table
Models table ##modelsHeader, ##modelsRow modelRef
Per-show settings table ##perShowSettingsHeader, ##perShowSettingsRow settingName
Songs table ##songsHeader, ##songsRow songRef
Blueprints table ##blueprintsHeader, ##blueprintsRow blueprint
Images table ##imagesHeader, ##imagesRow imageRef
Key frames table ##cameraHeader, ##cameraRow
Racks table ##layoutHeader, ##layoutRow rack

 

Technical details of copying in the 3D window

Copy/paste in the 3D window uses the same copy buffer and the same format as copy/paste in the table windows.  You can therefore copy/paste between the 3D window and the table windows.  Copy/paste in the 3D window, though, has more complicated rules for what rows and dependencies get copied into the copy buffer, and how the rows are applied when pasting.  The reason for the more complicated rules is that, unlike the table windows, the 3D window displays multiple types of objects selected simultaneously — events, positions, models, and songs — so when you press Control-C to copy, and later Control-V to paste, there’s a question of what you meant.  Did you mean to copy the selected positions?  Did you mean to copy the selected events?  Further complicating the rules is the wrinkle that copied effects depend on the positions that they launch from, which may be different from the positions that are selected at the time of pressing Control-C.

Once you’ve put something in the copy buffer by copying from a table window or the 3D window or from Excel or Notepad, it no longer matters what window you copied from.  When you later paste, the action depends only on the contents of the copy buffer and in some cases the selected objects of the 3D window and the playhead position, but in no case does it matter what window or application the contents of the copy buffer are from.  Thus, the rules for the copy operation in the 3D window can be defined independently of the paste operation.

As with copying from the script window, the copy operation in the 3D window copies rows and also dependency rows into the copy buffer.  The rules for copying events, positions, and models in the 3D window are that the copy buffer will contain,

  1. Rows for the selected events, if any; else rows for the selected positions, if any; else rows for the selected models, if any.
  2. Rows of any positions referenced by events copied by Rule 1, and rows of any models referenced by positions copied by this Rule 2.
  3. Rows of any models referenced by positions copied by Rule 1.

The point of these rules is to identify what the user is trying to copy — events, positions, or models — and then to copy exactly those rows plus any dependencies from those rows.  If the user is copying events, then it doesn’t matter what positions or models are selected; only those positions or models that are dependencies of the copied events will be added to the copy buffer.  Similarly, if the user is copying positions (i.e., positions are selected but no events are selected), it doesn’t matter what models are selected because only the model dependencies will  be copied.  The rules are summarized in Table 2.

 

Table 2 – Technical details of copying and pasting rows for each type of table window

Events selected Positions selected Models selected Rows added to the copy buffer
Yes Events, effects and positions referenced by those events; models referenced by those positions
Yes Yes Events, effects and positions referenced by those events; models referenced by those positions (it doesn’t matter that positions are selected because events are selected)
Yes Yes Events, effects and positions referenced by those events; models referenced by those positions (it doesn’t matter that models are selected because events are selected)
Yes Yes Yes Events, effects and positions referenced by those events; models referenced by those positions (it doesn’t matter that positions and models are selected because events are selected)
(nothing)
Yes Positions, and models referenced by those positions
Yes Models
Yes Yes Positions, and models referenced by those positions (it doesn’t matter that models are selected because positions are selected)

 

Figure 4 shows an example copy buffer from copying a single selected event in the 3D window that launches from a position attached to a model:

 

##modelsHeader	modelRef	modelName	coordinates	angle	modelNotes
##modelsRow	1	Stadium.skp	0.0 0.0 0.0		
##positionsHeader	position	modelRef	size	coordinates	angle	moduleType	universe	section	startModule	dmxChannelBase	addressingBlueprint	positionNotes	tags	customPositionField	preallocatedRails	dmxUniverse	dmxFixtureType	dmxEffectFilter	positionType	positionFlags	dmxChannelRange
##positionsRow	Pos-09	1	3.0	79.1487794434919 14.771182880682 191.654133645434	0.0 0.0 0.0								@g1								
##scriptHeader	eventTime	externalDelay	internalDelay	actionTime	partNumber	size	partType	duration	position	pan	tilt	spin	universe	section	moduleType	railAddress	pinAddress	rack	tube	track	lockout	chainRef	group	numDevices	stdLocation	manufacturer	stdPrice	randomSeed	category	customPartField	customScriptField	scriptNotes	chainDeviceVdl	rackType	description	addressFlags	flightCount	pair	straightUp	angleGraphics	icon	fullAddress	pitch	roll	customPositionField	safetyDistance	stdCost	weight	neq	next	cueCount	chainRow	chainGap	isChain	sleeve	firstAngleGraphics	scriptNotes2	scriptNotes3	customNumericField
##scriptRow	00:13.104		2.24	00:15.344	G2SH1003	2"	shell	1.02	Pos-09	90														1		Generic	1.45	919635	2" Assorted						Green Chrysanthemum		1	false	true	| 0°	G2SH1003										3			false		0° |			
##partsHeader	insertButton	partNumber	used	quota	qoh	available	description	size	internalDelay	duration	height	numDevices	color	subtype	vdl	manufacturerPartNumber	manufacturer	partType	stdPrice	stdLocation	lockoutDefault	numTubes	category	customPartField	rackType	partNotes	dmxPatch	exNumber	ceNumber	unNumber	stdCost	safetyDistance	fuseDelay	remainingQuota	remainingQoh	remainingAvailable	weight	neq
##partsRow	G2SH1003	G2SH1003	3				Green Chrysanthemum	2"	2.24	1.02	50.0	1	Green	Chrysanthemum	Green Chrysanthemum	G2SH1003	Generic	shell	1.45				2" Assorted											-3	-3	-3		

Figure 4 – The copy buffer from copying a single selected event in the 3D window

 

Since the copy buffer contains the dependent rows in addition to the rows you mean to copy, pasting in the 3D window also requires some rules, to ensure that you paste what you intend, nothing more, nothing less.

 

Pasting events in the 3D window into multiple positions

When you click on a row in the Effects window to insert an effect into the show, the effect will be inserted into the selected position — or multiple positions if multiple positions are selected.  Pasting events copied from a single position works the same way: if you copy one or more events from the same position and then paste, the paste operation will insert a clone of the copied events into every selected position.  Thus if you copy a sequence of three events from one position, then select five positions, then paste, you’ll end up pasting fifteen new events.   Pasting into multiple positions with one keystroke is an advanced use from the list.

If you copy events from multiple positions, and then paste, the result depends on how many positions are selected at the time you paste.  If the same number of positions are selected as are referenced by the copied events, then the events will be pasted into the selected positions, re-mapping the position names according to their alphabetical order.  For example, if you copy effects from Pos-01, Pos-02, and Pos-04, then select Pos-07, Pos-08, Pos-09 in any order, then paste, the events copied from Pos-01 will be pasted into Pos-07; the events copied from Pos-02 will be pasted into Pos-08; and the events copied from Pos-04 will be pasted into Pos-09, as shown in Figure 5.  Using copy/paste to paste into a different set of multiple positions is another advanced use from the list.  You can use copy/paste to move events from one set of positions to another.

 

Figure 5 – Copy from Pos-01, Pos-02, Pos-04 and paste to Pos-07, Pos-08, Pos-09.

 

Copy/pasting in the 3D window between shows

Pasting events copied from one position into one or more selected positions or pasting events copied from multiple positions into the same number of selected positions works the same way if you are copying from one show into another as it does if you are copy/pasting within a single show.  In both cases, the positions you are pasting into already exist in the show, so the position and model dependency rows in the copy buffer are not required.  However, if you copy events from more than one position and paste with a different number of positions selected, then the paste operation will paste the events into positions matching the original position names as recorded in the copy buffer.  If those positions don’t exist in the show, then the paste operation will recreate them and any missing models they are attached to based on the dependency rows in the copy buffer.  Although pasting to missing positions or models is possible when copy/pasting within a single show, it is much more common when pasting between shows.

Copy/pasting events between shows is thus as simple as selecting the events in one show and pressing Control-C in the 3D window, then switching shows from the Window menu, then pasting into the other show.  Any missing positions or models referenced by the events will automatically be re-created, but only if necessary.  Pasting the events multiple times will not create unnecessary duplicates of the positions or models.   Copy/pasting between shows like this is an advanced use from the list.

If you want to copy/paste positions or models from one show into another multiple times, use the command, “Edit > Paste special > Paste models and positions as new instances”.  This command will ignore anything in the copy buffer other than positions and models.  It will paste a copy of the positions and models whether or not they already exist, enabling you to paste multiple copies (“instances”) of the positions and models into the show.  If the pasted items already exist, then the copies will be renamed with “(01)” or a similar suffix added onto the name.  Imagine copying a set piece model or tower model with positions already attached, and pasting it multiple times into a show.  It would be hard to do that without this advanced use from the list.

 

Technical details of pasting in the 3D window

As you can surmise from the preceding sections, the paste operation in the 3D window follows a set of rules for what parts of the copy buffer get pasted, based on what exists in the show being pasted into and what positions are selected.

In general when you copy/paste an item you expect the paste operation to create a duplicate of that item; pasting multiple times pastes multiple duplicates.  If the copy buffer contains dependency information you do not expect the paste operation to create duplicates of the dependency items if they already exist.   The rules for copy/pasting events in the 3D window are summarized in Table 3 and Table 4Table 3 applies when pasting strictly into the selected positions, namely when either of these two conditions holds:

  1. The copy buffer contains events copied from exactly one position, and one or more positions are selected, or,
  2. The copy buffer contains events copied from more than one position, and the same number of positions are selected.

Table 3 shows that if pasting into the selected positions, it doesn’t matter what positions or models are in the copy buffer or whether their names match existing items in the show.  The same thing gets pasted: just the events.

 

Table 3 – Pasting events into the selected positions

Position is in copy buffer Model is in copy buffer Matching position exists in show Matching model exists in show What is pasted from copy buffer
Yes Yes Events
Yes Yes Yes Events
Yes Yes Yes Events
Yes Yes Yes Yes Events

 

By contrast Table 4 applies when not pasting events strictly into the selected positions.  Missing positions and their attached models will be pasted depending on whether matches already exist in the show.

 

Table 4 – Pasting events into the positions referenced in the copy buffer

Position is in copy buffer Model is in copy buffer Matching position exists in show Matching model exists in show What is pasted from copy buffer
Yes Yes Events, positions, and models
Yes Yes Yes Events, and models
Yes Yes Yes Events, positions
Yes Yes Yes Yes Events

 

If you are copy/pasting positions, without any events, then Table 5 applies.  The rules for pasting positions are different from events.  Positions are pasted if they are missing, and duplicates are pasted if the positions already exist.  Model dependencies that the positions are attached to are pasted only if they don’t already exist.  Imagine copying a position Pos-01 attached to a model “Stadium” from one show and pasting into a blank show containing no positions or models.  If you paste three times, the show will contain positions Pos-01, Pos-01(01), and Pos-01(02), and one model “Stadium” to which all three positions are attached.

 

Table 5 – Pasting positions (copy buffer not containing any events)

Position is in copy buffer Model is in copy buffer Matching position exists in show Matching model exists in show What is pasted from copy buffer
Yes Yes Positions, and models
Yes Yes Yes Positions (as duplicates), and models
Yes Yes Yes Positions
Yes Yes Yes Yes Positions (as duplicates)

 

Lastly, if you are copy/pasting models, without any events or positions, then Table 6 applies.  The rules for pasting models are straight forward.  Models are pasted if they are missing, and duplicates are pasted if the models already exist.

 

Table 6 – Pasting models (copy buffer not containing any events or positions)

Model is in copy buffer Matching model exists in show What is pasted from copy buffer
Yes Models
Yes Yes Models (as duplicates)

 

Copy/paste visual description (full VDL)

If you want to copy an effect simulation from one effect to another in the effect window or into or out of Email or Excel, the VDL field by itself isn’t quite enough because the simulation also depends on size, duration, and a few other fields.  To save you some time, you can right click on an effect in the effect window and choose “Copy visual description (Full VDL)” from the context menu to put a complete visual description into the copy buffer.  The menu item “Paste visual description” decomposes the visual description into the fields it specifies and pastes the field values into the selected effects.

The visual description, or “Full VDL”, is a text string that includes the VDL and all necessary extra parameters together, similar to the input field of the Control-G dialog for creating or editing effects.  For example, an effect with VDL of “Red Comet” may have a Full VDL of “50mm 58.0m 2.10s Red Comet” that combines the size, height, and duration along with the VDL.  It is easy to paste a Full VDL like this into an email or Excel.

 

Closing remarks

Returning to the opening paragraph of this article, copy/paste in Finale 3D is both simple and complex.  Most of the time, the usual expectations for Control-C and Control-V are sufficient.  For more advanced uses, you can figure out what is going on by pasting the copy buffer into Notepad or Excel and looking up the rules in the tables above.