# -*- coding: utf-8 -*- # Copyright (c) 2022 Salvador E. Tropea # Copyright (c) 2022 Instituto Nacional de TecnologĂ­a Industrial # License: GPL-3.0 # Project: KiBot (formerly KiPlot) from .error import KiPlotConfigurationError from .gs import (GS) from .kiplot import load_sch from .misc import W_NOANNO from .macros import macros, pre_class # noqa: F401 from .log import get_logger logger = get_logger(__name__) @pre_class class Annotate_Power(BasePreFlight): # noqa: F821 """ [boolean=false] Annotates all power components. This preflight modifies the schematic, use it only in revision control environments. Used to solve ERC problems when using filters that remove power reference numbers """ def __init__(self, name, value): super().__init__(name, value) if not isinstance(value, bool): raise KiPlotConfigurationError('must be boolean') self._enabled = value self._sch_related = True def annotate_ki5(self): """ Annotate power components for KiCad 5 """ comps = GS.sch.get_components(exclude_power=False) num = 1 for c in comps: if c.is_power: # Force a new number c.ref = c.f_ref = c.ref_prefix+'{:02d}'.format(num) c.ref_suffix = str(num) num = num+1 # Fix the ARs if c.ar: first = True for o in c.ar: if first: # Copy this to the first o.ref = c.ref first = False else: # Allocate new numbers for the rest o.ref = c.ref_prefix+'{:02d}'.format(num) num = num+1 # Fix the reference field field = next(filter(lambda x: x.number == 0, c.fields), None) if field: field.value = c.ref def annotate_ki6(self): """ Annotate power components for KiCad 6 """ num = 1 for ins in GS.sch.symbol_instances: c = ins.component if c.is_power: c.set_ref(c.ref_prefix+'{:02d}'.format(num)) num = num+1 def run(self): load_sch() if not GS.sch: return if not GS.sch.annotation_error: logger.warning(W_NOANNO+"No annotation problems, skipping power annotation") return if GS.ki5: self.annotate_ki5() else: self.annotate_ki6() GS.sch.save()