【VTKExamples::Visualization】第一期 Arbitrary3DCursor

很高兴在雪易的CSDN遇见你 

VTK技术爱好者 QQ:870202403


前言

本文分享Example中Visualization模块中的Arbitrary3DCursor样例,主要解析vtkProbefileter,希望对各位小伙伴有所帮助!

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

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


1. vtkProbeFilter

         在指定的点位置采样数据值。

        vtkProbeFilter是一个过滤器,在指定的点位置计算点属性(例如,标量,向量等)。过滤器有两个输入: Input和Source。输入的几何结构通过过滤器。输入点位置的Point属性通过插值到Source数据。例如:我们可以通过Volume(Source数据)计算平面上的数据值(平面指定为输入)。Source数据中的Cell数据根据每个输入点所在的源单元格复制到输出。如果在源的点数据和单元数据中都存在同名的数组,则只探测来自点数据的数组。

        此过滤器可用于重新采样数据,或将一个数据集表单转换为另一个数据集表单。例如,一个非结构化网格(vtkUnstructuredGrid)可以用一个体(三维vtkImageData)来探测,然后体渲染技术可以用来可视化结果。另一个例子:一条线或曲线可以用来探测数据,从而沿着这条线或曲线生成x-y图。

2. 应用示例

  

 

// This does the actual work: updates the probe.
// Callback for the interaction
class vtkmyPWCallback : public vtkCommand
{
public:
    vtkmyPWCallback() = default;

    static vtkmyPWCallback* New()
    {
        return new vtkmyPWCallback;
    }
    virtual void Execute(vtkObject* caller, unsigned long, void*)
    {
        vtkPointWidget* pointWidget = reinterpret_cast<vtkPointWidget*>(caller);
        pointWidget->GetPolyData(this->PolyData);
        double position[3];
        pointWidget->GetPosition(position);
        std::ostringstream text;
        text << "cursor: " << std::fixed << std::setprecision(4) << position[0]
            << ", " << position[1] << ", " << position[2];
        this->PositionActor->SetInput(text.str().c_str());
        this->CursorActor->VisibilityOn();
    }

    vtkPolyData* PolyData = nullptr;
    vtkActor* CursorActor = nullptr;
    vtkTextActor* PositionActor = nullptr;
};

void QtWidgetsApplication1::on_arbitrary3DCursorAct_triggered()
{
    vtkSmartPointer<vtkPolyData> inputPolyData;



    auto line = vtkSmartPointer<vtkLineSource>::New();
    line->SetResolution(2);
    line->SetPoint1(0., 0., 0.);
    line->SetPoint2(10, 0, 0);
    line->Update();
    inputPolyData = line->GetOutput();

    /*auto plane = vtkSmartPointer<vtkPlaneSource>::New();
    plane->Update();
    inputPolyData = plane->GetOutput();*/

    /*auto sphereSource =
        vtkSmartPointer<vtkSphereSource>::New();
    sphereSource->SetPhiResolution(15);
    sphereSource->SetThetaResolution(15);
    sphereSource->Update();
    inputPolyData = sphereSource->GetOutput();*/

    auto colors =
        vtkSmartPointer<vtkNamedColors>::New();

    auto point =
        vtkSmartPointer<vtkPolyData>::New();

    auto probe =
        vtkSmartPointer<vtkProbeFilter>::New();
    probe->SetInputData(point);
    probe->SetSourceData(inputPolyData);

    // create glyph
    auto cone =
        vtkSmartPointer<vtkConeSource>::New();
    cone->SetResolution(16);

    auto glyph =
        vtkSmartPointer<vtkGlyph3D>::New();
    glyph->SetInputConnection(probe->GetOutputPort());
    glyph->SetSourceConnection(cone->GetOutputPort());
    glyph->SetVectorModeToUseVector();
    glyph->SetScaleModeToDataScalingOff();
    glyph->SetScaleFactor(inputPolyData->GetLength() * 0.1);

    auto glyphMapper =
        vtkSmartPointer<vtkPolyDataMapper>::New();
    glyphMapper->SetInputConnection(glyph->GetOutputPort());

    auto glyphActor =
        vtkSmartPointer<vtkActor>::New();
    glyphActor->SetMapper(glyphMapper);
    glyphActor->GetProperty()->SetColor(1.,0.,0.);
    glyphActor->VisibilityOn();

    auto mapper =
        vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputData(inputPolyData);

    auto actor = vtkSmartPointer<vtkActor>::New();
    actor->SetMapper(mapper);
    actor->GetProperty()->SetRepresentationToWireframe();
    actor->GetProperty()->SetColor(colors->GetColor3d("gold").GetData());

    auto textActor =
        vtkSmartPointer<vtkTextActor>::New();
    textActor->GetTextProperty()->SetFontSize(12);
    textActor->SetPosition(10, 20);
    textActor->SetInput("cursor:");
    textActor->GetTextProperty()->SetColor(0.,1.,0.);

    // Create the RenderWindow, Render1er and both Actors
    //
    auto ren1 =
        vtkSmartPointer<vtkRenderer>::New();
    auto renWin =
        vtkSmartPointer<vtkRenderWindow>::New();
    renWin->AddRenderer(ren1);

    auto iren =
        vtkSmartPointer<vtkRenderWindowInteractor>::New();
    iren->SetRenderWindow(renWin);

    // The SetInteractor method is how 3D widgets are associated with the render
    // window interactor. Internally, SetInteractor sets up a bunch of callbacks
    // using the Command/Observer mechanism (AddObserver()).
    auto myCallback =
        vtkSmartPointer<vtkmyPWCallback>::New();
    myCallback->PolyData = point;
    myCallback->CursorActor = glyphActor;
    myCallback->PositionActor = textActor;

    // The point widget is used probe the dataset.
    //
    auto pointWidget =
        vtkSmartPointer<vtkPointWidget>::New();
    pointWidget->SetInteractor(iren);
    pointWidget->SetInputData(inputPolyData);
    pointWidget->AllOff();
    pointWidget->PlaceWidget();
    pointWidget->AddObserver(vtkCommand::InteractionEvent, myCallback);

    ren1->AddActor(glyphActor);
    ren1->AddActor(actor);
    ren1->AddActor2D(textActor);

    // Add the actors to the renderer, set the background and size
    //
    ren1->GradientBackgroundOn();
    ren1->SetBackground(colors->GetColor3d("SlateGray").GetData());
    ren1->SetBackground2(colors->GetColor3d("Wheat").GetData());

    renWin->SetSize(300, 300);
    renWin->Render();
    pointWidget->On();
    // render the image
    //
    iren->Initialize();
    renWin->Render();

    iren->Start();
}

结论:

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/300079.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大学物理实验重点——霍尔效应

霍尔系数 霍尔元件灵敏度&#xff0c;愈大愈好 负效应&#xff1a; 1. 不等位电势 V0&#xff1a;两个霍尔电极不可能绝对对 称地焊在霍尔元件两侧&#xff08;图 2&#xff09;、霍尔元件电阻率不均匀、工作电极的端面接触不良都 可能造成 C、D 两极不处在同一等位面上。R0 确…

XCTF:凯撒大帝在培根里藏了什么[WriteUP]

密文&#xff1a; ABBABAABBAAAAABABABAABABBAAAAABAABBAAABAABBBABBAABABBABABAAABABBBAABAABABABBBAABBABAA 根据题目提示&#xff0c;应该有两种加密算法 1.培根加密 2.凯撒加密 根据语境&#xff0c;且密文与凯撒加密后的密文不符合&#xff0c;先尝试培根解密 培根解…

大数据时代必备技能!Shell脚本学习网站助你一臂之力!

介绍&#xff1a;Shell脚本是一种用于自动化任务的脚本语言&#xff0c;它使用Shell命令来执行一系列操作。Shell脚本通常以.sh为扩展名&#xff0c;并使用#!/bin/bash作为第一行来指定使用的Shell解释器。 在Shell脚本中&#xff0c;我们可以使用各种命令和控制结构来实现自动…

Hadolint:Lint Dockerfile 的完整指南

想学习如何使用 Hadolint 对 Dockerfile 进行 lint 处理吗&#xff1f;这篇博文将向您展示如何操作。这是关于 Dockerfile linting 的完整指南。 通过对 Dockerfile 进行 lint 检查&#xff0c;您可以及早发现错误和问题&#xff0c;并确保它们遵循最佳实践。 什么是Hadolint…

数据结构期中模拟

一、填空题 1.二叉树就是度为 2 的树。&#xff08;F&#xff09; 二叉树的度<2 2.线性表采用链式存储表示时&#xff0c;所有结点之间的存储单元地址可以连续也可以不连续。(T) 在顺序表中&#xff0c;逻辑上相邻的元素&#xff0c;其物理位置一定相邻。在单链表中&#x…

java案例知识点

一.会话技术 概念 技术 二.跨域 三.过滤器 四.拦截器

电脑丢失dll文件怎么办,dll修复工具可一键修复dll问题

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中最常见的就是“找不到指定的模块”或“无法找到某某.dll文件”。这种情况通常是由于dll文件丢失或损坏导致的。那么&#xff0c;究竟是什么原因导致了dll文件的丢失呢&#xff1f;又该如何预防dll文件…

Linux 编译安装 Nginx

目录 一、前言二、四种安装方式介绍三、本文安装方式&#xff1a;源码安装3.1、安装依赖库3.2、开始安装 Nginx3.3、Nginx 相关操作3.4、把 Nginx 注册成系统服务 四、结尾 一、前言 Nginx 是一款轻量级的 Web 服务器、[反向代理]服务器&#xff0c;由于它的内存占用少&#xf…

CentOS中开启mysql挂载

挂载的作用其实说白了就是备份。防止数据库文件损害或者数据库被误删导致数据丢失。 创建一个文件名为my.cnf内容如下 # Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modif…

用通俗易懂的方式讲解:使用 Mistral-7B 和 Langchain 搭建基于PDF文件的聊天机器人

在本文中&#xff0c;使用LangChain、HuggingFaceEmbeddings和HuggingFace的Mistral-7B LLM创建一个简单的Python程序&#xff0c;可以从任何pdf文件中回答问题。 一、LangChain简介 LangChain是一个在语言模型之上开发上下文感知应用程序的框架。LangChain使用带prompt和few…

Halcon区域的灰度特征值gray_features

Halcon区域的灰度特征值 gray_features 算子用于计算指定区域的灰度特征值。其输入是一组区域&#xff0c;每个区域的特征都存 储在一组value数组中。 典型的基于灰度值的特征如下&#xff1a; &#xff08;1&#xff09;area&#xff1a;灰度区域面积。 &#xff08;2&#x…

c++学习第八讲---类和对象---继承

继承&#xff1a; 使子类&#xff08;派生类&#xff09;拥有与父类&#xff08;基类&#xff09;相同的成员&#xff0c;以节约代码量。 1.继承的基本语法&#xff1a; class 子类名&#xff1a;继承方式 父类名{} &#xff1b; 例&#xff1a; class father { public:in…

Unity 了解Input Manage下默认的输入轴

在Unity菜单Edit->Project Settings->Input Manager->Axes下有一些默认的输入轴&#xff0c;如 这些输入轴代表不同类型的输入&#xff0c;其中&#xff1a; Horizontal&#xff1a;水平移动输入轴。通常与键盘的左右箭头键、A和D键、游戏手柄的左摇杆水平轴等相关联…

数据结构入门到入土——链表(2)

目录 一&#xff0c;与链表相关的题目&#xff08;2&#xff09; 1.输入两个链表&#xff0c;找出它们的第一个公共节点 2.给定一个链表&#xff0c;判断链表中是否有环 3.给定一个链表&#xff0c;返回链表开始入环的第一个节点&#xff0c;若无则返回null 一&#xff0c;…

SonarQube 漏洞扫描

SonarQube 漏洞扫描 一、部署服务 1.1 docker方式部署 #安装docker curl -L download.beyourself.org.cn/shell-project/os/get-docker-latest.sh | sh yum install -y docker-compose #进去输入:set paste可以保证不穿行 [rootlocalhost sonar]# vim docker-compose.yml v…

Python从入门到网络爬虫(异常处理详解)

前言 异常即是一个事件&#xff0c;该事件会在程序执行过程中发生&#xff0c;影响了程序的正常执行。一般情况下&#xff0c;在python无法正常处理程序时就会发生一个异常。异常是python对象&#xff0c;表示一个错误。当python脚本发生异常时我们需要捕获处理它&#xff0c;…

如何把电脑中的项目快速传进Github中?

一、打开GitHub网站:https:github.com 登录自己的个人账号 1.新建一个项目 2.用鼠标直接拖拽电脑中的项目文件夹与文件到新创建的项目中点击保存即可。

家里有必要买NAS吗?

完全没有必要&#xff0c;因为用旧电脑搭建NAS不仅价格实惠&#xff0c;而且非常简单&#xff0c;效果也完全不差买了的&#xff01; 并且......还环保 教程链接&#xff1a; 用旧电脑搭建NAS在您的家庭中&#xff0c;通过将旧 PC 转变为NAS服务器&#xff0c;您可以轻松搭建…

【Docker】创建,查看,进入容器

目录 方式一&#xff1a; 创建 查看 ​编辑 方式二&#xff1a; 创建 查看 进入容器 方式一&#xff1a; 首先查看有什么镜像 创建 docker run -i -t --namefreedom centos:7 /bin - i 表示容器一直运行着&#xff0c;容器如果没有客户端连接就会关闭&#xff0c;加了…

【无标题】MySQL8修改非root用户密码

首先查看修改的用户信息&#xff0c;我这里用户名是demo&#xff0c;host是**%** 然后使用alter命令修改密码 这里USER后的参数是第一步里查询得到的user与host的组合。ALTER USER demo% IDENTIFIED WITH mysql_native_password BY 新密码;可能会出现的错误&#xff1a; 如果百…