VTK屏幕坐标与世界坐标转换(Qt)

void VtkMPRWidget::mousePressEvent( QMouseEvent* event )
{
 m_bPressed = true;
 m_pressPoint = event->pos();
}

void VtkMPRWidget::mouseMoveEvent( QMouseEvent* event )
{
 if( !m_bPressed )
  return;
 m_movePoint = event->pos();
 int nHeight = height();
 double* dPressValue;
 double* dMoveValue;
 vtkSmartPointer<vtkCoordinate> pCoorPress = vtkSmartPointer<vtkCoordinate>::New();
 pCoorPress->SetCoordinateSystemToDisplay();
 pCoorPress->SetValue( m_pressPoint.x(), nHeight - m_pressPoint.y(), 0.0 );
 dPressValue = pCoorPress->GetComputedWorldValue( m_pRenderer );
 vtkSmartPointer<vtkCoordinate> pCoorMove = vtkSmartPointer<vtkCoordinate>::New();
 pCoorMove->SetCoordinateSystemToDisplay();
 pCoorMove->SetValue( m_movePoint.x(), nHeight - m_movePoint.y(), 0.0 );
 dMoveValue = pCoorMove->GetComputedWorldValue( m_pRenderer );
 double dPressVal[3] = { dPressValue[0], dPressValue[1], dPressValue[2] };
 double dMoveVal[3] = { dMoveValue[0], dMoveValue[1], dMoveValue[2] };
 vtkSmartPointer<vtkPoints> pPoints = vtkSmartPointer<vtkPoints>::New();
 pPoints->InsertNextPoint( dPressVal[0], dPressVal[1], 0.0 );
 pPoints->InsertNextPoint( dPressVal[0], dMoveVal[1], 0.0 );
 pPoints->InsertNextPoint( dMoveVal[0], dMoveVal[1], 0.0 );
 pPoints->InsertNextPoint( dMoveVal[0], dPressVal[1], 0.0 );
 vtkSmartPointer<vtkLine> line1 = vtkSmartPointer<vtkLine>::New();
 line1->GetPointIds()->SetId( 0, 0 );
 line1->GetPointIds()->SetId( 1, 1 );
 vtkSmartPointer<vtkLine> line2 = vtkSmartPointer<vtkLine>::New();
 line2->GetPointIds()->SetId( 0, 1 );
 line2->GetPointIds()->SetId( 1, 2 );
 vtkSmartPointer<vtkLine> line3 = vtkSmartPointer<vtkLine>::New();
 line3->GetPointIds()->SetId( 0, 2 );
 line3->GetPointIds()->SetId( 1, 3 );
 vtkSmartPointer<vtkLine> line4 = vtkSmartPointer<vtkLine>::New();
 line4->GetPointIds()->SetId( 0, 3 );
 line4->GetPointIds()->SetId( 1, 0 );
 vtkSmartPointer<vtkCellArray> lineArray = vtkSmartPointer<vtkCellArray>::New();
 lineArray->InsertNextCell( line1 );
 lineArray->InsertNextCell( line2 );
 lineArray->InsertNextCell( line3 );
 lineArray->InsertNextCell( line4 );
 if( NULL == m_pPolyData )
 {
  m_pPolyData = vtkSmartPointer<vtkPolyData>::New();
  m_pPolyData->SetPoints( pPoints );
  m_pPolyData->SetLines( lineArray );
  m_pPolyData->Modified();
  vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
  mapper->SetInputData( m_pPolyData );
  vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
  actor->SetMapper( mapper );
  actor->GetProperty()->SetLineWidth( 1.5 );
  actor->GetProperty()->SetColor( 0.3, 0.8, 0.0 );
  m_pRenderer->AddActor( actor );
  m_pRenderer->Modified();
  m_pRednerWindow->Modified();
  m_pRednerWindow->Render();
  return;
 }
 m_pPolyData->SetPoints( pPoints );
 m_pPolyData->SetLines( lineArray );
 m_pPolyData->Modified();
 m_pRednerWindow->Modified();
 m_pRednerWindow->Render();
}

void VtkMPRWidget::mouseReleaseEvent( QMouseEvent* event )
{
 m_bPressed = false;
 m_pPolyData = NULL;
 //FireObjectChanged();
}
时间: 2024-12-25 23:10:31

VTK屏幕坐标与世界坐标转换(Qt)的相关文章

将Unity中的世界坐标转换成NGUI中的坐标

将Unity中的世界坐标转换成NGUI中的坐标,比如可用于自制血条等.代码如下: 1 using UnityEngine; 2 using System.Collections; 3 public class Healthbar : MonoBehaviour { 4 public GameObject TargetObject; //目标物体.这里是指Cube 5 public Camera worldcamera; //世界相机. 6 public Camera guiCamera; //U

五、VTK读取图片,然后QT显示

一.前言 今天实现的主要功能是通过vtk读取jpg图片(只能够读取.jpg文件),然后通过QT显示出来,整个程序的框架是QT GUIApplication 版本: VS 2019 VTK 8.2.0 QT 5.13.1 版本配置 VS 为release x64(这个是工程建立的时候设置的解决方案属性) VTK也是使用relealse x64编译获得的(这个是VTK安装的过程的编译选项) QT也使用msvc2017-64bit(这个是QT安装的时候在VS平台配置的,如果发现不对要更改) 二.参考博

分享:Unity3D模型跟随鼠标移动功能的小脚本 (屏幕坐标和三维空间坐标转换)

using UnityEngine; using System.Collections; public class ModelsPosChange : MonoBehaviour { RaycastHit hit; private Transform Icon; bool isMove = false; void FixedUpdate() { if (isMove) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); i

VTK 6.3.0 Qt 5.4 MinGW 4.9.1 Configuration 配置

Download VTK 6.3.0 Download Qt 5.4 with MinGW 4.9.1 Download CMake 3.2.0 I assume you've already installed Qt 5.4 with MinGW 4.9.1 and CMake 3.2.0 correctly. Pre-process the VTK: Open CMakeLists.txt in your extracted VTK-6.3.0 folder, find set(VTK_US

一、VTK用于QT的安装

一.说明 本文的主要目的是在说明通过Cmake重新编译VTK,使得其能够与QT交互使用 二.VTK的安装 VTK版本:8.2.0 VS版本2019 电脑:win-64bit 需要软件:CMake(我使用的版本是3.16.0) 三.过程 大概过程分为以下几个步骤: 1.下载vtk压缩包,然后解压 2.通过Cmake编译 3.打开VS编译解决方案 , 在编译生成的时候,我们要注意自己的VS的属性配置,可以将VS参数先设置为Release x64,编译生成,然后将属性设置为Debug x64,再次编译

屏幕坐标(Input.mousePosition)转换UI坐标

屏幕坐标(Input.mousePosition)转换UI坐标 需要了解到的知识点 1:屏幕坐标的起点位置 左下角为(0,0)点,右上角为(Screen.width,Screen.height) 2:UI坐标的起点位置 屏幕中心点 方法1 Vector2 uisize = canvas.GetComponent<RectTransform>().sizeDelta;//得到画布的尺寸 Vector2 screenpos = Input.mousePosition; Vector2 screen

Using 3D engines with Qt(可以整合到Qt里,不影响)

A number of popular 3D engines can be integrated with Qt: Contents [hide] 1 Ogre 2 Irrlicht 3 OpenSceneGraph 4 Open Inventor 5 Panda3D 6 Visualization Library 7 VTK (The Visualization Toolkit) 8 Qt 3D Ogre Ogre Website QtOgre QML Ogre Irrlicht Irrlic

Qt常用控件+事件+基础绘图(四)

第一个Qt程序新建一个空的项目.pro文件内容示例代码:  1 /* 应用程序抽象类 */ 2 #include <QApplication> 3 #include <QWidget> 4 #include <QPushButton> 5 #include <QDebug> 6  7 int main(int argc, char *argv[]) 8 { 9     QApplication app(argc, argv);10 11     QWidge

Qt on Android:让 Qt Widgets 和 Qt Quick 应用全屏显示

Android 系统版本很多,较新的 4.4 ,较老的 2.3 ,都有人用. Qt on Android 开发的 Android 应用,默认在 Android 设备上是非全屏的.而有些应用的需求是全屏显示,比如游戏.那么怎么样才能做到这点呢? 请给我的决赛文章<Qt Quick 图像处理实例之美图秀秀(附源码下载)>投票,谢谢. 我们需要分 Android 系统版本来说. Android 2.x 对于 4.0 以前,比如 2.2 . 2.3 的系统,可以修改 AndroidManifest.x