diff -r a3a200e35c6e -r bafca1686867 QTfrontend/drawmapscene.cpp --- a/QTfrontend/drawmapscene.cpp Wed Apr 30 14:17:06 2014 +0400 +++ b/QTfrontend/drawmapscene.cpp Wed Apr 30 15:26:50 2014 +0400 @@ -304,6 +304,8 @@ void DrawMapScene::decode(QByteArray data) { + hideCursor(); + bool erasing = m_isErasing; oldItems.clear(); @@ -324,7 +326,7 @@ data.remove(0, 2); quint8 flags = *(quint8 *)data.data(); data.remove(0, 1); - qDebug() << px << py; + //qDebug() << px << py; if(flags & 0x80) { isSpecial = false; @@ -485,3 +487,51 @@ return point; } + +void DrawMapScene::optimize() +{ + if(!paths.size()) return; + + // break paths into segments + Paths pth; + + foreach(const PathParams & pp, paths) + { + int l = pp.points.size(); + + if(l == 1) + { + pth.prepend(pp); + } else + { + for(int i = l - 2; i >= 0; --i) + { + PathParams p = pp; + p.points = QList() << p.points[i] << p.points[i + 1]; + pth.prepend(pp); + } + } + } + + // clear the scene + oldItems.clear(); + oldPaths.clear(); + clear(); + paths.clear(); + m_specialPoints.clear(); + + // render the result + foreach(const PathParams & p, pth) + { + if(p.erasing) + m_pen.setBrush(m_eraser); + else + m_pen.setBrush(m_brush); + + m_pen.setWidth(deserializePenWidth(p.width)); + + addPath(pointsToPath(p.points), m_pen); + } + + emit pathChanged(); +}