<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">Hello, beginner question:<br>&nbsp;&nbsp;&nbsp;&nbsp; Data I'm reading is not getting charted.<br>&nbsp;&nbsp;&nbsp;&nbsp; After reading a space-delimited file of stock market data I'm trying to view a chart of this and the chart comes out as a single straight line at a 45° angle.&nbsp; There should be 2 lines, neither of which are straight.&nbsp; I suspect that both are being plotted, one on top of the other.<br>&nbsp;&nbsp;&nbsp;&nbsp; When I break the program in the reading loop the values appear correctly so I think that reading the file is not the problem.&nbsp; Is the data getting into the table?&nbsp; Debugging doesn't show it.&nbsp; Is the table transferring properly to the chart?<br>&nbsp;&nbsp;&nbsp;&nbsp; I'm using C++ in VS 2005 Express.<br>&nbsp;&nbsp;&nbsp;&nbsp; Below is my code, largely taken from an online example:<br><br>// Points.cpp :<br>//
 READING A CSV FILE, OUTPUT FROM OPENOFFICE, OF WEEKLY DOW&nbsp; AND VARIOUS MEASURES,<br>//&nbsp; SPACE DELIMITED.&nbsp; COMMAND LINE ARGUMENT PUT IN GUI AT: PROJECTS-&gt;POINTS PROPERTIES-&gt;<br>// PROGRAM BASED ON http://vtk.org/Wiki/VTK/Examples/Cxx/IO/ReadPlainText<br>// AS SUGGESTED BY BILL LORENSEN FROM VTKUSERS LIST ON 10/1/2010<br>// MODIFICATIONS 10/2010<br><br>#include &lt;vtkAxes.h&gt;<br>#include &lt;vtkSmartPointer.h&gt;<br>#include &lt;vtkPolyLine.h&gt;<br>#include &lt;vtkPolyDataMapper.h&gt;<br>#include &lt;vtkActor.h&gt;<br>#include &lt;vtkParticleReader.h&gt;<br>#include &lt;vtkRenderWindow.h&gt;<br>#include &lt;vtkRenderWindowInteractor.h&gt;<br>#include &lt;vtkRenderer.h&gt;<br>#include &lt;vtkVertexGlyphFilter.h&gt;<br>#include &lt;vtkChartXY.h&gt;<br>#include &lt;vtkPlot.h&gt;<br>#include &lt;vtkTable.h&gt;<br>#include &lt;vtkFloatArray.h&gt;<br>#include &lt;vtkContextView.h&gt;<br>#include &lt;vtkContextScene.h&gt;<br>#include
 &lt;sstream&gt;<br>&nbsp;<br>int main(int argc, char* argv[])<br>{<br>&nbsp; //Verify input arguments<br>&nbsp; if ( argc != 2 )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; std::cout &lt;&lt; "Usage: " &lt;&lt; argv[0]<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt; " Filename(.xyz)" &lt;&lt; std::endl;<br>&nbsp;&nbsp;&nbsp; return EXIT_FAILURE;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; //get all data from the file<br>&nbsp; std::string filename = argv[1];<br>&nbsp; std::ifstream fin(filename.c_str());<br>&nbsp;<br>&nbsp; //Create a renderer, render window, and interactor<br>&nbsp; vtkSmartPointer&lt;vtkRenderer&gt; renderer =<br>&nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkRenderer&gt;::New();<br>&nbsp; vtkSmartPointer&lt;vtkRenderWindow&gt; renderWindow =<br>&nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkRenderWindow&gt;::New();<br>&nbsp; renderWindow-&gt;AddRenderer(renderer);<br><br>&nbsp; std::string line;<br>&nbsp;
 vtkSmartPointer&lt;vtkPoints&gt; dow_points =<br>&nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkPoints&gt;::New();<br>&nbsp; vtkSmartPointer&lt;vtkPoints&gt; consensus_points =<br>&nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkPoints&gt;::New();<br><br>&nbsp; vtkSmartPointer&lt;vtkTable&gt; table = vtkSmartPointer&lt;vtkTable&gt;::New();<br>&nbsp; vtkSmartPointer&lt;vtkFloatArray&gt; arrayX = vtkSmartPointer&lt;vtkFloatArray&gt;::New();<br>&nbsp; vtkSmartPointer&lt;vtkFloatArray&gt; dow_vals = vtkSmartPointer&lt;vtkFloatArray&gt;::New();<br>&nbsp; vtkSmartPointer&lt;vtkFloatArray&gt; consensus_vals = vtkSmartPointer&lt;vtkFloatArray&gt;::New();<br>&nbsp; arrayX-&gt;SetName("Week #");<br>&nbsp; table-&gt;AddColumn(arrayX);<br>&nbsp; dow_vals-&gt;SetName("DOW");<br>&nbsp; table-&gt;AddColumn(dow_vals);<br>&nbsp; consensus_vals-&gt;SetName("Consensus %");<br>&nbsp; table-&gt;AddColumn(consensus_vals);<br>&nbsp; table-&gt;SetNumberOfRows(10);&nbsp;&nbsp;&nbsp; // NEED
 TO BE AWARE OF THIS MAGIC NUMBER<br><br>&nbsp; vtkSmartPointer&lt;vtkContextView&gt; view = vtkSmartPointer&lt;vtkContextView&gt;::New();<br>&nbsp; view-&gt;GetRenderer()-&gt;SetBackground(0.0, 0.0, 0.0);<br>&nbsp; <br>&nbsp; vtkSmartPointer&lt;vtkChartXY&gt; chart = vtkSmartPointer&lt;vtkChartXY&gt;::New();<br><br>&nbsp; // INPUT 8 DOUBLE VALUES FROM A SPACE-DELIMITED CSV FILE<br>&nbsp; double loop = 0.0, dow, consensus, c,d,e,f,g,h;<br>&nbsp; std::stringstream linestream;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp; while(std::getline(fin, line))<br>&nbsp; {<br>&nbsp;&nbsp;&nbsp; loop++;<br>&nbsp;&nbsp;&nbsp; linestream &lt;&lt; line;<br>&nbsp;&nbsp;&nbsp; linestream &gt;&gt; dow &gt;&gt; consensus &gt;&gt; c &gt;&gt; d &gt;&gt; e &gt;&gt; f &gt;&gt; g &gt;&gt; h;<br>&nbsp;&nbsp;&nbsp; dow_points-&gt;InsertNextPoint(loop, dow, 0);<br>&nbsp;&nbsp;&nbsp; consensus_points-&gt;InsertNextPoint(loop, consensus, 0);<br>&nbsp;&nbsp;&nbsp; if (loop &lt;
 10.0)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp; table-&gt;SetValue(loop,0,loop);<br>&nbsp;&nbsp;&nbsp; &nbsp; table-&gt;SetValue(loop,1,dow);<br>&nbsp;&nbsp;&nbsp; &nbsp; table-&gt;SetValue(loop,2,consensus);<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; }<br>&nbsp;<br>&nbsp; fin.close();<br><br>&nbsp; //- - - - - - - - - - - - - - -<br><br>&nbsp; // THE NEXT SECTION OF CODE IS DUPLICATED BELOW FOR ANOTHER SERIES<br>&nbsp; // A NATURAL PLACE TO MAKE A FUTURE FUNCTION CALL<br>&nbsp; vtkSmartPointer&lt;vtkPolyData&gt; dow_polydata =<br>&nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkPolyData&gt;::New();<br>&nbsp; dow_polydata-&gt;SetPoints(dow_points);<br><br>&nbsp; vtkSmartPointer&lt;vtkVertexGlyphFilter&gt; dow_glyphFilter =<br>&nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkVertexGlyphFilter&gt;::New();<br>&nbsp; dow_glyphFilter-&gt;SetInputConnection(dow_polydata-&gt;GetProducerPort());<br>&nbsp; dow_glyphFilter-&gt;Update();<br>&nbsp; <br>&nbsp; //
 Visualize<br>&nbsp;&nbsp; //Create a mapper and actor<br>&nbsp; vtkSmartPointer&lt;vtkPolyDataMapper&gt; dow_mapper =<br>&nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkPolyDataMapper&gt;::New();<br>&nbsp; dow_mapper-&gt;SetInputConnection(dow_glyphFilter-&gt;GetOutputPort());<br><br>&nbsp; vtkSmartPointer&lt;vtkActor&gt; dow_actor =<br>&nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkActor&gt;::New();<br>&nbsp; dow_actor-&gt;SetMapper(dow_mapper);<br><br>&nbsp; //renderer-&gt;AddActor(dow_actor);<br>&nbsp; view-&gt;GetScene()-&gt;AddItem(chart);<br>&nbsp; chart-&gt;DebugOn();<br>&nbsp; vtkPlot *line1 = chart-&gt;AddPlot(vtkChart::LINE);<br>&nbsp; line1-&gt;SetInput(table,0,1);<br>&nbsp; line1-&gt;SetColor(0,255,0,255);&nbsp;&nbsp;&nbsp; // RGBA<br>&nbsp; line1-&gt;SetWidth(5.0);<br>&nbsp;&nbsp; <br>&nbsp; //- - - - - - - - - - - - - - - - - - - -<br><br>&nbsp; vtkSmartPointer&lt;vtkPolyData&gt; consensus_polydata =<br>&nbsp;&nbsp;&nbsp;
 vtkSmartPointer&lt;vtkPolyData&gt;::New();<br><br>&nbsp; consensus_polydata-&gt;SetPoints(consensus_points);<br><br>&nbsp; vtkSmartPointer&lt;vtkVertexGlyphFilter&gt; consensus_glyphFilter =<br>&nbsp;&nbsp; vtkSmartPointer&lt;vtkVertexGlyphFilter&gt;::New();<br>&nbsp; consensus_glyphFilter-&gt;SetInputConnection(consensus_polydata-&gt;GetProducerPort());<br>&nbsp; consensus_glyphFilter-&gt;Update();<br><br>&nbsp; vtkSmartPointer&lt;vtkPolyDataMapper&gt; consensus_mapper =<br>&nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkPolyDataMapper&gt;::New();<br>&nbsp; consensus_mapper-&gt;SetInputConnection(consensus_glyphFilter-&gt;GetOutputPort());<br><br>&nbsp;&nbsp; vtkSmartPointer&lt;vtkActor&gt; consensus_actor =<br>&nbsp;&nbsp;&nbsp; vtkSmartPointer&lt;vtkActor&gt;::New();<br>&nbsp; consensus_actor-&gt;SetMapper(consensus_mapper);<br><br>&nbsp; vtkSmartPointer&lt;vtkRenderWindowInteractor&gt; renderWindowInteractor =<br>&nbsp;&nbsp;&nbsp;
 vtkSmartPointer&lt;vtkRenderWindowInteractor&gt;::New();<br>&nbsp; //renderWindowInteractor-&gt;SetRenderWindow(renderWindow);<br>&nbsp; renderWindowInteractor-&gt;SetRenderWindow(view-&gt;GetRenderWindow());<br><br>&nbsp; vtkPlot *line2 = chart-&gt;AddPlot(vtkChart::LINE);<br>&nbsp; line2-&gt;SetInput(table, 0, 2);<br>&nbsp; line2-&gt;SetColor(255,0,0,255);<br>&nbsp; line2-&gt;SetWidth(5.0);<br>&nbsp; //Add the actor to the scene<br>&nbsp; //renderer-&gt;AddActor(consensus_actor);<br><br>&nbsp; //- - - - - - - - - - - - - - - - - - - -<br>&nbsp; <br>&nbsp; // THIN RED, YELLOW AND GREEN LINE SEGMENTS WITH DATA POINTS SCALED WITHIN THEM.&nbsp; HARD TO SEE AXES<br>&nbsp; vtkSmartPointer&lt;vtkAxes&gt; axes = vtkSmartPointer&lt;vtkAxes&gt;::New();<br>&nbsp; axes-&gt;SetOrigin( 0.0, 0.0, 0.0 );<br>&nbsp; axes-&gt;SetScaleFactor(120.0);&nbsp;&nbsp;&nbsp; // AXES STAY VISIBLE BUT DATA POINTS SHRINK TOWARD ORIGIN AS VALUE INCREASES<br><br>&nbsp;
 vtkSmartPointer&lt;vtkPolyDataMapper&gt; axesMapper = vtkSmartPointer&lt;vtkPolyDataMapper&gt;::New();<br>&nbsp; axesMapper-&gt;SetInputConnection(axes-&gt;GetOutputPort());<br><br>&nbsp; vtkSmartPointer&lt;vtkActor&gt; axesActor = vtkSmartPointer&lt;vtkActor&gt;::New();<br>&nbsp; axesActor-&gt;SetMapper(axesMapper);<br>&nbsp;<br>&nbsp; renderer-&gt;AddActor(axesActor);<br><br>&nbsp; renderer-&gt;SetBackground(0.0, 0.0, 0.0); // RGB BACKGROUND<br>&nbsp;<br>&nbsp; //Render and interact<br>&nbsp; renderWindow-&gt;Render();<br>&nbsp; renderWindowInteractor-&gt;Initialize();<br>&nbsp; renderWindowInteractor-&gt;Start();<br>&nbsp;<br>&nbsp; return EXIT_SUCCESS;<br>}<br><br><br></td></tr></table><br>