Post-merge cleanup of holes-as-first-class-citizens.
This commit is contained in:
parent
1532a83330
commit
4cc289c6fb
|
@ -505,79 +505,6 @@ int PNS_PCBNEW_RULE_RESOLVER::Clearance( const PNS::ITEM* aA, const PNS::ITEM* a
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
|
|
||||||
int PNS_PCBNEW_RULE_RESOLVER::HoleClearance( const PNS::ITEM* aA, const PNS::ITEM* aB,
|
|
||||||
bool aUseClearanceEpsilon )
|
|
||||||
{
|
|
||||||
CLEARANCE_CACHE_KEY key = { aA, aB, aUseClearanceEpsilon };
|
|
||||||
auto it = m_holeClearanceCache.find( key );
|
|
||||||
|
|
||||||
if( it != m_holeClearanceCache.end() )
|
|
||||||
return it->second;
|
|
||||||
|
|
||||||
PNS::CONSTRAINT constraint;
|
|
||||||
int rv = 0;
|
|
||||||
int layer;
|
|
||||||
|
|
||||||
if( !aA->Layers().IsMultilayer() || !aB || aB->Layers().IsMultilayer() )
|
|
||||||
layer = aA->Layer();
|
|
||||||
else
|
|
||||||
layer = aB->Layer();
|
|
||||||
|
|
||||||
if( QueryConstraint( PNS::CONSTRAINT_TYPE::CT_HOLE_CLEARANCE, aA, aB, layer, &constraint ) )
|
|
||||||
rv = constraint.m_Value.Min();
|
|
||||||
|
|
||||||
#define HAS_PLATED_HOLE( a ) ( a )->IsRoutable()
|
|
||||||
|
|
||||||
// JEY TODO: this is a new test introduced after Tom's brach. How does it fit
|
|
||||||
// in the new architecture?
|
|
||||||
if( IsCopperLayer( layer )
|
|
||||||
&& ( HAS_PLATED_HOLE( aA ) || HAS_PLATED_HOLE( aB ) )
|
|
||||||
&& QueryConstraint( PNS::CONSTRAINT_TYPE::CT_CLEARANCE, aA, aB, layer, &constraint )
|
|
||||||
&& constraint.m_Value.Min() > rv )
|
|
||||||
{
|
|
||||||
rv = constraint.m_Value.Min();
|
|
||||||
}
|
|
||||||
|
|
||||||
if( aUseClearanceEpsilon && rv > 0 )
|
|
||||||
rv = std::max( 0, rv - m_clearanceEpsilon );
|
|
||||||
|
|
||||||
m_holeClearanceCache[ key ] = rv;
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int PNS_PCBNEW_RULE_RESOLVER::HoleToHoleClearance( const PNS::ITEM* aA, const PNS::ITEM* aB,
|
|
||||||
bool aUseClearanceEpsilon )
|
|
||||||
{
|
|
||||||
CLEARANCE_CACHE_KEY key = { aA, aB, aUseClearanceEpsilon };
|
|
||||||
auto it = m_holeToHoleClearanceCache.find( key );
|
|
||||||
|
|
||||||
if( it != m_holeToHoleClearanceCache.end() )
|
|
||||||
return it->second;
|
|
||||||
|
|
||||||
PNS::CONSTRAINT constraint;
|
|
||||||
int rv = 0;
|
|
||||||
int layer;
|
|
||||||
|
|
||||||
if( !aA->Layers().IsMultilayer() || !aB || aB->Layers().IsMultilayer() )
|
|
||||||
layer = aA->Layer();
|
|
||||||
else
|
|
||||||
layer = aB->Layer();
|
|
||||||
|
|
||||||
if( QueryConstraint( PNS::CONSTRAINT_TYPE::CT_HOLE_TO_HOLE, aA, aB, layer, &constraint ) )
|
|
||||||
rv = constraint.m_Value.Min();
|
|
||||||
|
|
||||||
if( aUseClearanceEpsilon && rv > 0 )
|
|
||||||
rv = std::max( 0, rv - m_clearanceEpsilon );
|
|
||||||
|
|
||||||
m_holeToHoleClearanceCache[ key ] = rv;
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
bool PNS_KICAD_IFACE_BASE::inheritTrackWidth( PNS::ITEM* aItem, int* aInheritedWidth )
|
bool PNS_KICAD_IFACE_BASE::inheritTrackWidth( PNS::ITEM* aItem, int* aInheritedWidth )
|
||||||
{
|
{
|
||||||
|
|
|
@ -337,18 +337,8 @@ NODE::OPT_OBSTACLE NODE::NearestObstacle( const LINE* aLine,
|
||||||
if( aLine->EndsWithVia() )
|
if( aLine->EndsWithVia() )
|
||||||
{
|
{
|
||||||
const VIA& via = aLine->Via();
|
const VIA& via = aLine->Via();
|
||||||
// JEY TODO: clean up (or re-enable) all this commented-out stuff....
|
|
||||||
//const HOLE* viaHole = via.Hole();
|
|
||||||
|
|
||||||
//int viaHoleRadius = static_cast<const SHAPE_CIRCLE*>( via.Hole() )->GetRadius();
|
|
||||||
|
|
||||||
int viaClearance = GetClearance( obstacle.m_item, &via, aOpts.m_useClearanceEpsilon )
|
int viaClearance = GetClearance( obstacle.m_item, &via, aOpts.m_useClearanceEpsilon )
|
||||||
+ via.Diameter() / 2;
|
+ via.Diameter() / 2;
|
||||||
//int holeClearance = GetClearance( obstacle.m_item, viaHole, aOpts.m_useClearanceEpsilon )
|
|
||||||
// + viaHoleRadius;
|
|
||||||
|
|
||||||
//if( holeClearance > viaClearance )
|
|
||||||
// viaClearance = holeClearance;
|
|
||||||
|
|
||||||
obstacleHull = obstacle.m_item->Hull( viaClearance, 0, layer );
|
obstacleHull = obstacle.m_item->Hull( viaClearance, 0, layer );
|
||||||
//debugDecorator->AddLine( obstacleHull, 3 );
|
//debugDecorator->AddLine( obstacleHull, 3 );
|
||||||
|
@ -356,61 +346,9 @@ NODE::OPT_OBSTACLE NODE::NearestObstacle( const LINE* aLine,
|
||||||
intersectingPts.clear();
|
intersectingPts.clear();
|
||||||
HullIntersection( obstacleHull, aLine->CLine(), intersectingPts );
|
HullIntersection( obstacleHull, aLine->CLine(), intersectingPts );
|
||||||
|
|
||||||
// obstacleHull.Intersect( aLine->CLine(), intersectingPts, true );
|
|
||||||
|
|
||||||
for( const SHAPE_LINE_CHAIN::INTERSECTION& ip : intersectingPts )
|
for( const SHAPE_LINE_CHAIN::INTERSECTION& ip : intersectingPts )
|
||||||
updateNearest( ip, obstacle );
|
updateNearest( ip, obstacle );
|
||||||
}
|
}
|
||||||
#if 0
|
|
||||||
if( ( m_collisionQueryScope == CQS_ALL_RULES
|
|
||||||
|| !ROUTER::GetInstance()->GetInterface()->IsFlashedOnLayer( obstacle.m_item,
|
|
||||||
layer ) )
|
|
||||||
&& obstacle.m_item->Hole() )
|
|
||||||
{
|
|
||||||
clearance = GetHoleClearance( obstacle.m_item, aLine, aOpts.m_useClearanceEpsilon );
|
|
||||||
int copperClearance = GetClearance( obstacle.m_item, aLine, aOpts.m_useClearanceEpsilon );
|
|
||||||
|
|
||||||
clearance = std::max( clearance, copperClearance );
|
|
||||||
|
|
||||||
obstacleHull = obstacle.m_item->HoleHull( clearance, aLine->Width(), layer );
|
|
||||||
|
|
||||||
intersectingPts.clear();
|
|
||||||
HullIntersection( obstacleHull, aLine->CLine(), intersectingPts );
|
|
||||||
|
|
||||||
for( const SHAPE_LINE_CHAIN::INTERSECTION& ip : intersectingPts )
|
|
||||||
updateNearest( ip, obstacle.m_item, obstacleHull, true );
|
|
||||||
|
|
||||||
if( aLine->EndsWithVia() )
|
|
||||||
{
|
|
||||||
const VIA& via = aLine->Via();
|
|
||||||
// Don't use via.Drill(); it doesn't include the plating thickness
|
|
||||||
int viaHoleRadius = static_cast<const SHAPE_CIRCLE*>( via.Hole() )->GetRadius();
|
|
||||||
|
|
||||||
int viaClearance = GetClearance( obstacle.m_item, &via, aOpts.m_useClearanceEpsilon )
|
|
||||||
+ via.Diameter() / 2;
|
|
||||||
int holeClearance = GetHoleClearance( obstacle.m_item, &via, aOpts.m_useClearanceEpsilon )
|
|
||||||
+ viaHoleRadius;
|
|
||||||
int holeToHole =
|
|
||||||
GetHoleToHoleClearance( obstacle.m_item, &via, aOpts.m_useClearanceEpsilon )
|
|
||||||
+ viaHoleRadius;
|
|
||||||
|
|
||||||
if( holeClearance > viaClearance )
|
|
||||||
viaClearance = holeClearance;
|
|
||||||
|
|
||||||
if( holeToHole > viaClearance )
|
|
||||||
viaClearance = holeToHole;
|
|
||||||
|
|
||||||
obstacleHull = obstacle.m_item->Hull( viaClearance, 0, layer );
|
|
||||||
//debugDecorator->AddLine( obstacleHull, 5 );
|
|
||||||
|
|
||||||
intersectingPts.clear();
|
|
||||||
HullIntersection( obstacleHull, aLine->CLine(), intersectingPts );
|
|
||||||
|
|
||||||
for( const SHAPE_LINE_CHAIN::INTERSECTION& ip : intersectingPts )
|
|
||||||
updateNearest( ip, obstacle.m_item, obstacleHull, true );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( nearest.m_distFirst == INT_MAX )
|
if( nearest.m_distFirst == INT_MAX )
|
||||||
|
@ -713,29 +651,6 @@ bool NODE::Add( std::unique_ptr< ARC >&& aArc, bool aAllowRedundant )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if 0 // JEY TODO: clean up
|
|
||||||
void NODE::Add( std::unique_ptr< ITEM > aItem, bool aAllowRedundant )
|
|
||||||
{
|
|
||||||
switch( aItem->Kind() )
|
|
||||||
{
|
|
||||||
case ITEM::SOLID_T: Add( ItemCast<SOLID>( std::move( aItem ) ) ); break;
|
|
||||||
case ITEM::SEGMENT_T: Add( ItemCast<SEGMENT>( std::move( aItem ) ), aAllowRedundant ); break;
|
|
||||||
case ITEM::VIA_T: Add( ItemCast<VIA>( std::move( aItem ) ) ); break;
|
|
||||||
case ITEM::HOLE_T:
|
|
||||||
break; // ignore holes, they don't exist as independent objects
|
|
||||||
|
|
||||||
case ITEM::ARC_T:
|
|
||||||
//todo(snh): Add redundant search
|
|
||||||
Add( ItemCast<ARC>( std::move( aItem ) ) );
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ITEM::LINE_T:
|
|
||||||
default:
|
|
||||||
assert( false );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void NODE::AddEdgeExclusion( std::unique_ptr<SHAPE> aShape )
|
void NODE::AddEdgeExclusion( std::unique_ptr<SHAPE> aShape )
|
||||||
{
|
{
|
||||||
m_edgeExclusions.push_back( std::move( aShape ) );
|
m_edgeExclusions.push_back( std::move( aShape ) );
|
||||||
|
|
|
@ -36,22 +36,6 @@ bool VIA::PushoutForce( NODE* aNode, const ITEM* aOther, VECTOR2I& aForce )
|
||||||
VECTOR2I elementForces[4], force;
|
VECTOR2I elementForces[4], force;
|
||||||
size_t nf = 0;
|
size_t nf = 0;
|
||||||
|
|
||||||
#if 0 // JEY TODO: why is this commented out? Needs replacing, or deleting?
|
|
||||||
if( aNode->GetCollisionQueryScope() == NODE::CQS_ALL_RULES )
|
|
||||||
{
|
|
||||||
int holeClearance = aNode->GetHoleClearance( this, aOther );
|
|
||||||
int hole2holeClearance = aNode->GetHoleToHoleClearance( this, aOther );
|
|
||||||
|
|
||||||
if( aOther->Hole() )
|
|
||||||
{
|
|
||||||
aOther->Hole()->Collide( Shape(), holeClearance, &elementForces[nf++] );
|
|
||||||
aOther->Hole()->Collide( Hole(), hole2holeClearance, &elementForces[nf++] );
|
|
||||||
}
|
|
||||||
|
|
||||||
aOther->Shape()->Collide( Hole(), holeClearance, &elementForces[nf++] );
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
aOther->Shape()->Collide( Shape(), clearance, &elementForces[nf++] );
|
aOther->Shape()->Collide( Shape(), clearance, &elementForces[nf++] );
|
||||||
|
|
||||||
for( size_t i = 0; i < nf; i++ )
|
for( size_t i = 0; i < nf; i++ )
|
||||||
|
@ -166,18 +150,6 @@ const SHAPE_LINE_CHAIN VIA::Hull( int aClearance, int aWalkaroundThickness, int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#if 0 // JEY TODO: is this no longer needed?
|
|
||||||
const SHAPE_LINE_CHAIN VIA::HoleHull( int aClearance, int aWalkaroundThickness, int aLayer ) const
|
|
||||||
{
|
|
||||||
int cl = ( aClearance + aWalkaroundThickness / 2 );
|
|
||||||
int width = m_hole->GetRadius() * 2;
|
|
||||||
|
|
||||||
// Chamfer = width * ( 1 - sqrt(2)/2 ) for equilateral octagon
|
|
||||||
return OctagonalHull( m_pos - VECTOR2I( width / 2, width / 2 ), VECTOR2I( width, width ), cl,
|
|
||||||
( 2 * cl + width ) * ( 1.0 - M_SQRT1_2 ) );
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
VIA* VIA::Clone() const
|
VIA* VIA::Clone() const
|
||||||
{
|
{
|
||||||
VIA* v = new VIA();
|
VIA* v = new VIA();
|
||||||
|
|
Loading…
Reference in New Issue