Source code for kicadfiles.zone_system

"""Zone system elements for KiCad S-expressions - copper zones and keepout areas."""

from dataclasses import dataclass, field
from typing import Any, List, Optional

from .base_element import KiCadFloat, KiCadObject, OptionalFlag
from .base_types import Fill, Pts, Uuid
from .enums import HatchStyle, SmoothingStyle, ZoneFillMode, ZoneKeepoutSetting
from .primitive_graphics import Polygon


[docs] @dataclass class ConnectPads(KiCadObject): """Connect pads definition token for zones. The 'connect_pads' token defines pad connection type and clearance in the format:: (connect_pads [CONNECTION_TYPE] (clearance CLEARANCE)) Args: connection_type: Pad connection type (thru_hole_only | full | no) (optional) clearance: Pad clearance """ __token_name__ = "connect_pads" connection_type: Optional[str] = field( default=None, metadata={ "description": "Pad connection type (thru_hole_only | full | no)", "required": False, }, ) clearance: KiCadFloat = field( default_factory=lambda: KiCadFloat("clearance", 0.0), metadata={"description": "Pad clearance"}, )
[docs] @dataclass class Copperpour(KiCadObject): """Copper pour definition token. The 'copperpour' token defines copper pour properties in the format:: (copperpour VALUE) where VALUE can be: not_allowed, allowed Args: value: Copper pour setting """ __token_name__ = "copperpour" value: ZoneKeepoutSetting = field( default=ZoneKeepoutSetting.NOT_ALLOWED, metadata={"description": "Copper pour setting"}, )
[docs] @dataclass class FillSegments(KiCadObject): """Fill segments definition token. The 'fill_segments' token defines zone fill segments in the format:: (fill_segments ...) Args: segments: List of fill segments """ __token_name__ = "fill_segments" segments: List[Any] = field( default_factory=list, metadata={"description": "List of fill segments"} )
[docs] @dataclass class FilledPolygon(KiCadObject): """Filled polygon definition token. The 'filled_polygon' token defines the polygons used to fill the zone in the format:: (filled_polygon (layer LAYER_DEFINITION) COORDINATE_POINT_LIST ) Args: layer: Layer the zone fill resides on pts: List of polygon X/Y coordinates used to fill the zone """ __token_name__ = "filled_polygon" layer: str = field( default="", metadata={"description": "Layer the zone fill resides on"} ) pts: Pts = field( default_factory=lambda: Pts(), metadata={ "description": "List of polygon X/Y coordinates used to fill the zone" }, )
[docs] @dataclass class FilledSegments(KiCadObject): """Filled segments definition token. The 'filled_segments' token defines segments used to fill the zone in the format:: (fill_segments (layer LAYER_DEFINITION) COORDINATED_POINT_LIST ) Args: layer: Layer the zone fill resides on segments: List of X and Y coordinates of segments used to fill the zone """ __token_name__ = "filled_segments" layer: str = field( default="", metadata={"description": "Layer the zone fill resides on"} ) segments: List[Pts] = field( default_factory=list, metadata={ "description": "List of X and Y coordinates of segments used to fill the zone" }, )
[docs] @dataclass class Hatch(KiCadObject): """Zone hatch display definition token. The 'hatch' token defines zone outline display style and pitch in the format:: (hatch STYLE PITCH) Args: style: Hatch display style pitch: Hatch pitch distance """ __token_name__ = "hatch" style: HatchStyle = field( default=HatchStyle.EDGE, metadata={"description": "Hatch display style"}, ) pitch: float = field(default=0.5, metadata={"description": "Hatch pitch distance"})
[docs] @dataclass class HatchOrientation(KiCadObject): """Hatch orientation definition token. The 'hatch_orientation' token defines the angle for hatch lines in the format:: (hatch_orientation ANGLE) Args: angle: Hatch line angle in degrees """ __token_name__ = "hatch_orientation" angle: KiCadFloat = field( default_factory=lambda: KiCadFloat("angle", 0.0), metadata={"description": "Hatch line angle in degrees"}, )
# Zone Fill Elements
[docs] @dataclass class Keepout(KiCadObject): """Keepout zone definition token. The 'keepout' token defines which objects should be kept out of the zone in the format:: (keepout (tracks KEEPOUT) (vias KEEPOUT) (pads KEEPOUT) (copperpour KEEPOUT) (footprints KEEPOUT) ) Args: tracks: Whether tracks should be excluded (allowed | not_allowed) vias: Whether vias should be excluded (allowed | not_allowed) pads: Whether pads should be excluded (allowed | not_allowed) copperpour: Whether copper pours should be excluded (allowed | not_allowed) footprints: Whether footprints should be excluded (allowed | not_allowed) """ __token_name__ = "keepout" tracks: ZoneKeepoutSetting = field( default=ZoneKeepoutSetting.NOT_ALLOWED, metadata={ "description": "Whether tracks should be excluded (allowed | not_allowed)" }, ) vias: ZoneKeepoutSetting = field( default=ZoneKeepoutSetting.NOT_ALLOWED, metadata={ "description": "Whether vias should be excluded (allowed | not_allowed)" }, ) pads: ZoneKeepoutSetting = field( default=ZoneKeepoutSetting.NOT_ALLOWED, metadata={ "description": "Whether pads should be excluded (allowed | not_allowed)" }, ) copperpour: ZoneKeepoutSetting = field( default=ZoneKeepoutSetting.NOT_ALLOWED, metadata={ "description": "Whether copper pours should be excluded (allowed | not_allowed)" }, ) footprints: ZoneKeepoutSetting = field( default=ZoneKeepoutSetting.NOT_ALLOWED, metadata={ "description": "Whether footprints should be excluded (allowed | not_allowed)" }, )
[docs] @dataclass class Mode(KiCadObject): """Fill mode definition token. The 'mode' token defines the zone fill mode in the format:: (mode MODE) Args: mode: Fill mode """ __token_name__ = "mode" mode: ZoneFillMode = field( default=ZoneFillMode.SOLID, metadata={"description": "Fill mode"} )
[docs] @dataclass class Smoothing(KiCadObject): """Zone smoothing definition token. The 'smoothing' token defines corner smoothing style in the format:: (smoothing STYLE) Args: style: Corner smoothing style """ __token_name__ = "smoothing" style: SmoothingStyle = field( default=SmoothingStyle.NONE, metadata={"description": "Corner smoothing style"}, )
[docs] @dataclass class Zone(KiCadObject): """Zone definition token. The 'zone' token defines a zone on the board or footprint in the format:: (zone (net NET_NUMBER) (net_name "NET_NAME") (layer LAYER_DEFINITION) (uuid UUID) [(name "NAME")] (hatch STYLE PITCH) [(priority PRIORITY)] (connect_pads [CONNECTION_TYPE] (clearance CLEARANCE)) (min_thickness THICKNESS) [(filled_areas_thickness no)] [ZONE_KEEPOUT_SETTINGS] ZONE_FILL_SETTINGS (polygon COORDINATE_POINT_LIST) [ZONE_FILL_POLYGONS...] [ZONE_FILL_SEGMENTS...] ) Args: hatch: Hatch settings connect_pads: Pad connection settings fill: Fill settings polygon: Zone outline polygon net: Net number net_name: Net name layer: Layer name uuid: Unique identifier min_thickness: Minimum thickness name: Zone name (optional) priority: Zone priority (optional) filled_areas_thickness: Filled areas thickness flag (optional) keepout: Keepout settings (optional) filled_polygons: List of fill polygons (optional) filled_segments: List of fill segments (optional) """ __token_name__ = "zone" # Required fields (no defaults) first hatch: Hatch = field( default_factory=lambda: Hatch(), metadata={"description": "Hatch settings"} ) connect_pads: "ConnectPads" = field( default_factory=lambda: ConnectPads(), metadata={"description": "Pad connection settings"}, ) fill: Fill = field( default_factory=lambda: Fill(), metadata={"description": "Fill settings"} ) polygon: Polygon = field( default_factory=lambda: Polygon(), metadata={"description": "Zone outline polygon"}, ) # Fields with defaults second net: int = field(default=0, metadata={"description": "Net number"}) net_name: str = field(default="", metadata={"description": "Net name"}) layer: str = field(default="", metadata={"description": "Layer name"}) uuid: Uuid = field( default_factory=lambda: Uuid(), metadata={"description": "Unique identifier"} ) min_thickness: float = field( default=0.0, metadata={"description": "Minimum thickness"} ) # Optional fields (defaults to None) last name: Optional[str] = field( default=None, metadata={"description": "Zone name", "required": False} ) priority: Optional[int] = field( default=None, metadata={"description": "Zone priority", "required": False} ) filled_areas_thickness: Optional[OptionalFlag] = field( default_factory=lambda: OptionalFlag.create_bool_flag("filled_areas_thickness"), metadata={"description": "Filled areas thickness flag", "required": False}, ) keepout: Optional[Keepout] = field( default=None, metadata={"description": "Keepout settings", "required": False} ) filled_polygons: Optional[List[FilledPolygon]] = field( default_factory=list, metadata={"description": "List of fill polygons", "required": False}, ) filled_segments: Optional[List[FilledSegments]] = field( default_factory=list, metadata={"description": "List of fill segments", "required": False}, )