图层、容器和接口

当设计一个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的更多相关文章

  1. Google C++ Style Guide

    Background C++ is one of the main development languages used by many of Google's open-source project ...

  2. Google C++ 代码规范

    Google C++ Style Guide   Table of Contents Header Files Self-contained Headers The #define Guard For ...

  3. TUXEDO管理命令总结

    tmboot  启动服务: 参数说明: -l  lmid 启动逻辑服务器名为lmcd服务器上的所有进程 -g grpname 启动GROUP名为grpname的所有进程 -i  srvid 启动SRV ...

  4. Whitespace character

    In computer science, whitespace is any character or series of whitespace characters that represent h ...

  5. 用于NLP的CNN架构搬运:from keras0.x to keras2.x

    本文亮点: 将用于自然语言处理的CNN架构,从keras0.3.3搬运到了keras2.x,强行练习了Sequential+Model的混合使用,具体来说,是Model里嵌套了Sequential. ...

  6. RSA 非对称加密【转】

    演示代码:https://pan.baidu.com/s/10rfSUUDEEHvCDEYH0oEVCw Base64工具类,可以让rsa编码的乱码变成一串字符序列 1 package com.uti ...

  7. i2c总线驱动,总线设备(适配器),从设备,从设备驱动的注册以及匹配

    常用链接 我的随笔 我的评论 我的参与 最新评论 我的标签 随笔分类 ARM裸机(13) C(8) C++(8) GNU-ARM汇编 Linux驱动(24) Linux应用编程(5) Makefile ...

  8. VGGNet论文翻译-Very Deep Convolutional Networks for Large-Scale Image Recognition

    Very Deep Convolutional Networks for Large-Scale Image Recognition Karen Simonyan[‡] & Andrew Zi ...

  9. Single VIP LLB and SLB config

    Single VIP LLB and SLB config >>>>>>>>>>>>>>>>>&g ...

随机推荐

  1. JavaScript 面向对象的编程(一)

    面向对象的JS var CheckObject = function(){ this.checkName = function(){ console.log('checkName'); } this. ...

  2. BNUOJ 2528 Mayor's posters

    Mayor's posters Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVA. Origin ...

  3. 有一张表里面有上百万的数据,在做查询的时候,如何优化?从数据库端,java端和查询语句上回答

    原文:https://www.2cto.com/database/201612/580140.html 1)数据库设计方面: a. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 o ...

  4. PHP rand()和mt_rand()的区别

    rand()和mt_rand()作用都是产生一个随机整数,都有两种使用形式: 1.int rand(void) / int mt_rand(void) 2.int rand(int $min, int ...

  5. P1516 青蛙的约会 洛谷

    https://www.luogu.org/problem/show?pid=1516 题目描述 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上, ...

  6. 用xtrabackup+binlog恢复误删除的数据库

    关键技术,数据库产生的二进制文件,在主库就是binlog在从库就是relay-log,用最新的物理备份可以新启动个新实例,可以模拟个从库,把主库的binlog复制到新的数据库实例上,利用主从复制和物理 ...

  7. 简单的事件处理类Event

    class Event{ constructor(){ this.handlers=[] } on(type,fn){ //订阅事件 if(!this.handlers[type]){ this.ha ...

  8. 安装elasticsearch遇到的签名和目标被配置多次的问题

    命中:6 http://ppa.launchpad.net/ondrej/php/ubuntu bionic InRelease获取:7 http://packages.elastic.co/elas ...

  9. 一个经典的消费者和生产者的实现(linux )

    #include <stdio.h>   #include <pthread.h>   #define BUFFER_SIZE 16 // 缓冲区数量       struct ...

  10. Android获取全部存储卡挂载路径

    近期因项目需求.须要在存储卡查找文件,经測试发现部分手机挂载路径查找不到,这里分享一个有效的方法. /** * 获取全部存储卡挂载路径 * @return */ public static List& ...