ya2 · news · projects · code · about

better arrangement of the side panel
[pmachines.git] / lib / lib / p3d / gfx.py
index 0e2fcad9fcced6fc468e302cb306fffbaa28a65b..1c038c5fd23789bc27b1d18235fd23c890b31bef 100755 (executable)
@@ -119,6 +119,26 @@ class P3dGfxMgr:
         p2d = Point2()
         return p2d if base.camLens.project(p3d, p2d) else None
 
+    @staticmethod
+    def screen_coord(pos):
+        new_node = NodePath('temp')
+        new_node.set_pos(pos)
+        coord3d = new_node.get_pos(base.cam)
+        new_node.remove_node()
+        coord2d = Point2()
+        base.camLens.project(coord3d, coord2d)
+        coord_r2d = Point3(coord2d[0], 0, coord2d[1])
+        coord_a2d = base.aspect2d.get_relative_point(render2d, coord_r2d)
+        return coord_a2d[0], coord_a2d[2]
+
+    @staticmethod
+    def world_from_to(pos):
+        p_from, p_to = Point3(), Point3()    # in camera coordinates
+        base.camLens.extrude(pos, p_from, p_to)
+        p_from = render.get_relative_point(base.cam, p_from)  # global coords
+        p_to = render.get_relative_point(base.cam, p_to)  # global coords
+        return p_from, p_to
+
     @property
     def shader_support(self):
         return base.win.get_gsg().get_supports_basic_shaders()