def __init__(self, block): StructBlock.__init__(self, block) self.FillStyles = FILLSTYLEARRAY(self.block) self.LineStyles = LINESTYLEARRAY(self.block) self.NumFillBits = b2i(self.read_bits(4)) self.NumLineBits = b2i(self.read_bits(4)) self.ShapeRecords = SHAPERECORDS(self.block, self.NumFillBits, self.NumLineBits)
def __init__(self, block): StructBlock.__init__(self, block) self.TypeFlag = self.read_bits(1) self.StraightFlag = self.read_bits(1) self.NumBits = self.read_bits(4) self.ControlDeltaX = SB(self.read_bits(b2i(self.NumBits) + 2)) self.ControlDeltaY = SB(self.read_bits(b2i(self.NumBits) + 2)) self.AnchorDeltaX = SB(self.read_bits(b2i(self.NumBits) + 2)) self.AnchorDeltaY = SB(self.read_bits(b2i(self.NumBits) + 2))
def parse_shape_record(self): shape_bits = self.get_bits(6) type_flag = shape_bits[0] if not type_flag: # Non-edge record flag if b2i(shape_bits[1:]) == 0: return EndShapeRecord(self.block) else: return StyleChangeRecord( self.block, self.FillBits, self.LineBits ) else: # Edge Record Flag if not shape_bits[1]: return CurvedEdgeRecord(self.block) else: return StraightEdgeRecord(self.block)
def __init__(self, block): StructBlock.__init__(self, block) self.TypeFlag = self.read_bits(1) self.StraightFlag = self.read_bits(1) self.NumBits = self.read_bits(4) # 2 less than the actual number self.GeneralLineFlag = self.read_bits(1) if b2i(self.GeneralLineFlag) == 0: self.VertLineFlag = self.read_bits(1) self.DeltaX = None self.DeltaY = None if b2i(self.GeneralLineFlag) == 1 or b2i(self.VertLineFlag) == 0: self.DeltaX = SB(self.read_bits(b2i(self.NumBits) + 2)) if b2i(self.GeneralLineFlag) == 1 or b2i(self.VertLineFlag) == 1: self.DeltaY = SB(self.read_bits(b2i(self.NumBits) + 2))
def __init__(self, block, fill_bits, line_bits): StructBlock.__init__(self, block) self.TypeFlag = self.read_bits(1) self.StateNewStyles = self.read_bits(1) # New styles flag (only DefineShape2, 3) self.StateLineStyle = self.read_bits(1) self.StateFillStyle1 = self.read_bits(1) self.StateFillStyle0 = self.read_bits(1) self.StateMoveTo = self.read_bits(1) if b2i(self.StateMoveTo): self.MoveBits = self.read_bits(5) self.MoveDeltaX = SB(self.read_bits(b2i(self.MoveBits))) self.MoveDeltaY = SB(self.read_bits(b2i(self.MoveBits))) if b2i(self.StateFillStyle0): self.FillStyle0 = self.read_bits(fill_bits) if b2i(self.StateFillStyle1): self.FillStyle1 = self.read_bits(fill_bits) if b2i(self.StateLineStyle): self.LineStyle = self.read_bits(line_bits) if b2i(self.StateNewStyles) and False: self.FillStyes = FILLSTYLEARRAY(self.block) self.LineStyles = LINESTYLEARRAY(self.block) self.NumFillBits = self.read_bits(4) self.NumLineBits = self.read_bits(4)
def height(self): return b2i(self.rect.y_max) / 20
def width(self): return b2i(self.rect.x_max) / 20
def size(self): return (b2i(self.rect.x_max) / 20, b2i(self.rect.y_max) / 20)