octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Changeset 14257 oddities


From: Ben Abbott
Subject: Re: Changeset 14257 oddities
Date: Sat, 10 Mar 2012 22:07:51 -0500

On Mar 10, 2012, at 7:33 PM, Ben Abbott wrote:

> On Mar 10, 2012, at 6:21 PM, Ben Abbott wrote:
> 
>> On Mar 10, 2012, at 5:23 PM, Rik wrote:
>> 
>>> On 03/10/2012 11:17 AM, Ben Abbott wrote:
>>> 
>>>> On Mar 10, 2012, at 10:29 AM, Ben Abbott wrote:
>>>> 
>>>>> On Mar 10, 2012, at 12:04 AM, Rik wrote:
>>>>> 
>>>>>> 3/9/12
>>>>>> 
>>>>>> Ben,
>>>>>> 
>>>>>> I've just noticed that this changeset is causing oddities in the
>>>>>> documentation.  All of the printed images, which are supposed to be 750 x
>>>>>> 525 are being rendered as 525 x 750.  The changeset deals with
>>>>>> paperorientation so perhaps this is not surprising.
>>>>>> 
>>>>>> changeset:   14257:5cc69bafe3b9
>>>>>> parent:      14254:73086d4b64fa
>>>>>> user:        Ben Abbott  <address@hidden>
>>>>>> date:        Tue Jan 24 08:29:33 2012 -0500
>>>>>> summary:     Add updating for figure paperorientation property. Bug # 
>>>>>> 35329.
>>>>>> 
>>>>>> Code which provokes the problem for me
>>>>>> 
>>>>>> plot (1:10)
>>>>>> get (gcf, 'paperorientation')
>>>>>> => portrait
>>>>>> get (gcf, 'papersize')
>>>>>> =>   8.5000   11.0000
>>>>>> set (gcf, 'papersize', [5.0 3.5])
>>>>>> get (gcf, 'paperorientation')
>>>>>> => landscape
>>>>>> get (gcf, 'papersize')
>>>>>> =>   3.5000   5.0000
>>>>>> print foo.png
>>>>>> 
>>>>>> The printed png is printed in a portrait mode which is 3.5 wide X 5.0 
>>>>>> high
>>>>>> instead of the papersize I set.
>>>>>> 
>>>>>> --Rik
>>>>> Rik, I've cc'd the list, as I think this merits some discussion (and I'm 
>>>>> not sure what the proper solution is)
>>>>> 
>>>>> When I experimented with Matlab, I found its behavior inconsistent. I 
>>>>> don't recall all the details now. I'll take a look when I'm done with the 
>>>>> fixing the text objects set_position method.
>>>>> 
>>>>> In any event (from memory), the current implementation was intended to 
>>>>> map a wide page to "landscape" and a tall page to "portrait" orientation 
>>>>> (and vice versa). Perhaps this is not consistent with how print() works ?
>>>>> 
>>>>> The Matlab docs do not specifically indicate that a wide page -> 
>>>>> "landscape" and a tall page -> "portrait".
>>>>> 
>>>>> I suggest we attempt to determine the proper behavior from the Matlab 
>>>>> docs and implement that.
>>>>> 
>>>>> If the orientation does not map to wide/tall, but just rotates the page, 
>>>>> then the fix needs to be in graphics.cc and your example will work like 
>>>>> ...
>>>>> 
>>>>>> plot (1:10)
>>>>>> get (gcf, 'paperorientation')
>>>>>> => portrait
>>>>>> get (gcf, 'papersize')
>>>>>> =>   8.5000   11.0000
>>>>>> set (gcf, 'papersize', [5.0 3.5])
>>>>>> get (gcf, 'paperorientation')
>>>>>> => portrait
>>>>>> get (gcf, 'papersize')
>>>>>> =>   5.0000   3.5000
>>>>> If the orientation does map to wide/tall then the fix needs to be in 
>>>>> print.m and your example will remain the same except the output will be 
>>>>> 5x3.5 
>>>>> 
>>>>> Thoughts / opinions ?
>>>>> 
>>>>> Ben
>>>> I just noticed Rik's example is working at intended. 
>>>> 
>>>> The size of the image is determined by paperpostion(3:4), not by the 
>>>> papersize.
>>>> 
>>>> Even so, we may want change how orientation is handled, and if not, 
>>>> improve the documentation to avoid confusion.
>>>> 
>>>> Ben
>>> 
>>> I agree with your earlier thought to at least check what Matlab is doing in
>>> this situation.  However, there is no reason to follow them down the garden
>>> path if they have done something stupid.
>>> 
>>> In fact, for the printing I think we would be fine designing our own system
>>> as long as it was sensible and intuitive.  Right now, it is *not* intuitive
>>> to me to set the size of the image by changing its position on the page. 
>>> We have time to figure this out as the documentation doesn't need to build
>>> again until 3.8.
>>> 
>>> --Rik
>> 
>> The two issues we need to decide upon are;
>> 
>> (1) Shall the image size be determined by paperposition(3:4) as Matlab does 
>> (and Octave currently does), or by papersize / paperorientation?
>> 
>> (2) Currently Octave's paperorientation determines if the pagesize is tall 
>> (portrait) or wide (landscape). While Matlab's paperorientation determines 
>> if paper output horizontally or vertically oriented on the paper 
>> (independent of the width and/or height dimensions of the paper).
>> 
>> I'm inclined to follow Matlab's docs. I'll start looking at (2). My 
>> expectation is that changes will needed to be made in two function in 
>> graphics.cc.
>> 
>>      figure::properties::update_papersize
>>      figure::properties::update_paperorientation
>> 
>> A change to orient.m may also be needed.
>> 
>> Ben
> 
> Opps ... busy day ... I forgot to add links to Matlab's doc info.
> 
>       
> http://www.mathworks.com/help/techdoc/ref/figure_props.html#PaperOrientation
> 
> --------------------
> Horizontal or vertical paper orientation. Determines how to orient printed 
> figures on the page.
> 
>       • portrait — Orients the longest page dimension vertically.
> 
>       • landscape — Orients the longest page dimension horizontally.
> --------------------
> 
>       http://www.mathworks.com/help/techdoc/ref/figure_props.html#PaperSize
> 
> --------------------
> [width height]
> Paper size. Size of the current PaperType, measured in PaperUnits. See 
> PaperType to select standard paper sizes.
> --------------------
> 
>       http://www.mathworks.com/help/techdoc/ref/orient.html
> 
> --------------------
> orient landscape sets the paper orientation of the current figure to 
> full-page landscape, orienting the longest page dimension horizontally. The 
> figure is centered on the page and scaled to fit the page with a 0.25 inch 
> border.
> 
> orient portrait sets the paper orientation of the current figure to portrait, 
> orienting the longest page dimension vertically. The portrait option returns 
> the page orientation to the MATLAB default. (Note that the result of using 
> the portrait option is affected by changes you make to figure properties. See 
> the "Algorithm" section for more specific information.)
> 
> orient tall maps the current figure to the entire page in portrait 
> orientation, leaving a 0.25 inch border.
> --------------------
> 
>       
> http://www.mathworks.com/help/techdoc/ref/figure_props.html#PaperPosition
> 
> --------------------
> four-element rect vector
> 
> Location on printed page. A rectangle that determines the location of the 
> figure on the printed page. Specify this rectangle with a vector of the form:
> 
>       rect = [left, bottom, width, height]
> 
> where left specifies the distance from the left side of the paper to the left 
> side of the rectangle and bottom specifies the distance from the bottom of 
> the page to the bottom of the rectangle. Together these distances define the 
> lower-left corner of the rectangle. width and height define the dimensions of 
> the rectangle. ThePaperUnits property specifies the units used to define this 
> rectangle.
> --------------------
> 
>       
> http://www.mathworks.com/support/solutions/en/data/1-16WME/?solution=1-16WME
> 
> --------------------
> The JPEG, PNG, and TIFF drivers in MATLAB 5.x and later rely upon a figure's 
> "PaperPosition" to specify the size of the output file.
> --------------------
> 
> The description of paperorientation on the Mathworks website implies that 
> papersize(1) < papersize(2). The Matlab implementation does not force this, 
> and I've found Matlab to behave unexpectedly when papersize(1) > 
> papersize(2). Octave does force papersize(1) < papersize(2) when the 
> orientation is portrait. 
> 
> Octave currently modifies the papersize and paperposition properties when 
> paperorientation changes. This is done to ensure that papersize(1) < 
> papersize(2). This behavior deviates from Matlab, but I think Octave's 
> behavior is preferable.
> 
> Ben

I've prepared a changeset for improving the documentation for how the print() 
function is intended to work.

Ben

Attachment: changeset.patch
Description: Binary data




reply via email to

[Prev in Thread] Current Thread [Next in Thread]