project op• Data kinds: mesh × points → table
• Call: import fullseye as fs; fs.ledger.cad_surface_to_pixel(mesh, points, K=None, R=None, t=None, image_size=None, cull_backfaces=True, depth_tol=1e-06, strict=False) (implementation को सीधे call करना हो तो import cadmap; cadmap.cad_surface_to_pixel(mesh, points, K=None, R=None, t=None, image_size=None, cull_backfaces=True, depth_tol=1e-06, strict=False), registry से लेना हो तो opscadmap.get("cad_surface_to_pixel"))
3-D point (N,3) → pixel + visibility (occluded, पीछे की ओर वाले face और frame से बाहर को अलग-अलग लौटाता है)।
camera.project_points से project करने के बाद, उसी pixel पर फिर से ray भेजकर जाँचता है कि सामने कोई दूसरा face तो नहीं है। ऐसा न करने पर छिपे हुए point के pixel coordinates ऐसे लौट जाते मानो "वह वहाँ दिख रहा है"। return एक dict है:
• uv (N,2) -- pixel (u=column, v=row)। depth <= 0 वाले points के लिए भी projected value लौटता है, लेकिन in_front = False set होता है।
• depth (N,) -- camera coordinate Z।
• in_front (N,) bool -- depth > 0।
• in_image (N,) bool -- image frame के अंदर (0 <= u <= width-1 और 0 <= v <= height-1)।
• occluded (N,) bool -- उसी line of sight पर, उस point से आगे कोई face है।
• occluder_face (N,) int64 -- रोकने वाला face। न हो तो -1।
• visible (N,) bool -- in_front & in_image & ~occluded।
• camera वास्तव में इस्तेमाल हुआ camera।
• winding_fixed bool -- क्या अंदर की ओर wound closed mesh पहचानकर ठीक किया गया।
depth_tol एक relative tolerance है ताकि "अपने ही face से छिप गया" ऐसा गलत निर्णय न हो; occluded तब माना जाता है जब z_hit < depth * (1 - depth_tol) - depth_tol हो। closed mesh के पीछे की ओर वाले points सामने की दीवार से छिपकर occluded = True हो जाते हैं -- यह specification है, चूक नहीं।
occlusion जाँच winding direction पर निर्भर करती है (यदि सामने की दीवार back face के रूप में cull हो जाए, तो पीछे के points भी visible हो जाते हैं)। इसलिए cull_backfaces=True में अंदर की ओर wound closed mesh पहचाना जाता है, और default रूप से winding ठीक करके winding_fixed=True लौटाया जाता है। strict=True पर ValueError, और cull_backfaces=False पर जाँच ही नहीं होती (विवरण के लिए _orient_for_culling)।
• 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 में दिए गए हैं।
• defect_to_cad — py -3.11 examples/defect_to_cad.py
table को input के रूप में लेते हैं)—
project)—
*Provenance: cadmap.py — CADMAP operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.