LOD fix
This commit is contained in:
@@ -2206,43 +2206,47 @@ void Graphic::calcLOD(int index) {
|
|||||||
if (!m_LODOptimization) return;
|
if (!m_LODOptimization) return;
|
||||||
GraphicType & t(graphics[index]);
|
GraphicType & t(graphics[index]);
|
||||||
t._lod.clear();
|
t._lod.clear();
|
||||||
|
t._lod.reserve(32);
|
||||||
int pcnt = t.polyline.size();
|
int pcnt = t.polyline.size();
|
||||||
// qDebug() << "calcLOD" << index;
|
// qDebug() << "calcLOD" << index;
|
||||||
while (pcnt >= 10) {
|
while (pcnt >= 10) {
|
||||||
QPolygonF & pl(t._lod.isEmpty() ? t.polyline : t._lod.back());
|
QPolygonF & pl(t._lod.isEmpty() ? t.polyline : t._lod.back());
|
||||||
t._lod.append(QPolygonF());
|
t._lod.append(QPolygonF());
|
||||||
QPolygonF & cl(t._lod.back());
|
QPolygonF & cl(t._lod.back());
|
||||||
cl << pl.front();
|
if (pl.size() > 4) {
|
||||||
int qcnt = (pl.size() + 1) / 4;
|
cl << pl.front();
|
||||||
pcnt = qcnt * 2 + 2;
|
int qcnt = (pl.size() + 1) / 4;
|
||||||
int pc = 4;
|
pcnt = qcnt * 2 + 2;
|
||||||
qreal mx[2] = {0., 0.}, my[2] = {0., 0.}, my_x[2] = {0., 0.}, px, py;
|
int pc = 4;
|
||||||
for (int i = 0; i < qcnt; ++i) {
|
qreal mx[2] = {0., 0.}, my[2] = {0., 0.}, my_x[2] = {0., 0.}, px, py;
|
||||||
int j = i * 4 + 1;
|
for (int i = 0; i < qcnt; ++i) {
|
||||||
if (i == qcnt - 1) pc = pl.size() - j - 1;
|
int j = i * 4 + 1;
|
||||||
mx[0] = mx[1] = my_x[0] = my_x[1] = pl[j].x();
|
if (i == qcnt - 1) pc = pl.size() - j - 1;
|
||||||
my[0] = my[1] = pl[j].y();
|
mx[0] = mx[1] = my_x[0] = my_x[1] = pl[j].x();
|
||||||
for (int k = 1; k < pc; ++k) {
|
my[0] = my[1] = pl[j].y();
|
||||||
px = pl[j + k].x();
|
for (int k = 1; k < pc; ++k) {
|
||||||
py = pl[j + k].y();
|
px = pl[j + k].x();
|
||||||
mx[0] = qMin(mx[0], px);
|
py = pl[j + k].y();
|
||||||
mx[1] = qMax(mx[1], px);
|
mx[0] = qMin(mx[0], px);
|
||||||
if (my[0] > py) {
|
mx[1] = qMax(mx[1], px);
|
||||||
my[0] = py;
|
if (my[0] > py) {
|
||||||
my_x[0] = px;
|
my[0] = py;
|
||||||
}
|
my_x[0] = px;
|
||||||
if (my[1] < py) {
|
}
|
||||||
my[1] = py;
|
if (my[1] < py) {
|
||||||
my_x[1] = px;
|
my[1] = py;
|
||||||
|
my_x[1] = px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
qreal dx = (mx[1] - mx[0]) / 4., cx = (mx[1] + mx[0]) / 2.;
|
||||||
|
if (my_x[1] >= my_x[0])
|
||||||
|
cl << QPointF(cx - dx, my[0]) << QPointF(cx + dx, my[1]);
|
||||||
|
else
|
||||||
|
cl << QPointF(cx - dx, my[1]) << QPointF(cx + dx, my[0]);
|
||||||
}
|
}
|
||||||
qreal dx = (mx[1] - mx[0]) / 4., cx = (mx[1] + mx[0]) / 2.;
|
cl << pl.back();
|
||||||
if (my_x[1] >= my_x[0])
|
} else
|
||||||
cl << QPointF(cx - dx, my[0]) << QPointF(cx + dx, my[1]);
|
cl = pl;
|
||||||
else
|
|
||||||
cl << QPointF(cx - dx, my[1]) << QPointF(cx + dx, my[0]);
|
|
||||||
}
|
|
||||||
cl << pl.back();
|
|
||||||
// qDebug() << "lod" << t._lod.size() << "->" << cl.size();
|
// qDebug() << "lod" << t._lod.size() << "->" << cl.size();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user