35 std::vector<BOX2I> fpBBBoxes(
m_FpInMove.size() );
38 for(
size_t i = 0; i <
m_FpInMove.size(); i++ )
43 movingBBox.
Merge( bbox );
51 if( fpA->IsSelected() )
54 BOX2I fpABBox = fpA->GetBoundingBox(
true );
72 for(
size_t inMoveId = 0; inMoveId <
m_FpInMove.size(); inMoveId++ )
78 const BOX2I fpBBBox = fpBBBoxes[inMoveId];
94 if( frontA.
Collide( &frontB, clearance, &actual, &pos ) )
109 if( backA.
Collide( &backB, clearance, &actual, &pos ) )
118 auto testPadAgainstCourtyards =
123 std::shared_ptr<SHAPE_SEGMENT> hole =
pad->GetEffectiveHoleShape();
136 bool skipNextCmp =
false;
141 for(
const PAD* padB : fpB->
Pads() )
143 if( testPadAgainstCourtyards( padB, fpA ) )
159 for(
const PAD* padA : fpA->Pads() )
161 if( testPadAgainstCourtyards( padA, fpB ) )
174 if( !zone->GetIsRuleArea() || !zone->HasKeepoutParametersSet()
175 || !zone->GetDoNotAllowFootprints() )
180 bool disallowFront = ( zone->GetLayerSet() &
LSET::FrontMask() ).any();
181 bool disallowBack = ( zone->GetLayerSet() &
LSET::BackMask() ).any();
189 if( !frontCourtyard.
IsEmpty() )
191 if( zone->Outline()->Collide( &frontCourtyard.
Outline( 0 ) ) )
206 if( zone->Outline()->Collide( &backCourtyard.
Outline( 0 ) ) )
227 fp->BuildCourtyardCaches();
249 bool aHighlightMoved )
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Information pertinent to a Pcbnew printed circuit board.
const ZONES & Zones() const
const FOOTPRINTS & Footprints() const
constexpr BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
constexpr BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
constexpr bool Intersects(const BOX2< Vec > &aRect) const
const MINOPTMAX< int > & GetValue() const
bool QueryWorstConstraint(DRC_CONSTRAINT_T aRuleId, DRC_CONSTRAINT &aConstraint)
virtual bool Run() override
Run this provider against the given PCB with configured options (if any).
std::vector< FOOTPRINT * > m_FpInMove
void testCourtyardClearances()
int m_largestCourtyardClearance
std::set< BOARD_ITEM * > m_itemsInConflict
void ClearConflicts(KIGFX::VIEW *aView)
std::vector< BOARD_ITEM * > m_lastItemsInConflict
void UpdateConflicts(KIGFX::VIEW *aView, bool aHighlightMoved)
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
virtual void Update(const VIEW_ITEM *aItem, int aUpdateFlags) const
For dynamic VIEWs, inform the associated VIEW that the graphical representation of this item has chan...
void MarkTargetDirty(int aTarget)
Set or clear target 'dirty' flag.
static LSET FrontMask()
Return a mask holding all technical layers and the external CU layer on front side.
static LSET BackMask()
Return a mask holding all technical layers and the external CU layer on back side.
Represent a set of closed polygons.
bool IsEmpty() const
Return true if the set is empty (no polygons at all)
bool Collide(const SHAPE *aShape, int aClearance=0, int *aActual=nullptr, VECTOR2I *aLocation=nullptr) const override
Check if the boundary of shape (this) lies closer to the shape aShape than aClearance,...
SHAPE_LINE_CHAIN & Outline(int aIndex)
Return the reference to aIndex-th outline in the set.
int OutlineCount() const
Return the number of outlines in the set.
const BOX2I BBoxFromCaches() const
Handle a list of polygons defining a copper zone.
@ COURTYARD_CLEARANCE_CONSTRAINT
#define COURTYARD_CONFLICT
temporary set when moving footprints having courtyard overlapping
@ TARGET_OVERLAY
Items that may change while the view stays the same (noncached)
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.