[kde-edu]: KDE/kdeedu/libkdeedu/kdeeduplot
Benoît Jacob
jacob at math.jussieu.fr
Sun Oct 29 09:00:53 CET 2006
Great work Jason!
Thanks a lot for having implemented this.
Benoit
Le dimanche 29 octobre 2006 04:25, Jason Harris a écrit :
> SVN commit 599914 by harris:
>
> Implementing non-colliding text labels in kdeeduplot, based on kmplot
> code.
>
> It works, but it could probably be faster. You don't need to know
> anything about it to use the feature, it all happens behind the scenes.
> Just add some items with labels and enjoy the magic.
>
> However, in the interest of inspiring optimization, here's a brief
> description of how it works:
>
> KPlotWidget now has a private array of floats: PlotMask[100][100].
> This is a rough division of the content of the plot into a 100x100
> grid. Where the plot is empty, the array is zero, where it has content,
> it is >0. When items are added to the plot (points, lines, bars, or
> labels), the corresponding positions in PlotMask are incremented by an
> amount that can vary for different kinds of items (for example, right
> now Bars don't increment as much as points or lines).
>
> The function KPlotWidget::placeLabel() is responsible for positioning
> item labels. It attempts to place the label close to the point to
> which it belongs, while minimizing the label's overlap with masked
> regions of the plot. Ideally, it won't overlap with masked regions at
> all. This is done in a rather brute-force way: it tests label
> positions in a 40x40 grid around the position of the point, and
> determines the "cost" for placing the label at each position. Higher
> cost is incurred for (a) overlapping with a masked region, (b) being
> further from the point position, and (c) extending beyond the bounds
> of the plot. The position that has the lowest "cost" is then adopted,
> and the label is drawn at that position.
>
> You can get an idea of the CPU impact of this cost-analysis using
> the test suite I added to kdeeduplot. Display the "Points, lines
> and bars" plot, and then resize the window. Note the smoothness of
> the redraws. Now display "Points, lines and bars with labels" and
> resize the window. The redraws take much longer in this case.
>
> CCMAIL: kde-edu at kde.org
>
>
>
> M +33 -27 kplotobject.cpp
> M +154 -5 kplotwidget.cpp
> M +64 -0 kplotwidget.h
> M +8 -12 tests/testplot_widget.cpp
>
>
> _______________________________________________
> kde-edu mailing list
> kde-edu at mail.kde.org
> https://mail.kde.org/mailman/listinfo/kde-edu
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://mail.kde.org/pipermail/kde-edu/attachments/20061029/772d5374/attachment.pgp
More information about the kde-edu
mailing list