Beispiel #1
0
 void WriteLine(BinaryWriter writer, Line line)
 {
     writer.Write(line.Id);
     writer.Write((uint)line.Type);
     if (line.Type == LineType.spanning)
     {
         WriteList <int>(writer, (line as SpanningLine).Blocks, delegate(BinaryWriter w, int u) { w.Write(u); });
     }
     else
     {
         BasicLine basicLine = line as BasicLine;
         writer.Write(basicLine.Priority);
         if (basicLine is RelativeLine)
         {
             writer.Write((basicLine as RelativeLine).RelativeTo);
         }
         writer.Write(basicLine.Shape);
         writer.Write(basicLine.Spacing);
         writer.Write(basicLine.Crescent_Y_Offset);
         writer.Write(basicLine.X);
         writer.Write(basicLine.Y);
         writer.Write(basicLine.MinThreshold);
         writer.Write(basicLine.MaxThreshold);
         WriteList(writer, basicLine.PriorityClassPairs, WritePriorityClassPair);
     }
 }
Beispiel #2
0
        Line ReadLine(BinaryReader reader)
        {
            Line     line;
            int      id       = reader.ReadInt32();
            LineType lineType = (LineType)reader.ReadUInt32();

            //Console.WriteLine("reading line type {0} at {1}", lineType, reader.BaseStream.Position);
            if (lineType == LineType.spanning)
            {
                line = new SpanningLine {
                    Blocks = ReadList <int>(reader, delegate(BinaryReader r) { return(r.ReadInt32()); })
                };
            }
            else if (lineType == LineType.absolute || lineType == LineType.relative)
            {
                BasicLine basicLine = (lineType == LineType.absolute) ? new BasicLine() : new RelativeLine();
                basicLine.Priority = reader.ReadSingle();
                if (lineType == LineType.relative)
                {
                    (basicLine as RelativeLine).RelativeTo = reader.ReadUInt32();
                }
                basicLine.Shape             = reader.ReadInt32();
                basicLine.Spacing           = reader.ReadSingle();
                basicLine.Crescent_Y_Offset = reader.ReadSingle();
                basicLine.X                  = reader.ReadSingle();
                basicLine.Y                  = reader.ReadSingle();
                basicLine.MinThreshold       = reader.ReadInt32();
                basicLine.MaxThreshold       = reader.ReadInt32();
                basicLine.PriorityClassPairs = ReadList <PriorityClassPair>(reader, ReadPriorityClassPair);
                line = basicLine;
            }
            else
            {
                throw new InvalidDataException("unknown line type " + lineType);
            }
            line.Id = id;
            return(line);
        }