public BrdFromSide calc_from_side(ShapeTile p_shape,PlaPointInt p_shape_center,int p_layer,int p_offset,int p_cl_class){
  NetNosList empty_arr=NetNosList.EMPTY;
  ShapeTile offset_shape=p_shape.offset(p_offset);
  for (int index=0; index < offset_shape.border_line_count(); ++index) {
    ShapeTile check_shape=calc_check_chape_for_from_side(p_shape,p_shape_center,offset_shape.border_line(index));
    if (r_board.check_trace(check_shape,p_layer,empty_arr,p_cl_class,null)) {
      return new BrdFromSide(index,null);
    }
  }
  for (int index=0; index < offset_shape.border_line_count(); ++index) {
    ShapeTile check_shape=calc_check_chape_for_from_side(p_shape,p_shape_center,offset_shape.border_line(index));
    if (r_board.check_trace(check_shape,p_layer,empty_arr,0,null)) {
      return new BrdFromSide(index,null);
    }
  }
  return BrdFromSide.NOT_CALCULATED;
}

public BrdFromSide calc_from_side ( ShapeTile p_shape , PlaPointInt p_shape_center , int p_layer , int p_offset , int p_cl_class ) { NetNosList empty_arr = NetNosList . EMPTY ; ShapeTile offset_shape = p_shape . offset ( p_offset ) ; for ( int index = 0 ; index < offset_shape . border_line_count ( ) ; ++ index ) { ShapeTile check_shape = calc_check_chape_for_from_side ( p_shape , p_shape_center , offset_shape . border_line ( index ) ) ; if ( r_board . check_trace ( check_shape , p_layer , empty_arr , p_cl_class , null ) ) { return new BrdFromSide ( index , null ) ; } } for ( int index = 0 ; index < offset_shape . border_line_count ( ) ; ++ index ) { ShapeTile check_shape = calc_check_chape_for_from_side ( p_shape , p_shape_center , offset_shape . border_line ( index ) ) ; if ( r_board . check_trace ( check_shape , p_layer , empty_arr , 0 , null ) ) { return new BrdFromSide ( index , null ) ; } } return BrdFromSide . NOT_CALCULATED ; }
looks for a side of p_shape , so that a trace line from the shape center to the nearest point on this side does not conflict with any obstacles .
