Skip to content

Instantly share code, notes, and snippets.

@asteig
Last active July 13, 2021 06:01
Show Gist options
  • Save asteig/87d891985e244c9cbcc6ca8c83171447 to your computer and use it in GitHub Desktop.
Save asteig/87d891985e244c9cbcc6ca8c83171447 to your computer and use it in GitHub Desktop.
"""
ILDA Header Format:
1-4: "ILDA"
5-7: Reserved
8: Format Code
9-16: Frame or Color Palette Name
17-24: Company Name
25-26: Number of Records
27-28: Frame or Color Palette Number
29-30: Total Frames or 0
31: Projector Number
32: Reserved
"""
import struct
import matplotlib.pyplot as plt
FORMAT_HEADER = struct.Struct('>7sB8s8s3H2B')
FORMAT_0 = struct.Struct('>HHHbb')
FORMAT_1 = ''
FORMAT_3 = ''
FORMAT_5 = ''
EXTREME_REAR = -32768
EXTREME_FRONT = 32767
RECORD_FIELD_NAMES = {
'0': ['x', 'y', 'z', 'status_code', 'color_index']
}
class ILDA_FILE:
records = []
def __init__(self, file_src):
f = open(file_src, 'rb')
raw_data = f.read(32)
print(raw_data)
# unpack meta data
data = FORMAT_HEADER.unpack(raw_data)
self.format_code = str(data[1])
self.instance_name = data[2].decode('ascii')
self.company_name = data[3].decode('ascii')
self.n_records = data[4]
self.instance_number = data[5]
self.total_frames = data[6]
self.projector_number = data[7]
# add each data record (frame) one by one
field_names = RECORD_FIELD_NAMES[self.format_code]
data_records = []
for _ in range(0, self.n_records):
raw_data = FORMAT_0.unpack(f.read(8))
record = dict(zip(field_names, raw_data))
plt.scatter(record['x'], record['y'], s=3)
data_records.append(record)
#### try displaying points
plt.show()
alice_data = ILDA_FILE('data/alice.ild')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment