C

`.uia` 文件格式

待办:需要重写。

每个项目都有一个 .uia 文件(我们喜欢把它念作 "OO-yah!"),表示应用程序。这个 XML 文件在您使用 Qt 3D Studio 创建新项目时自动创建。该文件包含一个 <assets> 部分,之后是零个或多个 <statemachine> 部分

<?xml version="1.0" encoding="UTF-8"?>
<application scalemode="center" watermark-location="1.0 1.0" xmlns="http://nvidia.com/uicomposer">
  <assets initial="#IVI">
    <behavior     id="MainApp" src="scripts/App.lua"                        />
    <presentation id="IVI"     src="IVI.uip"                                />
    <presentation id="music"   src="sub_music.uip"                          />
    <presentation id="radio"   src="sub_radio.uip"   active="false"         />
    <statemachine id="logic"   src="./charts/app.scxml" datamodel="getIt()" />
    <renderplugin id="plugin:mapviewer" src="scripts/mylib.so" args="whee"  />
  </assets>

  <statemachine ref="#logic">
    <visual-states>
      <state ref="Menu">
        <enter>
          <goto-slide element="IVI:Scene.Layer3D.Camera" slide="Animated"/>
        </enter>
        <exit>
          <goto-slide element="IVI:Scene" rel="next" wrap="true"/>
        </exit>
      </state>
      <state ref="Climate"><enter>
        <call element="IVI:Scene.Menu" handler="focusItem" arguments="'Climate'"/>
        <set-attribute element="IVI:Scene.Subs" attribute="sourcepath" value="'phone'"/>
      </enter></state>
      <transition ref="transition_93">
        <fire-event element="IVI:Scene" event="onSomethingHappened" />
      </transition>
    </visual-states>
  </statemachine>
</application>

应用程序

<application> 元素包含文件的全部内容,并指定应用程序显示的简单属性。

scalemode="..." 属性指定当供给的视口大小与该演示大小不同时,"初始展示"(见下文)的渲染方式。此属性有三个合法值

  • scalemode="center" - 在 Studio 中指定的尺寸渲染演示。额外的内容被裁剪,额外的空间被信封。未指定时,此设置是默认行为。
  • scalemode="fit" - 保留初始演示的宽高比,必要时信封。
  • scalemode="fill" - 演示总是渲染以填满视口。

有关 scalemode 设置的行为以及与层大小和摄像机缩放交互的更多信息,请参阅 使用缩放模式

资产

<assets> 部分可能包含一个或多个 <behavior/><presentation/><statemachine/><renderplugin/> 元素,顺序不限。

每个资产都必须有一个唯一的 id="..." 属性和一个 src="..." 属性,用于引用文件的存储位置(相对于项目文件夹)。

<statemachine/> 资产可以有可选的 datamodel="..." 属性。如果存在,则此属性必须提供有效 Lua 代码,以运行返回 Lua 表格的操作。该表格的内容将用于状态图数据模型的初始值。

<renderplugin/> 资产可以有可选的 args="..." 属性。这提供了初始化插件共享库所需的参数。

应用程序不需要任何 <presentation/> 元素即可运行。这允许您创建状态图并测试,而无需创建任何视觉元素。然而,此类应用程序将不会在屏幕上显示任何内容。

如果提供了多个 <presentation/> 资产,则第一个列表中的内容被选择为应用程序的 "初始"(最外层)演示,该演示将渲染;其余的被视为 "子演示",可能由主要演示引用。要选择不同的演示作为初始,则 <assets> 元素可以有 initial="\#presentation-id" 属性,该属性引用要使用的演示作为主要演示。

<presentation/> 元素可以 选择性 有一个 active="..." 属性,该属性的值为 true(默认)或 false。请参阅下面的 <set-presentation> 动作,以获取有关使演示无效化的影响的更多信息。

所有 <behavior/> 资产都将在任何 <statemachine/> 资产初始化之前初始化,无论元素顺序如何。这允许您在应用程序行为中创建全局函数,然后使用该函数来初始化状态图的数据模型。

视觉状态

在上述的《<assets>》部分中,每个《<statemachine/>》元素之后都可能有与其配对的《<statemachine>》元素。这些元素为状态图逻辑状态和展示(们)显示的视觉影响之间提供了粘合剂。

<statemachine>》部分必须有一个引用状态图的《ref="\#statemachine-asset-id"》属性。

<statemachine>》部分的唯一允许子元素是《<visual-states>》。《<visual-states>》元素可以包含零个或多个《<state>》和《<transition>》元素,顺序不限。

  • 每个《<state>》元素都必须有一个《ref="StateId"》属性,描述与其关联的状态图中的有效状态ID。它可能包含《<enter>`和<exit>`元素,描述当状态被进入或退出时会发生什么。每个这些元素都可能包含零个或多个视觉动作元素(见下文)。
  • 每个《<transition>》元素都必须有一个《ref="TransitionId"`》属性,描述其关联状态图中的有效转换ID。它可以含有零个或多个描述当转换发生时会发生什么的视觉动作元素。

视觉动作

每个《<enter>`,<exit>`,和《<transition>`》元素的 Finnish elements 可以是以下任何之一(数量不限,顺序不限)

<goto-slide element="..."/>

更改场景或组件幻灯片,可能会改变其播放方式.

  • element 属性必须引用一个在演示中的场景或组件元素的完整路径,以该演示的ID和冒号作为前缀。例如,"element="IVI:Scene.Background.Theme""。
  • 操作必须具有 任一 slide="..."rel="..." 属性(但不可同时具有两者)
  • slide 属性必须引用要转到幻灯片的名称。
  • rel 属性必须是 rel="next"rel="prev",描述改变幻灯片的方向。
    • (可选) 使用 rel 时,也可提供 wrap="true" 以指示当幻灯片变化超过列表末尾时将回绕到另一端。
  • (可选) 指定 direction="..." 将强制在新幻灯片上播放的方向为 forwardreverse
  • 如果方向为 reverse 且没有指定 time="..." 属性(见下文)则播放将从幻灯片的结尾时间开始。
  • (可选) 指定 mode="..." 将覆盖幻灯片的播放模式,使其为下列之一: stopatendloopingpingpingpong, 或 playthrough
  • 如果指定了 playthrough,则还必须添加 playthroughto="...",可以是播放到幻灯片的名称,或者值 nextprevious
  • (可选) 使用 state="...",可选使用 playpause 来覆盖为幻灯片设置的播放状态。
  • (可选) 使用 rate="...",使用一个浮点数将使播放速度乘以这个值。
  • 例如,如果值为 2 将使幻灯片上的动画以正常速度的两倍回放,而值为 0.5 将使动画以半速播放。
  • 对负速率值的运行时行为没有保证;使用 direction="reverse" 进行回放。
  • (可选) 使用 time="...",使用一个浮点数将使播放从指定的时间开始。

<call element="..." handler="..."/>

在演示行为上调用一个函数.

  • element 属性必须引用一个到演示中行为元素的完整 id 前缀路径。
  • handler 属性必须匹配所引用行为的表格上函数值的名称。
  • (可选) 指定一个 arguments="..." 属性允许你将参数传递给函数。此属性的值在全局 Lua 环境中评估。如果结果是一个 Lua 表,则将其视为一个列表,并通过 unpack() 将每个整数键值传递给函数。如果结果是任何其他类型的价值,它作为单个第一个参数传递给函数。
  • 若只传递一个参数,请使用 arguments="42"
  • 若传递多个参数,请使用 arguments="{1,2,3}"
  • 若传递单个 Lua 表到函数,请在其中包一个列表表,例如 arguments="{{hello='World',valid=true}}"

<set-attribute element="..." attribute="..." value="...">

设置演示元素上的值.

  • element 属性必须引用演示中任何元素的完整 id 前缀路径。
  • attribute 属性必须匹配该元素上的脚本名称。
  • value 属性必须提供要评估的 Lua 表达式,其结果将作为元素的值设置。

例如,<set-attribute element="IVI:Scene.Background" attribute="name" value="'new name'"/>;注意 value 属性中需要的额外引号来设置字符串值。

<set-presentation ref="..." attribute="active" value="...">

使演示活动/非活动.

  • ref 必须是 <assets> 部分中 <presentation/> 的 id。
  • attribute 属性必须等于 active(未来的版本可能允许控制更多的演示属性。)
  • value 属性必须是 truefalse(当前不支持任意 Lua 表达式。)

例如,<set-presentation ref="music" attribute="active" value="true"/>。

注意

  • 使演示非活动可以使演示内的任何元素、行为和动画停止更新。它还会阻止处理该演示内的事件。但是,这并不阻止演示的渲染。非活动演示将继续使用最后更新的信息进行渲染。
  • 明确使演示非活动可以显著提高性能,取决于非活动演示的数量和大小。
  • 非活动演示不会被“暂停”。当演示重新激活时,动画将在它们应该在的时间继续,而不是在演示使它们非活动时。

<fire-event element="..." event="...">

在演示的元素上触发事件.

  • element 属性必须引用演示中任何元素的完整 id 前缀路径。
  • event 属性必须是触发事件的名称。

在特定的 Qt 许可下可用。
了解更多。