|
KiCad PCB EDA Suite
|
#include <zone_filler.h>
Classes | |
| struct | INDEXED_ITEM |
| An item in one of the fill indexes. More... | |
Public Member Functions | |
| ZONE_FILLER (BOARD *aBoard, COMMIT *aCommit) | |
| ~ZONE_FILLER () | |
| void | SetProgressReporter (PROGRESS_REPORTER *aReporter) |
| PROGRESS_REPORTER * | GetProgressReporter () const |
| bool | Fill (const std::vector< ZONE * > &aZones, bool aCheck=false, wxWindow *aParent=nullptr) |
| Fills the given list of zones. | |
| bool | IsDebug () const |
Private Types | |
| using | FillSnapshot = std::map<std::pair<const ZONE*, PCB_LAYER_ID>, SHAPE_POLY_SET> |
| Snapshot of zone fill polygons captured before an iterative refill wave. | |
| using | ITEM_RTREE = KIRTREE::PACKED_RTREE<INDEXED_ITEM, int, 2> |
Private Member Functions | |
| void | addKnockout (BOARD_ITEM *aItem, PCB_LAYER_ID aLayer, int aGap, SHAPE_POLY_SET &aHoles) |
| Add a knockout for a pad or via. | |
| void | addKnockout (BOARD_ITEM *aItem, PCB_LAYER_ID aLayer, int aGap, bool aIgnoreLineWidth, SHAPE_POLY_SET &aHoles) |
| Add a knockout for a graphic item. | |
| void | addHoleKnockout (PAD *aPad, int aGap, SHAPE_POLY_SET &aHoles) |
| Add a knockout for a pad's hole. | |
| void | knockoutThermalReliefs (const ZONE *aZone, PCB_LAYER_ID aLayer, SHAPE_POLY_SET &aFill, std::vector< BOARD_ITEM * > &aThermalConnectionPads, std::vector< PAD * > &aNoConnectionPads, std::vector< BOARD_ITEM * > &aSolidConnectionItems) |
| Removes thermal reliefs from the shape for any pads connected to the zone. | |
| void | buildCopperItemClearances (const ZONE *aZone, PCB_LAYER_ID aLayer, const std::vector< PAD * > &aNoConnectionPads, SHAPE_POLY_SET &aHoles, bool aIncludeZoneClearances=true) |
| Removes clearance from the shape for copper items which share the zone's layer but are not connected to it. | |
| void | buildDifferentNetZoneClearances (const ZONE *aZone, PCB_LAYER_ID aLayer, SHAPE_POLY_SET &aHoles) |
| Build clearance knockout holes for higher-priority zones on different nets. | |
| bool | zoneKnockoutMayInteract (const ZONE *aZone, const ZONE *aKnockout) const |
| Test whether aKnockout's fill can knock out any part of aZone's fill. | |
| BOX2I | zoneKnockoutQueryBox (const ZONE *aZone) const |
| A window that holds every zone zoneKnockoutMayInteract() can accept for aZone. | |
| bool | mayHoldOutOfBoardCopper (const ZONE *aZone) const |
| True if the fill of aZone can reach outside the board outline. | |
| void | subtractHigherPriorityZones (const ZONE *aZone, PCB_LAYER_ID aLayer, SHAPE_POLY_SET &aRawFill) |
| Removes the outlines of higher-proirity zones with the same net. | |
| bool | fillCopperZone (const ZONE *aZone, PCB_LAYER_ID aLayer, PCB_LAYER_ID aDebugLayer, const SHAPE_POLY_SET &aSmoothedOutline, const SHAPE_POLY_SET &aMaxExtents, SHAPE_POLY_SET &aFillPolys) |
| Function fillCopperZone Add non copper areas polygons (pads and tracks with clearance) to a filled copper area used in BuildFilledSolidAreasPolygons when calculating filled areas in a zone Non copper areas are pads and track and their clearance area The filled copper area must be computed before BuildFilledSolidAreasPolygons() call this function just after creating the filled copper area polygon (without clearance areas. | |
| bool | fillNonCopperZone (const ZONE *candidate, PCB_LAYER_ID aLayer, const SHAPE_POLY_SET &aSmoothedOutline, SHAPE_POLY_SET &aFillPolys) |
| void | buildThermalSpokes (const ZONE *box, PCB_LAYER_ID aLayer, const std::vector< BOARD_ITEM * > &aSpokedPadsList, std::deque< SHAPE_LINE_CHAIN > &aSpokes) |
| Function buildThermalSpokes Constructs a list of all thermal spokes for the given zone. | |
| void | buildHatchZoneThermalRings (const ZONE *aZone, PCB_LAYER_ID aLayer, const SHAPE_POLY_SET &aSmoothedOutline, const std::vector< BOARD_ITEM * > &aThermalConnectionPads, SHAPE_POLY_SET &aFillPolys, SHAPE_POLY_SET &aThermalRings) |
| Build thermal rings for pads in hatch zones. | |
| void | connect_nearby_polys (SHAPE_POLY_SET &aPolys, double aDistance) |
| Create strands of zero-width between elements of SHAPE_POLY_SET that are within aDistance of each other. | |
| bool | fillSingleZone (ZONE *aZone, PCB_LAYER_ID aLayer, SHAPE_POLY_SET &aFillPolys) |
| Build the filled solid areas polygons from zone outlines (stored in m_Poly) The solid areas can be more than one on copper layers, and do not have holes ( holes are linked by overlapping segments to the main outline) in order to have drawable (and plottable) filled polygons. | |
| bool | addHatchFillTypeOnZone (const ZONE *aZone, PCB_LAYER_ID aLayer, PCB_LAYER_ID aDebugLayer, SHAPE_POLY_SET &aFillPolys, const SHAPE_POLY_SET &aThermalRings) |
| for zones having the ZONE_FILL_MODE::ZONE_FILL_MODE::HATCH_PATTERN, create a grid pattern in filled areas of aZone, giving to the filled polygons a fill style like a grid | |
| bool | addCopperThievingPattern (const ZONE *aZone, PCB_LAYER_ID aLayer, SHAPE_POLY_SET &aFillPolys) |
| Stamp a regular grid of pattern shapes onto a zone's filled area for copper thieving. | |
| void | postKnockoutMinWidthPrune (const ZONE *aZone, SHAPE_POLY_SET &aFillPolys, const SHAPE_POLY_SET &aSameNetApron) |
| Remove minimum-width violations introduced by zone-to-zone knockouts. | |
| bool | refillZoneFromCache (ZONE *aZone, PCB_LAYER_ID aLayer, SHAPE_POLY_SET &aFillPolys, const FillSnapshot *aSnapshot=nullptr) |
| Refill a zone from cached pre-knockout fill. | |
| void | buildItemIndexes () |
| Index the static board items once per fill. | |
Static Private Member Functions | |
| static void | queryIndex (const ITEM_RTREE &aIndex, const BOX2I &aBBox, std::vector< INDEXED_ITEM > &aResult) |
| Collect the items whose bounding box overlaps aBBox, in board order. | |
Private Attributes | |
| BOARD * | m_board |
| SHAPE_POLY_SET | m_boardOutline |
| bool | m_brdOutlinesValid |
| COMMIT * | m_commit |
| PROGRESS_REPORTER * | m_progressReporter |
| ITEM_RTREE | m_graphicIndex |
| ITEM_RTREE | m_footprintIndex |
| ITEM_RTREE | m_padIndex |
| std::map< PCB_LAYER_ID, ITEM_RTREE > | m_trackIndex |
| std::map< PCB_LAYER_ID, ITEM_RTREE > | m_zoneIndex |
| int | m_maxError |
| int | m_worstClearance |
| int | m_zoneKnockoutSlack |
| int | m_maxZoneCornerRadius |
| bool | m_debugZoneFiller |
| std::map< std::pair< const ZONE *, PCB_LAYER_ID >, SHAPE_POLY_SET > | m_preKnockoutFillCache |
| std::map< std::pair< const ZONE *, PCB_LAYER_ID >, SHAPE_POLY_SET > | m_preHatchSolidFillCache |
| std::map< std::pair< const ZONE *, PCB_LAYER_ID >, SHAPE_POLY_SET > | m_sameNetApronCache |
| std::map< std::pair< const ZONE *, PCB_LAYER_ID >, std::pair< HASH_128, SHAPE_POLY_SET > > | m_refillResultCache |
| std::mutex | m_cacheMutex |
Definition at line 40 of file zone_filler.h.
|
private |
Snapshot of zone fill polygons captured before an iterative refill wave.
Definition at line 214 of file zone_filler.h.
|
private |
Definition at line 239 of file zone_filler.h.
Definition at line 376 of file zone_filler.cpp.
References ADVANCED_CFG::GetCfg(), BOARD::GetDesignSettings(), m_board, m_brdOutlinesValid, m_commit, ADVANCED_CFG::m_DebugZoneFiller, m_debugZoneFiller, m_maxError, m_maxZoneCornerRadius, m_progressReporter, m_worstClearance, m_zoneKnockoutSlack, and pcbIUScale.
| ZONE_FILLER::~ZONE_FILLER | ( | ) |
Definition at line 392 of file zone_filler.cpp.
|
private |
Stamp a regular grid of pattern shapes onto a zone's filled area for copper thieving.
Replaces aFillPolys with the clipped pattern.
Thieving zones are netless dummy copper used to balance plating current density on outer layers (and copper distribution on inner layers). Runs after electrical clearances have already been subtracted into aFillPolys, so the stamps inherit those keepouts automatically.
v1 supports the dots pattern only. Squares + crosshatch land in a follow-up.
| aZone | the zone, fill mode must be COPPER_THIEVING. |
| aLayer | the copper layer. |
| aFillPolys | IN: pre-cleared valid fill region. OUT: stamped pattern. |
Definition at line 4098 of file zone_filler.cpp.
References SHAPE_POLY_SET::AddOutline(), ANGLE_0, SHAPE_LINE_CHAIN::Append(), SHAPE_POLY_SET::BBox(), SHAPE_POLY_SET::BooleanIntersection(), SHAPE_POLY_SET::BooleanSubtract(), SHAPE_POLY_SET::BuildBBoxCaches(), CHAMFER_ALL_CORNERS, SHAPE_POLY_SET::CloneDropTriangulation(), SHAPE_POLY_SET::Contains(), SHAPE_POLY_SET::Deflate(), THIEVING_SETTINGS::element_size, ERROR_OUTSIDE, THIEVING_SETTINGS::gap, BOX2< Vec >::GetBottom(), BOX2< Vec >::GetLeft(), ZONE::GetMinThickness(), BOX2< Vec >::GetRight(), ZONE::GetThievingSettings(), BOX2< Vec >::GetTop(), HATCH, ZONE::IsCopperThieving(), EDA_ANGLE::IsZero(), ZONE::LayerProperties(), THIEVING_SETTINGS::line_width, m_board, m_maxError, THIEVING_SETTINGS::orientation, SHAPE_POLY_SET::OutlineCount(), THIEVING_SETTINGS::pattern, SHAPE_POLY_SET::RemoveAllContours(), SHAPE_POLY_SET::Rotate(), RotatePoint(), SHAPE_LINE_CHAIN::SetClosed(), SQUARES, THIEVING_SETTINGS::stagger, TransformCircleToPolygon(), TransformTrapezoidToPolygon(), VECTOR2< T >::x, and VECTOR2< T >::y.
Referenced by fillCopperZone(), and fillNonCopperZone().
|
private |
for zones having the ZONE_FILL_MODE::ZONE_FILL_MODE::HATCH_PATTERN, create a grid pattern in filled areas of aZone, giving to the filled polygons a fill style like a grid
| aZone | is the zone to modify |
| aFillPolys | A reference to a SHAPE_POLY_SET buffer containing the initial filled areas, and after adding the grid pattern, the modified filled areas with holes |
| aThermalRings | Thermal ring geometry used to drop hatch holes that would isolate thermal reliefs from the zone fill. |
Definition at line 4303 of file zone_filler.cpp.
References SHAPE_POLY_SET::AddOutline(), SHAPE_LINE_CHAIN::Append(), SHAPE_LINE_CHAIN::Area(), SHAPE_LINE_CHAIN::BBox(), SHAPE_POLY_SET::BBox(), SHAPE_POLY_SET::BooleanIntersection(), SHAPE_POLY_SET::BooleanSubtract(), BOX2< Vec >::Centre(), SHAPE_POLY_SET::Chamfer(), CHAMFER_ALL_CORNERS, SHAPE_POLY_SET::ClearArcs(), SHAPE_POLY_SET::CloneDropTriangulation(), BOX2< Vec >::Contains(), SHAPE_LINE_CHAIN::CPoint(), SHAPE_POLY_SET::Deflate(), SHAPE_POLY_SET::DeletePolygon(), DUMP_POLYS_TO_COPPER_LAYER, SHAPE_POLY_SET::Fillet(), ZONE::GetBoardOutline(), BOX2< Vec >::GetBottom(), ZONE::GetHatchGap(), ZONE::GetHatchHoleMinArea(), ZONE::GetHatchOrientation(), ZONE::GetHatchSmoothingLevel(), ZONE::GetHatchSmoothingValue(), ZONE::GetHatchThickness(), ZONE::GetMinThickness(), BOX2< Vec >::GetRight(), BOX2< Vec >::GetX(), BOX2< Vec >::GetY(), In10_Cu, In11_Cu, In12_Cu, In14_Cu, SHAPE_LINE_CHAIN::Intersect(), BOX2< Vec >::Intersects(), EDA_ANGLE::IsZero(), KiROUND(), ZONE::LayerProperties(), m_board, SHAPE_LINE_CHAIN::Move(), SHAPE_POLY_SET::Outline(), SHAPE_POLY_SET::OutlineCount(), pcbIUScale, SHAPE_LINE_CHAIN::PointCount(), SHAPE_LINE_CHAIN::PointInside(), SHAPE_LINE_CHAIN::Rotate(), SHAPE_POLY_SET::Rotate(), SHAPE_LINE_CHAIN::SetClosed(), SMOOTH_MIN_VAL_MM, SMOOTH_SMALL_VAL_MM, VECTOR2< T >::x, and VECTOR2< T >::y.
Referenced by fillCopperZone(), and fillNonCopperZone().
|
private |
Add a knockout for a pad's hole.
Definition at line 1946 of file zone_filler.cpp.
References ERROR_OUTSIDE, m_maxError, and PAD::TransformHoleToPolygon().
Referenced by buildCopperItemClearances(), and fillCopperZone().
|
private |
Add a knockout for a graphic item.
The knockout is 'aGap' larger than the item (which might be either the electrical clearance or the board edge clearance).
Definition at line 1957 of file zone_filler.cpp.
References ERROR_INSIDE, ERROR_OUTSIDE, PCB_BARCODE::GetBoundingHull(), m_maxError, PCB_BARCODE_T, PCB_DIM_ALIGNED_T, PCB_DIM_CENTER_T, PCB_DIM_LEADER_T, PCB_DIM_ORTHOGONAL_T, PCB_DIM_RADIAL_T, PCB_DRILL_CHART_T, PCB_FIELD_T, PCB_SHAPE_T, PCB_TABLE_T, PCB_TARGET_T, PCB_TEXT_T, PCB_TEXTBOX_T, BOARD_ITEM::SetIsKnockout(), text, BOARD_ITEM::TransformShapeToPolygon(), PCB_DIMENSION_BASE::TransformShapeToPolygon(), PCB_TEXT::TransformTextToPolySet(), EDA_SHAPE::TransformWithLineEndingsToPolygon(), and EDA_ITEM::Type().
|
private |
Add a knockout for a pad or via.
The knockout is 'aGap' larger than the pad (which might be either the thermal clearance or the electrical clearance).
Definition at line 1912 of file zone_filler.cpp.
References SHAPE_POLY_SET::Append(), BuildConvexHull(), CONVEXHULL, CUSTOM, ERROR_OUTSIDE, PAD::GetShape(), m_maxError, SHAPE_POLY_SET::NewOutline(), pad, PCB_PAD_T, BOARD_ITEM::TransformShapeToPolygon(), and EDA_ITEM::Type().
Referenced by buildCopperItemClearances(), fillNonCopperZone(), and knockoutThermalReliefs().
|
private |
Removes clearance from the shape for copper items which share the zone's layer but are not connected to it.
Definition at line 2356 of file zone_filler.cpp.
References addHoleKnockout(), addKnockout(), SHAPE_POLY_SET::Append(), CIRCLE, clearance, CLEARANCE_CONSTRAINT, CUSTOM, EDGE_CLEARANCE_CONSTRAINT, Edge_Cuts, ERROR_OUTSIDE, DRC_ENGINE::EvalRules(), EDA_ITEM::GetBoundingBox(), ZONE::GetBoundingBox(), ADVANCED_CFG::GetCfg(), BOARD_ITEM::GetEffectiveShape(), PCB_TRACK::GetEnd(), BOARD_CONNECTED_ITEM::GetNetCode(), PCB_TRACK::GetStart(), DRC_CONSTRAINT::GetValue(), PCB_TRACK::GetWidth(), HOLE_CLEARANCE_CONSTRAINT, BOX2< Vec >::Inflate(), SHAPE_POLY_SET::Inflate(), IsInnerCopperLayer(), DRC_CONSTRAINT::IsNull(), BOARD_ITEM::IsOnLayer(), PCB_TRACK::IsOnLayer(), ZONE::IsTeardropArea(), m_board, BOARD_DESIGN_SETTINGS::m_DRCEngine, m_footprintIndex, m_graphicIndex, ZONE_FILLER::INDEXED_ITEM::m_item, m_maxError, ZONE_FILLER::INDEXED_ITEM::m_owner, m_progressReporter, m_trackIndex, m_worstClearance, m_zoneIndex, Margin, MINOPTMAX< T >::Min(), NPTH, pad, PCB_SHAPE_T, PCB_VIA_T, pcbIUScale, PHYSICAL_CLEARANCE_CONSTRAINT, PHYSICAL_HOLE_CLEARANCE_CONSTRAINT, PTH, queryIndex(), radius, FOOTPRINT::Reference(), ROUND_ALL_CORNERS, SHAPE_POLY_SET::Simplify(), TransformCircleToPolygon(), EDA_ITEM::Type(), FOOTPRINT::Value(), via, VECTOR2< T >::x, VECTOR2< T >::y, ZLO_FORCE_NO_ZONE_CONNECTION, zoneKnockoutMayInteract(), and zoneKnockoutQueryBox().
Referenced by fillCopperZone().
|
private |
Build clearance knockout holes for higher-priority zones on different nets.
Builds clearance knockout holes for higher-priority zones on different nets.
Separated from buildCopperItemClearances to allow caching before zone knockouts.
This is separated from buildCopperItemClearances to allow caching before zone knockouts.
Definition at line 2819 of file zone_filler.cpp.
References SHAPE_POLY_SET::Append(), CLEARANCE_CONSTRAINT, ERROR_OUTSIDE, DRC_ENGINE::EvalRules(), ADVANCED_CFG::GetCfg(), DRC_CONSTRAINT::GetValue(), DRC_CONSTRAINT::IsNull(), m_board, BOARD_DESIGN_SETTINGS::m_DRCEngine, m_maxError, m_zoneIndex, MINOPTMAX< T >::Min(), pcbIUScale, PHYSICAL_CLEARANCE_CONSTRAINT, queryIndex(), SHAPE_POLY_SET::Simplify(), zoneKnockoutMayInteract(), and zoneKnockoutQueryBox().
Referenced by fillCopperZone().
|
private |
Build thermal rings for pads in hatch zones.
For circular pads, creates an arc ring; for other shapes, creates an inflated ring. Rings are clipped to the zone boundary.
| aThermalRings | Output parameter to collect the thermal ring geometry. Used later to drop hatch holes that would isolate the thermal relief. |
Definition at line 3985 of file zone_filler.cpp.
References SHAPE_POLY_SET::BooleanAdd(), SHAPE_POLY_SET::BooleanIntersection(), SHAPE_POLY_SET::BooleanSubtract(), CIRCLE, ERROR_OUTSIDE, DRC_ENGINE::EvalRules(), DRC_CONSTRAINT::GetValue(), m_board, BOARD_DESIGN_SETTINGS::m_DRCEngine, m_maxError, MINOPTMAX< T >::Min(), MINOPTMAX< T >::Opt(), OVAL, pad, PCB_PAD_T, PCB_VIA_T, THERMAL_RELIEF_GAP_CONSTRAINT, THERMAL_SPOKE_WIDTH_CONSTRAINT, TransformRingToPolygon(), via, VECTOR2< T >::x, and VECTOR2< T >::y.
Referenced by fillCopperZone().
|
private |
Index the static board items once per fill.
Definition at line 431 of file zone_filler.cpp.
References LSET::AllCuMask(), BOX2< Vec >::GetBottom(), ZONE::GetCornerRadius(), ZONE::GetLayerSet(), BOX2< Vec >::GetLeft(), BOX2< Vec >::GetRight(), BOX2< Vec >::GetTop(), m_board, m_footprintIndex, m_graphicIndex, m_maxZoneCornerRadius, m_padIndex, m_trackIndex, m_zoneIndex, and pad.
Referenced by Fill().
|
private |
Function buildThermalSpokes Constructs a list of all thermal spokes for the given zone.
Function buildThermalSpokes.
Definition at line 3610 of file zone_filler.cpp.
References SEG::A, std::abs(), ANGLE_0, ANGLE_90, SHAPE_LINE_CHAIN::Append(), SEG::B, center, CIRCLE, EDA_ANGLE::Cos(), CUSTOM, DEGREES_T, epsilon, ERROR_OUTSIDE, DRC_ENGINE::EvalRules(), BOARD_DESIGN_SETTINGS::GetBiggestClearanceValue(), PAD::GetBoundingBox(), PCB_VIA::GetBoundingBox(), ZONE::GetBoundingBox(), BOX2< Vec >::GetCenter(), ZONE::GetFillMode(), ZONE::GetHatchThickness(), BOX2< Vec >::GetHeight(), ZONE::GetLocalClearance(), ZONE::GetMinThickness(), DRC_CONSTRAINT::GetValue(), BOX2< Vec >::GetWidth(), HATCH_PATTERN, BOX2< Vec >::Inflate(), SHAPE_LINE_CHAIN::Intersect(), BOX2< Vec >::Intersects(), KiROUND(), m_board, BOARD_DESIGN_SETTINGS::m_DRCEngine, BOARD_DESIGN_SETTINGS::m_MaxError, m_maxError, MINOPTMAX< T >::Max(), MINOPTMAX< T >::Min(), MINOPTMAX< T >::Opt(), SHAPE_POLY_SET::Outline(), SHAPE_POLY_SET::OutlineCount(), OVAL, pad, PCB_PAD_T, PCB_VIA_T, VECTOR2< T >::Perpendicular(), VECTOR2< T >::Resize(), SEG::Reverse(), RotatePoint(), SEGMENT, SHAPE_LINE_CHAIN::SetClosed(), PAD::SetOffset(), PAD::SetOrientation(), PAD::SetPosition(), PCB_VIA::SetPosition(), EDA_ANGLE::Sin(), THERMAL_RELIEF_GAP_CONSTRAINT, THERMAL_SPOKE_WIDTH_CONSTRAINT, DRC_CONSTRAINT::Value(), via, VECTOR2< T >::x, and VECTOR2< T >::y.
Referenced by fillCopperZone().
|
private |
Create strands of zero-width between elements of SHAPE_POLY_SET that are within aDistance of each other.
When we inflate these strands, they will create minimum width bands
Definition at line 2926 of file zone_filler.cpp.
References SHAPE_POLY_SET::BBoxFromCaches(), SHAPE_LINE_CHAIN::CPoint(), VERTEX_CONNECTOR::FindResults(), VERTEX_CONNECTOR::GetResults(), SHAPE_LINE_CHAIN::Insert(), SHAPE_POLY_SET::Outline(), SHAPE_POLY_SET::OutlineCount(), and result.
Referenced by fillCopperZone(), and postKnockoutMinWidthPrune().
| bool ZONE_FILLER::Fill | ( | const std::vector< ZONE * > & | aZones, |
| bool | aCheck = false, | ||
| wxWindow * | aParent = nullptr ) |
Fills the given list of zones.
NB: Invalidates connectivity - it is up to the caller to obtain a lock on the connectivity data before calling Fill to prevent access to stale data by other coroutines (for example, ratsnest redraw). This will generally be required if a UI-based progress reporter has been installed.
Caller is also responsible for re-building connectivity afterwards.
Definition at line 588 of file zone_filler.cpp.
References _, SHAPE_POLY_SET::AddOutline(), LSET::AllCuMask(), ALWAYS, AREA, SHAPE_LINE_CHAIN::Area(), SHAPE_POLY_SET::Area(), SHAPE_POLY_SET::BooleanIntersection(), buildItemIndexes(), ZONE::CacheTriangulation(), ZONE::CalculateFilledArea(), center, SHAPE_POLY_SET::Contains(), KIDIALOG::DoNotShowCheckbox(), PADSTACK::Drill(), PADSTACK::DRILL_PROPS::end, ERROR_OUTSIDE, fillSingleZone(), ZONE::GetAssignedPriority(), BOARD_ITEM::GetBoard(), ZONE::GetBoardOutline(), ZONE::GetBoundingBox(), ADVANCED_CFG::GetCfg(), BOARD::GetCopperLayerCount(), ZONE::GetFilledPolysList(), ZONE::GetIslandRemovalMode(), ZONE::GetIsRuleArea(), GetKiCadThreadPool(), ZONE::GetLayerSet(), ZONE::GetMinIslandArea(), BOARD_CONNECTED_ITEM::GetNetCode(), ZONE::HasFilledPolysForLayer(), ZONE::HigherPriority(), index, BOX2< Vec >::Inflate(), LSET::InternalCuMask(), ZONE::IsCopperThieving(), ZONE::IsTeardropArea(), m_board, m_boardOutline, m_brdOutlinesValid, m_commit, m_debugZoneFiller, BOARD_DESIGN_SETTINGS::m_DRCEngine, m_preHatchSolidFillCache, m_progressReporter, m_refillResultCache, m_sameNetApronCache, m_worstClearance, ADVANCED_CFG::m_ZoneFillIterativeRefill, mayHoldOutOfBoardCopper(), SHAPE_POLY_SET::OutlineCount(), pad, PCB_VIA_T, process, refillZoneFromCache(), LSET::Seq(), BASE_SET::set(), ZONE::SetFilledPolysList(), ZONE::SetFillFlag(), ZONE::SetIsIsland(), KIDIALOG::SetOKCancelLabels(), KIDIALOG::ShowModal(), PADSTACK::DRILL_PROPS::start, START_END_ONLY, tp, PADSTACK::UnconnectedLayerMode(), via, VECTOR2< T >::x, VECTOR2< T >::y, ZLO_FORCE_FLASHED, ZLO_FORCE_NO_ZONE_CONNECTION, and zoneKnockoutMayInteract().
Referenced by BOOST_FIXTURE_TEST_CASE(), fill_bench_main_func(), KI_TEST::FillZones(), API_HANDLER_PCB::handleRefillZones(), ZONE_FILLER_TOOL::refillAroundGenerators(), and DIALOG_GLOBAL_EDIT_TEARDROPS::TransferDataFromWindow().
|
private |
Function fillCopperZone Add non copper areas polygons (pads and tracks with clearance) to a filled copper area used in BuildFilledSolidAreasPolygons when calculating filled areas in a zone Non copper areas are pads and track and their clearance area The filled copper area must be computed before BuildFilledSolidAreasPolygons() call this function just after creating the filled copper area polygon (without clearance areas.
| aPcb | the current board |
Definition at line 3049 of file zone_filler.cpp.
References addCopperThievingPattern(), addHatchFillTypeOnZone(), addHoleKnockout(), SHAPE_POLY_SET::AddOutline(), SHAPE_POLY_SET::BooleanAdd(), SHAPE_POLY_SET::BooleanIntersection(), SHAPE_POLY_SET::BooleanSubtract(), POLY_YSTRIPES_INDEX::Build(), buildCopperItemClearances(), buildDifferentNetZoneClearances(), buildHatchZoneThermalRings(), buildThermalSpokes(), CHAMFER_ALL_CORNERS, SHAPE_POLY_SET::CloneDropTriangulation(), connect_nearby_polys(), POLY_YSTRIPES_INDEX::Contains(), COPPER_THIEVING, SHAPE_POLY_SET::Deflate(), SHAPE_POLY_SET::DeletePolygon(), dropSubResolutionOutlines(), DUMP_POLYS_TO_COPPER_LAYER, epsilon, ERROR_OUTSIDE, SHAPE_POLY_SET::Fracture(), ZONE::GetBoundingBox(), ADVANCED_CFG::GetCfg(), ZONE::GetFillMode(), ZONE::GetMinThickness(), BOX2< Vec >::GetSizeMax(), HATCH_PATTERN, In10_Cu, In15_Cu, In16_Cu, In17_Cu, In18_Cu, In19_Cu, In1_Cu, In2_Cu, In3_Cu, In4_Cu, In5_Cu, In6_Cu, In7_Cu, In8_Cu, In9_Cu, SHAPE_POLY_SET::Inflate(), ZONE::IsTeardropArea(), knockoutThermalReliefs(), m_board, m_cacheMutex, m_debugZoneFiller, m_maxError, m_preHatchSolidFillCache, m_preKnockoutFillCache, m_progressReporter, m_sameNetApronCache, ADVANCED_CFG::m_ZoneFillIterativeRefill, BOX2< Vec >::Merge(), SHAPE_POLY_SET::OutlineCount(), PCB_PAD_T, PCB_VIA_T, pcbIUScale, SHAPE_POLY_SET::Polygon(), postKnockoutMinWidthPrune(), ROUND_ALL_CORNERS, SHAPE_POLY_SET::Simplify(), subtractHigherPriorityZones(), TransformCircleToPolygon(), and via.
Referenced by fillSingleZone().
|
private |
Definition at line 3455 of file zone_filler.cpp.
References addCopperThievingPattern(), addHatchFillTypeOnZone(), addKnockout(), SHAPE_POLY_SET::BooleanSubtract(), CHAMFER_ALL_CORNERS, COPPER_THIEVING, SHAPE_POLY_SET::Deflate(), epsilon, SHAPE_POLY_SET::Fracture(), ZONE::GetBoundingBox(), ZONE::GetFillMode(), ZONE::GetMinThickness(), HATCH_PATTERN, SHAPE_POLY_SET::Inflate(), m_board, m_maxError, m_progressReporter, SHAPE_POLY_SET::OutlineCount(), pcbIUScale, and ROUND_ALL_CORNERS.
Referenced by fillSingleZone().
|
private |
Build the filled solid areas polygons from zone outlines (stored in m_Poly) The solid areas can be more than one on copper layers, and do not have holes ( holes are linked by overlapping segments to the main outline) in order to have drawable (and plottable) filled polygons.
| aZone | is the zone to fill |
| aFillPolys | A reference to a SHAPE_POLY_SET buffer to store polygons with no holes (holes are linked to main outline by overlapping segments, and these polygons are shrunk by aZone->GetMinThickness() / 2 to be drawn with a outline thickness = aZone->GetMinThickness() aFillPolys are polygons that will be drawn on screen and plotted |
Definition at line 3573 of file zone_filler.cpp.
References ZONE::BuildSmoothedPoly(), F_Cu, fillCopperZone(), fillNonCopperZone(), LSET::InternalCuMask(), ZONE::IsOnCopperLayer(), m_boardOutline, m_brdOutlinesValid, m_debugZoneFiller, m_progressReporter, ZONE::SetNeedRefill(), and UNDEFINED_LAYER.
Referenced by Fill().
|
inline |
Definition at line 47 of file zone_filler.h.
References m_progressReporter.
|
inline |
Definition at line 61 of file zone_filler.h.
References m_debugZoneFiller.
|
private |
Removes thermal reliefs from the shape for any pads connected to the zone.
Does NOT add in spokes, which must be done later.
Definition at line 2031 of file zone_filler.cpp.
References addKnockout(), ALWAYS_FLASHED, SHAPE_POLY_SET::BooleanSubtract(), CIRCLE, clearance, SHAPE_POLY_SET::Collide(), CUSTOM, PADSTACK::DRILL_PROPS::end, ERROR_OUTSIDE, DRC_ENGINE::EvalRules(), DRC_ENGINE::EvalZoneConnection(), FULL, ZONE::GetBoundingBox(), ZONE::GetFillMode(), ZONE::GetLocalClearance(), BOARD_CONNECTED_ITEM::GetNetCode(), DRC_CONSTRAINT::GetValue(), HATCH_PATTERN, BOX2< Vec >::Inflate(), BOX2< Vec >::Intersects(), ZONE::IsTeardropArea(), m_board, BOARD_DESIGN_SETTINGS::m_DRCEngine, m_maxError, m_padIndex, m_worstClearance, DRC_CONSTRAINT::m_ZoneConnection, MINOPTMAX< T >::Min(), PADSTACK::POST_MACHINING_PROPS::mode, NONE, NOT_POST_MACHINED, NPTH, pad, PCB_VIA_T, PHYSICAL_CLEARANCE_CONSTRAINT, PHYSICAL_HOLE_CLEARANCE_CONSTRAINT, queryIndex(), PADSTACK::DRILL_PROPS::size, PADSTACK::POST_MACHINING_PROPS::size, PADSTACK::DRILL_PROPS::start, START_END_ONLY, THERMAL, THERMAL_RELIEF_GAP_CONSTRAINT, TransformCircleToPolygon(), UNDEFINED_LAYER, UNKNOWN, via, VECTOR2< T >::x, VECTOR2< T >::y, and ZLO_FORCE_NO_ZONE_CONNECTION.
Referenced by fillCopperZone().
|
private |
True if the fill of aZone can reach outside the board outline.
Definition at line 518 of file zone_filler.cpp.
References ZONE_SETTINGS::CHAMFER, ZONE_SETTINGS::FILLET, ZONE::GetCornerSmoothingType(), ZONE::IsTeardropArea(), and m_brdOutlinesValid.
Referenced by Fill().
|
private |
Remove minimum-width violations introduced by zone-to-zone knockouts.
Runs a deflate/reconnect/inflate cycle and intersects with the pre-deflate boundary to avoid re-inflating into cleared areas.
| aSameNetApron | copper an abutting same-net zone will supply just outside this zone's boundary. It is unioned in for the deflate/inflate cycle and clipped back off afterwards, so a shared border is not treated as a convex corner and rounded away. |
Definition at line 2987 of file zone_filler.cpp.
References SHAPE_POLY_SET::BooleanAdd(), SHAPE_POLY_SET::BooleanIntersection(), CHAMFER_ALL_CORNERS, SHAPE_POLY_SET::CloneDropTriangulation(), connect_nearby_polys(), SHAPE_POLY_SET::Deflate(), SHAPE_POLY_SET::DeletePolygon(), epsilon, SHAPE_POLY_SET::Fracture(), ZONE::GetMinThickness(), BOX2< Vec >::GetSizeMax(), SHAPE_POLY_SET::Inflate(), m_maxError, BOX2< Vec >::Merge(), SHAPE_POLY_SET::OutlineCount(), pcbIUScale, SHAPE_POLY_SET::Polygon(), and ROUND_ALL_CORNERS.
Referenced by fillCopperZone(), and refillZoneFromCache().
|
staticprivate |
Collect the items whose bounding box overlaps aBBox, in board order.
Definition at line 403 of file zone_filler.cpp.
References KIRTREE::PACKED_RTREE< DATATYPE, ELEMTYPE, NUMDIMS, FANOUT >::empty(), BOX2< Vec >::GetBottom(), BOX2< Vec >::GetLeft(), BOX2< Vec >::GetRight(), BOX2< Vec >::GetTop(), and KIRTREE::PACKED_RTREE< DATATYPE, ELEMTYPE, NUMDIMS, FANOUT >::Search().
Referenced by buildCopperItemClearances(), buildDifferentNetZoneClearances(), knockoutThermalReliefs(), refillZoneFromCache(), and subtractHigherPriorityZones().
|
private |
Refill a zone from cached pre-knockout fill.
Used during iterative refill to avoid recomputing thermal reliefs and copper clearances. Only re-applies the higher-priority zone knockout with updated fills.
| aSnapshot | If non-null, fills of other zones are read from the snapshot instead of from the live zone objects, ensuring all tasks in a parallel wave see the same pre-wave state. |
Definition at line 4536 of file zone_filler.cpp.
References MMH3_HASH::addData(), SHAPE_POLY_SET::Append(), SHAPE_POLY_SET::BooleanAdd(), SHAPE_POLY_SET::BooleanIntersection(), SHAPE_POLY_SET::BooleanSubtract(), CLEARANCE_CONSTRAINT, MMH3_HASH::digest(), dropSubResolutionOutlines(), DRC_ENGINE::EvalRules(), SHAPE_POLY_SET::Fracture(), ZONE::GetAssignedPriority(), ZONE::GetBoundingBox(), ADVANCED_CFG::GetCfg(), ZONE::GetFillMode(), SHAPE_POLY_SET::GetHash(), ZONE::GetMinThickness(), DRC_CONSTRAINT::GetValue(), HATCH_PATTERN, BOX2< Vec >::Inflate(), SHAPE_POLY_SET::Inflate(), DRC_CONSTRAINT::IsNull(), m_board, m_cacheMutex, BOARD_DESIGN_SETTINGS::m_DRCEngine, m_maxError, m_preHatchSolidFillCache, m_preKnockoutFillCache, m_refillResultCache, m_sameNetApronCache, m_worstClearance, m_zoneIndex, MINOPTMAX< T >::Min(), SHAPE_POLY_SET::OutlineCount(), pcbIUScale, PHYSICAL_CLEARANCE_CONSTRAINT, postKnockoutMinWidthPrune(), queryIndex(), ROUND_ALL_CORNERS, HASH_128::Value64, zoneKnockoutMayInteract(), and zoneKnockoutQueryBox().
Referenced by Fill().
| void ZONE_FILLER::SetProgressReporter | ( | PROGRESS_REPORTER * | aReporter | ) |
Definition at line 397 of file zone_filler.cpp.
References m_progressReporter.
Referenced by DIALOG_GLOBAL_EDIT_TEARDROPS::TransferDataFromWindow().
|
private |
Removes the outlines of higher-proirity zones with the same net.
These zones should be in charge of the fill parameters within their own outlines.
Definition at line 2886 of file zone_filler.cpp.
References SHAPE_POLY_SET::BooleanSubtract(), ZONE::GetAssignedPriority(), ZONE::GetBoundingBox(), ZONE::IsTeardropArea(), m_zoneIndex, SHAPE_POLY_SET::OutlineCount(), queryIndex(), and ZONE::SameNet().
Referenced by fillCopperZone().
|
private |
Test whether aKnockout's fill can knock out any part of aZone's fill.
Every reader of another zone's fill must gate on this same predicate; see the implementation for why and for the reach rationale.
Definition at line 549 of file zone_filler.cpp.
References ZONE_SETTINGS::CHAMFER, SHAPE_POLY_SET::Collide(), ZONE_SETTINGS::FILLET, ZONE::GetBoardOutline(), ZONE::GetBoundingBox(), ZONE::GetMinThickness(), BOX2< Vec >::Inflate(), BOX2< Vec >::Intersects(), m_board, m_worstClearance, and m_zoneKnockoutSlack.
Referenced by buildCopperItemClearances(), buildDifferentNetZoneClearances(), Fill(), and refillZoneFromCache().
A window that holds every zone zoneKnockoutMayInteract() can accept for aZone.
Definition at line 533 of file zone_filler.cpp.
References ZONE::GetBoundingBox(), ZONE::GetCornerRadius(), ZONE::GetMinThickness(), BOX2< Vec >::Inflate(), m_board, m_maxZoneCornerRadius, m_worstClearance, and m_zoneKnockoutSlack.
Referenced by buildCopperItemClearances(), buildDifferentNetZoneClearances(), and refillZoneFromCache().
|
private |
Definition at line 248 of file zone_filler.h.
Referenced by addCopperThievingPattern(), addHatchFillTypeOnZone(), buildCopperItemClearances(), buildDifferentNetZoneClearances(), buildHatchZoneThermalRings(), buildItemIndexes(), buildThermalSpokes(), Fill(), fillCopperZone(), fillNonCopperZone(), knockoutThermalReliefs(), refillZoneFromCache(), ZONE_FILLER(), zoneKnockoutMayInteract(), and zoneKnockoutQueryBox().
|
private |
Definition at line 249 of file zone_filler.h.
Referenced by Fill(), and fillSingleZone().
|
private |
Definition at line 250 of file zone_filler.h.
Referenced by Fill(), fillSingleZone(), mayHoldOutOfBoardCopper(), and ZONE_FILLER().
|
mutableprivate |
Definition at line 287 of file zone_filler.h.
Referenced by fillCopperZone(), and refillZoneFromCache().
|
private |
Definition at line 251 of file zone_filler.h.
Referenced by Fill(), and ZONE_FILLER().
|
private |
Definition at line 270 of file zone_filler.h.
Referenced by Fill(), fillCopperZone(), fillSingleZone(), IsDebug(), and ZONE_FILLER().
|
private |
Definition at line 256 of file zone_filler.h.
Referenced by buildCopperItemClearances(), and buildItemIndexes().
|
private |
Definition at line 255 of file zone_filler.h.
Referenced by buildCopperItemClearances(), and buildItemIndexes().
|
private |
Definition at line 261 of file zone_filler.h.
Referenced by addCopperThievingPattern(), addHoleKnockout(), addKnockout(), addKnockout(), buildCopperItemClearances(), buildDifferentNetZoneClearances(), buildHatchZoneThermalRings(), buildThermalSpokes(), fillCopperZone(), fillNonCopperZone(), knockoutThermalReliefs(), postKnockoutMinWidthPrune(), refillZoneFromCache(), and ZONE_FILLER().
|
private |
Definition at line 268 of file zone_filler.h.
Referenced by buildItemIndexes(), ZONE_FILLER(), and zoneKnockoutQueryBox().
|
private |
Definition at line 257 of file zone_filler.h.
Referenced by buildItemIndexes(), and knockoutThermalReliefs().
|
private |
Definition at line 277 of file zone_filler.h.
Referenced by Fill(), fillCopperZone(), and refillZoneFromCache().
|
private |
Definition at line 274 of file zone_filler.h.
Referenced by fillCopperZone(), and refillZoneFromCache().
|
private |
Definition at line 252 of file zone_filler.h.
Referenced by buildCopperItemClearances(), Fill(), fillCopperZone(), fillNonCopperZone(), fillSingleZone(), GetProgressReporter(), SetProgressReporter(), and ZONE_FILLER().
|
private |
Definition at line 286 of file zone_filler.h.
Referenced by Fill(), and refillZoneFromCache().
|
private |
Definition at line 281 of file zone_filler.h.
Referenced by Fill(), fillCopperZone(), and refillZoneFromCache().
|
private |
Definition at line 258 of file zone_filler.h.
Referenced by buildCopperItemClearances(), and buildItemIndexes().
|
private |
Definition at line 262 of file zone_filler.h.
Referenced by buildCopperItemClearances(), Fill(), knockoutThermalReliefs(), refillZoneFromCache(), ZONE_FILLER(), zoneKnockoutMayInteract(), and zoneKnockoutQueryBox().
|
private |
Definition at line 259 of file zone_filler.h.
Referenced by buildCopperItemClearances(), buildDifferentNetZoneClearances(), buildItemIndexes(), refillZoneFromCache(), and subtractHigherPriorityZones().
|
private |
Definition at line 265 of file zone_filler.h.
Referenced by ZONE_FILLER(), zoneKnockoutMayInteract(), and zoneKnockoutQueryBox().