11.Layers, Containers and Interfaces
图层、容器和接口
当设计一个Ventuz场景时,某些节点的组合或设计会反复出现。例如在演示中使用的按钮或滑块,在整个过程中的呈现和外观都是一致的,唯一变化的是尺寸、位置和标签。
在设计复杂的演示时,另一个常见的主题是场景的语义结构。可能有一个场景负责呈现用户界面,另一个用于与外部设备对话,另一个用于渲染图像集合。在一个视觉空间中拥有所有这些节点不仅令人困惑,而且完全不必要。
在这种情况下,容器节点可以提高生产效率,因此可以将多个节点组合到容器中,形成一个新的节点类型。把多个节点放到容器中形成单个节点,放置到层次结构中,使场景更容易理解,而不是复制整个子树。
1、创建容器
创建容器的方法和创建其它节点的方法相同。通过拖动鼠标左键,将层次结构或内容容器拖动到场景的各个部分。容器都是一些非常通用的节点,而且场景中都会包含不同的容器,所以最好在节点名称上双击鼠标左键,命名一个合适的名称。
容器类型:
![]() |
Hierarchy Container |
可以包含任意数量的层次节点,可以把多个层次节点封装到一个层次节点上 |
![]() |
Output |
提供了将对象链接到层次结构容器的可能性。必须放在层次结构容器中 |
![]() |
Content Container |
可以将任意多个内容节点封装到该节点中 |
![]() |
Container Info |
提供层次结构容器节点的名称和链接索引的信息 |
2、曝光特性
虽然容器或层的设计主要是为了掩盖实现的复杂性,但通常需要从容器外部调整可封装节点的一些属性。一个按钮可以允许用户改变它的颜色和标签,一个电影播放器,我需要一个文件名才能正常工作。
层或容器中节点的任何属性都可以暴露给外部使用。
若要公开属性,请单击属性编辑器中属性名称的鼠标右键,然后从出现的上下文菜单中选择“公开/编辑”。属性名左边的正方形将变成绿色,表示这是一个已公开的属性。注意,公开的属性名必须是容器中唯一的。如果两个属性具有相同的名称会扰乱Ventuz绑定逻辑。
3、层容器
层是一种特殊的容器,它们只能放在图层中。每个层中都可以放内容或层次节点,并公开它们的属性,就像使用层次容器和内容容器一样。如果要编辑层,只要单击层编辑器上的“铅笔”,就可以编辑层上的内容。
每个层都有一个根节点,它放置在层中,不能被移除。在层次结构编辑器的左上角找到一个3D层的根节点。2D层的根节点在内容编辑器中总是可见。根节点的属性也可以像其他节点一样绑定和公开。默认情况下,它的一些属性被暴露,另一些属性需要手动公开以使其从外部访问。另外,层不能放在容器中,因此不能将它们合并到容器中,但可以放到层组中。
4、密封容器
有时,作者希望向另一个用户分发定制的功能。最终用户应该能够渲染和调整功能,但不能看到它是如何完成的。在这种情况下,功能可以封装到一个容器中,然后密封。有两种类型的密封:
简单密封:这种作用类似于容器上的写保护。用户不能进入容器,它是密封的但任何人都可以拆下密封再次打开容器。
•永久密封:永久清除所有进入容器的可能性。这种类型的密封不能撤消。
密封操作:
5、接口容器
在工作中使用容器时,不可避免要修改容器。无论是需要修复的bug还是添加的附加功能,更改都是在一个实例中完成的,手动更新到所有其他实例中。通常的方法是删除所有其他实例,复制修改后的版本并手动重建所有已存在的绑定。接口是容器概念的扩展,以解决上述问题以及其他问题。它们定义一个容器必须提供的属性,以便在场景的某个部分使用。即使在封装的节点被移除时,容器接口也保持完整的属性(因此它的绑定也保持不变)。当容器的内容被替换时,重新公开接口属性就可以完成其它实例的更新。
定义接口:
新定义的接口必须包含容器需要公开的属性。当选择容器时,在属性编辑器的底部会出现一个“接口”按钮。按下它,容器被升级到一个接口容器。容器接口比非容器接口多了两条线。截图中,第一行为非容器接口,第二行为容器接口。
当将容器更改为接口容器时,所有已公开的属性都将成为接口属性。它们之间的区别是,即使属性不再暴露,接口属性仍然在接口上定义。在此之后公开的所有属性也自动成为接口属性。
移除暴露属性的节点时,接口属性保持不变,但以浅灰色显示。若要删除接口属性定义,请双击鼠标左键单击接口属性,然后按“排除”或使用“属性编辑器”底部的“清除”按钮,删除没有相应的暴露节点的所有接口属性。
与公开节点断开连接的接口属性保留其最后有效值。
替换接口内容:
当拖放接口容器时,场景中的所有接口容器都用深灰色边框突出显示。当拖动到目标接口容器上时,该接口容器边框将变为红色。在该状态下释放鼠标按钮不会删除原始节点,但会替换源节点的目标内容。
接口属性被替换后,Ventuz将按照一定规则重新连接接口属性。规则如下:
1、属性类型必须相同
2、属性名必须一样,同时区分大小写
从仓储中拖动出的接口容器也遵循上述规则。为了提高自动连接的性能,必须所有属性都唯一。
6、图层接口
层也可以被转换成图层接口,不过被转换后只能保留微被公开的属性,这样绑定就不会丢失,但他们的内容不会被其它接口的内容替换。
通过仓储,接口容器可以很容易更改或更新其它实例。因此我们可以把接口容器拖到已经打开的仓储中创建仓储项。项目中的每个实例都会引用它,因此可以很容易地更新。
11.Layers, Containers and Interfaces的更多相关文章
- Google C++ Style Guide
Background C++ is one of the main development languages used by many of Google's open-source project ...
- Google C++ 代码规范
Google C++ Style Guide Table of Contents Header Files Self-contained Headers The #define Guard For ...
- TUXEDO管理命令总结
tmboot 启动服务: 参数说明: -l lmid 启动逻辑服务器名为lmcd服务器上的所有进程 -g grpname 启动GROUP名为grpname的所有进程 -i srvid 启动SRV ...
- Whitespace character
In computer science, whitespace is any character or series of whitespace characters that represent h ...
- 用于NLP的CNN架构搬运:from keras0.x to keras2.x
本文亮点: 将用于自然语言处理的CNN架构,从keras0.3.3搬运到了keras2.x,强行练习了Sequential+Model的混合使用,具体来说,是Model里嵌套了Sequential. ...
- RSA 非对称加密【转】
演示代码:https://pan.baidu.com/s/10rfSUUDEEHvCDEYH0oEVCw Base64工具类,可以让rsa编码的乱码变成一串字符序列 1 package com.uti ...
- i2c总线驱动,总线设备(适配器),从设备,从设备驱动的注册以及匹配
常用链接 我的随笔 我的评论 我的参与 最新评论 我的标签 随笔分类 ARM裸机(13) C(8) C++(8) GNU-ARM汇编 Linux驱动(24) Linux应用编程(5) Makefile ...
- VGGNet论文翻译-Very Deep Convolutional Networks for Large-Scale Image Recognition
Very Deep Convolutional Networks for Large-Scale Image Recognition Karen Simonyan[‡] & Andrew Zi ...
- Single VIP LLB and SLB config
Single VIP LLB and SLB config >>>>>>>>>>>>>>>>>&g ...
随机推荐
- 【OpenCV, C++】实现向下光栅追踪检测边缘
设计函数如下: 其中 void gratingdetect(Mat &graysrc, Mat &graydst, int high, int low); 参数列表中,第一项是输入的灰 ...
- 【codeforces 3C】Tic-tac-toe
[链接] 我是链接,点我呀:) [题意] 题意 [题解] 写一个函数判断当前局面是否有人赢. 然后枚举上一个人的棋子下在哪个地方. 然后把他撤回 看看撤回前是不是没人赢然后没撤回之前是不是有人赢了. ...
- RESTFUL 和SOA初探
这篇文章是转载的,restful简单的说就是url明确的指向资源.soa还不好用自己的话解释,但明显不是这样,好吧,我自己的理解就是soa就是访问网站的一个接口.以访问一个blog list为例子, ...
- 最短的计算大数乘法的c程序
#include <stdio.h> char s[99],t[99]; int m,n; void r(int i,int c) { int j=0,k=i; while(k)c+=s[ ...
- 为XCode 6 加入新建类模板
用XCode 6在改动之前用XCode 5 的代码的时候突然间发现 XCode 6已经把新建带有 .xib 类的模板给删去了.而项目的新需求中又要用到新建带有 .xib 的类(用惯了~),全部不得不又 ...
- C#之快速排序
算法描述 1.假定数组首位元素为“枢轴”,设定数列首位(begin)与末位(end)索引: 2.由末位索引对应元素与“枢轴”进行比较,如果末位索引对应元素大于“枢轴”元素,对末位索引减一(end--) ...
- coffeescript遍历json对象
直接给代码: headers = a:"this is a" ,b:"this is b" ,c:"this is c" exheaders ...
- NoSql基础知识
一.为什么要有NoSql 关系型数据库在三个方面存在不足,或者说,比不上NoSQL: 1.大量数据的写入处理 这里说的关系型数据库不擅长大量数据写入,并不是说关系型数据库在进行大批量数据插入的时候,比 ...
- Android中关于横竖屏问题
一.屏幕的方向可以在AndroidManifest.xml文件中通过设置screenOrientation属性来实现, screenOrientation用来指定Activity的在设备上显示的方向, ...
- git实验室
git clone一个项目 jiqing@jiqing-System-Product-Name:/home/wwwroot/default$ sudo git clone http://106.14. ...