三维等高线图C++;使用VTK的示例? 我尝试使用C++的VTK库。
是否有使用VTK绘制简单3D轮廓图的示例,如下图所示 有几十个代码示例,但是我找不到任何关于这个简单任务的有用示例三维等高线图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管道的大致草图可能适合您,如下所示。如果创建一些x和y点作为VTKPoint,然后将它们移动到StructuredGrid数据类型,然后使用GeometryFilter添加z轴,则应通过vtkWarpScalar和常用的贴图器和角色管道生成曲面
以下示例代码可能有助于vtk构建中的/Examples/DataManipulation/Cxx/SGrid.Cxx。如果有完整的体积和提取的等值面,也可以执行曲面打印。如果情况并非如此,并且您正在绘制3D函数,那么填充结构化网格可能是一种方法 不久前,我也想做同样的事情,并进行了广泛的搜索。它没有出现太多,所以我想与您分享我的解决方案。它包含一些多余的代码,但它可以工作 我刚刚重新发现了这个问题,因为VTK 6.0将有一个plotsurface函数。这很可能比我的代码的性能要好得多。我将稍后尝试并更新此帖子 不过,对我的代码稍加解释可能会有所帮助。它做了以下工作:
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