Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 51 additions & 18 deletions pymvr/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,11 +98,11 @@ def write_mvr(self, path: Optional[str] = None):
if path is not None:
if sys.version_info >= (3, 9):
ElementTree.indent(self.xml_root, space=" ", level=0)
xmlstr = ElementTree.tostring(
self.xml_root, encoding="UTF-8", xml_declaration=True
)
xmlstr = ElementTree.tostring(self.xml_root, encoding="unicode")
dec = '<?xml version="1.0" encoding="UTF-8" standalone="no" ?>\n'
initxml = dec + xmlstr
with zipfile.ZipFile(path, "w", zipfile.ZIP_DEFLATED) as z:
z.writestr("GeneralSceneDescription.xml", xmlstr)
z.writestr("GeneralSceneDescription.xml", initxml)
for file_path, file_name in self.files_list:
try:
z.write(file_path, arcname=file_name)
Expand Down Expand Up @@ -419,11 +419,11 @@ def __init__(
matrix: Optional[Matrix] = None,
classing: Optional[str] = None,
fixture_id: Optional[str] = None,
fixture_id_numeric: int = 0,
unit_number: int = 0,
custom_id: int = 0,
custom_id_type: int = 0,
cast_shadow: bool = False,
fixture_id_numeric: Optional[int] = 0,
unit_number: Optional[int] = 0,
custom_id: Optional[int] = None,
custom_id_type: Optional[int] = None,
cast_shadow: Optional[bool] = False,
addresses: Optional["Addresses"] = None,
alignments: Optional["Alignments"] = None,
custom_commands: Optional["CustomCommands"] = None,
Expand Down Expand Up @@ -572,12 +572,18 @@ def populate_xml(self, element: Element):
if self.connections:
self.connections.to_xml(element)

ElementTree.SubElement(element, "FixtureID").text = str(self.fixture_id) or "0"
ElementTree.SubElement(element, "FixtureIDNumeric").text = str(
self.fixture_id_numeric
)
if self.unit_number is not None:
if self.fixture_id:
ElementTree.SubElement(element, "FixtureID").text = (
str(self.fixture_id) or "0"
)

if self.fixture_id_numeric:
ElementTree.SubElement(element, "FixtureIDNumeric").text = str(
self.fixture_id_numeric
)
if self.unit_number:
ElementTree.SubElement(element, "UnitNumber").text = str(self.unit_number)

if self.custom_id_type is not None:
ElementTree.SubElement(element, "CustomIdType").text = str(
self.custom_id_type
Expand Down Expand Up @@ -905,10 +911,14 @@ def __str__(self):
return f"{self.name}"

def to_xml(self):
check_mtx = any(
isinstance(i, float) for i in set().union(sum(self.matrix.matrix[:-1], []))
)
element = ElementTree.Element(
type(self).__name__, name=self.name, uuid=self.uuid
)
Matrix(self.matrix.matrix).to_xml(parent=element)
if self.matrix and check_mtx:
Matrix(self.matrix.matrix).to_xml(parent=element)
if self.classing:
ElementTree.SubElement(element, "Classing").text = self.classing
if self.child_list:
Expand All @@ -927,6 +937,7 @@ def __init__(
trusses: Optional[List["Truss"]] = None,
video_screens: Optional[List["VideoScreen"]] = None,
projectors: Optional[List["Projector"]] = None,
geometry3d: Optional[List["Geometry3D"]] = None,
xml_node: Optional["Element"] = None,
*args,
**kwargs,
Expand All @@ -939,6 +950,7 @@ def __init__(
self.video_screens = video_screens if video_screens is not None else []
self.trusses = trusses if trusses is not None else []
self.projectors = projectors if projectors is not None else []
self.geometry3d = geometry3d if geometry3d is not None else []

super().__init__(xml_node, *args, **kwargs)

Expand All @@ -965,6 +977,9 @@ def _read_xml(self, xml_node: "Element"):
]

self.projectors = [Projector(xml_node=i) for i in xml_node.findall("Projector")]
self.geometry3d = [
Geometry3D(xml_node=i) for i in xml_node.findall("Geometry3D")
]

def to_xml(self, parent: Element):
element = ElementTree.SubElement(parent, type(self).__name__)
Expand All @@ -984,6 +999,8 @@ def to_xml(self, parent: Element):
element.append(video_screen.to_xml())
for projector in self.projectors:
element.append(projector.to_xml())
for geometry3d in self.geometry3d:
element.append(geometry3d.to_xml())
return element


Expand Down Expand Up @@ -1022,10 +1039,14 @@ def _read_xml(self, xml_node: "Element"):
self.matrix = Matrix(str_repr=matrix_node.text)

def to_xml(self):
check_mtx = any(
isinstance(i, float) for i in set().union(sum(self.matrix.matrix[:-1], []))
)
element = ElementTree.Element(
type(self).__name__, name=self.name, uuid=self.uuid
)
Matrix(self.matrix.matrix).to_xml(parent=element)
if self.matrix and check_mtx:
Matrix(self.matrix.matrix).to_xml(parent=element)
if self.child_list:
self.child_list.to_xml(parent=element)
return element
Expand Down Expand Up @@ -1141,6 +1162,7 @@ def __init__(
self,
uuid: Optional[str] = None,
name: Optional[str] = None,
child_list: Optional["ChildList"] = None,
geometry3d: Optional[List["Geometry3D"]] = None,
symbol: Optional[List["Symbol"]] = None,
xml_node: Optional["Element"] = None,
Expand All @@ -1149,6 +1171,7 @@ def __init__(
):
self.uuid = uuid
self.name = name
self.child_list = child_list
self.geometry3d = geometry3d if geometry3d is not None else []
self.symbol = symbol if symbol is not None else []
super().__init__(xml_node, *args, **kwargs)
Expand All @@ -1174,6 +1197,8 @@ def to_xml(self):
element = ElementTree.Element(
type(self).__name__, name=self.name, uuid=self.uuid
)
if self.child_list:
self.child_list.to_xml(element)
for geo in self.geometry3d:
element.append(geo.to_xml())
for sym in self.symbol:
Expand Down Expand Up @@ -1218,8 +1243,12 @@ def __hash__(self):
return hash((self.file_name, str(self.matrix)))

def to_xml(self):
check_mtx = any(
isinstance(i, float) for i in set().union(sum(self.matrix.matrix[:-1], []))
)
element = ElementTree.Element(type(self).__name__, fileName=self.file_name)
Matrix(self.matrix.matrix).to_xml(parent=element)
if self.matrix and check_mtx:
Matrix(self.matrix.matrix).to_xml(parent=element)
return element


Expand Down Expand Up @@ -1249,10 +1278,14 @@ def __str__(self):
return f"{self.uuid}"

def to_xml(self):
check_mtx = any(
isinstance(i, float) for i in set().union(sum(self.matrix.matrix[:-1], []))
)
element = ElementTree.Element(
type(self).__name__, uuid=self.uuid, symdef=self.symdef
)
Matrix(self.matrix.matrix).to_xml(parent=element)
if self.matrix and check_mtx:
Matrix(self.matrix.matrix).to_xml(parent=element)
return element


Expand Down