7.3 Example — Doublet Lens 3D Color
PDF section 7.3. Source script: KrakenOS/Examples/Examp_Doublet_Lens_3Dcolor.py.
Same achromatic doublet as 7.1 Example — Ray, but assigns per-surface
Color values to illustrate the 3D viewer’s display options. A fan of
rays at three wavelengths (0.4, 0.5, 0.6 µm) is traced to show the
chromatic colouring of the rays alongside the coloured surfaces.
Figure 10. Doublet view with a custom colour assigned to each surface.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Examp Doublet Lens 3D color"""
import numpy as np
from importlib import metadata
""" Looking for if KrakenOS is installed, if not, it assumes that
an folder downloaded from github is run"""
required = {'KrakenOS'}
installed = {dist.metadata["Name"] for dist in metadata.distributions() if dist.metadata.get("Name")}
missing = {pkg for pkg in required if pkg not in installed}
if missing:
print("Not installed")
import sys
sys.path.append("../..")
import KrakenOS as Kos
# _________________________________________#
P_Obj = Kos.surf()
P_Obj.Rc = 0.0
P_Obj.Thickness = 10
P_Obj.Glass = "AIR"
P_Obj.Diameter = 30.0
# _________________________________________#
L1a = Kos.surf()
L1a.Rc = 9.284706570002484E+001
L1a.Thickness = 6.0
L1a.Glass = "BK7"
L1a.Diameter = 30.0
L1a.Axicon = 0
L1a.Color = [.8, .7, .4]
# _________________________________________#
L1b = Kos.surf()
L1b.Rc = -3.071608670000159E+001
L1b.Thickness = 3.0
L1b.Glass = "F2"
L1b.Diameter = 30
L1b.Color = [.7, .4, .4]
# _________________________________________#
L1c = Kos.surf()
L1c.Rc = -7.819730726078505E+001
L1c.Thickness = 9.737604742910693E+001
L1c.Glass = "AIR"
L1c.Diameter = 30
# _________________________________________#
P_Ima = Kos.surf()
P_Ima.Rc = 0.0
P_Ima.Thickness = 0.0
P_Ima.Glass = "AIR"
P_Ima.Diameter = 100.0
P_Ima.Name = "Plano imagen"
# _________________________________________#
A = [P_Obj, L1a, L1b, L1c, P_Ima]
configuracion_1 = Kos.Setup()
# _________________________________________#
Doblete = Kos.system(A, configuracion_1)
Rayos = Kos.raykeeper(Doblete)
# _________________________________________#
tam = 5
rad = 10.0
tsis = len(A) - 1
for i in range(-tam, tam + 1):
for j in range(-tam, tam + 1):
x_0 = (i / tam) * rad
y_0 = (j / tam) * rad
r = np.sqrt((x_0 * x_0) + (y_0 * y_0))
if r < rad:
tet = 0.0
pSource_0 = [x_0, y_0, 0.0]
dCos = [0.0, np.sin(np.deg2rad(tet)), np.cos(np.deg2rad(tet))]
W = 0.4
Doblete.Trace(pSource_0, dCos, W)
Rayos.push()
W = 0.5
Doblete.Trace(pSource_0, dCos, W)
Rayos.push()
W = 0.6
Doblete.Trace(pSource_0, dCos, W)
Rayos.push()
# _________________________________________#
Kos.display3d(Doblete, Rayos, 1,BackgCol="Blue")