VTK MPR 每张图对应空间位置提示

看了下小蚂蚁的MPR功能,每张切片有“上下左右前后”的标注,自己也实现下。

计算方位

首先要知道自己每个切片的初始切割矩阵,根据初始矩阵可以确定初始的方位。合适的办法是每次重新切割图片时,计算方位。图省事,我直接用定时器来获取当前每个视图的矩阵。重新计算当前的图片方位,让后显示。

const static double mpr_matrix1_[16] = {0, 0, 1, 0,1, 0, 0, 0,0, 1, 0, 0,0, 0, 0, 1
};
const static double mpr_matrix2_[16] = {1, 0, 0, 0,0, 0, 1, 0,0, 1, 0, 0,0, 0, 0, 1
};
const static double mpr_matrix3_[16] = {1, 0, 0, 0,0, 1, 0, 0,0, 0, 1, 0,0, 0, 0, 1
};
timer_ = new QTimer(this);
connect(timer_, &QTimer::timeout, this, [&] {if(mpr_widget_->reslice_widget_) {vtkNew<vtkMatrix4x4>reslice_axes;reslice_axes->DeepCopy(mpr_widget_->reslice_widget_->GetImageReslicers()[2]->GetResliceAxes());QString x2 = GetPosition(reslice_axes->GetElement(0, 0), reslice_axes->GetElement(2, 0),QStringList() << "右" << "左" << "下" << "上");QString y2 = GetPosition(reslice_axes->GetElement(1, 1), reslice_axes->GetElement(2, 1),QStringList() << "后" << "前" << "上" << "下");reslice_axes->DeepCopy(mpr_widget_->reslice_widget_->GetImageReslicers()[1]->GetResliceAxes());QString x1 = GetPosition(reslice_axes->GetElement(0, 0), reslice_axes->GetElement(1, 0),QStringList() << "右" << "左" << "前" << "后");QString y1 = GetPosition(reslice_axes->GetElement(2, 1), reslice_axes->GetElement(1, 1),QStringList() << "上" << "下" << "后" << "前");reslice_axes->DeepCopy(mpr_widget_->reslice_widget_->GetImageReslicers()[0]->GetResliceAxes());QString x0 = GetPosition(reslice_axes->GetElement(1, 0), reslice_axes->GetElement(0, 0),QStringList() << "前" << "后" << "右" << "左");QString y0 = GetPosition(reslice_axes->GetElement(2, 1), reslice_axes->GetElement(0, 1),QStringList() << "上" << "下" << "左" << "右");emit SgnUpdataMPRPosition(QStringList() << x0 << y0 << x1 << y1 << x2 << y2);}
});
timer_->start(500);
QString GetPosition(const double &a, const double &b, const QStringList &str1) {QString str;if(a > 0.9) {str = str1.at(0);} else if(a < -0.9) {str = str1.at(1);} else {if(b > 0.9) {str = str1.at(2);} else if(b < -0.9) {str = str1.at(3);} else {if(a > 0) {str = str1.at(0);} else {str = str1.at(1);}if(b < 0) {str += str1.at(3);} else {str += str1.at(2);}}}return str;
}

显示

临时写的demo,比较随意。自己工程不建议这样搞

// 标签
QFont ft;
ft.setPointSize(12);
QPalette pa;
pa.setColor(QPalette::WindowText, Qt::red);
QLabel *lab;
for(int i = 0; i < 3; i++) {lab = new QLabel(m_ControlWidget->GetWidget(i));lab->setFixedSize(35, 25);lab->move(12, m_ControlWidget->GetWidget(i)->height() / 2 - 12);lab->setObjectName(QString::number(i * 2));lab->setText(lab->objectName());lab->setFont(ft);lab->setPalette(pa);lab = new QLabel(m_ControlWidget->GetWidget(i));lab->setFixedSize(35, 25);lab->move(m_ControlWidget->GetWidget(i)->width() / 2 - 12, 12);lab->setObjectName(QString::number( i * 2 + 1));lab->setText(lab->objectName());lab->setFont(ft);lab->setPalette(pa);
}

void MainWindow::resizeEvent(QResizeEvent *event) {UpdataPosition();QMainWindow::resizeEvent(event);
}void MainWindow::UpdataPosition(const QStringList lists) {QList<QLabel *>labs;for(int i = 0; i < 3; i++) {labs << m_ControlWidget->GetWidget(i)->findChildren<QLabel *>();}foreach (auto &lab, labs) {if(lab->objectName().toInt() % 2 == 0) {lab->move(12, m_ControlWidget->GetWidget(lab->objectName().toInt() % 2)->height() / 2 - 12);} else {lab->move(m_ControlWidget->GetWidget(lab->objectName().toInt() % 2)->width() / 2 - 12, 12);}}if(!lists.isEmpty()) {foreach (auto &lab, labs) {lab->setText(lists.at(lab->objectName().toInt()));}return;}
}

VTK MPR 每张图对应空间位置提示相关推荐

  1. 天球坐标系、地球坐标系与地球自转有无关系,哪一种便于描述地面观测站的空间位置,哪一种便于描述人造地球卫星的位置?请用类似思维导图的方式总结GNSS定位的时空基准?GPS卫星定位中时间系统有何重要意义?

    答: 1.天球坐标系.地球坐标系与地球自转有无关系,哪一种便于描述地面观测站的空间位置,哪一种便于描述人造地球卫星的位置? 卫星定位中常采用空间直角坐标系及其相应的大地坐标系,一般取地球质心为坐标系的 ...

  2. matlab里markersize,Matlab scatter/plot绘制图时,单点的'MarkerSize'与空间位置的

    Matlab scatter/plot绘制图时,单点的'MarkerSize'与空间位置的 Matlab scatter/plot绘制图时,单点的'MarkerSize'与空间位置的关系 scatte ...

  3. unity 如何获取到屏幕中间_【Unity】屏幕空间位置变换到世界空间位置的方法

    屏幕空间像素的位置,是一个二维的浮点数,而世界空间的位置,则是三维的浮点数.实现的基本思路很简单,是世界空间位置变换到屏幕空间位置的逆过程,只是稍微有些区别.如果对图形渲染管线中的坐标变换没有弄清楚, ...

  4. 圆填充( CIRCLE PACKING)算法圆堆图圆形空间填充算法可视化

    原文链接:http://tecdat.cn/?p=24658 圆填充Circle packing算法 已经开发了大量确定性和随机性的圆填充算法. RepelLayout 通过成对排斥迭代移动圆圈来搜索 ...

  5. Geometry(几何对象定义空间位置和关联几何形状)

    Geometry 描述 几何对象定义空间位置和关联几何形状. 讨论 在许多地理处理工作流中,您可能需要使用坐标和几何信息运行特定操作,但不一定想经历创建新(临时)要素类.使用光标填充要素类.使用要素类 ...

  6. 天球坐标系、地球坐标系与地球自转有无关系?哪一种便于描述地面观测站的空间位置?哪一种便于描述人造地球卫星的位置?总结GNSS定位的时空基准? GPS卫星定位中,时间系统有何重要意义?

    1. 天球坐标系.地球坐标系与地球自转有无关系?哪一种便于描述地面观测站的空间位置?哪一种便于描述人造地球卫星的位置? 天球坐标系与地球自转无关,地球坐标系与地球自转有关.地球坐标系便于描述地面观测站 ...

  7. 雷达相机融合(七)--显示鼠标位置处的实际空间位置

    目录 思路 鼠标位置处的雷达坐标 鼠标位置处的GPS 效果 思路 通过鼠标回调函数获取鼠标所在位置处的像素坐标,从而得出鼠标所在像素坐标处的点云坐标,由于点云稀疏,如果该像素没有对应雷达点,则遍历,寻 ...

  8. matlab 线圈 互感,任意空间位置线圈的互感计算方法.PDF

    任意空间位置线圈的互感计算方法 20 6 Vol. 20 No. 6 第 卷 第 期 电 机 与 控 制 学 报 2016 6 Electri c Machines and Control Jun. ...

  9. R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(配置图例位置、移除图例)实战

    R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(配置图例位置.移除图例)实战 目录

最新文章

  1. react实现全选、取消全选和个别选择
  2. [导入]正确计算天干地支生肖的函数(.net)---更正版
  3. Kubernetes — 安装 Dashboard UI
  4. linux下编译wpa_supplicantnbsp;…
  5. 学习总结初篇:发现问题
  6. Android开发之自定义view进行旋转动画
  7. NOIP模拟测试「简单的区间·简单的玄学·简单的填数·简单的序列」
  8. 程序猿能力矩阵 — 敢測吗?看自己在哪个档次
  9. jQuery基础知识梳理(含中文文档,自己的理解和代码注释)
  10. 计算机程序有哪些性质,程序的特性有哪些
  11. EXCEL中汉字转变拼音的技巧~代码实现
  12. 数学建模:地貌图的完成
  13. 谈谈web打印快递单及经验
  14. FreeSWITCH的端口设置
  15. 华为HCIP认证对于大学生有没有用?毕业后有帮助吗?
  16. 企业文件分享/共享有哪些安全方式
  17. dex2oat对应用启动性能的影响
  18. 【bug解决】TypeError: forward() missing 1 required positional argument: ‘x‘
  19. 在ASP.NET中使用ListView控件对数据进行显示、分页和排序
  20. 记一次在Taro开发的微信小程序中使用lottie动画的经验

热门文章

  1. 联想s5手机 支持的视频格式
  2. C语言编程之递归求阶乘
  3. Transformers北大源
  4. GTX1060和RTX2060的差距 哪个好
  5. 【真题】2018 年 7 月 28 日贵州省遵义红花岗教师结构化面试真题
  6. Cause: java.sql.SQLException: Invalid value for getInt()
  7. 1到100里猜数字一共有5次机会
  8. 新版CSDN浏览器助手打造沉浸式阅读体验,快来看看吧!
  9. 超级节点引发的区块链社区运营的新玩法
  10. 腾讯公开红警OL手游,氪金的天启你要不要来一辆?