[vtkusers] abnormal chart using scatter points

liuxy liuxy506 at gmail.com
Fri Apr 1 04:03:36 EDT 2011


^_^  thank you all the same, can you show this code ¡®s correct result used
 POINTS in your computer?




ÔÚ 2011Äê4ÔÂ1ÈÕ ÉÏÎç1:56£¬Eric E. Monson <emonson at cs.duke.edu>дµÀ£º

> Hello,
>
> I really think this might just be a bug in VTK 5.6.1. As I said before,
> there has been a lot of development on the Charts API between 5.6 and now.
> Your code works fine for me with the VTK development head, and I don't have
> a 5.6 build lying around to test it on. I'm not sure why a LINE plot
> wouldn't have trouble with it, but POINTS does ¨C vtkPlotLine is a pretty
> bare-bones subclass of vtkPlotPoints.
>
> So, I think your only options are to either pull the development version
> and build from the git repository, or wait for a little while for 5.8 to be
> released. (That should be very soon, but I haven't heard a fixed date.)
>
> Sorry I couldn't be more help,
> -Eric
>
>
> On Mar 31, 2011, at 8:23 AM, liuxy wrote:
>
> Thank you for your help!!
>
> The version of VTK I used is 5.6.1, and compile the source code with
> Cmake2.8 and VS 2008, the code of drawing scatter points more than 40,000
>  is that :
>
> #include <vtkSmartPointer.h>
> #include <vtkChartXY.h>
> #include <vtkContextScene.h>
> #include <vtkContextView.h>
> #include <vtkFloatArray.h>
> #include <vtkShortArray.h>
> #include <vtkPlotPoints.h>
> #include <vtkRenderWindow.h>
> #include <vtkRenderWindowInteractor.h>
> #include <vtkRenderer.h>
> #include <vtkTable.h>
> #include <vtkAxis.h>
>
> int main(int, char*[])
> {
>   // Set up a 2D scene, add an XY chart to it
>   vtkSmartPointer<vtkContextView> view =
> vtkSmartPointer<vtkContextView>::New();
>   vtkSmartPointer<vtkChartXY> chart = vtkSmartPointer<vtkChartXY>::New();
>   view->GetScene()->AddItem(chart);
>   chart->SetShowLegend(true);
>
>   // Create a table with some points in it...
>   vtkSmartPointer<vtkTable> table = vtkSmartPointer<vtkTable>::New();
>
>   // float Êý×é
>   vtkSmartPointer<vtkFloatArray> arrX
> =vtkSmartPointer<vtkFloatArray>::New();
>   arrX->SetName("X Axis");
>   table->AddColumn(arrX);
>   vtkSmartPointer<vtkFloatArray> arrC =
> vtkSmartPointer<vtkFloatArray>::New();
>   arrC->SetName("sin");
>   table->AddColumn(arrC);
>
>   // amount of scatter points
>   int numPoints =40000;
>
>   float inc = 7.5 / (numPoints-1);
>   table->SetNumberOfRows(numPoints);
>   for (int i = 0; i < numPoints; ++i){
>     table->SetValue(i, 0, i * inc);
>     table->SetValue(i,1, sin(i * inc));
>   }
>
>   // Add multiple scatter plots, setting the colors etc
>   vtkPlot *points = chart->AddPlot(vtkChart::POINTS);
>   points->SetInput(table, 0, 1);
>   points->SetColor(0, 0, 255, 255);
>   points->SetWidth(2.0);
>
>   //Finally render the scene
>   view->GetRenderer()->SetBackground(1.0, 1.0, 1.0);
>   view->GetRenderWindow()->SetSize(1024, 600);
>   view->GetInteractor()->Initialize();
>   view->GetInteractor()->Start();
>   return EXIT_SUCCESS;
> }
>
>
> and the run effect is like 4000error.jpg, if  I replace vtkChart::POINTS
> to vtkChart::LINE ,the result is right, why ?
>
>
>
>
>
>
>
>
>
>
>
> 2011/3/28 Eric E. Monson <emonson at cs.duke.edu>
>
>> Hello,
>>
>> Which version of VTK are you using? I've definitely drawn scatter plots
>> using the Charts API that had more than 40,000 points, and this is something
>> the Charts are supposed to be good at, so it will be interesting to see what
>> has gone wrong in your case. The VTK version is important because a lot of
>> development has gone on in the Charts since 5.6, so if you're using 5.6 the
>> bug may already have been fixed.
>>
>> Otherwise, if you're using the development head and this is still
>> happening, maybe you can pass along a minimal piece of code that
>> demonstrates the problem and we can help figure out what's going on.
>>
>> Talk to you later,
>> -Eric
>>
>> ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤ ¡¤
>> Eric E Monson
>> Duke Visualization Technology Group
>>
>>
>> On Mar 28, 2011, at 1:43 AM, liuxy wrote:
>>
>> > I used vtkChart API to draw a line: y=sin(x) using "scatter points",
>> >
>> > the chart is abnormal when the number of points are more than 40,000.
>> >
>> > just like pictrue a.jpg in enclosure.
>> >
>> > but if the points are less than 40,000 or using "Line" to draw y=sin(x),
>> >
>> > the chart is correct. Just like pictrue b.jpg.
>> >
>> > I want to know how to use "scatter points" in drawing charts with huge
>> scale of points ?
>> >
>> > or vtkChart may be not applicable in this situation ?
>> >
>> >
>> > P.S:
>> >
>> > By reading the source Code of vtkChart,
>> >
>> > I found when drawing in "scatter points",
>> >
>> > it used function 'DrawPointSprites'.
>> >
>> > if replaced it with function 'DrawPoints',the chart shows correctly,
>> >
>> > even number of points more than 40,000.
>> > <a.JPG><b.JPG>_______________________________________________
>> > Powered by www.kitware.com
>> >
>> > Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>> >
>> > Please keep messages on-topic and check the VTK FAQ at:
>> http://www.vtk.org/Wiki/VTK_FAQ
>> >
>> > Follow this link to subscribe/unsubscribe:
>> > http://www.vtk.org/mailman/listinfo/vtkusers
>>
>>
> <40000error.JPG>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110401/a1c03faf/attachment.htm>


More information about the vtkusers mailing list