Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
三维等高线图C++;使用VTK的示例? 我尝试使用C++的VTK库。_C++_Vtk - Fatal编程技术网

三维等高线图C++;使用VTK的示例? 我尝试使用C++的VTK库。

三维等高线图C++;使用VTK的示例? 我尝试使用C++的VTK库。,c++,vtk,C++,Vtk,是否有使用VTK绘制简单3D轮廓图的示例,如下图所示 有几十个代码示例,但是我找不到任何关于这个简单任务的有用示例 我相信VTK管道的大致草图可能适合您,如下所示。如果创建一些x和y点作为VTKPoint,然后将它们移动到StructuredGrid数据类型,然后使用GeometryFilter添加z轴,则应通过vtkWarpScalar和常用的贴图器和角色管道生成曲面 以下示例代码可能有助于vtk构建中的/Examples/DataManipulation/Cxx/SGrid.Cxx。如果有完

是否有使用VTK绘制简单3D轮廓图的示例,如下图所示

有几十个代码示例,但是我找不到任何关于这个简单任务的有用示例


我相信VTK管道的大致草图可能适合您,如下所示。如果创建一些x和y点作为VTKPoint,然后将它们移动到StructuredGrid数据类型,然后使用GeometryFilter添加z轴,则应通过vtkWarpScalar和常用的贴图器和角色管道生成曲面


以下示例代码可能有助于vtk构建中的/Examples/DataManipulation/Cxx/SGrid.Cxx。如果有完整的体积和提取的等值面,也可以执行曲面打印。如果情况并非如此,并且您正在绘制3D函数,那么填充结构化网格可能是一种方法

不久前,我也想做同样的事情,并进行了广泛的搜索。它没有出现太多,所以我想与您分享我的解决方案。它包含一些多余的代码,但它可以工作

我刚刚重新发现了这个问题,因为VTK 6.0将有一个plotsurface函数。这很可能比我的代码的性能要好得多。我将稍后尝试并更新此帖子

不过,对我的代码稍加解释可能会有所帮助。它做了以下工作:

  • 生成一个二维矩阵大小的平面,用于保存z值(列和行表示x和y值)
  • 从输入矩阵创建xyz点
  • 将z值存储为每个点的标量
  • 根据矩阵的z值扭曲该平面并应用颜色(
    mapper->SetScalarRange(..)
  • 画出你的情节

  • 它还添加了一个计时器和一个更新命令,它输出渲染统计数据等。正如我所说,您可以省略很多。我的系统对此进行了详细阐述,但不多。

    在Kaikuchn代码的帮助下,我能够得出一个简单的曲面图。希望这能帮助寻找类似解决方案的人

    #include "stdafx.h"
    
    
    #include <vtkRenderer.h>
    #include <vtkRenderWindowInteractor.h>
    #include <vtkRenderWindow.h>
    #include <vtkSmartPointer.h>
    #include <vtkPoints.h>
    #include <vtkPointData.h>
    #include <vtkPolyData.h>
    #include <vtkPolyDataMapper.h>
    #include <vtkDataSetMapper.h>
    #include <vtkProperty.h>
    #include <vtkCubeAxesActor2D.h>
    #include <vtkInteractorStyleTrackballCamera.h>
    #include <vtkInteractorStyleTrackball.h>
    #include <vtkSimplePointsReader.h>
    #include <vtkWarpScalar.h>
    #include <vtkAxisActor2D.h>
    
    
    int mains(int, char *[])
    {
    
    
    // Read the file
      vtkSmartPointer<vtkSimplePointsReader> reader =vtkSmartPointer<vtkSimplePointsReader>::New();
      reader->SetFileName ( "simple.xyz" );
      reader->Update();
    
      vtkSmartPointer<vtkPolyData> inputPolyData = vtkSmartPointer<vtkPolyData>::New();
      inputPolyData ->CopyStructure(reader->GetOutput());
    
    
      // warp plane
      vtkSmartPointer<vtkWarpScalar> warp = vtkSmartPointer<vtkWarpScalar>::New();
      warp->SetInput(inputPolyData);
      warp->SetScaleFactor(0.0);
    
      // Visualize
      vtkSmartPointer<vtkDataSetMapper> mapper = vtkSmartPointer<vtkDataSetMapper>::New();
      mapper->SetInputConnection(warp->GetOutputPort());
    
    
    
      vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
      actor->GetProperty()->SetPointSize(4);
      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);
    
      renderer->AddActor(actor);
      renderer->SetBackground(.3, .6, .3);
      renderWindow->Render();
    
      vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
      renderWindowInteractor->SetInteractorStyle(style);
    
      // add & render CubeAxes
      vtkSmartPointer<vtkCubeAxesActor2D> axes = vtkSmartPointer<vtkCubeAxesActor2D>::New();
      axes->SetInput(warp->GetOutput());
      axes->SetFontFactor(3.0);
      axes->SetFlyModeToNone();
      axes->SetCamera(renderer->GetActiveCamera());
    
      vtkSmartPointer<vtkAxisActor2D> xAxis = axes->GetXAxisActor2D();
      xAxis->SetAdjustLabels(1);
    
      renderer->AddViewProp(axes);
      renderWindowInteractor->Start();
    
      return EXIT_SUCCESS;
    }
    

    在我的系统中,当“轴”和“扭曲”的
    SetInput()
    更改为
    SetInputData()
    时,代码工作。

    看看这里:你找到答案了吗?我也在找同样的东西。很好的帖子,你忘了包括“gauss.h”在pastie中,但由于大多数代码对于实际图形来说都是不必要的,所以它没有什么大不了的。pastie不再可用“pasties是永久的”但显然pastie.org不是。幸运的是,Madz发布了基于pastie内联代码的解决方案。但这个答案已经有5年多的历史了,我怀疑目前没有更好的解决方案。这是因为VTK 5.0和更高版本之间存在差异。
    0.0 0.0 3.0
    1.0 4.0 0.0
    0.0 1.0 0.0
    4.0 0.0 3.0
    1.0 4.0 7.0
    0.0 6.0 0.0