hoops编程指南:04.4用户交互突出显示

user interaction highlighting

1.突出显示

在执行选择之后,通常需要向用户提供关于所选内容的视觉反馈。例如,场景可能包含由多个几何体表示的飞机机翼的图片。然而,HOOPS Visualize对飞机机翼这一独特概念一无所知。因此,如果要在用户选择整个机翼的任何部分后高亮显示整个机翼,则需要找出所有相关的几何图形并将其全部高亮显示。根据模型的复杂性,这可能是一项非常重要的任务。

本节将重点介绍几何图形的一些突出显示方式以及轻松管理突出显示的策略。如何表示高亮显示的细节取决于开发人员。可以选择修改对象的颜色、线宽、面图案、可见性、着色模式或这些属性和其他属性的任意组合。您还必须选择高亮显示算法,这将在下面讨论。

1.1定义命名样式

在HOOPS Visualize中,样式是应用于段的属性集合。样式应用于几何体以在场景中区分几何体。这也是应用高亮效果的推荐方法。在复杂的段树中,可能有一些段没有层次关系,但却共享公共属性。应用样式的一种方法是根据需要为每个段单独设置属性。然而,这不仅效率低,而且不方便——尤其是当修改涉及大量段时。相反,定义和使用样式提供了一种获取一组属性并将其应用于许多线段的便捷方式。可以在线段上设置的任何属性也可以在样式中设置。

创建样式的推荐方法是创建一个新段(可能在样式库中),并在该段上设置定义样式的属性。可以为样式段指定名称。如果要将该样式应用于高亮显示的几何图形,可以调用Define_Highlight,引用样式段的名称。UnDefine_Higlight将删除样式。

1.2突出显示线段

在段级别高亮显示只需打开段并使用先前命名的样式调用Define_Higlight即可。请注意,这将影响打开的段,以及对要修改属性没有自己选项的任何子段。如果希望所有子分段都具有相同的高亮显示属性,而不考虑本地显式设置,则可以使用属性attribute lock选项:

HC_Set_Rendering_Options("attribute lock = color"); /* lock the value of color down the tree */

当您想要高亮显示整个段树时,这非常有用。例如,假设数据库表示具有多个图层的图形,其中包含各种系统,例如HVAC、管道和电气系统。如果GUI处于“图层高亮显示”模式,则可以通过在顶层父段设置所需的高亮显示属性,然后在该段中设置attribute lock来高亮显示选定的图层。

1.2.1选择高亮算法

高亮算法的选择应基于您希望高亮显示的方式。有三种模式可供选择:“InPlace”、“Overlay”和“Spriting”。该模式在Define_Higlight参数中的“quick moves”选项设置。

InPlace

如果要使用部分透明的高亮显示样式,则使用“InPlace”高亮显示选项。InPlace将导致Visualize不绘制高亮显示的几何体本身,因为这样做会导致几何体的颜色与透明高亮显示的颜色混合。因此,根本不绘制几何图形-highlightingj就是“在其位置”的绘制。使用这种高亮显示方法的一个缺点是,当几何体最终取消高亮显示时,必须重新绘制场景。这与“overlay”或“spriting”高亮显示选项形成对比,这些选项可以取消高亮显示而无需重新绘制场景。

Overlay

覆盖高光绘制在场景中所有其他几何体的顶部。这意味着,如果高亮显示部分被遮挡的几何体,则覆盖高亮显示将导致该几何体在视觉上“弹出”,忽略z值。取消高亮显示不会触发重画。

Spriting

Spriting是默认的高光算法。在这种高亮显示模式中,z值被保留,因此您不会得到覆盖高亮显示的弹出效果。它也相当快,尽管与“InPlace”不同,它确实需要绘制两次几何体-一次用于几何体本身,一次用于高光。

1.2.2 Fine-tuning highlight behavior

使用Define_Higlight时,可以使用各种选项来实现所需的高亮显示行为。例如,“passive”选项意味着锁定的属性不会被覆盖。“append”选项将覆盖以前高亮显示定义的任何冲突样式。有关Define_Higlight的详细信息,请参阅API参考手册。

Example

下面是一个突出显示段的示例。为了找到命名样式,必须在最终使用该样式的段或祖先段中定义该样式:

// creating the highlight style, in this case a root segment contains the highlight attributes which are simply yellow for all geometry
HC_KEY styleKey = HC_Open_Segment("/style");
    HC_Set_Color("geometry=yellow");
HC_Close_Segment();
// inserting the shell and setting initial attributes
HC_Open_Segment_By_Key(sceneKey);
    HC_Insert_Shell(pcount, pts, flist_count, faces);
    HC_Set_Color("faces=white, edges=black, windows=white");
    HC_Set_Visibility("edges=on");
    // here is where the style is defined
    HC_Define_Named_Style("myHighlightStyle", "/style");
HC_Close_Segment();

设置场景后,实际高亮显示将按以下方式进行:

HC_Define_Highlight(1, &sceneKey, "myHighlightStyle", "quick moves=overlay");

在这里插入图片描述

1.3突出显示一个对象

段通常包含表示模型离散部分的图形图元。假设我们有一个“小行星”段,每个小行星都有一个外壳。如果GUI处于“单个小行星选择模式”,那么我们需要突出显示单个小行星。在分段级别设置高亮显示属性将不起作用,因为所有小行星都将受到该新属性的影响。因此,我们需要修改数据库,以便只使用新的高亮属性绘制选定的对象。
实现此目的的一种强力方法是将对象(move_By_Key)移动到高亮显示段,然后将其移回原始段以取消高亮显示。然而,这对性能有很大影响,因为更改片段的内容会导致HOOPS触发全屏重绘。为了避免这种全屏重画并提供非常快速的高亮显示/取消高亮显示,应使用一种称为“quickmoves include/reference highlighting”的方法。

1.3.1 quickmoves include/reference highlighting

1.4突出显示查找

1.5HOOPS/MVO Highlighting example

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haimianjie2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值