QTfrontend/drawmapscene.cpp
changeset 4666 34551d8639cf
parent 4658 280195b0ffbd
child 4937 55b9145fea94
equal deleted inserted replaced
4665:fa7ad5f3725f 4666:34551d8639cf
    85 
    85 
    86 QByteArray DrawMapScene::encode()
    86 QByteArray DrawMapScene::encode()
    87 {
    87 {
    88     QByteArray b;
    88     QByteArray b;
    89 
    89 
    90     foreach(QList<QPoint> points, paths)
    90     for(int i = paths.size() - 1; i >= 0; --i)
    91     {
    91     {
    92         int cnt = 0;
    92         int cnt = 0;
       
    93         QList<QPoint> points = paths.at(i);
    93         foreach(QPoint point, points)
    94         foreach(QPoint point, points)
    94         {
    95         {
    95             qint16 px = qToBigEndian((qint16)point.x());
    96             qint16 px = qToBigEndian((qint16)point.x());
    96             qint16 py = qToBigEndian((qint16)point.y());
    97             qint16 py = qToBigEndian((qint16)point.y());
    97             quint8 flags = 2;
    98             quint8 flags = 2;
   122         qint16 py = qFromBigEndian(*(qint16 *)data.data());
   123         qint16 py = qFromBigEndian(*(qint16 *)data.data());
   123         data.remove(0, 2);
   124         data.remove(0, 2);
   124         quint8 flags = *(quint8 *)data.data();
   125         quint8 flags = *(quint8 *)data.data();
   125         data.remove(0, 1);
   126         data.remove(0, 1);
   126 
   127 
   127 	if (data.size() < 5) points.append(QPoint(px, py));
   128         if((flags & 0x80) && points.size())
   128         //last chunk or first point
       
   129         if((data.size() < 5) || (flags & 0x80))
       
   130         {
   129         {
   131             if(points.size())
   130             addPath(pointsToPath(points), m_pen);
   132             {
   131             paths.prepend(points);
   133                 addPath(pointsToPath(points), m_pen);
       
   134                 paths.append(points);
       
   135 
   132 
   136                 points.clear();
   133             points.clear();
   137             }
       
   138         }
   134         }
   139 	if (data.size() >= 5) points.append(QPoint(px, py));
   135 
       
   136         points.append(QPoint(px, py));
       
   137     }
       
   138 
       
   139     if(points.size())
       
   140     {
       
   141         addPath(pointsToPath(points), m_pen);
       
   142         paths.prepend(points);
   140     }
   143     }
   141 
   144 
   142     emit pathChanged();
   145     emit pathChanged();
   143 }
   146 }
   144 
   147