OGS
VtkImageDataToLinePolyDataFilter Class Reference

Detailed Description

Creates lines that stand on top of the image with the length of the corresponding first sub-pixel value (the grey or red value). The maximum height is 0.1 * longest image dimension. Used by VtkCompositeImageDataToCylindersFilter.

Definition at line 16 of file VtkImageDataToLinePolyDataFilter.h.

#include <VtkImageDataToLinePolyDataFilter.h>

Inheritance diagram for VtkImageDataToLinePolyDataFilter:
[legend]
Collaboration diagram for VtkImageDataToLinePolyDataFilter:
[legend]

Public Member Functions

 vtkTypeMacro (VtkImageDataToLinePolyDataFilter, vtkPolyDataAlgorithm)
void PrintSelf (ostream &os, vtkIndent indent) override
 Prints information about itself.
 ogsUserPropertyMacro (LengthScaleFactor, double)
 Sets the scaling of the length of the lines.
void SetUserProperty (QString name, QVariant value) override
 Sets a user property.
 vtkGetMacro (ImageSpacing, double)
 Returns the space between two pixels.
 VtkImageDataToLinePolyDataFilter (const VtkImageDataToLinePolyDataFilter &)=delete
void operator= (const VtkImageDataToLinePolyDataFilter &)=delete
Public Member Functions inherited from VtkAlgorithmProperties
 VtkAlgorithmProperties (QObject *parent=nullptr)
 Constructor (sets default values)
 ~VtkAlgorithmProperties () override
vtkProperty * GetProperties () const
 Returns the vtk properties.
vtkTexture * GetTexture ()
 Returns a texture (if one has been assigned).
void SetTexture (vtkTexture *t)
 Sets a texture for the VtkVisPipelineItem.
vtkLookupTable * GetLookupTable (const QString &array_name)
 Returns the colour lookup table (if one has been assigned).
void RemoveLookupTable (const QString &array_name)
 Removes the lookup table for the given scalar.
void SetLookUpTable (const QString &array_name, vtkLookupTable *lut)
 Sets a colour lookup table for the given scalar array of the VtkVisPipelineItem.
void SetLookUpTable (const QString &array_name, const QString &filename)
 Loads a predefined color lookup table from a file for the specified scalar array.
bool GetScalarVisibility () const
 Returns the scalar visibility.
void SetScalarVisibility (bool on)
 Sets the scalar visibility.
QString GetName () const
 Returns the name. This is set to the file path if it is a source algorithm.
void SetName (QString name)
 Sets the name.
bool IsRemovable () const
 Is this algorithm removable from the pipeline (view).
QMap< QString, QVariant > * GetAlgorithmUserProperties () const
 Returns a map of user properties.
QMap< QString, QList< QVariant > > * GetAlgorithmUserVectorProperties () const
 Returns a map of vector user properties.
QVariant GetUserProperty (QString name) const
 Returns the value of a user property.
virtual void SetUserVectorProperty (QString name, QList< QVariant > values)
 Sets a vector user property. This should be implemented by subclasses.
QList< QVariant > GetUserVectorProperty (QString name) const
 Returns a list of values of a vector user property.
void SetActiveAttribute (QString name)
 Set the active attribute.
QString GetActiveAttribute () const
 Returns the desired active attribute.

Static Public Member Functions

static VtkImageDataToLinePolyDataFilterNew ()
 Create new objects with New() because of VTKs reference counting.

Protected Member Functions

 VtkImageDataToLinePolyDataFilter ()
 Constructor.
 ~VtkImageDataToLinePolyDataFilter () override
 Destructor.
int FillInputPortInformation (int port, vtkInformation *info) override
 Sets input port to vtkImageData.
int RequestData (vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector) override
 Converts the image data to lines.

Protected Attributes

double ImageSpacing {0.0}
 The spacing of the image.
Protected Attributes inherited from VtkAlgorithmProperties
vtkProperty * _property
vtkTexture * _texture
bool _scalarVisibility
std::map< QString, vtkLookupTable * > _lut
QString _name
QString _activeAttributeName
bool _removable
QMap< QString, QVariant > * _algorithmUserProperties
QMap< QString, QList< QVariant > > * _algorithmUserVectorProperties

Additional Inherited Members

Signals inherited from VtkAlgorithmProperties
void ScalarVisibilityChanged (bool on)

Constructor & Destructor Documentation

◆ VtkImageDataToLinePolyDataFilter() [1/2]

VtkImageDataToLinePolyDataFilter::VtkImageDataToLinePolyDataFilter ( const VtkImageDataToLinePolyDataFilter & )
delete

◆ VtkImageDataToLinePolyDataFilter() [2/2]

VtkImageDataToLinePolyDataFilter::VtkImageDataToLinePolyDataFilter ( )
protected

Constructor.

Definition at line 18 of file VtkImageDataToLinePolyDataFilter.cpp.

20{
21 this->SetLengthScaleFactor(1.0);
22}

◆ ~VtkImageDataToLinePolyDataFilter()

VtkImageDataToLinePolyDataFilter::~VtkImageDataToLinePolyDataFilter ( )
overrideprotecteddefault

Destructor.

Member Function Documentation

◆ FillInputPortInformation()

int VtkImageDataToLinePolyDataFilter::FillInputPortInformation ( int port,
vtkInformation * info )
overrideprotected

Sets input port to vtkImageData.

Definition at line 32 of file VtkImageDataToLinePolyDataFilter.cpp.

34{
35 info->Set(vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE(), "vtkImageData");
36 return 1;
37}

◆ New()

VtkImageDataToLinePolyDataFilter * VtkImageDataToLinePolyDataFilter::New ( )
static

Create new objects with New() because of VTKs reference counting.

References VtkImageDataToLinePolyDataFilter().

Referenced by VtkFilterFactory::CreateSimpleFilter(), and VtkCompositeImageToCylindersFilter::init().

◆ ogsUserPropertyMacro()

VtkImageDataToLinePolyDataFilter::ogsUserPropertyMacro ( LengthScaleFactor ,
double  )

Sets the scaling of the length of the lines.

◆ operator=()

void VtkImageDataToLinePolyDataFilter::operator= ( const VtkImageDataToLinePolyDataFilter & )
delete

◆ PrintSelf()

void VtkImageDataToLinePolyDataFilter::PrintSelf ( ostream & os,
vtkIndent indent )
override

Prints information about itself.

Definition at line 26 of file VtkImageDataToLinePolyDataFilter.cpp.

27{
28 this->Superclass::PrintSelf(os, indent);
29 os << indent << "LengthScaleFactor: " << this->LengthScaleFactor << "\n";
30}

◆ RequestData()

int VtkImageDataToLinePolyDataFilter::RequestData ( vtkInformation * request,
vtkInformationVector ** inputVector,
vtkInformationVector * outputVector )
overrideprotected

Converts the image data to lines.

Definition at line 39 of file VtkImageDataToLinePolyDataFilter.cpp.

43{
44 vtkDebugMacro(<< "Executing VtkImageDataToPolyDataFilter");
45
46 vtkInformation* inInfo = inputVector[0]->GetInformationObject(0);
47 vtkInformation* outInfo = outputVector->GetInformationObject(0);
48 vtkImageData* input =
49 vtkImageData::SafeDownCast(inInfo->Get(vtkDataObject::DATA_OBJECT()));
50 vtkPolyData* output =
51 vtkPolyData::SafeDownCast(outInfo->Get(vtkDataObject::DATA_OBJECT()));
52
53 void* inScalarPtr = input->GetScalarPointer();
54 int numScalarComponents = input->GetNumberOfScalarComponents();
55
56 double spacing[3];
57 input->GetSpacing(spacing);
58 this->ImageSpacing = spacing[0];
59
60 int dimensions[3];
61 input->GetDimensions(dimensions);
62
63 // Skip execution if there are no points
64 vtkIdType numPts = input->GetNumberOfPoints();
65 if (numPts < 1)
66 {
67 vtkDebugMacro("No data to extract lines!");
68 return 1;
69 }
70
71 // Allocate the space needed for the output cells.
72 output->Allocate(numPts);
73
74 // Allocate space for a new set of points
75 vtkSmartPointer<vtkPoints> newPts = vtkSmartPointer<vtkPoints>::New();
76 newPts->SetNumberOfPoints(numPts * 2);
77
78 // Allocate space for the data associated with the new set of points
79 vtkPointData* inPD = input->GetPointData();
80 vtkPointData* outPD = output->GetPointData();
81 outPD->CopyAllocate(inPD, numPts * 16, numPts);
82
83 // Compute scaling factor that max height is 0.1 * longest image dimension
84 double range[2];
85 inPD->GetArray(0)->GetRange(range);
86 double const scalingFactor =
87 (std::max(dimensions[0], dimensions[1]) * spacing[0] * 0.1) /
88 std::max(range[0], range[1]);
89
90 double dir[3] = {0, 0, 1};
91
92 // Traverse all points creating another point with scalar distance in Z
93 // direction
94 for (vtkIdType ptId = 0; ptId < numPts; ++ptId)
95 {
96 // Skip translucent pixels
97 float opacity =
98 (static_cast<float*>(inScalarPtr))[ptId * numScalarComponents + 1];
99 if (opacity < 0.00000001f)
100 {
101 continue;
102 }
103
104 // Compute length of the new line (scalar * LengthScaleFactor)
105 double const length =
106 (static_cast<float*>(inScalarPtr))[ptId * numScalarComponents] *
107 scalingFactor * this->LengthScaleFactor;
108
109 // Skip this line if length is zero
110 if (length < 0.00000001f)
111 {
112 continue;
113 }
114
115 // Get the old point location
116 double p[3];
117 input->GetPoint(ptId, p);
118
119 // Compute the new point location
120 double newPt[3];
121 for (std::size_t i = 0; i < 3; ++i)
122 {
123 newPt[i] = p[i] + dir[i] * length;
124 }
125
126 // Copy the old point
127 newPts->SetPoint(ptId * 2, p);
128 outPD->CopyData(inPD, ptId, ptId * 2);
129
130 // Create the new point
131 newPts->SetPoint(ptId * 2 + 1, newPt);
132 outPD->CopyData(inPD, ptId, ptId * 2 + 1);
133
134 // Create the line
135 vtkSmartPointer<vtkLine> line = vtkSmartPointer<vtkLine>::New();
136 line->GetPointIds()->SetId(0, ptId * 2);
137 line->GetPointIds()->SetId(1, ptId * 2 + 1);
138 output->InsertNextCell(line->GetCellType(), line->GetPointIds());
139 }
140
141 // Store the new set of points in the output
142 output->SetPoints(newPts);
143 output->GetPointData()->GetArray(0)->SetName("Colors");
144
145 // Avoid keeping extra memory around
146 output->Squeeze();
147
148 vtkDebugMacro(<< "Created: " << newPts->GetNumberOfPoints() << " points, "
149 << output->GetNumberOfCells() << " lines");
150
151 return 1;
152}

References ImageSpacing.

◆ SetUserProperty()

void VtkImageDataToLinePolyDataFilter::SetUserProperty ( QString name,
QVariant value )
inlineoverridevirtual

Sets a user property.

Reimplemented from VtkAlgorithmProperties.

Definition at line 31 of file VtkImageDataToLinePolyDataFilter.h.

32 {
33 if (name.compare("LengthScaleFactor") == 0)
34 SetLengthScaleFactor(value.toDouble());
35 }

◆ vtkGetMacro()

VtkImageDataToLinePolyDataFilter::vtkGetMacro ( ImageSpacing ,
double  )

Returns the space between two pixels.

References ImageSpacing.

◆ vtkTypeMacro()

VtkImageDataToLinePolyDataFilter::vtkTypeMacro ( VtkImageDataToLinePolyDataFilter ,
vtkPolyDataAlgorithm  )

Member Data Documentation

◆ ImageSpacing

double VtkImageDataToLinePolyDataFilter::ImageSpacing {0.0}
protected

The spacing of the image.

Definition at line 59 of file VtkImageDataToLinePolyDataFilter.h.

59{0.0};

Referenced by RequestData(), and vtkGetMacro().


The documentation for this class was generated from the following files: