Skip to content

Commit 8a2c7e5

Browse files
authored
Merge pull request #760 from rpatters1/RGP/add-full-artic-reset
more complete articulation reset
2 parents c71f9aa + 83f8136 commit 8a2c7e5

File tree

3 files changed

+40
-16
lines changed

3 files changed

+40
-16
lines changed

src/articulation_reset_auto_positioning.lua

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
function plugindef()
22
finaleplugin.Author = "Robert Patterson"
33
finaleplugin.Copyright = "CC0 https://creativecommons.org/publicdomain/zero/1.0/"
4-
finaleplugin.Version = "1.0.1"
5-
finaleplugin.Date = "February 28, 2020"
4+
finaleplugin.Version = "1.1"
5+
finaleplugin.Date = "July 29, 2024"
66
finaleplugin.CategoryTags = "Articulation"
77
finaleplugin.MinFinaleVersionRaw = 0x1a000000
88
finaleplugin.MinJWLuaVersion = 0.58
@@ -13,9 +13,12 @@ Due to complications arising from how Finale stored articulation positions befor
1313
Due to issues around maintaining the context for automatic stacking, it must be run under RGP Lua. JW Lua does not have the necessary
1414
logic to manage the stacking context.
1515
]]
16-
return "Reset Automatic Articulation Positions", "Reset Automatic Articulation Positions", "Resets the position of automatically positioned articulations while ignoring those with manual positioning."
16+
return "Reset Automatic Articulation Positions", "Reset Automatic Articulation Positions",
17+
"Resets the position of automatically positioned articulations while ignoring those with manual positioning."
1718
end
1819

20+
local articulation = require("library/articulation")
21+
1922
-- Before Finale 26, the automatic positioning of articulations was calculated by Finale and stored as the default offset
2023
-- values of the assignment. Starting with Finale 26, the automatic positioning of articulations is inherent in the
2124
-- coded behavior of Finale. The assignment only contains offsets from the default position. Therefore, resetting
@@ -26,22 +29,24 @@ end
2629
function articulation_reset_auto_positioning()
2730
for note_entry in eachentry(finenv.Region()) do
2831
local articulations = note_entry:CreateArticulations()
29-
for articulation in each(articulations) do
32+
for artic_assign in each(articulations) do
3033
local articulation_def = finale.FCArticulationDef()
31-
if articulation_def:Load(articulation.ID) then
34+
if articulation_def:Load(artic_assign.ID) then
3235
local do_save = false
3336
if articulation_def.CenterHorizontally then
34-
articulation.HorizontalPos = 0
37+
artic_assign.HorizontalPos = 0
3538
do_save = true
3639
end
3740
if finale.ARTPOS_MANUAL_POSITIONING ~= articulation_def.AutoPosSide then
38-
local save_horzpos = articulation.HorizontalPos
39-
articulation:ResetPos(articulation_def) -- use ResetPos to fix up Finale's internal stacking flags
40-
articulation.HorizontalPos = save_horzpos
41+
local save_horzpos = artic_assign.HorizontalPos
42+
local save_flip = artic_assign.PlacementMode
43+
articulation.reset_to_default(artic_assign, articulation_def) -- use reset_to_default to fix up Finale's internal stacking flags
44+
artic_assign.HorizontalPos = save_horzpos
45+
artic_assign.PlacementMode = save_flip
4146
do_save = true
4247
end
4348
if do_save then
44-
articulation:Save()
49+
artic_assign:Save()
4550
end
4651
end
4752
end

src/articulation_reset_positioning.lua

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
function plugindef()
22
finaleplugin.Author = "Robert Patterson"
33
finaleplugin.Copyright = "CC0 https://creativecommons.org/publicdomain/zero/1.0/"
4-
finaleplugin.Version = "1.0.1"
5-
finaleplugin.Date = "February 28, 2020"
4+
finaleplugin.Version = "1.1"
5+
finaleplugin.Date = "July 29, 2024"
66
finaleplugin.CategoryTags = "Articulation"
77
finaleplugin.MinFinaleVersionRaw = 0x1a000000
88
finaleplugin.MinJWLuaVersion = 0.58
@@ -16,6 +16,8 @@ logic to manage the stacking context.
1616
return "Reset Articulation Positions", "Reset Articulation Positions", "Resets the position of all selected articulations."
1717
end
1818

19+
local articulation = require("library/articulation")
20+
1921
-- Before Finale 26, the automatic positioning of articulations was calculated by Finale and stored as the default offset
2022
-- values of the assignment. Starting with Finale 26, the automatic positioning of articulations is inherent in the
2123
-- coded behavior of Finale. The assignment only contains offsets from the default position. Therefore, resetting
@@ -27,10 +29,9 @@ end
2729
function articulation_reset_positioning()
2830
for note_entry in eachentry(finenv.Region()) do
2931
local articulations = note_entry:CreateArticulations()
30-
for articulation in each(articulations) do
31-
local artic_def = articulation:CreateArticulationDef()
32-
articulation:ResetPos(artic_def)
33-
articulation:Save()
32+
for artic_assign in each(articulations) do
33+
articulation.reset_to_default(artic_assign)
34+
artic_assign:Save()
3435
end
3536
end
3637
end

src/library/articulation.lua

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,4 +71,22 @@ function articulation.calc_main_character_dimensions(artic_def)
7171
return text_mets:CalcWidthEVPUs(), text_mets:CalcHeightEVPUs()
7272
end
7373

74+
--[[
75+
% reset_to_default
76+
77+
Implements all calls necessary to reset the articulation to default positioning. These settings achieve
78+
the same result as hitting the Clear key for the Articulation in the Finale UI.
79+
80+
@artic (FCArticulation)
81+
@artic_def (FCArticulationDef) optional definition for this articulation (calculated if not supplied)
82+
]]
83+
84+
function articulation.reset_to_default(artic, artic_def)
85+
artic_def = artic_def or artic:CreateArticulationDef()
86+
artic.StackingMode = finale.ARTICSTACKING_USEDEFINITION
87+
artic.PlacementMode = finale.ARTICPLACEMENT_AUTOMATIC
88+
artic:ResetPos(artic_def)
89+
end
90+
91+
7492
return articulation

0 commit comments

Comments
 (0)