与一个窗口系统交互

1.与一个窗口系统交互

在第3.4节中,我们介绍了如何将HOOPS/3dGS连接到本地窗口系统,以便HOOPS知道将其输出发送到何处。这还需要禁用输入处理,本章将对此进行更详细的讨论。

您可以使用禁用输入驱动程序选项禁用HOOPS/3dGS输入处理。此驱动程序选项有两种变体:

HC_Set_Driver_Options("disable input");
HC_Set_Driver_Options("disable input = all");

这两种变体都告诉HOOPS/3dGS,您的应用程序将直接从窗口系统接收输入事件。因此,HOOPS/3dGS不会尝试读取鼠标或键盘等输入设备。

在第一个变体中,HOOPS/3dGS不读取输入设备,但它仍然从窗口系统接收绘画消息(有时称为曝光或损坏事件)。因此,当应用程序收到绘制消息(因为输出窗口的全部或部分被遮挡,然后变为可见)时,HOOPS/3dGS将自动重新绘制其输出窗口。

在第二种变体(“disable input = all”)中,HOOPS/3dGS根本不接收输入消息。因此,应用程序必须接收绘制消息并显式调用::Update_Display。

1.1 控制更新

如果系统选项禁用输入设置为all,则当您调用::Update_Display时,HOOPS将重新绘制整个场景,即使只有一小部分场景需要重新绘制。为了解决这种效率低下的问题,HOOPS/3dGS提供了一个名为::Control_Update的命令。

可以使用::Control_Update命令指定需要重新绘制HOOPS/3dGS数据库的哪些部分。您可以指定要按段、按键(使用::Control_Update_by_key命令)或按区域(使用:Control_Uupdate_area或::Control_Update_area_by_key命令)重画的零件。例如,如果来自窗口系统的绘制消息指定只需要重新绘制输出窗口的一部分,则可以使用::Control_Update_area命令指定要绘制的区域。

在某些情况下,当修改HOOPS/3dGS数据库的一部分时,HOOPS会在该节点自动设置一个标志,然后将其传播到驱动程序段。在下一次显示更新期间,该标志向HOOPS发出信号,以重新绘制树的该部分。

但是,如果要修改不影响场景渲染的属性(如用户选项),则可能不希望触发重画。

要防止标志传播,可以关闭::Define_System_Options中的更新控制选项。

我们建议您在修改特定数据库之前将其关闭,然后再将其打开。默认情况下,更新控制处于打开状态。

当您使用::Control_Update命令(或相关命令)时,您将负责选择要更新的HOOPS数据库的哪些部分。这种责任可能需要认真工作。有关详细信息,请参阅HOOPS/3dGS参考手册中的::Control_Update条目。

1.2 更新显示和应用程序响应

在用户操纵模型的过程中,HOOPS提供了LOD等功能,以帮助应用程序在场景中保持尽可能多的视觉完整性,而对渲染性能的影响尽可能小。然而,更新有时会导致应用程序对用户输入无响应,特别是当HOOPS在一系列用户操作后渲染场景时。

为了确保应用程序在更新期间响应用户输入,可以在调用::update_Display之前使用::set_Driver_Options中的退出更新(exit update)选项设置回调。在更新过程中,HOOPS将定期调用回调。如果您想中断更新以响应用户事件或只是结束更新过程,可以在回调中调用::HIC_Abort_update。我们建议您仅在大量更新的情况下设置此回调。

当更新在渲染整个场景之前结束时,如果没有任何变化,HOOPS可能会在下次更新时继续绘制场景。例如,如果您已使用::Set_Heuristics设置要延迟的最大范围模式,并且正在使用定时更新,则可能会发生这种情况。要了解上次更新是否是上一次更新的延续,可以调用::Show_Device_Info传递恢复更新选项。如果HOOPS返回“是”,则上一次更新是试图完成绘制部分渲染的场景。

以下是如何在Microsoft Windows平台上设置和使用退出更新选项的示例:

void MainForm::MainForm()
{...//Registering the callbackHC_Define_Callback_Name("exit_update_handler", UpdateEventHandler);...
}
void MainForm::SetExitUpdate()
{   HC_Open_Segment_By_Key(m_pView->GetViewKey());//sets the exit update option to UpdateEventHandlerHC_Set_Driver_Options("exit update = exit_update_handler");HC_Close_Segment();
}
void MainForm::UpdateEventHandler(struct ht_net_rendition *nr)
{//Checks to see the left mouse button was pressedint state = GetAsyncKeyState(VK_LBUTTON);if (state & 32768)              HIC_Abort_Update(nr);
}

Hoops编程指南:04_3_user_interaction_window_system_interaction相关推荐

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

    user interaction highlighting 1.突出显示 在执行选择之后,通常需要向用户提供关于所选内容的视觉反馈.例如,场景可能包含由多个几何体表示的飞机机翼的图片.然而,HOOPS ...

  2. Hoops编程指南:03_4_viewing_windows

    viewing_windows 1.HOOPS/3DGS Windows 当HOOPS/3DGS首次开发时,窗口系统并不常见--X-Windows和Microsoft Windows都还不存在.在那些 ...

  3. 《树莓派Python编程指南》——2.2 一个Python游戏:猫和老鼠

    本节书摘来自华章计算机<树莓派Python编程指南>一书中的第2章,第2.2节,作者:(美) Alex Bradbury Ben Everard更多章节内容可以访问云栖社区"华章 ...

  4. 《树莓派Python编程指南》—— 1.3 树莓派快速指南

    本节书摘来自华章计算机<树莓派Python编程指南>一书中的第1章,第1.3节,作者:(美) Alex Bradbury Ben Everard更多章节内容可以访问云栖社区"华章 ...

  5. 《树莓派Python编程指南》——2.3 小结

    本节书摘来自华章计算机<树莓派Python编程指南>一书中的第2章,第2.3节,作者:(美) Alex Bradbury Ben Everard更多章节内容可以访问云栖社区"华章 ...

  6. 写给NLP研究者的编程指南

    点击上方↑↑↑蓝字关注我们~ 参加 2019 Python开发者日,请扫码咨询 ↑↑↑ 作者 | 赤乐君,日本某大手研发部门的NLP工程师.关注关系抽取与知识图谱的相关研究. 来源 | 赤乐君的知乎专 ...

  7. 高并发编程_高并发编程系列:7大并发容器详解(附面试题和企业编程指南)...

    不知道从什么时候起,在Java编程中,经常听到Java集合类,同步容器.并发容器,高并发编程成为当下程序员需要去了解掌握的技术之一,那么他们有哪些具体分类,以及各自之间的区别和优劣呢? 只有把这些梳理 ...

  8. 《Python面向对象编程指南》——1.2 基类中的__init__()方法

    本节书摘来自异步社区<Python面向对象编程指南>一书中的第1章,第1.2节,作者[美]Steven F. Lott, 张心韬 兰亮 译,更多章节内容可以访问云栖社区"异步社区 ...

  9. 类型参数的约束(C# 编程指南)

    类型参数的约束(C# 编程指南) Visual Studio 2005 其他版本 38(共 55)对本文的评价是有帮助 - 评价此主题 在定义泛型类时,可以对客户端代码能够在实例化类时用于类型参数的类 ...

最新文章

  1. Linux编译lclntsh,Linux下编译C/C++时,出现/usr/bin/ld: cannot find -l*** 错误的处理
  2. Annotation
  3. [转]OData and Authentication – Part 6 – Custom Basic Authentication
  4. java 8 语法糖_Java8的lamada算是一种语法糖吗?
  5. WEB服务器 - Apache、Nnginx、Lighttpd的比较和择优(转)
  6. php 可维护性的代码,软件的可复用性和可维护性
  7. php过程函数,php流程控制和函数
  8. 北漂多年 ,雷军终于买房了:壕掷52亿元!
  9. PNAS A scalable pipeline for designing reconfigurable organisms
  10. win10找回自带的windows照片查看器——打开jpg、png、gif、psd其他格式的图片
  11. 华为手机序列号前三位_华为所有型号交换机查看序列号方法
  12. 怎么更改wifi频段_wifi信道和频段怎么设置?
  13. javascript 调用webservice 的几种方法
  14. vs code php终端输出中文乱码及环境配置解决办法
  15. vnc4server安装路径_redhat6.9VNC安装目录和注意项
  16. 上天入地无所不能的C语言(二)
  17. JavaScript系列文章:变量提升和函数提升
  18. java 多重继承的困境
  19. xgboost中自定义损失函数的使用方法
  20. 在python中逻辑量有_(五)我的魔法竟有了一丝逻辑

热门文章

  1. 2022年R2移动式压力容器充装复审模拟考试及R2移动式压力容器充装考试试题
  2. Gartner 魔力象限:全生命周期 API 管理 2020
  3. 一键获取拼多多商品详情
  4. MATLAB中调用MEX文件相关的介绍
  5. 第2章第1节:文本排版技巧:选择适当的字体和字号 [PowerPoint精美幻灯片实战教程]
  6. (毕设课设)基于SSM的食堂订餐小程序(微信小程序+后台管理系统)
  7. couchBase相关入门
  8. 好的计算机类的三本大学排名,【三本大学排名】_排名前十的公办三本大学名单...
  9. 深入理解Java自动装箱拆箱机制(Autoboxing and unboxing)
  10. 利用编译器宏完美的输出调试信息