Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions src/gui/widgets/lens_editor.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ def _create_properties_panel(self):
self._groove_pitch_input.setRange(0.01, 10)
self._groove_pitch_input.setValue(0.5)
self._groove_pitch_input.setSuffix(" mm")
self._groove_pitch_input.valueChanged.connect(self._on_groove_pitch_changed)
self._groove_pitch_input.hide()
self._groove_pitch_label.hide()
fresnel_layout.addRow(self._groove_pitch_label, self._groove_pitch_input)
Expand Down Expand Up @@ -228,9 +229,12 @@ def _on_material_changed(self, material):
self._n_input.setValue(material_indices.get(material, 1.5))
if self._lens:
self._lens.refractive_index = self._n_input.value()
self._lens.material = material
self._update_calculated()
if self._viz_widget:
self._viz_widget.update_lens(self._lens)
self.lens_modified.emit(self._lens)
self.lens_updated.emit()

def _on_fresnel_changed(self, state):
"""Handle Fresnel checkbox change"""
Expand All @@ -249,11 +253,24 @@ def _on_fresnel_changed(self, state):

if enabled and self._lens:
self._lens.is_fresnel = True
self._lens.groove_pitch = self._groove_pitch_input.value()
self._update_groove_count()
self.lens_modified.emit(self._lens)
self.lens_updated.emit()
elif self._lens:
self._lens.is_fresnel = False
self._num_grooves_value.setText("0")
self.lens_modified.emit(self._lens)
self.lens_updated.emit()

def _on_groove_pitch_changed(self, value):
"""Handle groove pitch change"""
if self._lens and getattr(self._lens, 'is_fresnel', False):
self._lens.groove_pitch = value
self._update_groove_count()
self.lens_modified.emit(self._lens)
self.lens_updated.emit()

def _update_groove_count(self):
"""Calculate number of grooves"""
if not self._lens or not hasattr(self._lens, 'is_fresnel') or not self._lens.is_fresnel:
Expand Down
17 changes: 6 additions & 11 deletions src/lens.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,8 @@ def __init__(self,
num_grooves: Optional[int] = None,
model_glass_mode: bool = False,
model_nd: float = 1.5168,
model_vd: float = 64.17) -> None:
model_vd: float = 64.17,
use_type_defaults: bool = False) -> None:

self.id = uuid.uuid4().hex
self.name = name
Expand Down Expand Up @@ -101,11 +102,8 @@ def __init__(self,

self.lens_type = lens_type

# Only update radii if using default values and lens_type differs from default
# This preserves custom radii while allowing lens_type to set defaults when appropriate
if (radius_of_curvature_1 == DEFAULT_RADIUS_1 and
radius_of_curvature_2 == DEFAULT_RADIUS_2 and
lens_type != "Biconvex"):
# Only update radii if using type defaults
if use_type_defaults and lens_type != "Biconvex":
self._update_radii_for_type()

# Fresnel properties
Expand Down Expand Up @@ -227,13 +225,10 @@ def from_dict(cls, data: Dict[str, Any]) -> 'Lens':
num_grooves=data.get("num_grooves", None),
model_glass_mode=data.get("model_glass_mode", False),
model_nd=data.get("model_nd", 1.5168),
model_vd=data.get("model_vd", 64.17)
model_vd=data.get("model_vd", 64.17),
use_type_defaults=data.get("use_type_defaults", False)
)

# Only update radii if they match defaults and lens_type is different
if (r1 == DEFAULT_RADIUS_1 and r2 == DEFAULT_RADIUS_2 and lens_type != "Biconvex"):
lens._update_radii_for_type()

lens.id = data.get("id", lens.id)
lens.created_at = data.get("created_at", lens.created_at)
lens.modified_at = data.get("modified_at", lens.modified_at)
Expand Down