[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