[vtkusers] plotting bar chart with vtkBarChartActor and vtkXYPlotActor
michiel mentink
michael.mentink at st-hughs.ox.ac.uk
Mon Jan 4 07:15:53 EST 2010
Dear All,
I'd like to plot a histogram of an image volume, file type metaImage.
I've managed to plot a histogram using the xyPlotActor, yet I have no way of
verifying if it is alright.
It also produces a segmentation fault.
I can't get the same histogram plotted using the BarChartActor.
Could anybody verify my code of both plots? Sorry, I'm a beginner, and at
this point I'm stuck.
Kind regards,
Michael
#include <vtkImageData.h>
#include <vtkMetaImageReader.h>
#include <vtkImageAccumulate.h>
#include <vtkSmartPointer.h>
#include <vtkBarChartActor.h>
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkPolyDataMapper.h"
#include "vtkActor.h"
#include "vtkContourFilter.h"
#include "vtkImageAccumulate.h"
#include "vtkXYPlotActor.h"
#include "vtkImageThreshold.h"
int main(int argc, char *argv[])
{
// handle the arguments
if(argc != 2)
{
vtkstd::cout << "Required arguments: filename.mhd" << vtkstd::endl;
}
// open a metaimage
vtkMetaImageReader * metaImageReader = vtkMetaImageReader::New();
metaImageReader->SetFileName(argv[1]);
//metaImageReader->Update();
vtkSmartPointer<vtkImageAccumulate> histogram =
vtkSmartPointer<vtkImageAccumulate>::New();
histogram->SetInput(metaImageReader->GetOutput());
// sets number of bins: 10 = N# bins
histogram->SetComponentExtent(0, 4000, 0, 0, 0, 0);
histogram->SetComponentOrigin(0, 0, 0);
histogram->SetComponentSpacing(0.16, 0.16, 3.26); // component spacing:
depends on spacing of input volume
histogram->UpdateWholeExtent();
vtkXYPlotActor* plot = vtkXYPlotActor::New();
plot->ExchangeAxesOff();
plot->SetLabelFormat("%g");
// plot->SetXRange(0, 320);
// plot->SetYRange(0, 10000);
plot->SetXTitle("Iso Surface Level");
plot->SetYTitle("Frequency");
plot->AddInput(histogram->GetOutput());
plot->SetXValuesToValue();
vtkBarChartActor* plot2 = vtkBarChartActor::New();
plot2->SetInput(histogram->GetOutput());
vtkRenderer *aRenderer = vtkRenderer::New();
vtkRenderWindow *renWin = vtkRenderWindow::New();
renWin->AddRenderer(aRenderer);
vtkRenderWindowInteractor *iren =
vtkRenderWindowInteractor::New();
iren->SetRenderWindow(renWin);
aRenderer->AddActor(plot);
renWin->SetSize(640, 480);
// Initialize the event loop and then start it.
iren->Initialize();
iren->Start();
vtkRenderer *aRenderer2 = vtkRenderer::New();
vtkRenderWindow *renWin2 = vtkRenderWindow::New();
renWin2->AddRenderer(aRenderer2);
vtkRenderWindowInteractor *iren2 =
vtkRenderWindowInteractor::New();
iren2->SetRenderWindow(renWin2);
aRenderer2->AddActor(plot2);
renWin2->SetSize(640, 480);
// Initialize the event loop and then start it.
iren2->Initialize();
iren2->Start();
histogram->Delete();
plot->Delete();
plot2->Delete();
iren->Delete();
renWin->Delete();
aRenderer->Delete();
return (0);
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20100104/2ac671a9/attachment.htm>
More information about the vtkusers
mailing list