Skip to content

collect_camera_data

Collect camera data from the scene.

CollectCameraData

Bases: InstancePlugin

Collect camera data from the scene.

Source code in client/ayon_equalizer/plugins/publish/collect_camera_data.py
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
class CollectCameraData(pyblish.api.InstancePlugin):
    """Collect camera data from the scene."""

    order = pyblish.api.CollectorOrder
    families: ClassVar[list] = ["matchmove"]
    hosts: ClassVar[list] = ["equalizer"]
    label = "Collect camera data"

    def process(self, instance: pyblish.api.Instance) -> None:
        """Collect Camera data from 3DE.

        Handle camera selection. Possible values are:

           - ``__current__`` - current camera
           - ``__ref__`` - reference cameras
           - ``__seq__`` - sequence cameras
           - ``__all__`` - all cameras
           - ``camera_id`` - specific camera

        """
        try:
            camera_sel = instance.data["creator_attributes"]["camera_selection"]  # noqa: E501
        except KeyError:
            self.log.warning("No camera defined")
            return

        if camera_sel == "__all__":
            cameras = tde4.getCameraList()
        elif camera_sel == "__current__":
            cameras = [tde4.getCurrentCamera()]
        elif camera_sel in ["__ref__", "__seq__"]:
            cameras = [
                c for c in tde4.getCameraList()
                if tde4.getCameraType(c) == "REF_FRAME"
            ]
        else:
            if camera_sel not in tde4.getCameraList():
                self.log.warning("Invalid camera found")
                return
            cameras = [camera_sel]

        data = []

        for camera in cameras:
            camera_name = tde4.getCameraName(camera)
            enabled = tde4.getCameraEnabledFlag(camera)
            # calculation range
            c_range_start, c_range_end = tde4.getCameraCalculationRange(
                camera)
            p_range_start, p_range_end = tde4.getCameraPlaybackRange(camera)
            fov = tde4.getCameraFOV(camera)
            fps = tde4.getCameraFPS(camera)
            # focal length is time based, so lets skip it for now
            # focal_length = tde4.getCameraFocalLength(camera, frame)
            path = tde4.getCameraPath(camera)

            camera_data = {
                "name": camera_name,
                "id": camera,
                "enabled": enabled,
                "calculation_range": (c_range_start, c_range_end),
                "playback_range": (p_range_start, p_range_end),
                "fov": fov,
                "fps": fps,
                # "focal_length": focal_length,
                "path": path
            }
            data.append(camera_data)
        instance.data["cameras"] = data

process(instance)

Collect Camera data from 3DE.

Handle camera selection. Possible values are:

  • __current__ - current camera
  • __ref__ - reference cameras
  • __seq__ - sequence cameras
  • __all__ - all cameras
  • camera_id - specific camera
Source code in client/ayon_equalizer/plugins/publish/collect_camera_data.py
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
def process(self, instance: pyblish.api.Instance) -> None:
    """Collect Camera data from 3DE.

    Handle camera selection. Possible values are:

       - ``__current__`` - current camera
       - ``__ref__`` - reference cameras
       - ``__seq__`` - sequence cameras
       - ``__all__`` - all cameras
       - ``camera_id`` - specific camera

    """
    try:
        camera_sel = instance.data["creator_attributes"]["camera_selection"]  # noqa: E501
    except KeyError:
        self.log.warning("No camera defined")
        return

    if camera_sel == "__all__":
        cameras = tde4.getCameraList()
    elif camera_sel == "__current__":
        cameras = [tde4.getCurrentCamera()]
    elif camera_sel in ["__ref__", "__seq__"]:
        cameras = [
            c for c in tde4.getCameraList()
            if tde4.getCameraType(c) == "REF_FRAME"
        ]
    else:
        if camera_sel not in tde4.getCameraList():
            self.log.warning("Invalid camera found")
            return
        cameras = [camera_sel]

    data = []

    for camera in cameras:
        camera_name = tde4.getCameraName(camera)
        enabled = tde4.getCameraEnabledFlag(camera)
        # calculation range
        c_range_start, c_range_end = tde4.getCameraCalculationRange(
            camera)
        p_range_start, p_range_end = tde4.getCameraPlaybackRange(camera)
        fov = tde4.getCameraFOV(camera)
        fps = tde4.getCameraFPS(camera)
        # focal length is time based, so lets skip it for now
        # focal_length = tde4.getCameraFocalLength(camera, frame)
        path = tde4.getCameraPath(camera)

        camera_data = {
            "name": camera_name,
            "id": camera,
            "enabled": enabled,
            "calculation_range": (c_range_start, c_range_end),
            "playback_range": (p_range_start, p_range_end),
            "fov": fov,
            "fps": fps,
            # "focal_length": focal_length,
            "path": path
        }
        data.append(camera_data)
    instance.data["cameras"] = data