def from_string(points_desc_str=""): self = PointsDesc() df = DescFile.from_string(points_desc_str) assert( df.headers["type"] == "PointsFile v.1.0" ) assert( "width" in df.headers and "height" in df.headers ) self.headers = OrderedDict(df.headers) self.tags = copy.copy(df.tags)[1:] self.width = int(df.headers["width"]) self.height = int(df.headers["height"]) self.uid = int(df.headers["uid"]) first_frame = None last_frame = None frames = [] if len(df.data) > 0: nfields = len(df.data[0]) assert( nfields >= 3 ) self.nfields = nfields for entry in df.data: f = entry[0] if abs( f - int(f)) > 0.01: raise Exception("Error: first entry should be a frame number!") f = int(f) if first_frame == None or f < first_frame: first_frame = f if last_frame == None or f > last_frame: last_frame = f frames = [ [] for k in range(last_frame-first_frame+1) ] for entry in df.data: f = int(entry[0])-first_frame frames[f].append(entry[1:]) self.first_frame = first_frame self.frames = frames return self