void RotateInteraction::snapMouseReleaseEvent(QMouseEvent * anEvent, Feature* /*Closer*/) { Q_UNUSED(anEvent); if (Angle != 0.0 && Rotating.size() && !panning()) { CommandList* theList; theList = new CommandList(MainWindow::tr("Rotate Feature").arg(Rotating[0]->id().numId), Rotating[0]); for (int i=0; i<Rotating.size(); ++i) { if (NodeOrigin && Rotating[i] == OriginNode) continue; Rotating[i]->setPosition(OriginalPosition[i]); if (Rotating[i]->layer()->isTrack()) theList->add(new MoveNodeCommand(Rotating[i],rotatePosition(OriginalPosition[i], Angle), Rotating[i]->layer())); else theList->add(new MoveNodeCommand(Rotating[i],rotatePosition(OriginalPosition[i], Angle), document()->getDirtyOrOriginLayer(Rotating[i]->layer()))); } document()->addHistory(theList); view()->invalidate(true, false); } Angle = 0.0; Rotating.clear(); OriginalPosition.clear(); clearNoSnap(); }
void ScaleInteraction::snapMouseReleaseEvent(QMouseEvent * anEvent, Feature* /*Closer*/) { Q_UNUSED(anEvent); if (Radius != 1.0 && Scaling.size() && !panning()) { CommandList* theList; theList = new CommandList(MainWindow::tr("Scale Feature").arg(Scaling[0]->id().numId), Scaling[0]); for (int i=0; i<Scaling.size(); ++i) { if (NodeOrigin && Scaling[i] == OriginNode) continue; Scaling[i]->setPosition(OriginalPosition[i]); if (Scaling[i]->layer()->isTrack()) theList->add(new MoveNodeCommand(Scaling[i],scalePosition(OriginalPosition[i], Radius), Scaling[i]->layer())); else theList->add(new MoveNodeCommand(Scaling[i],scalePosition(OriginalPosition[i], Radius), document()->getDirtyOrOriginLayer(Scaling[i]->layer()))); } document()->addHistory(theList); view()->invalidate(true, true, false); } view()->setInteracting(false); Radius = 1.0; Scaling.clear(); OriginalPosition.clear(); clearNoSnap(); }
void ScaleInteraction::snapMousePressEvent(QMouseEvent * anEvent, Feature* aLast) { QList<Feature*> sel; if (view()->isSelectionLocked()) { if (theMain->properties()->selection(0)) sel.append(theMain->properties()->selection(0)); else sel.append(aLast); } else { sel = theMain->properties()->selection(); if (!sel.size() && aLast) sel.append(aLast); } Radius = 1.0; clearNoSnap(); Scaling.clear(); OriginalPosition.clear(); if (!sel.size()) return; view()->setInteracting(true); StartDragPosition = XY_TO_COORD(anEvent->pos()); OriginNode = NULL; NodeOrigin = false; CoordBox selBB = sel[0]->boundingBox(); for (int j=0; j<sel.size(); j++) { selBB.merge(sel[j]->boundingBox()); if (CHECK_WAY(sel[j])) { Way* R = STATIC_CAST_WAY(sel[j]); for (int i=0; i<R->size(); ++i) if (std::find(Scaling.begin(),Scaling.end(),R->get(i)) == Scaling.end()) Scaling.push_back(R->getNode(i)); addToNoSnap(R); } else if (CHECK_NODE(sel[j])) { if (!OriginNode && !NodeOrigin) { OriginNode = STATIC_CAST_NODE(sel[j]); NodeOrigin = true; } else { NodeOrigin = false; } } } if (Scaling.size() > 1) { if (NodeOrigin) { ScaleCenter = COORD_TO_XY(OriginNode->position()); } else { ScaleCenter = COORD_TO_XY(selBB.center()); } for (int i=0; i<Scaling.size(); ++i) { OriginalPosition.push_back(Scaling[i]->position()); addToNoSnap(Scaling[i]); } } else Scaling.clear(); }
void MoveNodeInteraction::snapMousePressEvent(QMouseEvent * event, Feature* aLast) { QList<Feature*> sel; if (view()->isSelectionLocked()) { if (theMain->properties()->selection(0)) sel.append(theMain->properties()->selection(0)); else sel.append(aLast); } else { if (aLast) { if (theMain->properties()->selection().size() && !M_PREFS->getSeparateMoveMode()) sel = theMain->properties()->selection(); else sel.append(aLast); } } HasMoved = false; clearNoSnap(); Moving.clear(); OriginalPosition.clear(); StartDragPosition = XY_TO_COORD(event->pos()); if (sel.size() == 1) { if (Node* Pt = CAST_NODE(sel[0])) { StartDragPosition = Pt->position(); Moving.push_back(Pt); } else recurseAddNodes(sel[0]); } else { for (int i=0; i<sel.size(); i++) { recurseAddNodes(sel[i]); } } for (int i=0; i<Moving.size(); ++i) { OriginalPosition.push_back(Moving[i]->position()); addToNoSnap(Moving[i]); } Virtual = false; theList = new CommandList; }