""" This module defines a set of methods that generate SVS string commands """ class SVSCommands: """ Contains static methods that generate SVS string commands These can then be passed to agent.SendSVSCommands Note that all transforms (pos, rot, scale) should be lists of 3 floats """ @staticmethod def pos_to_str(pos): """ Returns a string of 3 space-separated position values """ return "{:f} {:f} {:f}".format(pos[0], pos[1], pos[2]) @staticmethod def rot_to_str(rot): """ Returns a string of 3 space-separated rotation values """ return "{:f} {:f} {:f}".format(rot[0], rot[1], rot[2]) @staticmethod def scl_to_str(scl): """ Returns a string of 3 space-separated scale values """ return "{:f} {:f} {:f}".format(scl[0], scl[1], scl[2]) @staticmethod def bbox_verts(): """ Returns a string of 8 vertices (24 numbers) forming a bounding box It is of unit size centered at the origin """ return "0.5 0.5 0.5 0.5 0.5 -0.5 0.5 -0.5 0.5 0.5 -0.5 -0.5 -0.5 0.5 0.5 -0.5 0.5 -0.5 -0.5 -0.5 0.5 -0.5 -0.5 -0.5" @staticmethod def add_node(node_id, pos=None, rot=None, scl=None, parent="world"): """ Returns an SVS command for adding a graph node to the scene (no geometry) """ cmd = "add {:s} {:s} ".format(node_id, parent) if pos: cmd += " p {:s}".format(SVSCommands.pos_to_str(pos)) if rot: cmd += " r {:s}".format(SVSCommands.rot_to_str(rot)) if scl: cmd += " s {:s}".format(SVSCommands.scl_to_str(scl)) return cmd @staticmethod def add_box(obj_id, pos=None, rot=None, scl=None, parent="world"): """ Returns an SVS command for adding a bounding box object to the scene """ cmd = "add {:s} {:s} v {:s}".format(obj_id, parent, SVSCommands.bbox_verts()) if pos: cmd += " p {:s}".format(SVSCommands.pos_to_str(pos)) if rot: cmd += " r {:s}".format(SVSCommands.rot_to_str(rot)) if scl: cmd += " s {:s}".format(SVSCommands.scl_to_str(scl)) return cmd @staticmethod def change_pos(obj_id, pos): """ Returns an SVS command for changing the position of an svs object """ return "change {:s} p {:s}".format(obj_id, SVSCommands.pos_to_str(pos)) @staticmethod def change_rot(obj_id, rot): """ Returns an SVS command for changing the rotation of an svs object """ return "change {:s} r {:s}".format(obj_id, SVSCommands.rot_to_str(rot)) @staticmethod def change_scl(obj_id, scl): """ Returns an SVS command for changing the scale of an svs object """ return "change {:s} s {:s}".format(obj_id, SVSCommands.scl_to_str(scl)) @staticmethod def delete(obj_id): """ Returns an SVS command for deleting an object """ return "delete {:s}".format(obj_id) @staticmethod def add_tag(obj_id, tag_name, tag_value): """ Returns an SVS command for adding a tag to an object (^name value) """ return "tag add {:s} {:s} {:s}".format(obj_id, tag_name, tag_value) @staticmethod def change_tag(obj_id, tag_name, tag_value): """ Returns an SVS command for changing a tag on an object (^name value) """ return "tag change {:s} {:s} {:s}".format(obj_id, tag_name, tag_value) @staticmethod def delete_tag(obj_id, tag_name): """ Returns an SVS command for deleting a tag with the given name from an object """ return "tag delete {:s} {:s}".format(obj_id, tag_name)