On 2013-01-29 10:23-0000 Andrew Ross wrote:

> On Mon, Jan 28, 2013 at 06:31:42PM -0800, Alan Irwin wrote:
>> On 2013-01-15 12:47+0800 H??ili??ng W??ng wrote:
>>
>>> Hello,
>>>
>>> I'm plotting a small PDF graph (128x96) with cairopdf driver, and the
>>> line width looks too thick with line width 1.
>>>
>>> To solve the problem, I modify the code within the cairo driver
>>> (cairo.c) to set the the line width to 0.2 directly, and the result
>>> looks pretty good.
>>>
>>> I have read the thread below so I know there is no plan to change
>>> function plwid's parameter from int to float:
>>> http://www.mail-archive.com/plplot-general@lists.sourceforge.net/msg00429.html
>>>
>>> I'm wondering if it is good idea to add another function to set the
>>> line width with a ratio, e.g. void plwidr(double)? So that the real
>>> line width becomes a product: linewidth*ratio. By default the ratio is
>>> 1.0 so it will not affect the current user, but if the user want finer
>>> line width, just set linewidth=1 and the ratio any floating point
>>> value they want.
>>
>> Hi H??ili??ng:
>>
>> I gave you a quick answer on plplot-general, but I think the rest of
>> this discussion should be on plplot-devel.  Please subscribe to that
>> list (i.e., the current list) if you would like to participate further
>> in that discussion.
>>
>> @Andrew: most of the rest of this is addressed to you.
>>
>> Since that quick answer I have looked more carefully at what external
>> drawing libraries do.  Our two best devices drivers are cairo (based
>> on the pango and cairo external libraries) and qt (based on the Qt4
>> external libraries. It appears the cairo library uses a floating-point
>> pen width which we currently specify by casting the PLplot integer
>> width appropriately.  Also, it appears from our qt code, that we
>> propagate our linewidth to a call the Qt4 setWidth (documented at)
>> http://harmattan-dev.nokia.com/docs/library/html/qt4/qpen.html#width
>> which takes an integer width argument.  But right next to that
>> setWidth function they also define setWidthF which takes a
>> floating-point pen width argument.  So my guess is the Qt4 library
>> made the same mistake as PLplot has done (integer width argument) but
>> they fixed it later by allowing the setWidthF alternative of
>> specifying a floating-point width.
>>
>> So here is what I suggest we do.
>>
>> 1. Define a new function plwidth just like plwid is done now but with a 
>> PLFLT line
>> width argument.  (Actually, I like the plwidth name better than plwid.)
>>
>> 2. Wherever plwid is called internally now change that to plwidth
>> with approprate cast of the argument (which allows plwid to
>> be moved to pldeprecated.c below).
>>
>> 3. Define plwid as
>>
>> void plwid(PLINT width)
>> {
>>   plwidth( (PLFLT) width);
>> }
>>
>> and move it to pldeprecated.
>>
>> 4. Propagate the floating point line width set by plwidth to each of
>> our device drivers.  That would immediately let users specify a 0.2
>> width for plwidth which would propagate directly to our cairo device
>> driver.  With some additional work (i.e., replacing setWidth with
>> setWidthF everywhere) we could propagate floating-point pen widths to
>> our qt device driver as well.
>>
>> @Andrew: do you see any issues with the above four changes?
>>
>> Of course, we would still be stuck with integer line widths for the
>> pllegend, plshade, and plshades API until we changed those width
>> arguments to PLFLT.  But making such changes is tougher on our users
>> than the above 4 changes because we don't want to change the pllegend,
>> plshade, and plshades function names.  So we could put that change off
>> until later, but if we are going to do the above 4 changes, it is
>> probably a good time to do the pllegend, plshade, and plshades API
>> changes as well (so long as we warn our users about this in the
>> release announcement and do the appropriate SOVERSION bump to force
>> them to recompile their applications/libraries.) But I emphasize this
>> is a separate issue that should not affect what we decide to do for
>> plwid.
>
> Alan,
>
> I think this is the best plan. Clearly line with would be better as a
> float. I also think plwidth is a better name. I have no objections to
> 1-4 above. Some drivers (e.g. postscript) do use int internally, but I
> don't think that should be a problem with suitable casting. We might
> just want to check that small widths don't become zero and disappear.
> This is easily fixed though.

Thanks, Andrew, for your response. I think this is an important issue
to fix, and we appear to be in agreement about how to do it so I will
take responsibility for this part of the change.  I am quite busy at
the moment with the Time Ephemerides project, but I hope to squeeze in
these plwid/plwidth changes in the next several weeks or so.  Once
that is done we can decide about the best way to deal with the similar
integer ==> floating point width changes for the pllegend and
plshade(s) API.

Alan
__________________________
Alan W. Irwin

Astronomical research affiliation with Department of Physics and Astronomy,
University of Victoria (astrowww.phys.uvic.ca).

Programming affiliations with the FreeEOS equation-of-state
implementation for stellar interiors (freeeos.sf.net); the Time
Ephemerides project (timeephem.sf.net); PLplot scientific plotting
software package (plplot.sf.net); the libLASi project
(unifont.org/lasi); the Loads of Linux Links project (loll.sf.net);
and the Linux Brochure Project (lbproject.sf.net).
__________________________

Linux-powered Science
__________________________

------------------------------------------------------------------------------
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. ON SALE this month only -- learn more at:
http://p.sf.net/sfu/learnnow-d2d
_______________________________________________
Plplot-devel mailing list
Plplot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/plplot-devel

Reply via email to