Kanzi 3.8 migration guide¶
Use this migration guide to update Kanzi applications from Kanzi 3.7 to Kanzi 3.8.
Transitions between states without animations¶
In a State Manager when you use transitions that do not have an animation, in Kanzi 3.8 the State Manager sends the Transition Started and Transition Finished messages. If your application relies on not receiving these messages, when you upgrade your application to Kanzi 3.8, modify your application to take into account this change in the functionality.
Changes to skinned meshes¶
If in your Kanzi application you use skinned meshes, when migrating your application to Kanzi 3.8, update mesh data and transformations of skeleton nodes.
To update only the required items in the Library and keep the values of existing properties, merge the skinned meshes from an fbx or a dae file:
In the Library > Resource Files > 3D Assets right-click a skinned mesh and select Merge 3D Asset File. See Merging 3D assets.
In the Merge tool:
Select the check box next to the skinned mesh.
This way you update the mesh data.
Select the skeleton nodes whose transformations differ from those in the existing Kanzi Studio project.
In the Merge tool click Resolve to source and then click Merge.
After merging make sure that your changes to the nodes, such as added properties and modified values, in the imported Scene node, remain the same.
In the vertex shader of the material that you use for the skinned mesh that you merged replace the part of the shader that calculates skinning with the code that works in Kanzi 3.6.8 and in the Shader Source Editor click Save.
For example, replace
localToSkinMatrix = kzWorldMatrix * localToSkinMatrix; vec4 positionWorld = localToSkinMatrix * vec4(kzPosition.xyz, 1.0); vViewDirection = positionWorld.xyz - kzCameraPosition; vec4 Norm = mat4(localToSkinMatrix[0], localToSkinMatrix[1], localToSkinMatrix[2], vec4(0.0, 0.0, 0.0, 1.0)) * vec4(kzNormal.xyz, 0.0); vN = normalize(Norm.xyz); gl_Position = kzProjectionCameraWorldMatrix * vec4(positionWorld.xyz, 1.0);
with
mat4 localToWorldMatrix = kzWorldMatrix * localToSkinMatrix; vec4 positionWorld = localToWorldMatrix * vec4(kzPosition.xyz, 1.0); vViewDirection = positionWorld.xyz - kzCameraPosition; vec3 V = normalize(vViewDirection); vec4 Norm = mat4(localToWorldMatrix[0], localToWorldMatrix[1], localToWorldMatrix[2], vec4(0.0, 0.0, 0.0, 1.0)) * vec4(kzNormal.xyz, 0.0); vN = normalize(Norm.xyz); gl_Position = kzProjectionCameraWorldMatrix * localToSkinMatrix * vec4(kzPosition.xyz, 1.0);
Hardware key handling changes¶
To handle hardware key input, you must use key manipulators. In Kanzi 3.8 and Key Up messages are replaced with the Key Pressed and Key Released messages.
When you open your project in Kanzi Studio, Kanzi Studio automatically converts projects that use Key Down and Key Up messages with Key Pressed and Key Released messages and adds a Key Manipulator trigger to the node of the message with the key present in the condition. However, Kanzi Studio automatically converts only the Key Down and Key Up messages that use equality sign in their conditions. If in conditions of these message you use operations other that equality, you must manually convert all such key manipulators.
Focus changes¶
The Screen node is no longer a focus scope that provides focus chain navigation functionality. To use focus chain navigation in your project:
Set either the first node under the Screen node or a node where you want to use focus navigation, to be a focus group or a focus fence
Enable the Focusable property for that node.
See Focus.
Font changes¶
Renamed the
Font
class toFontRuntime
, which now also holds the font style. As a result of this,TextFormat
,TextLayouter
, andTextShaper
now takeFontRuntime
instead ofFont
.Removed the
Node::FontProperty
and replaced its functionality with:Node::FontFamilyProperty
FontStyleConcept::WeightProperty
FontStyleConcept::StyleProperty
Moved and renamed these properties from the
TextBlockConcept
to theFontStyleConcept
class:Kanzi 3.7
Kanzi 3.8
TextBlockConcept::FontSizeProperty
FontStyleConcept::SizeProperty
TextBlockConcept::CharacterSpacingProperty
FontStyleConcept::CharacterSpacingProperty
TextBlockConcept::FixedCharacterWidthProperty
FontStyleConcept::FixedCharacterWidthProperty
TextBlockConcept::LineSpacingProperty
FontStyleConcept::LineSpacingProperty
Made these changes to the
FontManager
class:Replaced
FontManager::createFont
with the functionality ofFontManager::getRuntimeFont
introduced in Kanzi 3.8.Removed
FontManager::getFontFamily
. You can get the font family as a resource from theResourceManager
.Removed
FontManager::createFontFamily
. UseFontFamily::create
instead.
Moved these functions from
TextFormat
andTextLayouter
classes to theFontStyleDefinition
class:Kanzi 3.7
Kanzi 3.8
TextFormat::setLineSpacing
,TextLayouter::setLineSpacing
FontStyleDefinition::setLineSpacing
TextFormat::getLineSpacing
,TextLayouter::getLineSpacing
FontStyleDefinition::getLineSpacing
TextFormat::setCharacterSpacing
,TextLayouter::setCharacterSpacing
FontStyleDefinition::setCharacterSpacing
TextFormat::getCharacterSpacing
,TextLayouter::getCharacterSpacing
FontStyleDefinition::getCharacterSpacing
TextFormat::setFixedCharacterWidth
,TextLayouter::setFixedCharacterWidth
FontStyleDefinition::setFixedCharacterWidth
TextFormat::getFixedCharacterWidth
,TextLayouter::getFixedCharacterWidth
FontStyleDefinition::getFixedCharacterWidth
TextFormat::setShapingEnabled
,TextLayouter::setShapingEnabled
FontStyleDefinition::setShapingEnabled
Messages changes¶
Removed
kzuMessageType
. UseAbstractMessageTypeDescriptor
instead.Removed the constructor of
MessageArguments
that takesAbstractMessageType
as parameter. To dispatch messages usingAbstractMessageType
, useNode::dispatchAbstractMessage()
.
Prefab View node changes¶
Prefab View nodes no longer recreate the node tree if the Prefab Template property (PrefabProperty
) does not change. If your application relies on Kanzi to recreate the node tree on property write, such as with the On Attached trigger, you can force the recreation of the node tree by setting the Prefab Template first to an empty value.
Kanzi Engine plugin metadata changes¶
Changed the syntax of Kanzi Engine plugin metadata attribute SortingIndex
to metadata.sortingIndex
. See sortingIndex.
Other changes¶
Moved these headers to new locations:
Headers
Kanzi 3.8 location
Templates:
trigger_template.hpp
<KanziWorkspace>/Engine/include/kanzi/core.ui/template
Triggers:
message_trigger.hpp
on_attached_trigger.hpp
on_property_changed_trigger.hpp
timer_trigger.hpp
<KanziWorkspace>/Engine/include/kanzi/ui/node_component/trigger
Actions:
dispatch_message_action.hpp
forwarding_action.hpp
play_animation_action.hpp
set_property_action.hpp
write_log_action.hpp
set_focus_action.hpp
move_focus_action.hpp
<KanziWorkspace>/Engine/include/kanzi/ui/action
Animation node compoments:
animation_player.hpp
property_driven_animation_player.hpp
property_field_target_interpolation_timeline_playback.hpp
property_target_interpolation_timeline.hpp
property_target_interpolation_timeline_playback.hpp
property_target_interpolator.hpp
<KanziWorkspace>/Engine/include/kanzi/ui/node_component/animation
Flipped the sign of the
PanManipulator::MovedMessage
delta.Calls in the
Mesh
andRenderer
classes that handle changing either vertex or index data now take as bufferConstByteSpan
instead of the raw pointer and size.Moved kanzi/core/math/rational.hpp to kanzi/core/cpp/rational.hpp.
Removed
kzs_math
. Usekanzi/core/cpp/limits.hpp
,kanzi/core/cpp/math.hpp
,kanzi/core/math/math_utils.hpp
,kanzi/core/cpp/algorithm.hpp
instead.Removed
kzsThread
. Usestd::thread
instead.Removed
kzsThreadSleep
. Usestd::this_thread::sleep_for
instead.Removed
kzsThreadLocalStorage
. Usethread_local
instead.Removed
KzcFile
,KzcOutputStream
, andKzcInputStream
. UseReadOnlyDiskFile
,WriteOnlyDiskFile
,ReadOnlyMemoryFile
,MemoryParser
,MemoryWriter
, and file_util.hpp instead.