← Back to team overview

kicad-developers team mailing list archive

Re: Fwd: [PATCH] pcbnew: fix false DRC violations for oval pads

 

Le 23/01/2018 à 16:32, Wayne Stambaugh a écrit :
> JP,
> 
> Would you please confirm this when you get a chance.

Yes, I confirm and I just finished the fix.

(the patch in the report is broken).


> 
> Thanks,
> 
> Wayne
> 
> On 1/22/2018 7:50 PM, Forrest Voight wrote:
>> I found another related problem with oval pads: tracks intersecting
>> with oval pads are sometimes *not* detected as DRC violations.
>>
>> Looking at the below screenshot or PCB, the narrow track should *but
>> does not* trigger a DRC violation in its current position, while it
>> does generate a violation if dragged 2mm down to intersect with the
>> center of the large oval pad.
>>
>> I've linked a patch that fixes the issue.
>>
>> Board: http://u.forre.st/kicad_bug2/track_x_oval_pad_failure.kicad_pcb
>> Board screenshot: http://u.forre.st/kicad_bug2/track_x_oval_pad_failure.png
>> Patch (also below):
>> http://u.forre.st/kicad_bug2/0001-Fix-track-rotated-oval-pad-collision-detection.patch
>>
>> As a related question, how hard is it to get committer access? I have
>> several more minor fixes that I'd like to bring in.
>>
>>
>> From ec6adcfb0d6b5583e132264cb84a3ba897a5da2b Mon Sep 17 00:00:00 2001
>> From: Forrest Voight <forrest@xxxxxxxx>
>> Date: Mon, 22 Jan 2018 13:50:33 -0500
>> Subject: [PATCH] Fix track/rotated oval pad collision detection
>>
>> ---
>>  pcbnew/drc_clearance_test_functions.cpp | 3 +++
>>  1 file changed, 3 insertions(+)
>>
>> diff --git a/pcbnew/drc_clearance_test_functions.cpp
>> b/pcbnew/drc_clearance_test_functions.cpp
>> index e395e7d..1ab6af0 100644
>> --- a/pcbnew/drc_clearance_test_functions.cpp
>> +++ b/pcbnew/drc_clearance_test_functions.cpp
>> @@ -1052,6 +1052,9 @@ bool DRC::checkClearanceSegmToPad( const D_PAD*
>> aPad, int aSegmentWidth, int aMi
>>          {
>>              std::swap( padHalfsize.x, padHalfsize.y );
>>              orient = AddAngles( orient, 900 );
>> +            // recompute start/endPoint since they depend on orient
>> +            RotatePoint( &startPoint, m_padToTestPos, -900 );
>> +            RotatePoint( &endPoint, m_padToTestPos, -900 );
>>          }
>>
>>          // here, padHalfsize.x is the radius of rounded ends.
>>
> 
> _______________________________________________
> Mailing list: https://launchpad.net/~kicad-developers
> Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~kicad-developers
> More help   : https://help.launchpad.net/ListHelp
> 


-- 
Jean-Pierre CHARRAS


Follow ups

References