Graphic tracing improvements
This commit is contained in:
@@ -110,7 +110,7 @@ Graphic::Graphic(QWidget * parent): QFrame(parent), canvas(0), line_x_min(this),
|
||||
text_color = palette().color(QPalette::WindowText);
|
||||
grid_pen = QPen(palette().color(QPalette::Disabled, QPalette::WindowText), 0., Qt::DotLine);
|
||||
graphics.append(GraphicType());
|
||||
curGraphic = 0;
|
||||
curGraphic = curTrace = 0;
|
||||
selpen = palette().color(QPalette::WindowText);
|
||||
selpen.setStyle(Qt::DashLine);
|
||||
back_color = palette().color(QPalette::Base);
|
||||
@@ -1156,44 +1156,35 @@ void Graphic::drawGuides() {
|
||||
QPointF rpos = canvas2real(apos);
|
||||
QString str;
|
||||
str = pointCoords(rpos) + fp_size;
|
||||
auto trace_func = [&](bool on_x, double cursor) {
|
||||
if (curTrace >= 0 && curTrace < graphics.size()) {
|
||||
if (graphics[curTrace].visible) {
|
||||
QPolygonF & pol(pause_ ? graphics[curTrace].polyline_pause : graphics[curTrace].polyline);
|
||||
double min_dist = -1, dist = 0.;
|
||||
int index = -1;
|
||||
for (int i = 0; i < pol.size(); ++i) {
|
||||
if (!selrect.contains(pol[i])) continue;
|
||||
dist = qAbs<double>((on_x ? pol[i].x() : pol[i].y()) - cursor);
|
||||
if (min_dist > dist || min_dist < 0) {
|
||||
min_dist = dist;
|
||||
index = i;
|
||||
}
|
||||
}
|
||||
if (index >= 0) {
|
||||
rpos = pol[index];
|
||||
apos = real2canvas(rpos).toPoint();
|
||||
str = pointCoords(pol[index]) + fp_size;
|
||||
emit graphicTraceEvent(curTrace, rpos);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
switch (floating_axis_type) {
|
||||
case TraceX:
|
||||
if (curGraphic >= 0 && curGraphic < graphics.size()) {
|
||||
QPolygonF & pol(pause_ ? graphics[curGraphic].polyline_pause : graphics[curGraphic].polyline);
|
||||
double cursor = rpos.x(), min_dist = -1, dist = 0.;
|
||||
int index = -1;
|
||||
for (int i = 0; i < pol.size(); ++i) {
|
||||
dist = qAbs<double>(pol[i].x() - cursor);
|
||||
if (min_dist > dist || min_dist < 0) {
|
||||
min_dist = dist;
|
||||
index = i;
|
||||
}
|
||||
}
|
||||
if (index >= 0) {
|
||||
rpos = pol[index];
|
||||
apos = real2canvas(rpos).toPoint();
|
||||
str = pointCoords(pol[index]) + fp_size;
|
||||
}
|
||||
}
|
||||
trace_func(true, rpos.x());
|
||||
break;
|
||||
case TraceY:
|
||||
if (curGraphic >= 0 && curGraphic < graphics.size()) {
|
||||
QPolygonF & pol(pause_ ? graphics[curGraphic].polyline_pause : graphics[curGraphic].polyline);
|
||||
double cursor = rpos.y(), min_dist = -1, dist = 0.;
|
||||
int index = -1;
|
||||
for (int i = 0; i < pol.size(); ++i) {
|
||||
dist = qAbs<double>(pol[i].y() - cursor);
|
||||
if (min_dist > dist || min_dist < 0) {
|
||||
min_dist = dist;
|
||||
index = i;
|
||||
}
|
||||
}
|
||||
if (index >= 0) {
|
||||
rpos = pol[index];
|
||||
apos = real2canvas(rpos).toPoint();
|
||||
str = pointCoords(pol[index]) + fp_size;
|
||||
}
|
||||
}
|
||||
trace_func(false, rpos.y());
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user