File: TestImageDataOrientation2.cxx

package info (click to toggle)
paraview 5.11.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 497,236 kB
  • sloc: cpp: 3,171,290; ansic: 1,315,072; python: 134,290; xml: 103,324; sql: 65,887; sh: 5,286; javascript: 4,901; yacc: 4,383; java: 3,977; perl: 2,363; lex: 1,909; f90: 1,255; objc: 143; makefile: 119; tcl: 59; pascal: 50; fortran: 29
file content (110 lines) | stat: -rw-r--r-- 3,570 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*=========================================================================

  Program:   Visualization Toolkit
  Module:    TestImageDataOrientation2.cxx

  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
  All rights reserved.
  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notice for more information.

=========================================================================*/

// .NAME Test orientation for image data
// .SECTION Description
// This program tests the location of an oriented Image Data by using a
// non-identity direction matrix and extracting points of the image data
// that fall within a sphere.

#include "vtkDebugLeaks.h"
#include "vtkGlyph3D.h"
#include "vtkImageData.h"
#include "vtkMath.h"
#include "vtkMatrix4x4.h"
#include "vtkNew.h"
#include "vtkPolyDataMapper.h"
#include "vtkProperty.h"
#include "vtkRegressionTestImage.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"
#include "vtkSelectEnclosedPoints.h"
#include "vtkSphereSource.h"
#include "vtkThresholdPoints.h"

int TestImageDataOrientation2(int argc, char* argv[])
{
  // Standard rendering classes
  vtkNew<vtkRenderer> renderer;
  vtkNew<vtkRenderWindow> renWin;
  renWin->AddRenderer(renderer);
  vtkNew<vtkRenderWindowInteractor> iren;
  iren->SetRenderWindow(renWin);

  // Create an oriented image data
  double angle = -vtkMath::Pi() / 4;
  double direction[9] = { cos(angle), sin(angle), 0, -sin(angle), cos(angle), 0, 0, 0, 1 };
  vtkNew<vtkImageData> image;
  image->SetExtent(0, 6, 0, 10, 0, 10);
  image->SetOrigin(-0.4, 0.2, -0.6);
  image->SetSpacing(0.4, -0.25, 0.25);
  image->SetDirectionMatrix(direction);
  image->AllocateScalars(VTK_DOUBLE, 0);

  // Create a containing surface
  vtkNew<vtkSphereSource> ss;
  ss->SetPhiResolution(25);
  ss->SetThetaResolution(38);
  ss->SetCenter(0, 0, 0);
  ss->SetRadius(2.5);
  vtkNew<vtkPolyDataMapper> sphereMapper;
  sphereMapper->SetInputConnection(ss->GetOutputPort());
  vtkNew<vtkActor> sphereActor;
  sphereActor->SetMapper(sphereMapper);
  sphereActor->GetProperty()->SetRepresentationToWireframe();

  vtkNew<vtkSelectEnclosedPoints> select;
  select->SetInputData(image);
  select->SetSurfaceConnection(ss->GetOutputPort());

  // Now extract points
  vtkNew<vtkThresholdPoints> thresh;
  thresh->SetInputConnection(select->GetOutputPort());
  thresh->SetInputArrayToProcess(
    0, 0, 0, vtkDataObject::FIELD_ASSOCIATION_POINTS, "SelectedPoints");
  thresh->ThresholdByUpper(0.5);

  // Show points as glyphs
  vtkNew<vtkSphereSource> glyph;
  vtkNew<vtkGlyph3D> glypher;
  glypher->SetInputConnection(thresh->GetOutputPort());
  glypher->SetSourceConnection(glyph->GetOutputPort());
  glypher->SetScaleModeToDataScalingOff();
  glypher->SetScaleFactor(0.15);

  vtkNew<vtkPolyDataMapper> pointsMapper;
  pointsMapper->SetInputConnection(glypher->GetOutputPort());
  pointsMapper->ScalarVisibilityOff();

  vtkNew<vtkActor> pointsActor;
  pointsActor->SetMapper(pointsMapper);
  pointsActor->GetProperty()->SetColor(0, 0, 1);

  // Add actors
  //  renderer->AddActor(sphereActor);
  renderer->AddActor(pointsActor);

  // Standard testing code.
  renWin->SetSize(400, 400);
  renWin->Render();
  int retVal = vtkRegressionTestImage(renWin);
  if (retVal == vtkRegressionTester::DO_INTERACTOR)
  {
    iren->Start();
  }

  return !retVal;
}