Source code for sierra.plugins.engine.argos.variables.rendering
# Copyright 2021 John Harwell, All rights reserved.
#
# SPDX-License-Identifier: MIT
"""
ARGoS headless QT rendering configuration.
"""
# Core packages
import typing as tp
# 3rd party packages
# Project packages
from sierra.core.variables.base_variable import IBaseVariable
from sierra.core.experiment import definition
import sierra.core.config
from sierra.core import types
import sierra.plugins.engine.argos.variables.exp_setup as exp
[docs]
class ARGoSQTHeadlessRendering(IBaseVariable):
"""
Sets up ARGoS headless rendering with QT.
Attributes:
tsetup: Simulation time definitions.
extents: List of (X,Y,Zs) tuple of dimensions of area to assign to
engines of the specified type.
"""
FRAME_SIZE = "1600x1200"
QUALITY = 100
FRAME_RATE = 10
def __init__(self, setup: exp.ExpSetup) -> None:
self.setup = setup
self.element_adds = [] # type: tp.List[definition.ElementAddList]
[docs]
def gen_attr_changelist(self) -> list[definition.AttrChangeSet]:
"""
No effect.
All tags/attributes are either deleted or added.
"""
return []
[docs]
def gen_tag_rmlist(self) -> list[definition.ElementRmList]:
"""Remove the ``<qt_opengl>`` tag if it exists.
Obviously you *must* call this function BEFORE adding new definitions.
"""
return [
definition.ElementRmList(
definition.ElementRm("./visualization", "qt-opengl")
)
]
[docs]
def gen_element_addlist(self) -> list[definition.ElementAddList]:
if not self.element_adds:
self.element_adds = [
definition.ElementAddList(
definition.ElementAdd(".", "visualization", {}, False),
definition.ElementAdd(
"./visualization", "qt-opengl", {"autoplay": "true"}, False
),
definition.ElementAdd(
"./visualization/qt-opengl",
"frame_grabbing",
{
"directory": "frames",
"base_name": "frame_",
"format": sierra.core.config.GRAPHS["static_type"],
"headless_grabbing": "true",
"headless_frame_size": "{}".format(self.FRAME_SIZE),
"headless_frame_rate": "{}".format(self.FRAME_RATE),
},
False,
),
definition.ElementAdd(
"visualization/qt-opengl",
"user_functions",
{"label": "__EMPTY__"},
False,
),
)
]
return self.element_adds
[docs]
def gen_files(self) -> None:
pass
def factory(cmdopts: types.Cmdopts) -> ARGoSQTHeadlessRendering:
"""Set up QT headless rendering for the specified experimental setup."""
return ARGoSQTHeadlessRendering(exp.factory(cmdopts["exp_setup"]))
__all__ = [
"ARGoSQTHeadlessRendering",
]