"""Nur der 3D->2D-Projektionshelfer aus CamSplitters grid_math (Rest nicht gebraucht)."""

from mathutils import Vector


def location_3d_to_region_2d(region, rv3d, coord):
    """Konvertiert 3D-Weltkoordinaten in 2D-Viewport-Koordinaten.

    Punkte **hinter** dem Betrachter haben ein negatives ``w``. Wer dort
    trotzdem teilt, bekommt keine Fehlermeldung, sondern eine am Ursprung
    gespiegelte Position — eine Zahl, die aussieht wie ein gueltiges Ergebnis.
    Objektrahmen und Beschriftungen tauchten dadurch fuer Dinge auf, die hinter
    der Kamera liegen, und zwar an voellig falscher Stelle. Blenders eigenes
    ``view3d_utils.location_3d_to_region_2d`` verlangt aus genau diesem Grund
    ``w > 0``; hier stand nur ``== 0``.
    """
    prj = rv3d.perspective_matrix @ Vector((coord.x, coord.y, coord.z, 1.0))
    if prj.w <= 0.0:
        return None
    prj /= prj.w
    width_half = region.width / 2.0
    height_half = region.height / 2.0
    return Vector((width_half + width_half * prj.x, height_half + height_half * prj.y))

