1 /*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: TestPolyDataTangents.cxx
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14 =========================================================================*/
15 // This test covers the vtkPolyDataTangents filter
16
17 #include "vtkActor.h"
18 #include "vtkActorCollection.h"
19 #include "vtkArrowSource.h"
20 #include "vtkCamera.h"
21 #include "vtkDataSetAttributes.h"
22 #include "vtkGenericOpenGLRenderWindow.h"
23 #include "vtkGlyph3DMapper.h"
24 #include "vtkInteractorStyleTrackballCamera.h"
25 #include "vtkJPEGReader.h"
26 #include "vtkNew.h"
27 #include "vtkPolyDataMapper.h"
28 #include "vtkPolyDataNormals.h"
29 #include "vtkPolyDataTangents.h"
30 #include "vtkProperty.h"
31 #include "vtkRegressionTestImage.h"
32 #include "vtkRenderWindow.h"
33 #include "vtkRenderWindowInteractor.h"
34 #include "vtkRenderer.h"
35 #include "vtkRendererCollection.h"
36 #include "vtkTestUtilities.h"
37 #include "vtkTexture.h"
38 #include "vtkTextureMapToCylinder.h"
39 #include "vtkTriangleFilter.h"
40 #include "vtkXMLPolyDataReader.h"
41
42 //------------------------------------------------------------------------------
TestPolyDataTangents(int argc,char * argv[])43 int TestPolyDataTangents(int argc, char* argv[])
44 {
45 vtkNew<vtkXMLPolyDataReader> reader;
46 char* fname = vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/cow.vtp");
47 reader->SetFileName(fname);
48 delete[] fname;
49
50 vtkNew<vtkPolyDataNormals> normals;
51 normals->SetInputConnection(reader->GetOutputPort());
52 normals->SplittingOff();
53
54 vtkNew<vtkTriangleFilter> triangle;
55 triangle->SetInputConnection(normals->GetOutputPort());
56
57 vtkNew<vtkTextureMapToCylinder> textureMap;
58 textureMap->SetInputConnection(triangle->GetOutputPort());
59
60 vtkNew<vtkPolyDataTangents> tangents;
61 tangents->SetInputConnection(textureMap->GetOutputPort());
62
63 vtkNew<vtkArrowSource> arrow;
64 arrow->SetTipResolution(20);
65 arrow->SetShaftResolution(20);
66
67 vtkNew<vtkPolyDataMapper> mapper;
68 mapper->SetInputConnection(tangents->GetOutputPort());
69
70 vtkNew<vtkGlyph3DMapper> tgtsMapper;
71 tgtsMapper->SetInputConnection(tangents->GetOutputPort());
72 tgtsMapper->SetOrientationArray(vtkDataSetAttributes::TANGENTS);
73 tgtsMapper->SetSourceConnection(arrow->GetOutputPort());
74 tgtsMapper->SetScaleFactor(0.5);
75
76 vtkNew<vtkJPEGReader> image;
77 char* texname = vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/tex_debug.jpg");
78 image->SetFileName(texname);
79 delete[] texname;
80
81 vtkNew<vtkTexture> texture;
82 texture->SetInputConnection(image->GetOutputPort());
83
84 vtkNew<vtkRenderer> renderer;
85
86 vtkNew<vtkRenderWindow> renWin;
87 renWin->SetSize(600, 600);
88 renWin->SetMultiSamples(0);
89 renWin->AddRenderer(renderer);
90
91 vtkNew<vtkRenderWindowInteractor> iren;
92 iren->SetRenderWindow(renWin);
93
94 vtkNew<vtkActor> actor;
95 actor->SetMapper(mapper);
96 actor->SetTexture(texture);
97
98 vtkNew<vtkActor> actorTangents;
99 actorTangents->SetMapper(tgtsMapper);
100 actorTangents->GetProperty()->SetColor(1.0, 0.0, 0.0);
101
102 renderer->AddActor(actor);
103 renderer->AddActor(actorTangents);
104
105 renWin->Render();
106
107 renderer->GetActiveCamera()->Zoom(3.0);
108 renWin->Render();
109
110 int retVal = vtkRegressionTestImage(renWin);
111 if (retVal == vtkRegressionTester::DO_INTERACTOR)
112 {
113 iren->Start();
114 }
115
116 return !retVal;
117 }
118