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; } }
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; } }