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 """
self.solder_mask_color = 'green'
""" 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 """
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'
""" Color for the markings. Currently used for documentation and to choose default colors.
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'
""" 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.
@ -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:
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))
# - 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)

View File

@ -88,7 +88,11 @@ class GS(object):
global_time_reformat = None
global_pcb_material = 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_top = None
global_silk_screen_color_bottom = None
global_pcb_finish = None
global_edge_connector = None
global_castellated_pads = None

View File

@ -49,20 +49,28 @@ class PcbDrawStyle(Optionable):
def config(self, parent):
# Apply global defaults
# PCB Material
if GS.global_pcb_material is not None:
material = GS.global_pcb_material.lower()
for mat, color in PCB_MAT_COLORS.items():
if mat in material:
self.clad = "#"+color
break
if GS.global_solder_mask_color is not None:
name = GS.global_solder_mask_color.lower()
if name in SOLDER_COLORS:
(self.copper, self.board) = SOLDER_COLORS[name]
if GS.global_silk_screen_color is not None:
name = GS.global_silk_screen_color.lower()
if name in SILK_COLORS:
self.silk = "#"+SILK_COLORS[name]
# Solder mask
if parent.bottom:
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.copper, self.board) = SOLDER_COLORS[name.lower()]
# 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:
name = GS.global_pcb_finish.lower()
for nm, color in PCB_FINISH_COLORS.items():
@ -146,6 +154,11 @@ class PcbDrawOptions(VariantOptions):
super().__init__()
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)
# Libs
if isinstance(self.libs, type):

View File

@ -85,14 +85,26 @@ class Render3DOptions(Base3DOptions):
if mat in material:
self.board = "#"+color
break
if GS.global_solder_mask_color is not None:
name = GS.global_solder_mask_color.lower()
if name in SOLDER_COLORS:
(_, self.solder_mask) = SOLDER_COLORS[name]
if GS.global_silk_screen_color is not None:
name = GS.global_silk_screen_color.lower()
if name in SILK_COLORS:
self.silk = "#"+SILK_COLORS[name]
# Pre parse the view option
bottom = False
if 'view' in self._tree:
v = self._tree['view']
bottom = isinstance(v, str) and v == 'bottom'
# Solder mask
if bottom:
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:
name = GS.global_pcb_finish.lower()
for nm, color in PCB_FINISH_COLORS.items():

View File

@ -89,6 +89,15 @@ def to_smd_tht(smd, tht):
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):
if val == 'no':
return ''
@ -475,7 +484,13 @@ class ReportOptions(BaseOptions):
def run(self, fname):
self.pcb_material = GS.global_pcb_material
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_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.edge_connector = solve_edge_connector(GS.global_edge_connector)
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}
- Layers: ${layers}
Solder mask: ${solder_mask}
- Color: ${solder_mask_color}
- Color: ${solder_mask_color_text}
Silk screen: ${silk_screen}
- Color: ${silk_screen_color}
- Color: ${silk_screen_color_text}
#?edge_connector or castellated_pads or edge_plating
Special features:

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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