与一个窗口系统交互

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. 静态call 动态call LINK
  2. Android之使用AchartEngineActivity引擎绘制柱状图、曲线图
  3. 电气期刊论文实现:基于遗传优化的非侵入式居民负荷分解方法(有代码)
  4. 给WIN7安装盘添加双PE3.0
  5. gis环境设置在哪_三维GIS平台的可视化应用 (下)
  6. 新的公司:Dendrite
  7. 应付账款账龄分析模板_企业财务报表分析论文应如何着手?
  8. 深度学习笔记(44) Triplet 损失
  9. 【Sentry】Sentry安装
  10. mysql典型安装和自定义_Mysql8.0.19下载安装—windows版本自定义安装
  11. 使用网络调试助手 MQTT接入阿里云物联网平台,逐字节讲解,适用单片机/ESP8266接入阿里云
  12. idea设置java环境变量_idea的环境变量怎样设置
  13. 哈夫曼编码问题(贪心算法)
  14. caffe入门学习(5):绘制网络结构图
  15. Python数据预处理--Gensim构建语料词典
  16. 用Python 计算t分布的置信区间
  17. 【web素材】11—15套免费网站后台管理模板
  18. QT软件开发-基于FFMPEG设计视频播放器-流媒体播放器(五)
  19. 【其他】笔记本的辐射有多大?
  20. 香港流行乐黄金二十年——经典歌手(音乐人)全面回顾 一

热门文章

  1. android,扫描雷达,新浪威盾 笔记
  2. 一个减少App Store审核被拒的小技巧--善用iTunes Connect中被遗忘的字段
  3. 20230109英语学习
  4. 边缘检测系列4:【RCF】基于更丰富的卷积特征的边缘检测
  5. jquery 动态加载js插件
  6. 计算机中级职称.临沂,山东临沂2017年中级会计职称考试时间:9月9日-10日
  7. java的自动装箱_详解Java 自动装箱与拆箱的实现原理
  8. mysql数据库错误1317_我的mysql数据库好像是连接不上,两天了找不到错误,急求大家的帮助...
  9. 内推 | 字节提前批快开始了。。。。
  10. 读卡器(8年前的)插上SD卡提示未插入修复教程,仅适用于放置较久的读卡器。