From 83ff4841d5b11aed63f1deb9e1b606eee87f30bb Mon Sep 17 00:00:00 2001 From: Alexander Brock Date: Mon, 8 Jun 2015 16:23:08 +0200 Subject: Show angle of selected line segments relative to X-axis (bzr r14195.1.1) --- src/ui/tools/node-tool.cpp | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) (limited to 'src/ui/tools/node-tool.cpp') diff --git a/src/ui/tools/node-tool.cpp b/src/ui/tools/node-tool.cpp index 761492f41..5c97a4c7f 100644 --- a/src/ui/tools/node-tool.cpp +++ b/src/ui/tools/node-tool.cpp @@ -665,9 +665,32 @@ void NodeTool::update_tip(GdkEvent *event) { unsigned total = this->_selected_nodes->allPoints().size(); if (sz != 0) { - char *nodestring = g_strdup_printf( - ngettext("%u of %u node selected.", "%u of %u nodes selected.", total), - sz, total); + char *nodestring; + if (sz == 2) { + Inkscape::UI::ControlPointSelection::Set &selectionNodes = this->_selected_nodes->allPoints(); + std::vector selectedNodesPositions; + for (Inkscape::UI::ControlPointSelection::Set::iterator i = selectionNodes.begin(); i != selectionNodes.end(); ++i) { + if ((*i)->selected()) { + Inkscape::UI::Node *n = dynamic_cast(*i); + selectedNodesPositions.push_back(n->position()); + } + } + g_assert(selectedNodesPositions.size() == 2); + Geom::Point difference = selectedNodesPositions[0] - selectedNodesPositions[1]; + double angle = Geom::atan2(difference); + if (angle < 0) { + angle += 2*M_PI; + } + angle *= 180.0/M_PI; + nodestring = g_strdup_printf( + "%u of %u nodes selected, angle: %.2f°.", + sz, total, angle); + } + else { + nodestring = g_strdup_printf( + ngettext("%u of %u node selected.", "%u of %u nodes selected.", total), + sz, total); + } if (this->_last_over) { // TRANSLATORS: The %s below is where the "%u of %u nodes selected" sentence gets put -- cgit v1.2.3