kicad-developers team mailing list archive
-
kicad-developers team
-
Mailing list archive
-
Message #37060
Re: Question on Connectivity Algo
-
To:
kicad-developers@xxxxxxxxxxxxxxxxxxx
-
From:
jp charras <jp.charras@xxxxxxxxxx>
-
Date:
Tue, 7 Aug 2018 20:35:41 +0200
-
In-reply-to:
<CALHbTma9zvkpZ6gdTM6=K6Hw1tjOFTgakTvYPedAQT4CvhG9DQ@mail.gmail.com>
-
Openpgp:
preference=signencrypt
-
User-agent:
Mozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Thunderbird/52.9.1
Le 07/08/2018 à 20:14, Seth Hillbrand a écrit :
> Hi Jeff-
>
> Am Di., 7. Aug. 2018 um 08:07 Uhr schrieb Jeff Young <jeff@xxxxxxxxx
> <mailto:jeff@xxxxxxxxx>>:
>
> When building zone connectivity, we go through the following two
> routines:
>
> bool ContainsPoint( const VECTOR2I p ) const
> {
> auto zone = static_cast<ZONE_CONTAINER*> ( Parent() );
> return m_cachedPoly->ContainsPoint( p, zone->GetMinThickness() );
> }
>
> int ContainsPoint( const VECTOR2I& aP, int aClearance = 0 ) // const
> {
> if( containsPoint(aP) )
> return 1;
>
> if( aClearance > 0 )
> return checkClearance ( aP, aClearance );
>
> return 0;
> }
>
>
> Why is zone->GetMinThickness() used? Isn’t that the minimum web
> thickness of the zone?
>
>
> Minimum thickness sets the trace thickness for the zone. The outside
> points of the filled zone sets the maximum size, so the actual zone
> outline is offset into the zone area by half the min thickness. This
> means that the corners are rounded (see attached image) and need to be
> considered when determining interior points.
>
>
> And in the second routine, why check both? Isn’t checkClearance() a
> superset of containsPoint()?
>
>
> The clearance sets the minimum distance outside of the outer boundary.
> So, in the case of a zone, clearance is half the trace width. This is
> outside of the polygon, so it needs a distinct check.
>
> Looking at this, it seems we _might_ have a discrepancy between
> m_ZoneMinThickness representing half or all of the zone trace width.
>
> -Seth
>
I agree.
I am guessing (although I dis not write the code):
return m_cachedPoly->ContainsPoint( p, zone->GetMinThickness() );
should be
return m_cachedPoly->ContainsPoint( p, zone->GetMinThickness()/2 );
--
Jean-Pierre CHARRAS
Follow ups
References