热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

obbvtk定点坐标_VTK三维坐标点拾取

三维坐标拾取,可以借助vtkPointPicker或者vtkCellPicker,其官方例程序参见annotatePick.py或QtVTKRender

三维坐标拾取,可以借助vtkPointPicker或者vtkCellPicker,其官方例程序参见annotatePick.py或QtVTKRenderWindows.cxx。

QtVTKRenderWindows.cxx例子中说明,如果将vtkCellPicker与vtkImagePlaneWidget结合使用时,只需要使用vtkImagePlaneWidget的SetPicker()将它们两者绑定即可实现坐标点的拾取和显示;然而,如果想在三维重建时,实现目标的三维坐标拾取,可不那么简单。下面是VTK6.2.0的使用文档中对含有SetPicker()函数的类的总结:

SetPicker() : vtkRenderWindowInteractor , vtkBalloonWidget , vtkImagePlaneWidget

由上面的总结可见,只有3个类是含有SetPicker()函数的,也就是说只有3个类可以与vtkCellPicker绑定。在三维重建效果显示时,通常使用的是第1个:vtkRenderWindowInteractor。

将vtkCellPicker与vtkRenderWindowInteractor通过SetPicker()绑定之后,并非就万事大吉。这时候还不能触发三维坐标点的采集。此外,就算继续设定vtkCellPicker的事件处理函数,也还不行。

那么,要怎样才能触发vtkCellPicker的采集呢?答案是必须调用其Pick()函数,而且是调用一次,就触发一次!下面将用一个实例说明。

1 vtkCellPicker的创建并且与Interactor绑定

// Cell Picker

m_pvtkCellPicker =

vtkSmartPointer::New();

m_pvtkCellPicker->SetTolerance( 0.005 );

vtkSmartPointer callback_picker = vtkSmartPointer ::New();

callback_picker->SetCallback( handle_cell_picker );

callback_picker->SetClientData( this );

m_pvtkCellPicker->AddObserver( vtkCommand::EndPickEvent, callback_picker );

this->ui->qvtkWidget3D->GetInteractor()->SetPicker( m_pvtkCellPicker );

2 vtkCellPicker回调函数

static void handle_cell_picker(vtkObject *caller, unsigned long eid, void *clientdata, void *calldata)

{

QString hints;

double selPt[3];

double normal[3];

//float pixelValue = 0;

RSAMeasurement3D *parent= (RSAMeasurement3D *)clientdata;

if ( !parent )

return;

if ( !parent->m_bHasRendered3D ) {

parent->m_pvtkTextActor->VisibilityOff();

return;

}

if ( Qt::Unchecked == parent->ui->enablePickerCheckBox->checkState() ) {

// parent->m_pvtkTextActor->VisibilityOff();

return;

}

if ( parent->m_pvtkCellPicker->GetCellId() <0)

return;

parent->m_pvtkCellPicker->GetPickPosition( selPt );

parent->m_pvtkTextActor->VisibilityOn();

parent->m_pvtkConeActor->SetPosition( selPt );

}

3 触发坐标点采集

我们的设想是&#xff0c;点击以下鼠标&#xff0c;采集一次坐标。首先要设置Interactor的单击处理回调函数&#xff1a;

vtkSmartPointer callback_interactor &#61;

vtkSmartPointer ::New();

callback_interactor->SetCallback( handle_interactor_event );

callback_interactor->SetClientData( this );

this->ui->qvtkWidget3D->GetInteractor()->AddObserver(

vtkCommand::LeftButtonPressEvent, callback_interactor );    在回调函数里面&#xff0c;触发坐标采集

static void handle_interactor_event(vtkObject *caller, unsigned long eid, void *clientdata, void *calldata)

{

//qDebug() <<"left button release";

RSAMeasurement3D *parent&#61; (RSAMeasurement3D *)clientdata;

if ( !parent )

return;

int *pick &#61; parent->ui->qvtkWidget3D->GetInteractor()->GetEventPosition();

parent->m_pvtkCellPicker->Pick(

(double)pick[0],

(double)pick[1],

0.0,

parent->m_pvtkRenderer3D );

}

参考资料

[1]VTK拾取三维空间细胞(vtkcell)坐标参数

[2]vtk捡选实例

[3]vtk坐标系统

[4]VTK拾取相关的类(转)

[5]用vtk在屏幕中选一个点,并加上标记

[6][vtkusers] vtkCellPicker failing to pick vtkPolyLine (using Python and wx)



推荐阅读
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • MicrosoftDeploymentToolkit2010部署培训实验手册V1.0目录实验环境说明3实验环境虚拟机使用信息3注意:4实验手册正文说 ... [详细]
  • 在Delphi7下要制作系统托盘,只能制作一个比较简单的系统托盘,因为ShellAPI文件定义的TNotifyIconData结构体是比较早的版本。定义如下:1234 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • Linux下MySQL 8.0.28安装指南
    本文详细介绍了在Linux系统上安装MySQL 8.0.28的步骤,包括下载数据库、解压数据包、安装必要组件和启动MySQL服务。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 本文详细介绍了批处理技术的基本概念及其在实际应用中的重要性。首先,对简单的批处理内部命令进行了概述,重点讲解了Echo命令的功能,包括如何打开或关闭回显功能以及显示消息。如果没有指定任何参数,Echo命令会显示当前的回显设置。此外,文章还探讨了批处理技术在自动化任务执行、系统管理等领域的广泛应用,为读者提供了丰富的实践案例和技术指导。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • 在Android平台上,视频监控系统的优化与应用具有重要意义。尽管已有相关示例(如http:www.open-open.comlibviewopen1346400423609.html)展示了基本的监控功能实现,但若要提升系统的稳定性和性能,仍需进行深入研究和优化。本文探讨了如何通过改进算法、优化网络传输和增强用户界面来提高Android视频监控系统的整体效能,以满足更复杂的应用需求。 ... [详细]
  • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
author-avatar
爱情丫丫2502895047
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有