【VTKWidgetRepresentation】第四期 VTK中拾取点的方式

很高兴在雪易的CSDN遇见你 

专栏内容同步更新在公众号 VTK忠粉,期待小伙伴的关注!

【vtkWidgetRepresentation】第三期 VTK中的三维建模约束器


前言

        三维建模中,创建点,拾取点,约束点都是基本功,本文分享基于VTK可以实现的拾取点的方式,希望对各位小伙伴有所帮助!进一步分享了自定义的vtkPointPlacer子类,能够不使用vtkPointPicker就能拾取三维窗口中的各种点。

感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!

你的点赞就是我的动力(^U^)ノ~YO

目标: 


 

目录

前言

1. 拾取坐标系中任意点

2. 拾取具有约束位置的点,如平面上的点,曲面上的点。

3 拾取PolyData(多边形数据)的几何结构点。

4 拾取对象的中心点

5.自定义vtkPointPlacer子类拾取各种点

结论:


1. 拾取坐标系中任意点

        用户通过点击“显示坐标系”下的点,计算出世界坐标系。在vtkHandleRepresentation的默认点放置器vtkPointPlacer下,即可获得。

void vtkHandleRepresentation::SetDisplayPosition(double displyPos[3])
{
  if (this->Renderer && this->PointPlacer)
  {
    if (this->PointPlacer->ValidateDisplayPosition(this->Renderer, displyPos))
    {
      double worldPos[3], worldOrient[9];
      if (this->PointPlacer->ComputeWorldPosition(this->Renderer, displyPos, worldPos, worldOrient))
      {
        this->DisplayPosition->SetValue(displyPos);
        this->WorldPosition->SetValue(worldPos);
        this->DisplayPositionTime.Modified();
      }
    }
  }
  else
  {
    this->DisplayPosition->SetValue(displyPos);
    this->DisplayPositionTime.Modified();
  }
}
int vtkPointPlacer::ComputeWorldPosition(
  vtkRenderer* ren, double displayPos[2], double worldPos[3], double vtkNotUsed(worldOrient)[9])
{
  if (ren)
  {
    vtkCoordinate* dpos = vtkCoordinate::New();
    dpos->SetCoordinateSystemToDisplay();
    dpos->SetValue(displayPos[0], displayPos[1]);
    double* p = dpos->GetComputedWorldValue(ren);
    worldPos[0] = p[0];
    worldPos[1] = p[1];
    worldPos[2] = p[2];
    dpos->Delete();
    return 1;
  }
  return 0;
}

2. 拾取具有约束位置的点,如平面上的点,曲面上的点。

        根据具体的约束对象,选择合适的点放置器vtkPointPlacer的子类,实现完成。

3 拾取PolyData(多边形数据)的几何结构点。

        几何结构点即构成PolyData数据的点。vtkPointPicker可以拾取PolyData数据的几何结构点。

4 拾取对象的中心点

        创建对象的几何中心点。

5.自定义vtkPointPlacer子类拾取各种点

        自定义vtkPointPlacer的子类zxPolyDataPointPlacer,实现拾取三维窗口中所有对象的几何结构点和约束点。无需像vtkPolygonalSurfacePointPlacer需要输入指定的Actor和PolyData。使用vtkHandleRepresentation或其他vtkWidgetRepresentation时,可以将zxPolyDataPointPlacer指定为点约束器,这样在三维窗口中就可以方便的实现点的拾取了。

 

结论:

        总结了在VTK中拾取点的几种方式,最后给出了自定义的拾取点的方式,简单易用。

感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步!

你的赞赏是我的最最最最大的动力(^U^)ノ~YO

最近更新

  1. TCP协议是安全的吗?

    2023-12-06 23:18:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-06 23:18:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-06 23:18:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-06 23:18:01       18 阅读

热门阅读

  1. git常用命令

    2023-12-06 23:18:01       43 阅读
  2. JVM

    JVM

    2023-12-06 23:18:01      39 阅读
  3. vue 组件通讯

    2023-12-06 23:18:01       31 阅读
  4. 二叉树的前、中和后序遍历的递归与迭代实现

    2023-12-06 23:18:01       27 阅读
  5. quickapp_快应用_DOM节点

    2023-12-06 23:18:01       34 阅读
  6. 第2节:Vue3 模板语法

    2023-12-06 23:18:01       33 阅读
  7. ReadWriteLock 和 StampedLock 的比较与解析

    2023-12-06 23:18:01       38 阅读
  8. 使用Redis实现购物车后端处理

    2023-12-06 23:18:01       34 阅读
  9. MSSQL注入的小白常见问题答案解析

    2023-12-06 23:18:01       30 阅读
  10. Redis 实战缓存

    2023-12-06 23:18:01       38 阅读