/*========================================================================= Program: Visualization Toolkit Module: $RCSfile: vtkImageNoiseSource.cxx,v $ 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. =========================================================================*/ #include "vtkImageNoiseSource.h" #include "vtkImageData.h" #include "vtkImageProgressIterator.h" #include "vtkMath.h" #include "vtkInformation.h" #include "vtkInformationVector.h" #include "vtkObjectFactory.h" #include "vtkStreamingDemandDrivenPipeline.h" vtkCxxRevisionMacro(vtkImageNoiseSource, "$Revision: 1.32 $"); vtkStandardNewMacro(vtkImageNoiseSource); //---------------------------------------------------------------------------- vtkImageNoiseSource::vtkImageNoiseSource() { this->Minimum = 0.0; this->Maximum = 10.0; this->WholeExtent[0] = 0; this->WholeExtent[1] = 255; this->WholeExtent[2] = 0; this->WholeExtent[3] = 255; this->WholeExtent[4] = 0; this->WholeExtent[5] = 0; this->SetNumberOfInputPorts(0); } //---------------------------------------------------------------------------- void vtkImageNoiseSource::SetWholeExtent(int xMin, int xMax, int yMin, int yMax, int zMin, int zMax) { int modified = 0; if (this->WholeExtent[0] != xMin) { modified = 1; this->WholeExtent[0] = xMin ; } if (this->WholeExtent[1] != xMax) { modified = 1; this->WholeExtent[1] = xMax ; } if (this->WholeExtent[2] != yMin) { modified = 1; this->WholeExtent[2] = yMin ; } if (this->WholeExtent[3] != yMax) { modified = 1; this->WholeExtent[3] = yMax ; } if (this->WholeExtent[4] != zMin) { modified = 1; this->WholeExtent[4] = zMin ; } if (this->WholeExtent[5] != zMax) { modified = 1; this->WholeExtent[5] = zMax ; } if (modified) { this->Modified(); } } //---------------------------------------------------------------------------- int vtkImageNoiseSource::RequestInformation ( vtkInformation * vtkNotUsed(request), vtkInformationVector** vtkNotUsed( inputVector ), vtkInformationVector *outputVector) { // get the info objects vtkInformation* outInfo = outputVector->GetInformationObject(0); outInfo->Set(vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT(), this->WholeExtent,6); vtkDataObject::SetPointDataActiveScalarInfo(outInfo, VTK_DOUBLE, 1); return 1; } void vtkImageNoiseSource::ExecuteData(vtkDataObject *output) { vtkImageData *data = this->AllocateOutputData(output); if (data->GetScalarType() != VTK_DOUBLE) { vtkErrorMacro("Execute: This source only outputs doubles"); } vtkImageProgressIterator outIt(data, data->GetExtent(), this, 0); // Loop through ouput pixels while (!outIt.IsAtEnd()) { double* outSI = outIt.BeginSpan(); double* outSIEnd = outIt.EndSpan(); while (outSI != outSIEnd) { // now process the components *outSI = this->Minimum + (this->Maximum - this->Minimum) * vtkMath::Random(); outSI++; } outIt.NextSpan(); } } void vtkImageNoiseSource::PrintSelf(ostream& os, vtkIndent indent) { this->Superclass::PrintSelf(os,indent); os << indent << "Minimum: " << this->Minimum << "\n"; os << indent << "Maximum: " << this->Maximum << "\n"; }