代码
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkInteractionStyle)
VTK_MODULE_INIT(vtkRenderingFreeType)
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2)
#include <vtkActor.h>
#include <vtkCamera.h>
#include <vtkCellArray.h>
#include <vtkCellData.h>
#include <vtkDoubleArray.h>
#include <vtkGlyph3DMapper.h>
#include <vtkNamedColors.h>
#include <vtkNew.h>
#include <vtkParametricFunctionSource.h>
#include <vtkParametricSpline.h>
#include <vtkPoints.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkRenderer.h>
#include <vtkSphereSource.h>
int main(int, char* []) {
vtkNew<vtkNamedColors> colors;
// Create three points. We will join (Origin and P0) with a red line and
// (Origin and P1) with a green line
double origin[3] = {0.0, 0.0, 0.0};
double p0[3] = {1.0, 0.0, 0.0};
double p1[3] = {0.0, 1.0, 0.0};
double p2[3] = {0.0, 1.0, 2.0};
double p3[3] = {1.0, 2.0, 3.0};
// Create a vtkPoints object and store the points in it
vtkNew<vtkPoints> points;
points->InsertNextPoint(origin);
points->InsertNextPoint(p0);
points->InsertNextPoint(p1);
points->InsertNextPoint(p2);
points->InsertNextPoint(p3);
vtkNew<vtkParametricSpline> spline;
spline->SetPoints(points);
vtkNew<vtkParametricFunctionSource> functionSource;
functionSource->SetParametricFunction(spline);
functionSource->Update();
vtkNew<vtkSphereSource> sphere;
sphere->SetPhiResolution(21);
sphere->SetThetaResolution(21);
sphere->SetRadius(0.1);//0.1
// Setup actor and mapper
vtkNew<vtkPolyDataMapper> mapper;
mapper->SetInputConnection(functionSource->GetOutputPort());
vtkNew<vtkActor> actor;
actor->SetMapper(mapper);
actor->GetProperty()->SetColor(colors->GetColor3d("DarkSlateGrey").GetData());
actor->GetProperty()->SetLineWidth(1.0); //3
//actor->GetProperty()->SetPointSize(0.5);
// Create a polydata to store everything in
vtkNew<vtkPolyData> polyData;
polyData->SetPoints(points);
vtkNew<vtkGlyph3DMapper> pointMapper;
pointMapper->SetInputData(polyData);
pointMapper->SetSourceConnection(sphere->GetOutputPort());
vtkNew<vtkActor> pointActor;
pointActor->SetMapper(pointMapper);
pointActor->GetProperty()->SetColor(colors->GetColor3d("Red").GetData());
pointActor->GetProperty()->SetPointSize(0.5);
// Setup render window, renderer, and interactor
vtkNew<vtkRenderer> renderer;
vtkNew<vtkRenderWindow> renderWindow;
renderWindow->AddRenderer(renderer);
renderWindow->SetWindowName("ParametricSpline");
vtkNew<vtkRenderWindowInteractor> renderWindowInteractor;
renderWindowInteractor->SetRenderWindow(renderWindow);
renderer->AddActor(actor);
renderer->AddActor(pointActor);
renderer->SetBackground(colors->GetColor3d("Silver").GetData());
renderWindow->Render();
renderWindowInteractor->Start();
return EXIT_SUCCESS;
}
CMakeList.txt
cmake_minimum_required(VERSION 3.3 FATAL_ERROR)
project(ParametricSpline)
find_package(VTK COMPONENTS
vtkCommonColor
vtkCommonComputationalGeometry
vtkCommonCore
vtkCommonDataModel
vtkFiltersSources
vtkInteractionStyle
vtkRenderingContextOpenGL2
vtkRenderingCore
vtkRenderingFreeType
vtkRenderingGL2PSOpenGL2
vtkRenderingOpenGL2
QUIET
)
if (NOT VTK_FOUND)
message("Skipping ParametricSpline: ${VTK_NOT_FOUND_MESSAGE}")
return ()
endif()
message (STATUS "VTK_VERSION: ${VTK_VERSION}")
if (VTK_VERSION VERSION_LESS "8.90.0")
# old system
include(${VTK_USE_FILE})
add_executable(ParametricSpline MACOSX_BUNDLE ParametricSpline.cxx )
target_link_libraries(ParametricSpline PRIVATE ${VTK_LIBRARIES})
else ()
# include all components
add_executable(ParametricSpline MACOSX_BUNDLE ParametricSpline.cxx )
target_link_libraries(ParametricSpline PRIVATE ${VTK_LIBRARIES})
# vtk_module_autoinit is needed
vtk_module_autoinit(
TARGETS ParametricSpline
MODULES ${VTK_LIBRARIES}
)
endif ()
编译步骤:
cd ParametricSpline/build
cmake .. (或者cmake -DVTK_DIR:PATH=/home/me/vtk_build ..)
make (或者vs2017 打开ParametricSpline.sln)
结果
sphere->SetRadius(0.1);//0.1
sphere->SetRadius(0.04);
其它
对于vtkCurveRepresentation,默认HandleSize为5.0,可以修改这个变量
//----------------------------------------------------------------------------
vtkCurveRepresentation::vtkCurveRepresentation()
{
this->LastEventPosition[0] = VTK_DOUBLE_MAX;
this->LastEventPosition[1] = VTK_DOUBLE_MAX;
this->LastEventPosition[2] = VTK_DOUBLE_MAX;
this->Bounds[0] = VTK_DOUBLE_MAX;
this->Bounds[1] = -VTK_DOUBLE_MAX;
this->Bounds[2] = VTK_DOUBLE_MAX;
this->Bounds[3] = -VTK_DOUBLE_MAX;
this->Bounds[4] = VTK_DOUBLE_MAX;
this->Bounds[5] = -VTK_DOUBLE_MAX;
this->HandleSize = 5.0;
...
}