[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[pygame] draw.line bounding box bug when width>1



Hello,
New to the list.
I have a bug!  Nice 'n' easy repro steps below.

The bounding box returned by draw.line is the wrong size when width>1.

For single occurrence:
import pygame
pygame.init( )
print pygame.version.ver
s= pygame.Surface( ( 20, 20 ) )
rec= pygame.draw.line( s,
    ( 255,0,0 ),
    ( 10, 16 ),
    ( 7, 0 ),
    2 )
s.fill( ( 0, 0, 0 ), rec )
print s.get_at( ( 7, 0 ) )

Since the rectangle returned by 'draw' was filled with 0, 'get_at'
should return 0.  It doesn't.  It returns green.  I am using WinXP
with 1.9.1release-svn2575 and Python2.5.

Repro code with random coordinates below:

import random as ran
import numpy as num
s.fill( ( 0, 0, 0 ) )
while 1:
    x1= ran.randint( 0, 20 )
    x2= ran.randint( 0, 20 )
    y1= ran.randint( 0, 20 )
    y2= ran.randint( 0, 20 )
    wid= ran.randint( 1, 2 )
    rec= pygame.draw.line( s, ( 255,0,0 ), ( x1, y1 ), ( x2, y2 ),
wid )
    sorig= pygame.surfarray.array2d( s )
    s.fill( ( 0, 0, 0 ), rec )
    sa= pygame.surfarray.pixels2d( s )
    if num.any( sa ):
        assert wid> 1
        print x1, y1, x2, y2, wid
        for x, y in zip( *sa.nonzero( ) ):
            print x, y, s.get_at( ( x, y ) )
            sa[ x, y ]= 2
        print num.where( sorig, 1, 0 )
        s.fill( 1, rec )
        print sa
        print
    s.fill( ( 0, 0, 0 ) )

Observe that 'wid' is always>1, so the return is correct when wid=1.
When 'sa' is printed, it contains '1' throughout the area of the
bounding box that 'draw.line' returns.  It contains '2' where the
pixels of the draw command placed the line.