def read(self, stream: Stream, version): self.color = stream.read_object('color') self.width = stream.read_double('width') self.line_type = self.read_line_type(stream) stream.log('read line type of {}'.format(self.line_type)) self.symbol_level = SymbolLayer.read_symbol_level(stream)
def read(self, stream: Stream, version): self.color = stream.read_object('color') self.size = stream.read_double('size') type_code = stream.read_int() type_dict = { 0: 'circle', 1: 'square', 2: 'cross', 3: 'x', 4: 'diamond' } if type_code not in type_dict: raise UnreadableSymbolException( 'Unknown marker type at {}, got {}'.format(hex(stream.tell() - 4), type_code)) stream.log('found a {}'.format(type_dict[type_code]), 4) self.type = type_dict[type_code] self.symbol_level = SymbolLayer.read_symbol_level(stream) self.angle = stream.read_double('angle') self.x_offset = stream.read_double('x offset') self.y_offset = stream.read_double('y offset') self.outline_enabled = stream.read_uchar('has outline') != 0 self.outline_width = stream.read_double('outline width') self.outline_color = stream.read_object('outline color') if version > 1: self.rotate_with_transform = stream.read_ushort('rotate with transform') != 0
def read(self, stream: Stream, version): """ Reads the decoration information """ self.fixed_angle = not bool(stream.read_uchar()) stream.log('detected {}'.format( 'fixed angle' if self.fixed_angle else 'not fixed angle')) self.flip_first = bool(stream.read_uchar()) stream.log('detected {}'.format( 'flip first' if self.flip_first else 'no flip first')) self.flip_all = bool(stream.read_uchar()) stream.log('detected {}'.format( 'flip all' if self.flip_all else 'no flip all')) self.position_as_ratio = stream.read_ushort('position as ratio') != 0 self.marker = stream.read_object('marker') # next bit is the number of doubles coming next marker_number_positions = stream.read_uint('marker positions') # next bit is the positions themselves -- maybe we can infer this from the number of positions # alone. E.g. 2 positions = 0, 1. 3 positions = 0, 0.5, 1 for _ in range(marker_number_positions): self.marker_positions.append(stream.read_double()) stream.log('marker positions are {}'.format(self.marker_positions))
def read(self, stream: Stream, version): self.pattern_interval = stream.read_double('pattern interval') pattern_part_count = stream.read_int('pattern parts') self.pattern_parts = [] for p in range(pattern_part_count): filled_squares = stream.read_double() empty_squares = stream.read_double() self.pattern_parts.append([filled_squares, empty_squares]) pattern = '' for p in self.pattern_parts: pattern += '-' * int(p[0]) + '.' * int(p[1]) stream.log('deciphered line pattern {} ending'.format(pattern))