Added support for different top/bottom PCB colors

- Solder mask
- Silk screen
This commit is contained in:
Salvador E. Tropea 2022-01-17 16:02:09 -03:00
parent 204fb985fe
commit 46d5d9ad65
12 changed files with 104 additions and 29 deletions

View File

@ -45,10 +45,23 @@ class Globals(FiltersOptions):
Currently known are FR1 to FR5 """ Currently known are FR1 to FR5 """
self.solder_mask_color = 'green' self.solder_mask_color = 'green'
""" Color for the solder mask. Currently used for documentation and to choose default colors. """ Color for the solder mask. Currently used for documentation and to choose default colors.
KiCad 6: you should set this in the Board Setup -> Physical Stackup.
Currently known are green, black, white, yellow, purple, blue and red """ Currently known are green, black, white, yellow, purple, blue and red """
self.solder_mask_color_top = ''
""" Color for the top solder mask. When not defined `solder_mask_color` is used.
Read `solder_mask_color` help """
self.solder_mask_color_bottom = ''
""" Color for the bottom solder mask. When not defined `solder_mask_color` is used.
Read `solder_mask_color` help """
self.silk_screen_color = 'white' self.silk_screen_color = 'white'
""" Color for the markings. Currently used for documentation and to choose default colors. """ Color for the markings. Currently used for documentation and to choose default colors.
Currently known are black and white """ Currently known are black and white """
self.silk_screen_color_top = ''
""" Color for the top silk screen. When not defined `silk_screen_color` is used.
Read `silk_screen_color` help """
self.silk_screen_color_bottom = ''
""" Color for the bottom silk screen. When not defined `silk_screen_color` is used.
Read `silk_screen_color` help """
self.pcb_finish = 'HAL' self.pcb_finish = 'HAL'
""" Finishing used to protect pads. Currently used for documentation and to choose default colors. """ Finishing used to protect pads. Currently used for documentation and to choose default colors.
KiCad 6: you should set this in the Board Setup -> Board Finish -> Copper Finish option. KiCad 6: you should set this in the Board Setup -> Board Finish -> Copper Finish option.
@ -135,6 +148,23 @@ class Globals(FiltersOptions):
if GS.global_kiauto_wait_start and int(GS.global_kiauto_wait_start) != GS.global_kiauto_wait_start: if GS.global_kiauto_wait_start and int(GS.global_kiauto_wait_start) != GS.global_kiauto_wait_start:
GS.global_kiauto_wait_start = int(GS.global_kiauto_wait_start) GS.global_kiauto_wait_start = int(GS.global_kiauto_wait_start)
logger.warning(W_MUSTBEINT+'kiauto_wait_start must be integer, truncating to '+str(GS.global_kiauto_wait_start)) logger.warning(W_MUSTBEINT+'kiauto_wait_start must be integer, truncating to '+str(GS.global_kiauto_wait_start))
# - Solder mask
if GS.global_solder_mask_color_top and GS.global_solder_mask_color_bottom:
# Top and bottom defined, use the top as general
GS.global_solder_mask_color = GS.global_solder_mask_color_top
else:
if not GS.global_solder_mask_color_top:
GS.global_solder_mask_color_top = GS.global_solder_mask_color
if not GS.global_solder_mask_color_bottom:
GS.global_solder_mask_color_bottom = GS.global_solder_mask_color
# - Silk screen
if GS.global_silk_screen_color_top and GS.global_silk_screen_color_bottom:
GS.global_silk_screen_color = GS.global_silk_screen_color_top
else:
if not GS.global_silk_screen_color_top:
GS.global_silk_screen_color_top = GS.global_silk_screen_color
if not GS.global_silk_screen_color_bottom:
GS.global_silk_screen_color_bottom = GS.global_silk_screen_color
set_filters(self.unparsed) set_filters(self.unparsed)

View File

@ -88,7 +88,11 @@ class GS(object):
global_time_reformat = None global_time_reformat = None
global_pcb_material = None global_pcb_material = None
global_solder_mask_color = None global_solder_mask_color = None
global_solder_mask_color_top = None
global_solder_mask_color_bottom = None
global_silk_screen_color = None global_silk_screen_color = None
global_silk_screen_color_top = None
global_silk_screen_color_bottom = None
global_pcb_finish = None global_pcb_finish = None
global_edge_connector = None global_edge_connector = None
global_castellated_pads = None global_castellated_pads = None

View File

@ -49,20 +49,28 @@ class PcbDrawStyle(Optionable):
def config(self, parent): def config(self, parent):
# Apply global defaults # Apply global defaults
# PCB Material
if GS.global_pcb_material is not None: if GS.global_pcb_material is not None:
material = GS.global_pcb_material.lower() material = GS.global_pcb_material.lower()
for mat, color in PCB_MAT_COLORS.items(): for mat, color in PCB_MAT_COLORS.items():
if mat in material: if mat in material:
self.clad = "#"+color self.clad = "#"+color
break break
if GS.global_solder_mask_color is not None: # Solder mask
name = GS.global_solder_mask_color.lower() if parent.bottom:
if name in SOLDER_COLORS: name = GS.global_solder_mask_color_bottom or GS.global_solder_mask_color
(self.copper, self.board) = SOLDER_COLORS[name] else:
if GS.global_silk_screen_color is not None: name = GS.global_solder_mask_color_top or GS.global_solder_mask_color
name = GS.global_silk_screen_color.lower() if name and name.lower() in SOLDER_COLORS:
if name in SILK_COLORS: (self.copper, self.board) = SOLDER_COLORS[name.lower()]
self.silk = "#"+SILK_COLORS[name] # Silk screen
if parent.bottom:
name = GS.global_silk_screen_color_bottom or GS.global_silk_screen_color
else:
name = GS.global_silk_screen_color_top or GS.global_silk_screen_color
if name and name.lower() in SILK_COLORS:
self.silk = "#"+SILK_COLORS[name.lower()]
# PCB Finish
if GS.global_pcb_finish is not None: if GS.global_pcb_finish is not None:
name = GS.global_pcb_finish.lower() name = GS.global_pcb_finish.lower()
for nm, color in PCB_FINISH_COLORS.items(): for nm, color in PCB_FINISH_COLORS.items():
@ -146,6 +154,11 @@ class PcbDrawOptions(VariantOptions):
super().__init__() super().__init__()
def config(self, parent): def config(self, parent):
# Pre-parse the bottom option
if 'bottom' in self._tree:
bot = self._tree['bottom']
if isinstance(bot, bool):
self.bottom = bot
super().config(parent) super().config(parent)
# Libs # Libs
if isinstance(self.libs, type): if isinstance(self.libs, type):

View File

@ -85,14 +85,26 @@ class Render3DOptions(Base3DOptions):
if mat in material: if mat in material:
self.board = "#"+color self.board = "#"+color
break break
if GS.global_solder_mask_color is not None: # Pre parse the view option
name = GS.global_solder_mask_color.lower() bottom = False
if name in SOLDER_COLORS: if 'view' in self._tree:
(_, self.solder_mask) = SOLDER_COLORS[name] v = self._tree['view']
if GS.global_silk_screen_color is not None: bottom = isinstance(v, str) and v == 'bottom'
name = GS.global_silk_screen_color.lower() # Solder mask
if name in SILK_COLORS: if bottom:
self.silk = "#"+SILK_COLORS[name] name = GS.global_solder_mask_color_bottom or GS.global_solder_mask_color
else:
name = GS.global_solder_mask_color_top or GS.global_solder_mask_color
if name and name.lower() in SOLDER_COLORS:
(_, self.solder_mask) = SOLDER_COLORS[name.lower()]
# Silk screen
if bottom:
name = GS.global_silk_screen_color_bottom or GS.global_silk_screen_color
else:
name = GS.global_silk_screen_color_top or GS.global_silk_screen_color
if name and name.lower() in SILK_COLORS:
self.silk = "#"+SILK_COLORS[name.lower()]
# PCB finish
if GS.global_pcb_finish is not None: if GS.global_pcb_finish is not None:
name = GS.global_pcb_finish.lower() name = GS.global_pcb_finish.lower()
for nm, color in PCB_FINISH_COLORS.items(): for nm, color in PCB_FINISH_COLORS.items():

View File

@ -89,6 +89,15 @@ def to_smd_tht(smd, tht):
return "NONE" return "NONE"
def to_top_bottom_color(front, bottom):
""" Returns a text indicating the top/bottom colors """
f = front.strip().lower()
b = bottom.strip().lower()
if f == b:
return front.capitalize()
return "Top: "+front.capitalize()+" / Bottom: "+bottom.capitalize()
def solve_edge_connector(val): def solve_edge_connector(val):
if val == 'no': if val == 'no':
return '' return ''
@ -475,7 +484,13 @@ class ReportOptions(BaseOptions):
def run(self, fname): def run(self, fname):
self.pcb_material = GS.global_pcb_material self.pcb_material = GS.global_pcb_material
self.solder_mask_color = GS.global_solder_mask_color self.solder_mask_color = GS.global_solder_mask_color
self.solder_mask_color_top = GS.global_solder_mask_color_top
self.solder_mask_color_bottom = GS.global_solder_mask_color_bottom
self.solder_mask_color_text = to_top_bottom_color(GS.global_solder_mask_color_top, GS.global_solder_mask_color_bottom)
self.silk_screen_color = GS.global_silk_screen_color self.silk_screen_color = GS.global_silk_screen_color
self.silk_screen_color_top = GS.global_silk_screen_color_top
self.silk_screen_color_bottom = GS.global_silk_screen_color_bottom
self.silk_screen_color_text = to_top_bottom_color(GS.global_silk_screen_color_top, GS.global_silk_screen_color_bottom)
self.pcb_finish = GS.global_pcb_finish self.pcb_finish = GS.global_pcb_finish
self.edge_connector = solve_edge_connector(GS.global_edge_connector) self.edge_connector = solve_edge_connector(GS.global_edge_connector)
self.castellated_pads = GS.global_castellated_pads self.castellated_pads = GS.global_castellated_pads

View File

@ -7,9 +7,9 @@ Board size: ${bb_w_mm}x${bb_h_mm} mm (${bb_w_in}x${bb_h_in} inches)
- Finish: ${pcb_finish} - Finish: ${pcb_finish}
- Layers: ${layers} - Layers: ${layers}
Solder mask: ${solder_mask} Solder mask: ${solder_mask}
- Color: ${solder_mask_color} - Color: ${solder_mask_color_text}
Silk screen: ${silk_screen} Silk screen: ${silk_screen}
- Color: ${silk_screen_color} - Color: ${silk_screen_color_text}
#?edge_connector or castellated_pads or edge_plating #?edge_connector or castellated_pads or edge_plating
Special features: Special features:

View File

@ -26,11 +26,11 @@ Materials:
Solder mask: Solder mask:
- ${solder_mask} - ${solder_mask}
- ${solder_mask_color} - ${solder_mask_color_text}
Marking: Marking:
- ${silk_screen} screen printing - ${silk_screen} screen printing
- Silk: ${silk_screen_color} - Silk: ${silk_screen_color_text}
Other markings: Other markings:
- ROHS / UL / Date - Yes if available - ROHS / UL / Date - Yes if available

View File

@ -7,9 +7,9 @@ Board size: 59.69x48.26 mm (2.35x1.9 inches)
- Finish: ENIG - Finish: ENIG
- Layers: 4 - Layers: 4
Solder mask: TOP / BOTTOM Solder mask: TOP / BOTTOM
- Color: blue - Color: Top: Blue / Bottom: Red
Silk screen: TOP / BOTTOM Silk screen: TOP / BOTTOM
- Color: white - Color: White
# Important sizes # Important sizes

View File

@ -18,11 +18,11 @@ Materials:
Solder mask: Solder mask:
- TOP / BOTTOM - TOP / BOTTOM
- blue - Top: Blue / Bottom: Red
Marking: Marking:
- TOP / BOTTOM screen printing - TOP / BOTTOM screen printing
- Silk: white - Silk: White
Other markings: Other markings:
- ROHS / UL / Date - Yes if available - ROHS / UL / Date - Yes if available

View File

@ -7,9 +7,9 @@ Board size: 59.69x48.26 mm (2.35x1.9 inches)
- Finish: ENIG - Finish: ENIG
- Layers: 4 - Layers: 4
Solder mask: TOP / BOTTOM Solder mask: TOP / BOTTOM
- Color: blue - Color: Top: Blue / Bottom: Red
Silk screen: TOP / BOTTOM Silk screen: TOP / BOTTOM
- Color: white - Color: White
Special features: Special features:
- Edge connector: yes, bevelled - Edge connector: yes, bevelled

View File

@ -22,11 +22,11 @@ Materials:
Solder mask: Solder mask:
- TOP / BOTTOM - TOP / BOTTOM
- blue - Top: Blue / Bottom: Red
Marking: Marking:
- TOP / BOTTOM screen printing - TOP / BOTTOM screen printing
- Silk: white - Silk: White
Other markings: Other markings:
- ROHS / UL / Date - Yes if available - ROHS / UL / Date - Yes if available

View File

@ -3,7 +3,8 @@ kibot:
version: 1 version: 1
global: global:
solder_mask_color: blue solder_mask_color_top: blue
solder_mask_color_bottom: red
pcb_finish: ENIG pcb_finish: ENIG
outputs: outputs: