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