Skip to content

Commit

Permalink
Rendering jobs solder fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
marcelnowicki committed Jan 28, 2025
1 parent c66afdd commit 10ac50d
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 1 deletion.
5 changes: 5 additions & 0 deletions src/pcbooth/jobs/highlights.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,11 +87,16 @@ def get_component_lists(
Get list of components to highlight (HIGHLIGHTED list of designators or all components present if not PCB) and
list of components to hide (HIDDEN list of designators and all linked objects).
"""

rendered = set(dict.fromkeys(self.studio.top_components + self.studio.bottom_components))
linked = {object for object in cu.get_linked() if not is_background(object)}
hidden = {component for component in rendered if is_hidden(component, self.studio.is_pcb)} | linked
highlighted = {component for component in rendered if is_highlighted(component, self.studio.is_pcb)} - hidden

if self.studio.is_pcb: # hide PCB model solder object if present
if solder := bpy.data.objects.get("Solder", None):
hidden.add(solder)

if not highlighted:
logger.warning("No highlighted components found!")
return highlighted, hidden
Expand Down
19 changes: 18 additions & 1 deletion src/pcbooth/jobs/stackup.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@
import pcbooth.modules.job_utilities as ju
import logging
import re
from typing import List
from typing import List, Generator, Any
from mathutils import Vector
from contextlib import contextmanager


logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -56,6 +57,8 @@ def iterate(self) -> None:
background = self.studio.backgrounds[0]
camera = self.studio.cameras[0]
components = self.studio.bottom_components + self.studio.top_components
if solder := bpy.data.objects.get("Solder", None): # hide PCB model solder object if present
components.append(solder)
self.studio.change_position(position)
Background.use(background)
camera.change_position(position)
Expand All @@ -64,6 +67,7 @@ def iterate(self) -> None:
ju.position_override(layers, move_layers, self.studio.rendered_obj),
ju.shadow_override(layers),
camera.dof_override(),
solder_switch_override(),
):
with ju.hide_override(components, hide_viewport=True):
camera.frame_selected(self.studio.rendered_obj)
Expand Down Expand Up @@ -97,3 +101,16 @@ def move_layers(layers: List[bpy.types.Object]) -> None:
if i == 0:
continue
layer.delta_location = i * offset


@contextmanager
def solder_switch_override() -> Generator[None, Any, None]:
"""Context manager for temporarily overriding the Solder Switch node in the PCB's main material during stackup rendering."""
try:
solder_switch_node = bpy.data.node_groups["Color_group"].nodes["Solder_Switch"]
solder_switch_node.inputs[0].default_value = 1.0 # type: ignore
yield
except (AttributeError, RuntimeError, KeyError):
pass
finally:
solder_switch_node.inputs[0].default_value = 0.0 # type: ignore

0 comments on commit 10ac50d

Please sign in to comment.