48 std::unique_ptr<ZONE> zone = std::make_unique<ZONE>( &aParent );
49 zone->SetLayer( aLayer );
51 std::unique_ptr<SHAPE_POLY_SET> outline = std::make_unique<SHAPE_POLY_SET>();
54 zone->SetOutline( outline.release() );
65 auto zone = std::make_unique<ZONE>( &aParent );
66 zone->SetLayer( aLayer );
68 std::unique_ptr<SHAPE_POLY_SET> outline = std::make_unique<SHAPE_POLY_SET>( *aOther.
Outline() );
69 zone->SetOutline( outline.release() );
79 ZONE zone( &m_board );
91 ZONE zone( &m_board );
111 ZONE zone( &m_board );
141 sourceOutline.
Append( fullCircle );
143 BOOST_TEST_REQUIRE( sourceOutline.
ArcCount() > 0 );
144 double sourceArea = sourceOutline.
Area();
145 BOOST_TEST_REQUIRE( sourceArea > 0.0 );
168 BOOST_TEST_REQUIRE( working.
HoleCount( 0 ) == 1 );
170 double expectedArea = sourceArea - cutoutOutline.
Area();
171 BOOST_CHECK_CLOSE( working.
Area(), expectedArea, 0.1 );
192 ZONE zone( &m_board );
203 std::vector<std::unique_ptr<ZONE>> zones;
205 zones.emplace_back( std::make_unique<ZONE>( &m_board ) );
206 zones.back()->SetLayer(
F_Cu );
208 zones.emplace_back( std::make_unique<ZONE>( &m_board ) );
209 zones.back()->SetLayer(
F_Cu );
220 std::vector<std::unique_ptr<ZONE>> zones;
234 std::vector<std::unique_ptr<ZONE>> zones;
245 BOOST_TEST( merged[0]->GetNumCorners() == 4 );
251 std::vector<std::unique_ptr<ZONE>> zones;
259 auto newPolyB = std::make_unique<SHAPE_POLY_SET>( *zones.back()->Outline() );
260 newPolyB->Outline( 0 ).Reverse();
261 zones.back()->SetOutline( newPolyB.release() );
269 BOOST_TEST( merged[0]->GetNumCorners() == 4 );
277 via->SetPosition( aPos );
278 via->SetLayerPair( aTopLayer, aBotLayer );
281 via->SetNetCode( aNetCode );
295 pad->SetPosition( aPos );
298 pad->SetLayerSet(
LSET( { aLayer } ) );
299 pad->SetNetCode( aNetCode );
316 zoneA->SetAssignedPriority( 5 );
322 zoneB->SetAssignedPriority( 10 );
324 ZONE* ptrA = zoneA.get();
325 ZONE* ptrB = zoneB.get();
326 m_board.Add( zoneA.release() );
327 m_board.Add( zoneB.release() );
352 ZONE* ptrA = zoneA.get();
353 ZONE* ptrB = zoneB.get();
354 m_board.Add( zoneA.release() );
355 m_board.Add( zoneB.release() );
357 for(
int i = 0; i < 5; i++ )
385 ZONE* ptrA = zoneA.get();
386 ZONE* ptrB = zoneB.get();
387 m_board.Add( zoneA.release() );
388 m_board.Add( zoneB.release() );
403 m_board.SetCopperLayerCount( 2 );
422 ZONE* ptrA = zoneA.get();
423 ZONE* ptrB = zoneB.get();
424 m_board.Add( zoneA.release() );
425 m_board.Add( zoneB.release() );
455 ZONE* ptrA = zoneA.get();
456 ZONE* ptrB = zoneB.get();
457 m_board.Add( zoneA.release() );
458 m_board.Add( zoneB.release() );
482 zoneA->SetAssignedPriority( 50 );
488 zoneB->SetAssignedPriority( 50 );
490 ZONE* ptrA = zoneA.get();
491 ZONE* ptrB = zoneB.get();
492 m_board.Add( zoneA.release() );
493 m_board.Add( zoneB.release() );
507 m_board.Add( netGND );
509 m_board.Add( netVCC );
529 ZONE* ptrA = zoneA.get();
530 ZONE* ptrB = zoneB.get();
531 ZONE* ptrC = zoneC.get();
532 m_board.Add( zoneA.release() );
533 m_board.Add( zoneB.release() );
534 m_board.Add( zoneC.release() );
537 for(
int i = 0; i < 4; i++ )
598 ruleArea->SetIsRuleArea(
true );
637 zone->SetFilledPolysList(
F_Cu, fill );
641 boost::test_tools::tolerance( 0.001 ) );
652 const int copperPass =
F_Cu;
constexpr EDA_IU_SCALE pcbIUScale
Abstract interface for BOARD_ITEMs capable of storing other items inside.
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 ...
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.
Handle the data for a net.
@ NORMAL
Shape is the same on all layers.
static constexpr PCB_LAYER_ID ALL_LAYERS
! The layer identifier to use for the single defintion on normal padstacks
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 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:
#define ZONE_LAYER_FOR(boardLayer)
SHAPE_LINE_CHAIN BoxToLineChain(const BOX2I &aBox)
bool ZoneOutlineDrawnOnLayer(bool aOutlineOnly, int aLayer)
Decide which GAL draw pass paints a zone's outline.
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 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 > CreateSquareZone(BOARD_ITEM_CONTAINER &aParent, PCB_LAYER_ID aLayer, const VECTOR2I &aOrigin, const VECTOR2I &aSize)
static std::unique_ptr< ZONE > CreateSimilarZone(BOARD_ITEM_CONTAINER &aParent, PCB_LAYER_ID aLayer, const ZONE &aOther)
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)
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.