Source code for sierra.plugins.platform.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
import implements

# Project packages
from sierra.core.variables.base_variable import IBaseVariable
from sierra.core.experiment import xml
import sierra.core.config
from sierra.core import types

import sierra.plugins.platform.argos.variables.exp_setup as exp


[docs]@implements.implements(IBaseVariable) class ARGoSQTHeadlessRendering(): """ 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. """ kFrameSize = "1600x1200" kQUALITY = 100 kFRAME_RATE = 10
[docs] def __init__(self, setup: exp.ExpSetup) -> None: self.setup = setup self.tag_adds = [] # type: tp.List[xml.TagAddList]
[docs] def gen_attr_changelist(self) -> tp.List[xml.AttrChangeSet]: """ No effect. All tags/attributes are either deleted or added. """ return []
[docs] def gen_tag_rmlist(self) -> tp.List[xml.TagRmList]: """Remove the ``<qt_opengl>`` tag if it exists. Obviously you *must* call this function BEFORE adding new definitions. """ return [xml.TagRmList(xml.TagRm("./visualization", "qt-opengl"))]
[docs] def gen_tag_addlist(self) -> tp.List[xml.TagAddList]: if not self.tag_adds: self.tag_adds = [xml.TagAddList(xml.TagAdd('.', 'visualization', {}, False), xml.TagAdd('./visualization', 'qt-opengl', {'autoplay': "true"}, False ), xml.TagAdd('./visualization/qt-opengl', 'frame_grabbing', { 'directory': 'frames', 'base_name': 'frame_', 'format': sierra.core.config.kImageExt[1:], 'headless_grabbing': "true", 'headless_frame_size': "{0}".format(self.kFrameSize), 'headless_frame_rate': "{0}".format(self.kFRAME_RATE), }, False), xml.TagAdd('visualization/qt-opengl', 'user_functions', {'label': '__EMPTY__'}, False))] return self.tag_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"])) __api__ = [ 'ARGoSQTHeadlessRendering', ]