Qt&Vtk-022-LabeledMesh

简介: Qt&Vtk-022-LabeledMesh

image.png 这个我也不知道是啥东西。

文章目录


1 官方示例展示


哎呀,这英语才是第一生产力,英语不好,是真的很烦人那。今天我们么接着搬运代码,官方示例如下image.png

2 代码搬运


2.1 labeledmesh.h


#ifndef LABELEDMESH_H
#define LABELEDMESH_H
#include <QWidget>
#include "QVTKOpenGLWidget.h"               //新版本,旧版QVTKWidget
#include "vtkAutoInit.h"
#include "vtkSmartPointer.h"
#include "vtkPoints.h"
#include "vtkCellArray.h"
#include "vtkPolyData.h"
#include "vtkPolyDataMapper2D.h"
#include "vtkActor2D.h"
#include "vtkSphereSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkIdFilter.h"
#include "vtkRenderer.h"
#include "vtkSelectVisiblePoints.h"
#include "vtkLabeledDataMapper.h"
#include "vtkCellCenters.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkTextProperty.h"
static int xLength;
static int yLength;
static vtkSmartPointer<vtkSelectVisiblePoints> visPts;
static vtkSmartPointer<vtkSelectVisiblePoints> visCells;
static vtkSmartPointer<vtkPoints> pts;
static vtkSmartPointer<vtkRenderWindow>renwin;
namespace Ui {
class LabeledMesh;
}
class LabeledMesh : public QWidget
{
    Q_OBJECT
public:
    explicit LabeledMesh(QWidget *parent = 0);
    ~LabeledMesh();
    void PlaceWindow(int xmin, int ymin);
    void MoveWindow();
private:
    Ui::LabeledMesh *ui;
};
#endif // LABELEDMESH_H

2.2 labeledmesh.cpp


#include "labeledmesh.h"
#include "ui_labeledmesh.h"
LabeledMesh::LabeledMesh(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::LabeledMesh)
{
    ui->setupUi(this);
    int xmin = 200;
    xLength = 100;
    int xmax = xmin + xLength;
    int ymin = 200;
    yLength = 100;
    int ymax = xmin+yLength;
    pts = vtkSmartPointer<vtkPoints>::New();
    pts->InsertPoint(0,xmin,ymin,0);
    pts->InsertPoint(1,xmax,ymin,0);
    pts->InsertPoint(2,xmax,ymax,0);
    pts->InsertPoint(3,xmin,ymax,0);
    vtkSmartPointer<vtkCellArray> rect = vtkSmartPointer<vtkCellArray>::New();
    rect->InsertNextCell(5);
    rect->InsertCellPoint(0);
    rect->InsertCellPoint(1);
    rect->InsertCellPoint(2);
    rect->InsertCellPoint(3);
    rect->InsertCellPoint(0);
    vtkSmartPointer<vtkPolyData> selectRect = vtkSmartPointer<vtkPolyData>::New();
    selectRect->SetPoints(pts);
    selectRect->SetLines(rect);
    vtkSmartPointer<vtkPolyDataMapper2D> rectMapper = vtkSmartPointer<vtkPolyDataMapper2D>::New();
    rectMapper->SetInputData(selectRect);
    vtkSmartPointer<vtkActor2D> rectActor = vtkSmartPointer<vtkActor2D>::New();
    rectActor->SetMapper(rectMapper);
    vtkSmartPointer<vtkSphereSource> sphere = vtkSmartPointer<vtkSphereSource>::New();
    vtkSmartPointer<vtkPolyDataMapper> sphereMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    sphereMapper->SetInputConnection(sphere->GetOutputPort());
    vtkSmartPointer<vtkActor> sphereActor = vtkSmartPointer<vtkActor>::New();
    sphereActor->SetMapper(sphereMapper);
    vtkSmartPointer<vtkIdFilter> ids = vtkSmartPointer<vtkIdFilter>::New();
    ids->SetInputConnection(sphere->GetOutputPort());
    ids->PointIdsOn();
    ids->CellIdsOn();
    ids->FieldDataOn();
    vtkSmartPointer<vtkRenderer> ren1 = vtkSmartPointer<vtkRenderer>::New();
    visPts = vtkSmartPointer<vtkSelectVisiblePoints>::New();
    visPts->SetInputConnection(ids->GetOutputPort());
    visPts->SetRenderer(ren1);
    visPts->SelectionWindowOn();
    visPts->SetSelection(xmin,xmin+xLength,ymin,ymin+yLength);
    vtkSmartPointer<vtkLabeledDataMapper> ldm = vtkSmartPointer<vtkLabeledDataMapper>::New();
    ldm->SetInputConnection(visPts->GetOutputPort());
    ldm->SetLabelModeToLabelFieldData();
    vtkSmartPointer<vtkActor2D> pointLabels = vtkSmartPointer<vtkActor2D>::New();
    pointLabels->SetMapper(ldm);
    vtkSmartPointer<vtkCellCenters> cc = vtkSmartPointer<vtkCellCenters>::New();
    cc->SetInputConnection(ids->GetOutputPort());
    visCells = vtkSmartPointer<vtkSelectVisiblePoints>::New();
    visCells->SetInputConnection(cc->GetOutputPort());
    visCells->SetRenderer(ren1);
    visCells->SelectionWindowOn();
    visCells->SetSelection(xmin,xmin+xLength,ymin,ymin+ yLength);
    vtkSmartPointer<vtkLabeledDataMapper> cellmapper = vtkSmartPointer<vtkLabeledDataMapper>::New();
    cellmapper->SetInputConnection(visCells->GetOutputPort());
    cellmapper->SetLabelModeToLabelFieldData();
    cellmapper->GetLabelTextProperty()->SetColor(0,1,0);
    vtkSmartPointer<vtkActor2D> cellLabels = vtkSmartPointer<vtkActor2D>::New();
    cellLabels->SetMapper(cellmapper);
    ui->widget->GetRenderWindow()->AddRenderer(ren1);
    ren1->AddActor(sphereActor);
    ren1->AddActor2D(rectActor);
    ren1->AddActor2D(pointLabels);
    ren1->AddActor2D(cellLabels);
//    MoveWindow();
//    PlaceWindow(xmin,ymin);
}
LabeledMesh::~LabeledMesh()
{
    delete ui;
}
void LabeledMesh::PlaceWindow(int xmin, int ymin)
{
    int xmax = xmin + xLength;
    int ymax = ymin + yLength;
    visPts->SetSelection(xmin,xmax,ymin,ymax);
    visCells->SetSelection(xmin,xmax,ymin,ymax);
    pts->InsertPoint(0,xmin,ymin,0);
    pts->InsertPoint(1,xmin,ymin,0);
    pts->InsertPoint(2,xmin,ymin,0);
    pts->InsertPoint(3,xmin,ymin,0);
    pts->Modified();
    renwin->Render();
}
void LabeledMesh::MoveWindow()
{
    for(int y = 100;y<300;y+=25)
        for(int x = 100;x<300;x+=25)
            PlaceWindow(x,y);
}

image.pngimage.png

目录
相关文章
Vue2表格(Table)
这是一个基于 Vue3 的表格组件,提供了灵活的数据展示与分页功能。主要接收表格列配置 `columns`、数据源 `dataSource`、分页器配置 `pagination` 等参数,并支持加载状态显示及单页隐藏分页器等特性。组件内置了加载中组件 `Spin` 和分页组件 `Pagination`,样式参考 ant-design。使用时需在目标页面引入组件并设置相关属性即可实现丰富的表格展示效果。
650 1
Vue2表格(Table)
|
SQL 数据可视化 数据挖掘
一文带你看懂Python数据分析利器——Pandas的前世今生
一文带你看懂Python数据分析利器——Pandas的前世今生
204 0
|
存储 缓存 负载均衡
图解一致性哈希算法,看这一篇就够了!
近段时间一直在总结分布式系统架构常见的算法。前面我们介绍过布隆过滤器算法。接下来介绍一个非常重要、也非常实用的算法:一致性哈希算法。通过介绍一致性哈希算法的原理并给出了一种实现和实际运用的案例,带大家真正理解一致性哈希算法。
23763 64
图解一致性哈希算法,看这一篇就够了!
|
XML 传感器 算法
URDF机器人建模
ROS学习不必须非要机器人硬件平台,需要了解如何创建机器人的模型 如何使用ROS中的URDF工具创建机器人的模型
URDF机器人建模
|
Python
Python多装饰器执行顺序总结
Python多装饰器是从外到内执行的,再执行被装饰的函数。当然这只是在装饰器中的闭包函数的运行顺序,如果在装饰器函数和闭包函数之前有代码,那运行起来又不一样,具体看下面的例子。
556 0
|
资源调度 前端开发 JavaScript
React Native初探--从安装运行首个app到填坑指南
好多人说rn好用,一直要推荐我用,我就不信了,来安装玩一下试试效果。实践出真知!安装过程各种坑,工具太多了,太麻烦了,差点放弃(还好坚持下来呢)。 一、安装环境 (一)下载JDK 1.
3155 0
|
关系型数据库 MySQL 开发工具
|
2天前
|
SpringCloudAlibaba 负载均衡 Dubbo
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
本文对比分析了SpringCloudAlibaba框架下Feign与Dubbo的服务调用性能及差异。Feign基于HTTP协议,使用简单,适合轻量级微服务架构;Dubbo采用RPC通信,性能更优,支持丰富的服务治理功能。通过实际测试,Dubbo在调用性能、负载均衡和服务发现方面表现更出色。两者各有适用场景,可根据项目需求灵活选择。
338 123
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?