graphic free trace mode

This commit is contained in:
2021-10-22 21:23:01 +03:00
parent 4717e8e8de
commit b9943a460a
3 changed files with 57 additions and 7 deletions

View File

@@ -104,14 +104,17 @@ Graphic::Graphic(QWidget * parent): QFrame(parent), canvas(0), line_x_min(this),
#endif #endif
QActionGroup * agroup = new QActionGroup(this); QActionGroup * agroup = new QActionGroup(this);
agroup->addAction(ui->graphic_actionGuidesFree ); agroup->addAction(ui->graphic_actionGuidesFree );
agroup->addAction(ui->graphic_actionGuidesTrace );
agroup->addAction(ui->graphic_actionGuidesTraceX); agroup->addAction(ui->graphic_actionGuidesTraceX);
agroup->addAction(ui->graphic_actionGuidesTraceY); agroup->addAction(ui->graphic_actionGuidesTraceY);
ui->graphic_actionGuidesFree ->setProperty("_value", (int)Free ); ui->graphic_actionGuidesFree ->setProperty("_value", (int)Free );
ui->graphic_actionGuidesTraceX->setProperty("_value", (int)TraceX); ui->graphic_actionGuidesTrace ->setProperty("_value", (int)TraceXY);
ui->graphic_actionGuidesTraceY->setProperty("_value", (int)TraceY); ui->graphic_actionGuidesTraceX->setProperty("_value", (int)TraceX );
ui->graphic_actionGuidesTraceY->setProperty("_value", (int)TraceY );
ui->graphic_actionGuidesFree->setChecked(true); ui->graphic_actionGuidesFree->setChecked(true);
connect(agroup, SIGNAL(triggered(QAction*)), this, SLOT(actionGuidesTriggered(QAction*))); connect(agroup, SIGNAL(triggered(QAction*)), this, SLOT(actionGuidesTriggered(QAction*)));
ui->graphic_checkGuides ->addAction(ui->graphic_actionGuidesFree ); ui->graphic_checkGuides ->addAction(ui->graphic_actionGuidesFree );
ui->graphic_checkGuides ->addAction(ui->graphic_actionGuidesTrace );
ui->graphic_checkGuides ->addAction(ui->graphic_actionGuidesTraceX); ui->graphic_checkGuides ->addAction(ui->graphic_actionGuidesTraceX);
ui->graphic_checkGuides ->addAction(ui->graphic_actionGuidesTraceY); ui->graphic_checkGuides ->addAction(ui->graphic_actionGuidesTraceY);
ui->graphic_buttonAutofit->addAction(ui->graphic_actionExpandX); ui->graphic_buttonAutofit->addAction(ui->graphic_actionExpandX);
@@ -1365,7 +1368,7 @@ void Graphic::drawGuides() {
QPointF rpos = canvas2real(apos); QPointF rpos = canvas2real(apos);
QString str; QString str;
str = pointCoords(rpos) + fp_size; str = pointCoords(rpos) + fp_size;
auto trace_func = [&](bool on_x, double cursor) { auto trace_axis_func = [&](bool on_x, double cursor) {
if (curTrace >= 0 && curTrace < graphics.size()) { if (curTrace >= 0 && curTrace < graphics.size()) {
if (graphics[curTrace].visible) { if (graphics[curTrace].visible) {
QPolygonF & pol(pause_ ? graphics[curTrace].polyline_pause : graphics[curTrace].polyline); QPolygonF & pol(pause_ ? graphics[curTrace].polyline_pause : graphics[curTrace].polyline);
@@ -1388,12 +1391,45 @@ void Graphic::drawGuides() {
} }
} }
}; };
auto trace_free_func = [&](QPointF cursor) {
double min_dist = -1;
int gr = -1, mag_dist = fontHeight(this) * 2;
QPointF point, scale = getScale(), dp;
for (int g = 0; g < graphics.size(); ++g) {
if (graphics[g].visible) {
QPolygonF & pol(pause_ ? graphics[g].polyline_pause : graphics[g].polyline);
double dist = 0.;
for (int i = 0; i < pol.size(); ++i) {
point = pol[i];
if (!selrect.contains(point)) continue;
dp = point - cursor;
dp = QPointF(dp.x() * scale.x(), dp.y() * scale.y());
if (dp.manhattanLength() <= mag_dist) {
dist = QVector2D(dp).lengthSquared();
if (min_dist > dist || min_dist < 0) {
min_dist = dist;
gr = g;
rpos = point;
}
}
}
}
if (gr >= 0) {
apos = real2canvas(rpos).toPoint();
str = graphics[gr].name + ": " + pointCoords(rpos) + fp_size;
emit graphicTraceEvent(curTrace, point);
}
}
};
switch (floating_axis_type) { switch (floating_axis_type) {
case TraceXY:
trace_free_func(rpos);
break;
case TraceX: case TraceX:
trace_func(true, rpos.x()); trace_axis_func(true, rpos.x());
break; break;
case TraceY: case TraceY:
trace_func(false, rpos.y()); trace_axis_func(false, rpos.y());
break; break;
default: break; default: break;
} }

View File

@@ -148,7 +148,7 @@ public:
enum Alignment {Left, Right}; enum Alignment {Left, Right};
enum Graduation {Auto, Fixed}; enum Graduation {Auto, Fixed};
enum AxisType {Numeric, DateTime}; enum AxisType {Numeric, DateTime};
enum FloatingAxisType {Free, TraceX, TraceY}; enum FloatingAxisType {Free, TraceXY, TraceX, TraceY};
Q_DECLARE_FLAGS(Buttons, Button) Q_DECLARE_FLAGS(Buttons, Button)
QString caption() const; QString caption() const;

View File

@@ -463,6 +463,17 @@
<string>Only expand Y</string> <string>Only expand Y</string>
</property> </property>
</action> </action>
<action name="graphic_actionGuidesTrace">
<property name="checkable">
<bool>true</bool>
</property>
<property name="text">
<string>Free trace</string>
</property>
<property name="toolTip">
<string>Free trace</string>
</property>
</action>
</widget> </widget>
<customwidgets> <customwidgets>
<customwidget> <customwidget>
@@ -475,6 +486,9 @@
<include location="../application/qad_application.qrc"/> <include location="../application/qad_application.qrc"/>
<include location="../blockview/qad_blockview.qrc"/> <include location="../blockview/qad_blockview.qrc"/>
<include location="qad_graphic.qrc"/> <include location="qad_graphic.qrc"/>
<include location="../application/qad_application.qrc"/>
<include location="../blockview/qad_blockview.qrc"/>
<include location="qad_graphic.qrc"/>
</resources> </resources>
<connections/> <connections/>
</ui> </ui>