vtkPolyData 生成轮廓线

 PolyData 的轮廓用法实战

#include <vtkActor.h>
#include <vtkCutter.h>
#include <vtkMath.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkPlane.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkSmartPointer.h>
#include <vtkSphereSource.h>
#include <vtkXMLPolyDataReader.h>

int main(int argc, char* argv[])
{
    vtkNew<vtkNamedColors> colors;

    vtkSmartPointer<vtkPolyData> inputPolyData;
    if (argc > 1)
    {
        vtkNew<vtkXMLPolyDataReader> reader;
        reader->SetFileName(argv[1]);
        reader->Update();
        inputPolyData = reader->GetOutput();
    }
    else
    {
        vtkNew<vtkSphereSource> sphereSource;
        sphereSource->SetThetaResolution(30);
        sphereSource->SetPhiResolution(15);
        sphereSource->Update();
        inputPolyData = sphereSource->GetOutput();
    }

    vtkNew<vtkPolyDataMapper> inputMapper;
    inputMapper->SetInputData(inputPolyData);

    // Create a plane to cut
    vtkNew<vtkPlane> plane;
    plane->SetOrigin(inputPolyData->GetCenter());
    plane->SetNormal(1, 1, 1);

    double minBound[3];
    minBound[0] = inputPolyData->GetBounds()[0];
    minBound[1] = inputPolyData->GetBounds()[2];
    minBound[2] = inputPolyData->GetBounds()[4];

    double maxBound[3];
    maxBound[0] = inputPolyData->GetBounds()[1];
    maxBound[1] = inputPolyData->GetBounds()[3];
    maxBound[2] = inputPolyData->GetBounds()[5];

    double center[3];
    center[0] = inputPolyData->GetCenter()[0];
    center[1] = inputPolyData->GetCenter()[1];
    center[2] = inputPolyData->GetCenter()[2];

    double distanceMin = sqrt(vtkMath::Distance2BetweenPoints(minBound, center));
    double distanceMax = sqrt(vtkMath::Distance2BetweenPoints(maxBound, center));

    // Create cutter.
    vtkNew<vtkCutter> cutter;
    cutter->SetCutFunction(plane);
    cutter->SetInputData(inputPolyData);

    cutter->GenerateValues(20, -distanceMin, distanceMax);
    vtkNew<vtkPolyDataMapper> cutterMapper;
    cutterMapper->SetInputConnection(cutter->GetOutputPort());
    cutterMapper->ScalarVisibilityOff();

    // Create plane actor.
    vtkNew<vtkActor> planeActor;
    planeActor->GetProperty()->SetColor(
        colors->GetColor3d("Deep_pink").GetData());
    planeActor->GetProperty()->SetLineWidth(5);
    planeActor->SetMapper(cutterMapper);

    // Create input actor.
    vtkNew<vtkActor> inputActor;
    inputActor->GetProperty()->SetColor(colors->GetColor3d("Bisque").GetData());
    inputActor->SetMapper(inputMapper);

    // Create renderers and add actors of plane and cube.
    vtkNew<vtkRenderer> renderer;
    renderer->AddActor(planeActor); // Display the rectangle resulting from the
                                    // cut.
    renderer->AddActor(inputActor); // Display the cube.

    // Add renderer to renderwindow and render
    vtkNew<vtkRenderWindow> renderWindow;
    renderWindow->AddRenderer(renderer);
    renderWindow->SetWindowName("ContoursFromPolyData");
    renderWindow->SetSize(600, 600);

    vtkNew<vtkRenderWindowInteractor> interactor;
    interactor->SetRenderWindow(renderWindow);
    renderer->SetBackground(colors->GetColor3d("Slate_grey").GetData());
    renderWindow->Render();

    interactor->Start();

    return EXIT_SUCCESS;
}

 

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

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

相关文章

MybatisPlus多表联查-分页关联查询+根据id获取多表联查后的单行数据

分页关联查询 需求分析 有两张表w以及d&#xff0c;需要w的一些字段以及d的一些字段在前端显示 此时就需要用到关联查询&#xff0c;查询到的数据放入视图类&#xff0c;显示在前端 项目结构 视图类 package com.wedu.modules.tain.entity.vo;import lombok.Data;import ja…

使用智能电销机器人,拓客效果更佳!

现在很多的企业做销售都离不开电话营销&#xff0c;它是一种能够直接帮助企业获取更多利润的营销模式&#xff0c;目前被各大行业所采用。 znyx222 了解探讨 电话营销是一个压力很大的职业&#xff0c;新员工培养难度大、老员工又不好维护&#xff0c;会有情绪问题出现等&…

WPF中样式

WPF中样式&#xff1a;类似于winform中控件的属性 <Grid><!-- Button属性 字体大小 字体颜色 内容 控件宽 高 --><Button FontSize"20" Foreground"Blue" Content"Hello" Width"100" Height"40"/></G…

【plt.hist绘制直方图】:从入门到精通,只需一篇文章!【Matplotlib可视化】

【&#x1f4ca;plt.pie绘制直方图】&#xff1a;从入门到精通&#xff0c;只需一篇文章&#xff01;【Matplotlib可视化】&#xff01; 利用Matplotlib进行数据可视化示例 &#x1f335;文章目录&#x1f335; &#x1f4c8; 一、引言&#x1f50d; 二、plt.hist()函数基础&am…

Maven属性scope

参考&#xff1a; maven 中 scope标签的作用&#xff08;runtime、provided、test、compile 的作用&#xff09; 【Maven】属性scope依赖作用范围详解 scope为provided

Elasticsearch:什么是 kNN?

kNN - K-nearest neighbor 定义 kNN&#xff08;即 k 最近邻算法&#xff09;是一种机器学习算法&#xff0c;它使用邻近度将一个数据点与其训练并记忆的一组数据进行比较以进行预测。 这种基于实例的学习为 kNN 提供了 “惰性学习&#xff08;lazy learning&#xff09;” 名…

168基于matlab的六自由度并联摇摆台的反解控制算法

基于matlab的六自由度并联摇摆台的反解控制算法&#xff0c;stewart平台&#xff0c;配有GUI界面&#xff0c;可以自定义角度&#xff0c;杆长等参数。设定动平台位姿即能得到电机参数。程序已调通&#xff0c;可直接运行。 168 六自由度并联摇摆台 反解控制算法 (xiaohongshu.…

STM32的SDIO

一.SDIO简介 SDIO&#xff0c;全称Secure Digital Input/Output&#xff0c;是一种用于在移动设备和嵌入式系统中实现输入/输出功能的接口标准。它结合了SD卡的存储功能和I/O功能&#xff0c;允许设备通过SD卡槽进行数据输入输出和外围设备连接。 SDIO接口通常被用于连接各种…

人工智能|深度学习——基于对抗网络的室内定位系统

代码下载&#xff1a; 基于CSI的工业互联网深度学习定位.zip资源-CSDN文库 摘要 室内定位技术是工业互联网相关技术的关键一环。该技术旨在解决于室外定位且取得良好效果的GPS由于建筑物阻挡无法应用于室内的问题。实现室内定位技术&#xff0c;能够在真实工业场景下实时追踪和…

112. Path Sum(路径总和)

问题描述 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 叶子节点 是指…

记录使用kiwi进行单元测试文件左边不展示运行按钮的问题

进行单元测是的时候&#xff0c;遇到一下一个问题&#xff0c;就是测试文件左上方没有运行按钮&#xff0c;后来经过调试&#xff0c;发现有两个原因可以导致这个问题 1 创建spec文件的时候&#xff0c;没有在test 文件夹和target下 2 podfile 中 test的target中&#xff0c…

【PHP】web服务器支持PHP_环境配置

一、PHP运行目前为止主要有4方式 &#xff08;1&#xff09;以模块加载的方式运行&#xff0c;初学者可能不容易理解&#xff0c;其实就是将PHP集成到Apache服务器&#xff0c; 以同一个进程运行。 &#xff08;2&#xff09;以CGI的方式运行&#xff0c;CGI英文叫…

力扣算法Algorithm竞赛模板库(codeforces-go):含了算法竞赛中常用的数据结构和算法实现,助力开发者更高效地解决问题

1.算法Algorithm竞赛模板库&#xff08;codeforces-go&#xff09; 算法竞赛模板库&#xff0c;为算法竞赛爱好者提供了一系列精心设计的算法模板。这个库包含了算法竞赛中常用的数据结构和算法实现&#xff0c;助力开发者更高效地解决问题 一个算法模板应当涵盖以下几点&…

debug - 只要在内存中有显示相关的数据, 就会被CE找到

文章目录 debug - 只要在内存中有显示相关的实际数据, 就会被CE找到概述笔记demo实现demo运行效果用CE查找实际数据地址找到自己的调试点 - 方法1找到自己的调试点 - 方法2打补丁备注END debug - 只要在内存中有显示相关的实际数据, 就会被CE找到 概述 自己写了一个demo, 想验…

Spring之AOP源码解析(中)

前言 在上一篇文章中,我们讲解了Spring中那些注解可能会产生AOP动态代理,我们通过源码发现,完成AOP相关操作都和ProxyFactory这个类有密切关系,这一篇我们将围绕这个类继续解析 演示 作用 ProxyFactory采用策略模式生成动态代理对象,具体生成cglib动态代理还是jdk动态代理,…

JAVA高并发——Java虚拟机锁优化

文章目录 1、锁偏向2、轻量级锁3、自旋锁4、锁消除 作为一款共用平台&#xff0c;JDK本身也为并发程序的性能绞尽脑汁。在JDK内部也想尽一切办法提高并发时的系统吞吐量。这里将向大家简单介绍几种JDK内部的“锁”优化策略。 1、锁偏向 锁偏向是一种针对加锁操作的优化手段。它…

用python绘制黄金价格变化曲线

首先你得从mt4把数据导出为csv&#xff1a;mt4如何导出数据-CSDN博客 1、引入必要的库 import numpy as np import pandas as pd import matplotlib.pyplot as plt 2、然后通过pandas载入csv数据 raw pd.read_csv("XAUUSDm1.csv", headerNone, index_colNone, p…

IO(2)

1 >使用从文件中读和写入文件完成两个文件的拷贝 #include<myhead.h> int main(int argc, const char *argv[]) {if(argc!3){puts("input error");return -1;}FILE *fprNULL;if((fprfopen(argv[1],"rb"))NULL){perror("fopen error");…

数据分析 - 机器学习

1&#xff1a;线性回归 线性回归是一种统计技术用于对输出变量与一个或多个输入变量之间的关系进行建模 用外行人的话来说&#xff0c;将其视为通过某些数据点拟合一条线&#xff0c;如下所示 以便在未知数据上进行预测&#xff0c;假设变量之间存在线性关系 点和线之间存在微小…

力扣(LeetCode)数据结构练习题(2)

今天又写了两道关于链表的练习题&#xff0c;来给大家分享一下。巩固一下上一篇学到的链表知识&#xff0c;题目可以然我们更清楚的认识链表。 目录 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表 给你单链表的头结点 head &#xff0c;请…