50 auto zone = std::make_unique<ZONE>( &aParent );
51 zone->SetLayer( aLayer );
53 auto outline = std::make_unique<SHAPE_POLY_SET>();
56 zone->SetOutline( outline.release() );
67 auto zone = std::make_unique<ZONE>( &aParent );
68 zone->SetLayer( aLayer );
70 std::unique_ptr<SHAPE_POLY_SET> outline = std::make_unique<SHAPE_POLY_SET>( *aOther.
Outline() );
71 zone->SetOutline( outline.release() );
81 ZONE zone( &m_board );
93 ZONE zone( &m_board );
113 ZONE zone( &m_board );
135 ZONE* ruleArea =
new ZONE( &footprint );
138 footprint.
Add( ruleArea );
148 usedLayers |=
static_cast<ZONE*
>( aItem )->GetLayerSet();
159 usedLayers &= ~allowedLayers;
160 usedLayers &=
~LSET::AllTechMask();
161 usedLayers &=
~LSET::UserMask();
186 sourceOutline.
Append( fullCircle );
188 BOOST_TEST_REQUIRE( sourceOutline.
ArcCount() > 0 );
189 double sourceArea = sourceOutline.
Area();
190 BOOST_TEST_REQUIRE( sourceArea > 0.0 );
213 BOOST_TEST_REQUIRE( working.
HoleCount( 0 ) == 1 );
215 double expectedArea = sourceArea - cutoutOutline.
Area();
216 BOOST_CHECK_CLOSE( working.
Area(), expectedArea, 0.1 );
237 ZONE zone( &m_board );
248 std::vector<std::unique_ptr<ZONE>> zones;
250 zones.emplace_back( std::make_unique<ZONE>( &m_board ) );
251 zones.back()->SetLayer(
F_Cu );
253 zones.emplace_back( std::make_unique<ZONE>( &m_board ) );
254 zones.back()->SetLayer(
F_Cu );
265 std::vector<std::unique_ptr<ZONE>> zones;
279 std::vector<std::unique_ptr<ZONE>> zones;
290 BOOST_TEST( merged[0]->GetNumCorners() == 4 );
296 std::vector<std::unique_ptr<ZONE>> zones;
304 auto newPolyB = std::make_unique<SHAPE_POLY_SET>( *zones.back()->Outline() );
305 newPolyB->Outline( 0 ).Reverse();
306 zones.back()->SetOutline( newPolyB.release() );
314 BOOST_TEST( merged[0]->GetNumCorners() == 4 );
321 via->SetPosition( aPos );
322 via->SetLayerPair( aTopLayer, aBotLayer );
325 via->SetNetCode( aNetCode );
339 pad->SetPosition( aPos );
343 pad->SetLayerSet(
LSET( { aLayer } ) );
344 pad->SetNetCode( aNetCode );
362 zoneA->SetAssignedPriority( 5 );
369 zoneB->SetAssignedPriority( 10 );
371 ZONE* ptrA = zoneA.get();
372 ZONE* ptrB = zoneB.get();
373 m_board.Add( zoneA.release() );
374 m_board.Add( zoneB.release() );
401 ZONE* ptrA = zoneA.get();
402 ZONE* ptrB = zoneB.get();
403 m_board.Add( zoneA.release() );
404 m_board.Add( zoneB.release() );
406 for(
int i = 0; i < 5; i++ )
442 ZONE* ptrA = zoneA.get();
443 ZONE* ptrB = zoneB.get();
444 m_board.Add( zoneA.release() );
445 m_board.Add( zoneB.release() );
464 m_board.SetCopperLayerCount( 2 );
485 ZONE* ptrA = zoneA.get();
486 ZONE* ptrB = zoneB.get();
487 m_board.Add( zoneA.release() );
488 m_board.Add( zoneB.release() );
525 ZONE* ptrA = zoneA.get();
526 ZONE* ptrB = zoneB.get();
527 m_board.Add( zoneA.release() );
528 m_board.Add( zoneB.release() );
555 zoneA->SetAssignedPriority( 50 );
562 zoneB->SetAssignedPriority( 50 );
564 ZONE* ptrA = zoneA.get();
565 ZONE* ptrB = zoneB.get();
566 m_board.Add( zoneA.release() );
567 m_board.Add( zoneB.release() );
581 m_board.Add( netGND );
583 m_board.Add( netVCC );
606 ZONE* ptrA = zoneA.get();
607 ZONE* ptrB = zoneB.get();
608 ZONE* ptrC = zoneC.get();
609 m_board.Add( zoneA.release() );
610 m_board.Add( zoneB.release() );
611 m_board.Add( zoneC.release() );
614 for(
int i = 0; i < 4; i++ )
681 ruleArea->SetIsRuleArea(
true );
723 zone->SetFilledPolysList(
F_Cu, fill );
727 boost::test_tools::tolerance( 0.001 ) );
constexpr EDA_IU_SCALE pcbIUScale
BASE_SET & set(size_t pos)
Abstract interface for BOARD_ITEMs capable of storing other items inside.
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Information pertinent to a Pcbnew printed circuit board.
void Add(BOARD_ITEM *aItem, ADD_MODE aMode=ADD_MODE::INSERT, bool aSkipConnectivity=false) override
Removes an item from the container.
An abstract base class whose derivatives may be passed to a GENERAL_COLLECTOR telling it what should ...
KICAD_T Type() const
Returns the type of object.
Used when the right click button is pressed, or when the select tool is in effect.
void SetGuide(const COLLECTORS_GUIDE *aGuide)
Record which COLLECTORS_GUIDE to use.
LSET is a set of PCB_LAYER_IDs.
static LSET UserDefinedLayersMask(int aUserDefinedLayerCount=MAX_USER_DEFINED_LAYERS)
Return a mask with the requested number of user defined layers.
static const LSET & InternalCuMask()
Return a complete set of internal copper layers which is all Cu layers except F_Cu and B_Cu.
Handle the data for a net.
static constexpr PCB_LAYER_ID ALL_LAYERS
! Temporary layer identifier to identify code that is not padstack-aware
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
const std::optional< INTERSECTION > SelfIntersecting() const
Check if the line chain is self-intersecting.
bool IsClosed() const override
int PointCount() const
Return the number of points (vertices) in this line chain.
Represent a set of closed polygons.
void ClearArcs()
Removes all arc references from all the outlines and holes in the polyset.
int AddOutline(const SHAPE_LINE_CHAIN &aOutline)
Adds a new outline to the set and returns its index.
double Area()
Return the area of this poly set.
int HoleCount(int aOutline) const
Returns the number of holes in a given outline.
int Append(int x, int y, int aOutline=-1, int aHole=-1, bool aAllowDuplication=false)
Appends a vertex at the end of the given outline/hole (default: the last outline)
int ArcCount() const
Count the number of arc shapes present.
int NewOutline()
Creates a new empty polygon in the set and returns its index.
const SHAPE_LINE_CHAIN & CHole(int aOutline, int aHole) const
int OutlineCount() const
Return the number of outlines in the set.
void BooleanSubtract(const SHAPE_POLY_SET &b)
Perform boolean polyset difference.
const SHAPE_LINE_CHAIN & COutline(int aIndex) const
Minimal COLLECTORS_GUIDE so GetCoverageArea() can be exercised headlessly.
bool IgnoreMicroVias() const override
bool IgnoreThroughHolePads() const override
bool IgnoreBlindBuriedVias() const override
bool IgnorePadsOnFront() const override
int Accuracy() const override
bool IgnoreFootprintsOnFront() const override
bool IgnoreFPReferences() const override
bool IgnoreTracks() const override
bool IgnoreFPTextOnFront() const override
bool IgnoreNoNets() const override
bool IsLayerVisible(PCB_LAYER_ID) const override
bool IgnoreFootprintsOnBack() const override
PCB_LAYER_ID GetPreferredLayer() const override
bool IgnoreZoneFills() const override
bool IncludeSecondary() const override
Determine if the secondary criteria or 2nd choice items should be included.
bool IgnoreThroughVias() const override
bool IgnoreFPValues() const override
double OnePixelInIU() const override
bool IgnorePadsOnBack() const override
bool IgnoreLockedItems() const override
bool IgnoreFPTextOnBack() const override
Handle a list of polygons defining a copper zone.
virtual PCB_LAYER_ID GetLayer() const override
Return the primary layer this item is on.
virtual void SetLayer(PCB_LAYER_ID aLayer) override
Set the layer this item is on.
SHAPE_POLY_SET * Outline()
void SetIsRuleArea(bool aEnable)
void SetLayerSet(const LSET &aLayerSet) override
VECTOR2I GetPosition() const override
bool IsOnCopperLayer() const override
PCB_LAYER_ID GetFirstLayer() const
unsigned GetAssignedPriority() const
int GetNumCorners(void) const
Access to m_Poly parameters.
PCB_LAYER_ID
A quick note on layer IDs:
SHAPE_LINE_CHAIN BoxToLineChain(const BOX2I &aBox)
Utility functions for working with shapes.
BOOST_AUTO_TEST_CASE(HorizontalAlignment)
BOOST_REQUIRE(intersection.has_value()==c.ExpectedIntersection.has_value())
BOOST_AUTO_TEST_SUITE_END()
BOOST_TEST(netlist.find("R_G1 ARM_OUT1 DIE_B R='0.001 / ((SW_STATE)") !=std::string::npos)
VECTOR3I expected(15, 30, 45)
static std::unique_ptr< ZONE > CreateSquareZone(BOARD_ITEM_CONTAINER &aParent, BOX2I aBox, PCB_LAYER_ID aLayer)
static PCB_VIA * AddVia(BOARD &aBoard, const VECTOR2I &aPos, int aNetCode, PCB_LAYER_ID aTopLayer=F_Cu, PCB_LAYER_ID aBotLayer=B_Cu)
static std::unique_ptr< ZONE > CreateSimilarZone(BOARD_ITEM_CONTAINER &aParent, const ZONE &aOther, PCB_LAYER_ID aLayer)
Create a similar zone (same outline) on a different layer.
BOOST_AUTO_TEST_CASE(SingleLayer)
static PAD * AddPadToBoard(BOARD &aBoard, const VECTOR2I &aPos, int aNetCode, PCB_LAYER_ID aLayer=F_Cu)
@ PCB_ZONE_T
class ZONE, a copper pour area
VECTOR2< int32_t > VECTOR2I
std::vector< std::unique_ptr< ZONE > > MergeZonesWithSameOutline(std::vector< std::unique_ptr< ZONE > > &&aZones)
Merges zones with identical outlines and nets on different layers into single multi-layer zones.
bool AutoAssignZonePriorities(BOARD *aBoard, PROGRESS_REPORTER *aReporter)
Automatically assign zone priorities based on connectivity analysis of overlapping regions.