autoplacer: minor fixes.

This commit is contained in:
jean-pierre charras 2018-12-16 10:43:47 +01:00
parent 2e907bfaa3
commit 6a0319f6b7
1 changed files with 12 additions and 9 deletions

View File

@ -170,6 +170,17 @@ bool AR_AUTOPLACER::fillMatrix()
// Calculate the y limits of the area
for( int refy = rect.GetY(), endy = rect.GetBottom(); refy < endy; refy += step )
{
// The row index (vertical position) of current line scan inside the placement matrix
int idy = (refy - coord_orgin.y) / step;
// Ensure we are still inside the placement matrix
if( idy >= m_matrix.m_Nrows )
break;
// Ensure we are inside the placement matrix
if( idy <= 0 )
continue;
// find all intersection points of an infinite line with polyline sides
x_coordinates.clear();
@ -234,14 +245,6 @@ bool AR_AUTOPLACER::fillMatrix()
// Fill cells having the same Y coordinate
int iimax = x_coordinates.size() - 1;
int idy = (refy - coord_orgin.y) / step;
if( idy > m_matrix.m_Nrows )
break;
if( idy < 0 )
continue;
for( int ii = 0; ii < iimax; ii += 2 )
{
int seg_start_x = x_coordinates[ii] - coord_orgin.x;
@ -254,7 +257,7 @@ bool AR_AUTOPLACER::fillMatrix()
if( idx * step > seg_end_x )
break;
if( idx >= 0 && ( idx * step >= seg_start_x ) )
if( idx * step >= seg_start_x )
m_matrix.SetCell( idy, idx, AR_SIDE_BOTTOM, CELL_IS_ZONE );
}