drawing op• Data kinds: table → table
• Call: import fullseye as fs; fs.ledger.lens_section_drawing(system, fields=None, rays=3, lead_mm=None, edge_margin_pct=5.0, scale=None, profile_points=121, title=None) (implementation को सीधे call करना हो तो import optdraw; optdraw.lens_section_drawing(system, fields=None, rays=3, lead_mm=None, edge_margin_pct=5.0, scale=None, profile_points=121, title=None), registry से लेना हो तो opsoptics.get("lens_section_drawing"))
लेंस का meridional अनुप्रस्थ-काट (table, drawing dict) — prescription की सतहें, किनारे, stop और image plane, field के अनुसार रंगी असली किरणें और आयाम।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
*system* は raytrace.lens_system の処方。*fields* は視野の列(物体が無限遠なら度、有限なら物体の高さ mm、既定は処方の field を F として (0, 0.7F, F)、F = 0 なら軸上だけ)、*rays* は視野ごとに描く光線の本数(絞りの上で等間隔、両端は口径の縁、1 なら主光線だけ)。光線は絞りを狙って実光線で追跡する(割線法で絞りの上の高さを合わせる)ので、入射瞳が無限遠の物体側テレセンでも描ける。面の形は raytrace の sag の式(円錐 + 偶数次の非球面)、面の有効半径は面の ap、無ければ全視野の子午面の実光線(視野あたり 21 本)の最大の高さ。コバ(レンズの外周)は有効半径の最大に *edge_margin_pct* % を足した半径で、有効半径の外は平らな座で描く(光学設計ソフトの断面図と同じ作法)。
寸法線: BFL(最終面 → 後側焦点 F′)・EFL(後側主点 H′ → F′)・全長(第 1 面 → 像面)・像高(最大視野の主光線)。処方表(面ごとの R・間隔・n_d・ν_d)と諸元(EFL・BFL・F 値・全長・視野・波長)を文字で書く。*scale* は紙の mm / 実物の mm(既定は ISO 5455 の推奨尺度から幅 250 mm に収まる最大)。
返り値: {"kind": "optdraw", "entities", "dimensions", "values", "meta", "scale", "frame"}。values は図に書いた数の正本(efl / bfl / total_track / image_height / fno / 面ごとの vertex_z semi_diameter / 光線ごとの面上の交点 rays)。drawing_svg / drawing_dxf で書き出す。平面の R は lens_system の規約どおり inf、無焦点の系(両側テレセン)の efl / bfl も inf (非有限は契約。図には描かず、描かなかった寸法の名前を dimensions_skipped に残す)。鏡・傾き・偏心のある処方(と raytrace3d.noncoaxial_system の系)は noncoaxial_drawing に回す(折り返した系の断面図)。★縁の厚さが負になる処方は ValueError。
optics के सभी ops गणना से पहले input की जाँच करते हैं (कुछ भी चुपचाप पास नहीं होता):
• Unit argument के नाम में ही लिखी होती है — _mm / _um / _deg / _mrad। mm और µm की गड़बड़ी crash नहीं करती, बल्कि "सही दिखने वाला पर गलत उत्तर" देती है, इसलिए नाम से इसे रोका जाता है। मान के आकार से unit का अनुमान बिल्कुल नहीं लगाया जाता।
• String से ValueError — float('50') सफल हो जाता है, इसलिए बिना parse किया config value length के रूप में निकल जाता (मापा गया: thin_lens('50', '200') सही दिखने वाला 66.667 mm लौटा रहा था)। bool को भी True == 1 वाले implicit promotion के रूप में अस्वीकार किया जाता है।
• complex / masked array से ValueError (केवल real-valued slots; imaginary part को चुपचाप छोड़ना या mask हटाना अस्वीकार)। हर input पर NaN/Inf से ValueError।
• शून्य से भाग और उससे जुड़े मामलों को नाम लेकर अस्वीकार किया जाता है: focal length 0, radius of curvature 0, refractive index <= 0, पूरी तरह opaque aperture (सब 0, इसलिए normalisation 0/0), ऐसा PSF जिसका योग <= 0 हो, S0 = 0 वाला Stokes vector, और front focal point पर रखा object (image अनंत पर)।
• केवल 2 ops non-finite value लौटाते हैं, और वह भी contract के रूप में लिखा हुआ: depth_of_field hyperfocal distance से आगे far_mm = inf (hyperfocal distance की परिभाषा यही है) और gaussian_beam waist पर wavefront_radius_mm = inf (plane wavefront की radius of curvature)। दोनों साथ में एक finite साथी (far_is_infinite / curvature_per_mm) भी लौटाते हैं। इसके अलावा कोई भी चुपचाप आया NaN/Inf अंदर ही पकड़ा जाता है और ValueError देता है — "float64 overflow हुआ" और "उत्तर अनंत है" अलग-अलग दावे हैं, इसलिए पहले को दूसरे का चेहरा पहनाकर नहीं लौटाया जाता।
• Size की सीमा: generate होने वाले grid के लिए optics.MAX_GRID (4096), दिए गए field/PSF/aperture के लिए optics.MAX_FIELD_ELEMENTS (2^24), ABCD element chain के लिए optics.MAX_SYSTEM_ELEMENTS (1024), Zernike के लिए MAX_ZERNIKE_TERMS (512) / MAX_ZERNIKE_ORDER (40) / MAX_ZERNIKE_BASIS (2^25)। छोटे argument से बहुत बड़ा internal allocation होने वाले रास्तों (मापा गया: n_max=40 × 4096² पर 108 GB) को fail-closed ढंग से बंद किया गया है।
• भौतिक रूप से असंभव states भी अस्वीकार: degree of polarisation > 1 वाला Stokes vector, ऋणात्मक transmittance, ऋणात्मक intensity, और n-|m| odd जैसे अमान्य Zernike indices।
• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।
• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।
• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।
• poc_optics_drawings — py -3.11 examples/poc_optics_drawings.py
table को input के रूप में लेते हैं)abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd
drawing)vision_setup_drawing · lens_element_drawing · drawing_svg · drawing_dxf · drawing_raster · svg_entities · dxf_entities · noncoaxial_drawing
*Provenance: optdraw.py — OPTICS operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.