VTK-创建一个平面

#include <iostream>
using namespace std;
#include <vtkVersion.h>
#include <vtkPlaneSource.h>
#include <vtkPolyData.h>
#include <vtkSmartPointer.h>
#include <vtkPolyDataMapper.h>
#include <vtkActor.h>
#include <vtkRenderWindow.h>
#include <vtkRenderer.h>
#include <vtkRenderWindowInteractor.h>

int main() {
    //创建一个平面
    vtkSmartPointer<vtkPlaneSource>planeSource = vtkSmartPointer<vtkPlaneSource>::New();//下面是根据点法式创建的平面
    planeSource->SetCenter(1, 0, 0);
    planeSource->SetNormal(1, 1, 1);
    planeSource->Update();
//planeSource会根据上面输入数据,创建PolyData对象,并通过GetOutput输出对象指针
    vtkSmartPointer<vtkPolyData> polydataPlane = vtkSmartPointer<vtkPolyData>::New();
    polydataPlane = planeSource->GetOutput();
    vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputData(polydataPlane);
    //创建演员
    vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
    actor->SetMapper(mapper);

//创建显示窗口
    vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
    vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
    renderWindow->AddRenderer(renderer);
    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    renderWindowInteractor->SetRenderWindow(renderWindow);

    // Add the actors to the scene
    renderer->AddActor(actor);
    renderer->SetBackground(.1, .2, .3); // Background color dark blue

    // Render and interact
    renderWindow->Render();
    renderWindowInteractor->Start();
    return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Qt中使用VTK来绘制一个平面,你可以按照以下步骤: 1. 在Qt项目中添加VTK库,包括头文件和链接库。 2. 创建一个vtkRenderer对象和vtkRenderWindow对象,并将vtkRenderWindow设置为Qt的QWidget。 ```c++ vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New(); renderWindow->AddRenderer(renderer); iren->SetRenderWindow(renderWindow); vtkSmartPointer<vtkGenericOpenGLRenderWindow> widget = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New(); widget->SetRenderWindow(renderWindow); ``` 3. 创建三个空间点以定义平面,并使用vtkPlaneSource类来创建平面poly data。 ```c++ vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New(); points->InsertNextPoint(0.0, 0.0, 0.0); points->InsertNextPoint(1.0, 0.0, 0.0); points->InsertNextPoint(0.0, 1.0, 0.0); vtkSmartPointer<vtkPlaneSource> planeSource = vtkSmartPointer<vtkPlaneSource>::New(); planeSource->SetOrigin(points->GetPoint(0)); planeSource->SetPoint1(points->GetPoint(1)); planeSource->SetPoint2(points->GetPoint(2)); planeSource->Update(); vtkPolyData* planePolyData = planeSource->GetOutput(); ``` 4. 创建vtkPolyDataMapper对象和vtkActor对象,并将平面poly data映射到vtkActor上。 ```c++ vtkSmartPointer<vtkPolyDataMapper> planeMapper = vtkSmartPointer<vtkPolyDataMapper>::New(); planeMapper->SetInputData(planePolyData); vtkSmartPointer<vtkActor> planeActor = vtkSmartPointer<vtkActor>::New(); planeActor->SetMapper(planeMapper); ``` 5. 将vtkActor添加到vtkRenderer中,并设置相机位置和方向。 ```c++ renderer->AddActor(planeActor); renderer->SetBackground(0.1, 0.2, 0.4); renderer->ResetCamera(); renderer->GetActiveCamera()->Azimuth(30); renderer->GetActiveCamera()->Elevation(30); renderer->GetActiveCamera()->Dolly(1.5); renderer->ResetCameraClippingRange(); ``` 6. 启动渲染循环。 ```c++ iren->Initialize(); renderWindow->Render(); iren->Start(); ``` 完整的代码如下: ```c++ #include <vtkActor.h> #include <vtkCamera.h> #include <vtkGenericOpenGLRenderWindow.h> #include <vtkPlaneSource.h> #include <vtkPolyDataMapper.h> #include <vtkPoints.h> #include <vtkRenderer.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> #include <vtkSmartPointer.h> int main(int argc, char** argv) { vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New(); renderWindow->AddRenderer(renderer); iren->SetRenderWindow(renderWindow); vtkSmartPointer<vtkGenericOpenGLRenderWindow> widget = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New(); widget->SetRenderWindow(renderWindow); vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New(); points->InsertNextPoint(0.0, 0.0, 0.0); points->InsertNextPoint(1.0, 0.0, 0.0); points->InsertNextPoint(0.0, 1.0, 0.0); vtkSmartPointer<vtkPlaneSource> planeSource = vtkSmartPointer<vtkPlaneSource>::New(); planeSource->SetOrigin(points->GetPoint(0)); planeSource->SetPoint1(points->GetPoint(1)); planeSource->SetPoint2(points->GetPoint(2)); planeSource->Update(); vtkPolyData* planePolyData = planeSource->GetOutput(); vtkSmartPointer<vtkPolyDataMapper> planeMapper = vtkSmartPointer<vtkPolyDataMapper>::New(); planeMapper->SetInputData(planePolyData); vtkSmartPointer<vtkActor> planeActor = vtkSmartPointer<vtkActor>::New(); planeActor->SetMapper(planeMapper); renderer->AddActor(planeActor); renderer->SetBackground(0.1, 0.2, 0.4); renderer->ResetCamera(); renderer->GetActiveCamera()->Azimuth(30); renderer->GetActiveCamera()->Elevation(30); renderer->GetActiveCamera()->Dolly(1.5); renderer->ResetCameraClippingRange(); iren->Initialize(); renderWindow->Render(); iren->Start(); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值