マクロに関しては、Impress で行われたことはほとんどなく (マクロの記録がない、Python スクリプトがない、Basic のみなど)、サンプルもほとんどありません。
テキストアニメーションを「手動で」作成する方法のサンプルはありません。ここで 1 つ(6 歳) を見つけましたが、多くの情報があります。
これまでのところ、(1)すでに存在するテキストアニメーション「フェードイン」をスキャンし、(2)他のすべてのテキストアニメーションをスキャンしてから、それらを削除して「フェードイン」アニメーションのクローンに置き換えました。
sub MyFunction
' --------------------------------------------------------------------
' (1) scan for a text animation "fadein" that is already there
effectNodeFadeIn = Null
doc = ThisComponent
numSlides = doc.getDrawPages().getCount()
slide = doc.drawPages(numSlides-1)
mainSequence = getMainSequence(slide)
clickNodes = mainSequence.createEnumeration()
while clickNodes.hasMoreElements() and IsNull(effectNodeFadeIn)
clickNode = clickNodes.nextElement()
groupNodes = clickNode.createEnumeration()
while groupNodes.hasMoreElements() and IsNull(effectNodeFadeIn)
groupNode = groupNodes.nextElement()
effectNodes = groupNode.createEnumeration()
while effectNodes.hasMoreElements() and IsNull(effectNodeFadeIn)
effectNode = effectNodes.nextElement()
' ICIC
if effectNode.ImplementationName = "animcore::ParallelTimeContainer" then
if hasUserDataKey(effectNode, "preset-id") then
v = getUserDataValue(effectNode, "preset-id")
if v = "ooo-entrance-fade-in" then ' ooo-entrance-appear
effectNodeFadeIn = effectNode
end if
end if
end if
' useless loop just in case I need it:
animNodes = effectNode.createEnumeration()
while animNodes.hasMoreElements()
animNode = animNodes.nextElement()
wend
wend
wend
wend
' --------------------------------------------------------------------
' (2) scan for all other text animations,
' and then remove them an replace them by a clone of the "fadein" animation
if not IsNull(effectNodeFadeIn) then
clickNodes = mainSequence.createEnumeration()
while clickNodes.hasMoreElements()
clickNode = clickNodes.nextElement()
groupNodes = clickNode.createEnumeration()
while groupNodes.hasMoreElements()
groupNode = groupNodes.nextElement()
effectNodes = groupNode.createEnumeration()
while effectNodes.hasMoreElements()
effectNode = effectNodes.nextElement()
' ICIC
if effectNode.ImplementationName = "animcore::ParallelTimeContainer" then
if hasUserDataKey(effectNode, "preset-id") then
v = getUserDataValue(effectNode, "preset-id")
if v <> "ooo-entrance-fade-in" then ' ooo-entrance-appear
groupNode.removeChild(effectNode)
n = effectNodeFadeIn.createClone()
groupNode.appendChild(n)
' useless loop just in case I need it:
animNodes = effectNode.createEnumeration()
while animNodes.hasMoreElements()
animNode = animNodes.nextElement()
wend
end if
end if
end if
wend
wend
wend
end if
end sub
function hasUserDataKey(node as Object, key as String) as Boolean
for each data in node.UserData
if data.Name = "node-type" then
hasUserDataKey = True
exit function
end if
next data
hasUserDataKey = False
end function
function getUserDataValue(node as Object, key as String) as Variant
for each data in node.UserData
if data.Name = key then
getUserDataValue = data.Value
exit function
end if
next data
end function
効果を複製すると、元のテキストに「リンク」されたままになり、親が削除されて「フェードイン」テキストに置き換えられます。これを修正する方法はありますか?