|
KiCad PCB EDA Suite
|
#include <zone_filler.h>
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. | |
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. | |
| 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) |
| 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. | |
Private Attributes | |
| BOARD * | m_board |
| SHAPE_POLY_SET | m_boardOutline |
| bool | m_brdOutlinesValid |
| COMMIT * | m_commit |
| PROGRESS_REPORTER * | m_progressReporter |
| int | m_maxError |
| int | m_worstClearance |
| int | m_zoneKnockoutSlack |
| 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 >, std::pair< HASH_128, SHAPE_POLY_SET > > | m_refillResultCache |
| std::mutex | m_cacheMutex |
Definition at line 38 of file zone_filler.h.
|
private |
Snapshot of zone fill polygons captured before an iterative refill wave.
Definition at line 197 of file zone_filler.h.
Definition at line 344 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_progressReporter, m_worstClearance, m_zoneKnockoutSlack, and pcbIUScale.
| ZONE_FILLER::~ZONE_FILLER | ( | ) |
Definition at line 359 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 3833 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 4038 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 1709 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 1720 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_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(), 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 1675 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 2103 of file zone_filler.cpp.
References addHoleKnockout(), addKnockout(), SHAPE_POLY_SET::Append(), CIRCLE, clearance, CLEARANCE_CONSTRAINT, CUSTOM, EDGE_CLEARANCE_CONSTRAINT, Edge_Cuts, PADSTACK::DRILL_PROPS::end, ERROR_OUTSIDE, DRC_ENGINE::EvalRules(), ZONE::GetBoundingBox(), ADVANCED_CFG::GetCfg(), BOARD_CONNECTED_ITEM::GetNetCode(), DRC_CONSTRAINT::GetValue(), HOLE_CLEARANCE_CONSTRAINT, BOX2< Vec >::Inflate(), SHAPE_POLY_SET::Inflate(), BOX2< Vec >::Intersects(), IsInnerCopperLayer(), DRC_CONSTRAINT::IsNull(), ZONE::IsTeardropArea(), m_board, BOARD_DESIGN_SETTINGS::m_DRCEngine, m_maxError, m_progressReporter, m_worstClearance, Margin, MINOPTMAX< T >::Min(), PADSTACK::POST_MACHINING_PROPS::mode, NOT_POST_MACHINED, NPTH, pad, PCB_SHAPE_T, PCB_VIA_T, pcbIUScale, PHYSICAL_CLEARANCE_CONSTRAINT, PHYSICAL_HOLE_CLEARANCE_CONSTRAINT, PTH, radius, ROUND_ALL_CORNERS, SHAPE_POLY_SET::Simplify(), PADSTACK::DRILL_PROPS::size, PADSTACK::POST_MACHINING_PROPS::size, PADSTACK::DRILL_PROPS::start, TransformCircleToPolygon(), UNDEFINED_LAYER, UNKNOWN, via, VECTOR2< T >::x, VECTOR2< T >::y, ZLO_FORCE_NO_ZONE_CONNECTION, and zoneKnockoutMayInteract().
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 2600 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, MINOPTMAX< T >::Min(), pcbIUScale, PHYSICAL_CLEARANCE_CONSTRAINT, SHAPE_POLY_SET::Simplify(), and zoneKnockoutMayInteract().
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 3720 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 |
Function buildThermalSpokes Constructs a list of all thermal spokes for the given zone.
Function buildThermalSpokes.
Definition at line 3345 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 2694 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 411 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(), 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_worstClearance, ADVANCED_CFG::m_ZoneFillIterativeRefill, 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, 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(), 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 2798 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(), 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, 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 3190 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 3308 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 45 of file zone_filler.h.
References m_progressReporter.
|
inline |
Definition at line 59 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 1786 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_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, 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 |
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.
Definition at line 2741 of file zone_filler.cpp.
References 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().
|
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 4271 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(), DRC_ENGINE::EvalRules(), SHAPE_POLY_SET::Fracture(), 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_worstClearance, MINOPTMAX< T >::Min(), SHAPE_POLY_SET::OutlineCount(), pcbIUScale, PHYSICAL_CLEARANCE_CONSTRAINT, postKnockoutMinWidthPrune(), ROUND_ALL_CORNERS, HASH_128::Value64, and zoneKnockoutMayInteract().
Referenced by Fill().
| void ZONE_FILLER::SetProgressReporter | ( | PROGRESS_REPORTER * | aReporter | ) |
Definition at line 364 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 2659 of file zone_filler.cpp.
References SHAPE_POLY_SET::BooleanSubtract(), ZONE::GetAssignedPriority(), ZONE::GetBoundingBox(), ZONE::IsTeardropArea(), m_board, SHAPE_POLY_SET::OutlineCount(), 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 372 of file zone_filler.cpp.
References SHAPE_POLY_SET::Collide(), ZONE::GetBoardOutline(), ZONE::GetBoundingBox(), ZONE::GetMinThickness(), BOX2< Vec >::Inflate(), BOX2< Vec >::Intersects(), m_board, m_worstClearance, m_zoneKnockoutSlack, ZONE_SETTINGS::SMOOTHING_CHAMFER, and ZONE_SETTINGS::SMOOTHING_FILLET.
Referenced by buildCopperItemClearances(), buildDifferentNetZoneClearances(), Fill(), and refillZoneFromCache().
|
private |
Definition at line 211 of file zone_filler.h.
Referenced by addCopperThievingPattern(), addHatchFillTypeOnZone(), buildCopperItemClearances(), buildDifferentNetZoneClearances(), buildHatchZoneThermalRings(), buildThermalSpokes(), Fill(), fillCopperZone(), fillNonCopperZone(), knockoutThermalReliefs(), refillZoneFromCache(), subtractHigherPriorityZones(), ZONE_FILLER(), and zoneKnockoutMayInteract().
|
private |
Definition at line 212 of file zone_filler.h.
Referenced by Fill(), and fillSingleZone().
|
private |
Definition at line 213 of file zone_filler.h.
Referenced by Fill(), fillSingleZone(), and ZONE_FILLER().
|
mutableprivate |
Definition at line 236 of file zone_filler.h.
Referenced by fillCopperZone(), and refillZoneFromCache().
|
private |
Definition at line 214 of file zone_filler.h.
Referenced by Fill(), and ZONE_FILLER().
|
private |
Definition at line 223 of file zone_filler.h.
Referenced by Fill(), fillCopperZone(), fillSingleZone(), IsDebug(), and ZONE_FILLER().
|
private |
Definition at line 217 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 230 of file zone_filler.h.
Referenced by Fill(), fillCopperZone(), and refillZoneFromCache().
|
private |
Definition at line 227 of file zone_filler.h.
Referenced by fillCopperZone(), and refillZoneFromCache().
|
private |
Definition at line 215 of file zone_filler.h.
Referenced by buildCopperItemClearances(), Fill(), fillCopperZone(), fillNonCopperZone(), fillSingleZone(), GetProgressReporter(), SetProgressReporter(), and ZONE_FILLER().
|
private |
Definition at line 235 of file zone_filler.h.
Referenced by Fill(), and refillZoneFromCache().
|
private |
Definition at line 218 of file zone_filler.h.
Referenced by buildCopperItemClearances(), Fill(), knockoutThermalReliefs(), refillZoneFromCache(), ZONE_FILLER(), and zoneKnockoutMayInteract().
|
private |
Definition at line 221 of file zone_filler.h.
Referenced by ZONE_FILLER(), and zoneKnockoutMayInteract().