Skip to content

Commit

Permalink
AUXData, Data, UserData
Browse files Browse the repository at this point in the history
  • Loading branch information
vanous committed Nov 3, 2023
1 parent 621e50c commit c78e777
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 14 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,12 @@ reference implementation.
- Currently implemented:
- Address
- Alignment
- AUXData
- ChildList
- Class
- Connection
- CustomCommand
- Data
- Fixture
- FocusPoint
- Geometries
Expand All @@ -68,6 +70,7 @@ reference implementation.
- Symbol
- Symdef
- Truss
- UserData
- VideoScreen

## Development
Expand Down
100 changes: 87 additions & 13 deletions pymvr/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@ def _find_root(pkg: "zipfile.ZipFile") -> "ElementTree.Element":

class GeneralSceneDescription:
def __init__(self, path=None):
self._package = None
self._root = None
if path is not None:
self._package = zipfile.ZipFile(path, "r")
if self._package is not None:
Expand All @@ -28,26 +26,29 @@ def __init__(self, path=None):
self._read_xml()

def _read_xml(self):
self.version_major = self._root.get("verMajor")
self.version_minor = self._root.get("verMinor")
self.version_major: str = self._root.get("verMajor", "")
self.version_minor: str = self._root.get("verMinor", "")
self.provider: str = self._root.get("provider", "")
self.providerVersion: str = self._root.get("providerVersion", "")

layers_collect = self._scene.find("Layers")
if layers_collect:
self.layers = [Layer(xml_node=i) for i in layers_collect.findall("Layer")]
self.layers: List["Layer"] = [
Layer(xml_node=i) for i in layers_collect.findall("Layer")
]
else:
self.layers = []

aux_data_collect = self._scene.find("AUXData")

if aux_data_collect:
self.classes = [
Class(xml_node=i) for i in aux_data_collect.findall("Class")
]
self.symdefs = [
Symdef(xml_node=i) for i in aux_data_collect.findall("Symdef")
]
self.positions = [
Position(xml_node=i) for i in aux_data_collect.findall("Position")
self.aux_data = AUXData(xml_node=aux_data_collect)
else:
self.aux_data = None

if self._user_data is not None:
self.user_data: List["Data"] = [
Data(xml_node=i) for i in self._user_data.findall("Data")
]


Expand Down Expand Up @@ -199,6 +200,79 @@ def __str__(self):
return f"{self.name}"


class Data(BaseNode):
def __init__(
self,
provider: str = "",
ver: str = "",
*args,
**kwargs,
):
self.provider = provider
self.ver = ver
super().__init__(*args, **kwargs)

def _read_xml(self, xml_node: "Element"):
self.provider = xml_node.attrib.get("provider")
self.ver = xml_node.attrib.get("ver")

def __str__(self):
return f"{self.provider} {self.ver}"


class AUXData(BaseNode):
def __init__(
self,
classes: List["Class"] = [],
symdefs: List["Symdef"] = [],
positions: List["Position"] = [],
mapping_definitions: List["MappingDefinition"] = [],
*args,
**kwargs,
):
self.classes = classes
self.symdefs = symdefs
self.positions = positions
self.mapping_definitions = mapping_definitions
super().__init__(*args, **kwargs)

def _read_xml(self, xml_node: "Element"):
self.classes = [Class(xml_node=i) for i in xml_node.findall("Class")]
self.symdefs = [Symdef(xml_node=i) for i in xml_node.findall("Symdef")]
self.positions = [Position(xml_node=i) for i in xml_node.findall("Position")]
self.mapping_definitions = [
MappingDefinition(xml_node=i) for i in xml_node.findall("MappingDefinition")
]


class MappingDefinition(BaseNode):
def __init__(
self,
name: Union[str, None] = None,
uuid: Union[str, None] = None,
size_x: int = 0,
size_y: int = 0,
source=None,
scale_handling=None,
*args,
**kwargs,
):
self.name = name
self.uuid = uuid
self.size_x = size_x
self.size_y = size_y
self.source = source
self.scale_handling = scale_handling
super().__init__(*args, **kwargs)

def _read_xml(self, xml_node: "Element"):
#TODO handle missing data...
self.size_x = int(xml_node.find("SizeX").text)
self.size_y = int(xml_node.find("SizeY").text)
self.source = xml_node.find("Source") # TODO
self.scale_handling = xml_node.find("ScaleHandeling").text # TODO ENUM


class Fixture(BaseChildNode):
def __init__(
self,
Expand Down
2 changes: 1 addition & 1 deletion tests/test_fixture_scene_object_1_5.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ def process_mvr_focus_point(focus_point):


def process_classes(mvr_scene):
class_ = mvr_scene.classes[0]
class_ = mvr_scene.aux_data.classes[0]
assert class_.name == "Site-Cieling"
assert class_.uuid == "2BD0B4C7-DDE3-4CAE-AA8D-9DDDF096F43E"

Expand Down

0 comments on commit c78e777

Please sign in to comment.