Exemple #1
0
void
EnforceLineDRC (void)
{
  PointType r45, rs;
  bool shift;
  float r1, r2;

  if ( gui->mod1_is_pressed() || gui->control_is_pressed () || PCB->RatDraw
      || INDEXOFCURRENT >= max_copper_layer)
    return;
  rs.X = r45.X = Crosshair.X;
  rs.Y = r45.Y = Crosshair.Y;
  /* first try starting straight */
  r1 = drc_lines (&rs, false);
  /* then try starting at 45 */
  r2 = drc_lines (&r45, true);
  shift = gui->shift_is_pressed ();
  if (XOR (r1 > r2, shift))
    {
      if (PCB->Clipping)
	{
	  if (shift)
	    PCB->Clipping = 2;
	  else
	    PCB->Clipping = 1;
	}
      Crosshair.X = rs.X;
      Crosshair.Y = rs.Y;
    }
  else
    {
      if (PCB->Clipping)
	{
	  if (shift)
	    PCB->Clipping = 1;
	  else
	    PCB->Clipping = 2;
	}
      Crosshair.X = r45.X;
      Crosshair.Y = r45.Y;
    }
}
Exemple #2
0
void
EnforceLineDRC (void)
{
  PointType r45, rs;
  bool shift;
  double r1, r2;

  /* Silence a bogus compiler warning by storing this in a variable */
  int layer_idx = INDEXOFCURRENT;

  if ( gui->mod1_is_pressed() || gui->control_is_pressed () || PCB->RatDraw
      || layer_idx >= max_copper_layer)
    return;

  rs.X = r45.X = Crosshair.X;
  rs.Y = r45.Y = Crosshair.Y;
  /* first try starting straight */
  r1 = drc_lines (&rs, false);
  /* then try starting at 45 */
  r2 = drc_lines (&r45, true);
  shift = gui->shift_is_pressed ();
  if (XOR (r1 > r2, shift))
    {
      if (PCB->Clipping)
	PCB->Clipping = shift ? 2 : 1;
      Crosshair.X = rs.X;
      Crosshair.Y = rs.Y;
    }
  else
    {
      if (PCB->Clipping)
	PCB->Clipping = shift ? 1 : 2;
      Crosshair.X = r45.X;
      Crosshair.Y = r45.Y;
    }
}