[vtkusers] problem with xyPlot
David Doria
daviddoria+vtk at gmail.com
Sat Mar 27 17:20:46 EDT 2010
On Fri, Mar 26, 2010 at 6:24 AM, <edoardo.belletti at alice.it> wrote:
> Hi
> I have a problem with this exaple:
>
> /*=========================================================================
>
> Program: Visualization Toolkit
> Module: $RCSfile: Cylinder.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.
>
> =========================================================================*/
> //This example demonstrates the use of vtkXYPlotActor to display three
> //probe lines using three different techniques. In this example, we are
> //loading data using the vtkPLOT3DReader. We are using the vtkProbeFilter
> //to extract the underlying point data along three probe lines.
>
> //
> //First we include the VTK Tcl packages which will make available
> //all of the vtk commands to Tcl.
> //
> #include "vtkPLOT3DReader.h"
> #include "vtkLineSource.h"
> #include "vtkTransform.h"
> #include "vtkTransformPolyDataFilter.h"
> #include "vtkProbeFilter.h"
> #include "vtkProperty2D.h"
>
> #include "vtkAppendPolyData.h"
> #include "vtkTubeFilter.h"
>
> #include "vtkPolyDataMapper.h"
> #include "vtkActor.h"
> #include "vtkXYPlotActor.h"
> #include "vtkTextProperty.h"
> #include "vtkStructuredGridOutlineFilter.h"
>
> #include "vtkRenderer.h"
> #include "vtkRenderWindow.h"
> #include "vtkRenderWindowInteractor.h"
> #include "vtkProperty.h"
> #include "vtkCamera.h"
>
> int main()
> {
> //Create a PLOT3D reader and load the data.
> //
> vtkPLOT3DReader *pl3d=vtkPLOT3DReader::New();
> pl3d->SetXYZFileName("combxyz.bin");
> pl3d->SetQFileName("combq.bin");
> pl3d->SetScalarFunctionNumber(100);
> pl3d->SetVectorFunctionNumber(202);
> pl3d->Update();
>
> //Create three the line source to use for the probe lines.
> vtkLineSource *line=vtkLineSource::New();
> line->SetResolution(30);
>
>
> //Move the line into place and create the probe filter. For
> vtkProbeFilter,
> //the probe line is the input, and the underlying data set is the source.
> vtkTransform *transL1=vtkTransform::New();
> transL1->Translate(3.7,0.0,28.37);
> transL1->Scale(5,5,5);
> transL1->RotateY(90);
> vtkTransformPolyDataFilter *tf=vtkTransformPolyDataFilter::New();
> tf->SetInputConnection(line->GetOutputPort());
> tf->SetTransform(transL1);
> vtkProbeFilter *probe=vtkProbeFilter::New();
> probe->SetInputConnection(tf->GetOutputPort());
> probe->SetSource(pl3d->GetOutput());
>
> //Move the line again and create another probe filter.
> vtkTransform *transL2=vtkTransform::New();
> transL2->Translate(9.2,0.0,31.20);
> transL2->Scale (5, 5, 5);
> transL2-> RotateY (90);
> vtkTransformPolyDataFilter *tf2=vtkTransformPolyDataFilter::New();
> tf2-> SetInputConnection (line-> GetOutputPort());
> tf2 ->SetTransform (transL2);
> vtkProbeFilter *probe2=vtkProbeFilter::New();
> probe2-> SetInputConnection (tf2 ->GetOutputPort());
> probe2-> SetSource (pl3d-> GetOutput());
>
> //Move the line again and create a third probe filter.
> vtkTransform *transL3=vtkTransform::New();
> transL3-> Translate( 13.27, 0.0, 33.40);
> transL3->Scale( 4.5, 4.5, 4.5);
> transL3-> RotateY( 90);
> vtkTransformPolyDataFilter *tf3=vtkTransformPolyDataFilter::New();
> tf3-> SetInputConnection(line->GetOutputPort());
> tf3-> SetTransform (transL3);
> vtkProbeFilter *probe3=vtkProbeFilter::New();
> probe3-> SetInputConnection (tf3 ->GetOutputPort());
> probe3-> SetSource(pl3d-> GetOutput());
>
> //Create a vtkAppendPolyData to merge the output of the three probe filters
> //into one data set.
> vtkAppendPolyData *appendF=vtkAppendPolyData::New();
> appendF-> AddInput (probe-> GetPolyDataOutput());
> appendF-> AddInput (probe2-> GetPolyDataOutput());
> appendF-> AddInput (probe3-> GetPolyDataOutput());
>
> //Create a tube filter to represent the lines as tubes. Set up the
> associated
> //mapper and actor.
> vtkTubeFilter *tuber=vtkTubeFilter::New();
> tuber-> SetInputConnection (appendF->GetOutputPort());
> tuber-> SetRadius (0.1);
> vtkPolyDataMapper *lineMapper=vtkPolyDataMapper::New();
> lineMapper-> SetInputConnection (tuber-> GetOutputPort());
> vtkActor *lineActor=vtkActor::New();
> lineActor-> SetMapper( lineMapper);
>
> // Create an xy-plot using the output of the 3 probe filters as input.
> //The x-values we are plotting are arc length.
> vtkXYPlotActor *xyplot=vtkXYPlotActor::New();
> xyplot-> AddInput (probe-> GetOutput());
> xyplot-> AddInput (probe2-> GetOutput());
> xyplot->AddInput (probe3-> GetOutput());
> xyplot->GetPositionCoordinate()-> SetValue (0.0, 0.67, 0);
> xyplot-> GetPosition2Coordinate()-> SetValue (1.0, 0.33, 0);
> //relative to
> Position
> xyplot-> SetXValuesToArcLength();
> xyplot-> SetNumberOfXLabels( 6);
> xyplot ->SetTitle ("Pressure vs. Arc Length (Zoomed View)");
> xyplot-> SetXTitle( "");
> xyplot-> SetYTitle ("P");
> xyplot-> SetXRange( .1 ,.35);
> xyplot-> SetYRange( .2, .4);
> xyplot-> GetProperty()-> SetColor (0, 0, 0);
> xyplot-> GetProperty()-> SetLineWidth( 2);
> //Set text prop color (same color for backward compat with test)
> //Assign same object to all text props
> vtkTextProperty *tprop;
> tprop =xyplot-> GetTitleTextProperty();
> tprop ->SetColor(xyplot-> GetProperty()-> GetColor());
> xyplot ->SetAxisTitleTextProperty (tprop);
> xyplot-> SetAxisLabelTextProperty (tprop);
>
> //Create an xy-plot using the output of the 3 probe filters as input.
> //The x-values we are plotting are normalized arc length.
> vtkXYPlotActor *xyplot2=vtkXYPlotActor::New();
> xyplot2-> AddInput (probe-> GetOutput());
> xyplot2 ->AddInput (probe2 ->GetOutput());
> xyplot2-> AddInput (probe3 ->GetOutput());
> xyplot2-> GetPositionCoordinate()-> SetValue (0.00 ,0.33, 0);
> xyplot2-> GetPosition2Coordinate()-> SetValue( 1.0, 0.33, 0); //
> relative to Position
> xyplot2-> SetXValuesToNormalizedArcLength();
> xyplot2-> SetNumberOfXLabels (6);
> xyplot2-> SetTitle ("Pressure vs. Normalized Arc Length");
> xyplot2-> SetXTitle ("");
> xyplot2 ->SetYTitle ("P");
> xyplot2-> PlotPointsOn();
> xyplot2 ->PlotLinesOff();
> xyplot2-> GetProperty()-> SetColor (1 ,0, 0);
> xyplot2-> GetProperty()-> SetPointSize (2);
> //Set text prop color (same color for backward compat with test)
> //Assign same object to all text props
> //vtkTextProperty *tprop;
> tprop =xyplot2-> GetTitleTextProperty();
> tprop ->SetColor(xyplot-> GetProperty()-> GetColor());
> xyplot2 ->SetAxisTitleTextProperty (tprop);
> xyplot2-> SetAxisLabelTextProperty (tprop);
>
> //Create an xy-plot using the output of the 3 probe filters as input.
> //The x-values we are plotting are the underlying point data values.
> vtkXYPlotActor *xyplot3=vtkXYPlotActor::New();
> xyplot3-> AddInput (probe-> GetOutput());
> xyplot3-> AddInput (probe2-> GetOutput());
> xyplot3 ->AddInput (probe3 ->GetOutput());
> xyplot3-> GetPositionCoordinate()-> SetValue (0.0, 0.0 ,0);
> xyplot3-> GetPosition2Coordinate()-> SetValue (1.0, 0.33,
> 0);
> //relative to Position
> xyplot3 ->SetXValuesToIndex();
> xyplot3-> SetNumberOfXLabels (6);
> xyplot3 ->SetTitle ("Pressure vs. Point Id");
> xyplot3-> SetXTitle ("Probe Length");
> xyplot3 ->SetYTitle ("P");
> xyplot3 ->PlotPointsOn();
> xyplot3->GetProperty()-> SetColor (0 ,0, 1);
> xyplot3-> GetProperty()-> SetPointSize (3);
> // Set text prop color (same color for backward compat with test)
> //sign same object to all text props
> //vtkTextProperty *tprop;
> tprop =xyplot3-> GetTitleTextProperty();
> tprop ->SetColor(xyplot-> GetProperty()-> GetColor());
> xyplot3 ->SetAxisTitleTextProperty (tprop);
> xyplot3-> SetAxisLabelTextProperty (tprop);
>
> //aw an outline of the PLOT3D data set.
> vtkStructuredGridOutlineFilter
> *outline=vtkStructuredGridOutlineFilter::New();
> outline ->SetInputConnection (pl3d-> GetOutputPort());
> vtkPolyDataMapper *outlineMapper=vtkPolyDataMapper::New();
> outlineMapper-> SetInputConnection (outline ->GetOutputPort());
> vtkActor *outlineActor=vtkActor::New();
> outlineActor-> SetMapper (outlineMapper);
> outlineActor-> GetProperty()-> SetColor( 0, 0, 0);
>
> //Create the Renderers, RenderWindow, and RenderWindowInteractor.
> vtkRenderer *ren1 = vtkRenderer::New();
> vtkRenderer *ren2 = vtkRenderer::New();
>
> vtkRenderWindow *renWin = vtkRenderWindow::New();
> renWin->AddRenderer(ren1);
> renWin->AddRenderer(ren2);
>
> vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
> iren->SetRenderWindow(renWin);
>
> //Set the background, viewport (necessary because we want to have the
> //renderers draw to different parts of the render window) of the first
> // renderer. Add the outline and line actors to the renderer.
> ren1-> SetBackground (0.6784 ,0.8471, 0.9020);
> ren1 ->SetViewport (0, 0, .5, 1);
> ren1-> AddActor (outlineActor);
> ren1 ->AddActor (lineActor);
> // Set the background and viewport of the second renderer. Add the xy-plot
> //actors to the renderer. Set the size of the render window.
> ren2 ->SetBackground (1, 1, 1);
> ren2 ->SetViewport (0.5 ,0.0 ,1.0, 1.0);
> ren2 ->AddActor2D (xyplot);
> ren2->AddActor2D (xyplot2);
> ren2-> AddActor2D (xyplot3);
> renWin-> SetSize (500, 250);
> // We'll zoom in a little by accessing the camera and invoking a "Zoom"
> // method on it.
> ren1->ResetCamera();
> ren1->GetActiveCamera()->Zoom(1.5);
> renWin->Render();
>
>
> // Set up the camera parameters.
> vtkCamera *cam1;
> cam1= ren1 ->GetActiveCamera();
> cam1-> SetClippingRange (3.95297, 100);
> cam1-> SetFocalPoint (8.88908, 0.595038 ,29.3342);
> cam1-> SetPosition (-12.3332, 31.7479, 41.2387);
> cam1-> SetViewUp (0.060772, -0.319905, 0.945498);
> iren ->Initialize();
>
>
>
> // This starts the event loop and as a side effect causes an initial
> render.
> // iren->Start();
>
> // Exiting from here, we have to delete all the instances that
> // have been created.
> pl3d->Delete();
> line->Delete();
> transL1->Delete();
> tf->Delete();
> probe->Delete();
> transL2->Delete();
> tf2->Delete();
> probe2->Delete();
> transL3->Delete();
> tf3->Delete();
> probe3->Delete();
> appendF->Delete();
> tuber->Delete();
> lineMapper->Delete();
> lineActor->Delete();
> xyplot->Delete();
> xyplot2->Delete();
> xyplot3->Delete();
> outline->Delete();
> outlineMapper->Delete();
> outlineActor->Delete();
> ren1->Delete();
> ren2->Delete();
> renWin->Delete();
> iren->Delete();
>
> return 0;
> }
>
>
> why my output is that?:
>
> ~$ make
> [100%] Building CXX object CMakeFiles/xyPlot.dir/xyPlot.o
> /home/edoardo/VTK/plot/src/xyPlot.cxx: In function int main():
> /home/edoardo/VTK/plot/src/xyPlot.cxx:73: error: no matching function for
> call to vtkProbeFilter::SetSource(vtkStructuredGrid*)
> /usr/local/include/vtk-5.4/vtkProbeFilter.h:55: note: candidates are: void
> vtkProbeFilter::SetSource(vtkDataObject*)
> /home/edoardo/VTK/plot/src/xyPlot.cxx:85: error: no matching function for
> call to vtkProbeFilter::SetSource(vtkStructuredGrid*)
> /usr/local/include/vtk-5.4/vtkProbeFilter.h:55: note: candidates are: void
> vtkProbeFilter::SetSource(vtkDataObject*)
> /home/edoardo/VTK/plot/src/xyPlot.cxx:97: error: no matching function for
> call to vtkProbeFilter::SetSource(vtkStructuredGrid*)
> /usr/local/include/vtk-5.4/vtkProbeFilter.h:55: note: candidates are: void
> vtkProbeFilter::SetSource(vtkDataObject*)
> /home/edoardo/VTK/plot/src/xyPlot.cxx:124: error: Position was not
> declared in this scope
> /home/edoardo/VTK/plot/src/xyPlot.cxx:125: error: expected ; before
> xyplot
> /home/edoardo/VTK/plot/src/xyPlot.cxx:150: error: relative was not
> declared in this scope
> /home/edoardo/VTK/plot/src/xyPlot.cxx:150: error: expected ; before to
> make[2]: *** [CMakeFiles/xyPlot.dir/xyPlot.o] Errore 1
> make[1]: *** [CMakeFiles/xyPlot.dir/all] Errore 2
> make: *** [all] Errore 2
>
> Thank you very much for the interest
> Best regards
>
>
> Where did you get this code? In the actual VTK cvs or release? I got the
same error when compiling it. You can fix it by adding:
#include "vtkStructuredGrid.h"
If you got this from an official source, we need to update it there, too.
Thanks,
David
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20100327/6c5883b8/attachment.htm>
More information about the vtkusers
mailing list