#include "vtkActor.h" #include "vtkPolyDataMapper.h" #include "vtkRenderWindow.h" #include "vtkRenderWindowInteractor.h" #include "vtkRenderer.h" #include "vtkProperty.h" #include "vtkParametricFunctionSource.h" #include "vtkParametricSpline.h" #include "vtkTubeFilter.h" #include "vtkInteractorStyleTrackballCamera.h" #include "vtkFloatArray.h" int main(int argc, char** argv) { //--------------------------------------------------------------------------------------- // Create a curvilinear tube //--------------------------------------------------------------------------------------- vtkPoints* temp_pts = vtkPoints::New(); temp_pts->InsertPoint(0, 0,0,0); temp_pts->InsertPoint(1, 200,0,0); temp_pts->InsertPoint(2, 200,200,0); temp_pts->InsertPoint(3, 0,200,0); temp_pts->InsertPoint(4, 0,0,0); temp_pts->InsertPoint(5, 0,0,200); vtkParametricSpline* vtkpPs = vtkParametricSpline::New(); vtkpPs->SetPoints(temp_pts); vtkParametricFunctionSource* vtkpPfs = vtkParametricFunctionSource::New(); vtkpPfs->SetParametricFunction(vtkpPs); vtkpPfs->SetUResolution(100); vtkTubeFilter* vtkpTubeFilter = vtkTubeFilter::New(); vtkpTubeFilter->SetNumberOfSides(500); vtkpTubeFilter->SetRadius(5); vtkpTubeFilter->SetInputConnection(vtkpPfs->GetOutputPort()); vtkPolyDataMapper *tubeFilterMapper = vtkPolyDataMapper::New(); tubeFilterMapper->SetInputConnection(vtkpTubeFilter->GetOutputPort()); vtkActor *tubeFilterActor = vtkActor::New(); tubeFilterActor->SetMapper(tubeFilterMapper); tubeFilterActor->SetScale(1,1,1); tubeFilterActor->GetProperty()->SetColor(1,0,0); //--------------------------------------------------------------------------------------- // Curvilinear slice //--------------------------------------------------------------------------------------- int z = 100; vtkPoints *pts = vtkPoints::New();// points of curvilinear slice pts->InsertPoint(0, 10,10,z); pts->InsertPoint(1, 20,30,z); pts->InsertPoint(2, 30,60,z); pts->InsertPoint(3, 40,80,z); pts->InsertPoint(4, 50,30,z); pts->InsertPoint(5, 60,10,z); vtkFloatArray *norms = vtkFloatArray::New(); // normals on each point norms->SetNumberOfComponents(3); norms->SetNumberOfTuples(6); norms->SetTuple3(0, -1, 0.2, 0); norms->SetTuple3(1, -1, 0.4, 0); norms->SetTuple3(2, -1, 0.8, 0); norms->SetTuple3(3, 0, 1, 0); norms->SetTuple3(4, 1, 0.7, 0); norms->SetTuple3(5, 1, 0.3, 0); //--------------------------------------------------------------------------------------- // Extraction of an intersection between a curvilinear slice and a curvilinear tube //--------------------------------------------------------------------------------------- // ????? // I want a result on vtkImageData //--------------------------------------------------------------------------------------- // Create the RenderWindow, Renderer //--------------------------------------------------------------------------------------- vtkRenderer *ren1 = vtkRenderer::New(); ren1->AddActor(tubeFilterActor); ren1->SetBackground(1, 1, 1); vtkRenderWindow *renWin = vtkRenderWindow::New(); renWin->AddRenderer(ren1); renWin->SetSize(400, 300); vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New(); iren->SetRenderWindow(renWin); //--------------------------------------------------------------------------------------- // Configure an InteractorStyle //--------------------------------------------------------------------------------------- vtkInteractorStyleTrackballCamera *style = vtkInteractorStyleTrackballCamera::New(); iren->SetInteractorStyle(style); iren->Initialize(); iren->Start(); return 0 ; }