Changeset 11520

Show
Ignore:
Timestamp:
05/14/07 21:39:28 (1 year ago)
Author:
warmerdam
Message:

fix GetSrcDstWindow?() for case where src/dst windows defaulted (#1562)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • sandbox/warmerdam/1.4-esri/gdal/frmts/vrt/vrtsources.cpp

    r11299 r11520  
    264264/************************************************************************/ 
    265265/*                              SrcToDst()                              */ 
     266/*                                                                      */ 
     267/*      Note: this is a no-op if the dst window is -1,-1,-1,-1.         */ 
    266268/************************************************************************/ 
    267269 
     
    276278/************************************************************************/ 
    277279/*                              DstToSrc()                              */ 
     280/*                                                                      */ 
     281/*      Note: this is a no-op if the dst window is -1,-1,-1,-1.         */ 
    278282/************************************************************************/ 
    279283 
     
    299303 
    300304{ 
     305    int bSrcWinSet = nSrcXOff != -1 || nSrcXSize != -1  
     306        || nSrcYOff != -1 || nSrcYSize != -1; 
     307    int bDstWinSet = nDstXOff != -1 || nDstXSize != -1  
     308        || nDstYOff != -1 || nDstYSize != -1; 
     309 
     310    CPLAssert( bSrcWinSet == bDstWinSet ); 
     311 
    301312/* -------------------------------------------------------------------- */ 
    302313/*      If the input window completely misses the portion of the        */ 
    303314/*      virtual dataset provided by this source we have nothing to do.  */ 
    304315/* -------------------------------------------------------------------- */ 
    305     if( nXOff > nDstXOff + nDstXSize 
    306         || nYOff > nDstYOff + nDstYSize 
    307         || nXOff + nXSize < nDstXOff 
    308         || nYOff + nYSize < nDstYOff ) 
    309         return FALSE; 
     316    if( bDstWinSet ) 
     317    { 
     318        if( nXOff > nDstXOff + nDstXSize 
     319            || nYOff > nDstYOff + nDstYSize 
     320            || nXOff + nXSize < nDstXOff 
     321            || nYOff + nYSize < nDstYOff ) 
     322            return FALSE; 
     323    } 
    310324 
    311325/* -------------------------------------------------------------------- */ 
     
    328342    int nRYSize = nYSize; 
    329343 
    330     if( nRXOff < nDstXOff ) 
    331     { 
    332         nRXSize = nRXSize + nRXOff - nDstXOff; 
    333         nRXOff = nDstXOff; 
    334         bModifiedX = TRUE; 
    335     } 
    336  
    337     if( nRYOff < nDstYOff ) 
    338     { 
    339         nRYSize = nRYSize + nRYOff - nDstYOff; 
    340         nRYOff = nDstYOff; 
    341         bModifiedY = TRUE; 
    342     } 
    343  
    344     if( nRXOff + nRXSize > nDstXOff + nDstXSize ) 
    345     { 
    346         nRXSize = nDstXOff + nDstXSize - nRXOff; 
    347         bModifiedX = TRUE; 
    348     } 
    349  
    350     if( nRYOff + nRYSize > nDstYOff + nDstYSize ) 
    351     { 
    352         nRYSize = nDstYOff + nDstYSize - nRYOff; 
    353         bModifiedY = TRUE; 
     344 
     345    if( bDstWinSet ) 
     346    { 
     347        if( nRXOff < nDstXOff ) 
     348        { 
     349            nRXSize = nRXSize + nRXOff - nDstXOff; 
     350            nRXOff = nDstXOff; 
     351            bModifiedX = TRUE; 
     352        } 
     353 
     354        if( nRYOff < nDstYOff ) 
     355        { 
     356            nRYSize = nRYSize + nRYOff - nDstYOff; 
     357            nRYOff = nDstYOff; 
     358            bModifiedY = TRUE; 
     359        } 
     360 
     361        if( nRXOff + nRXSize > nDstXOff + nDstXSize ) 
     362        { 
     363            nRXSize = nDstXOff + nDstXSize - nRXOff; 
     364            bModifiedX = TRUE; 
     365        } 
     366 
     367        if( nRYOff + nRYSize > nDstYOff + nDstYSize ) 
     368        { 
     369            nRYSize = nDstYOff + nDstYSize - nRYOff; 
     370            bModifiedY = TRUE; 
     371        } 
    354372    } 
    355373