Browse Source

Remove MoveSurfaceCommand from command stack via undo if surface not moved

master
Krisjanis Rijnieks 10 years ago
parent
commit
24fe4fdc94
  1. 5
      src/Commands/MoveSurfaceCommand.cpp
  2. 4
      src/Surfaces/BaseSurface.cpp
  3. 11
      src/Surfaces/BaseSurface.h
  4. 1
      src/Surfaces/QuadSurface.cpp
  5. 14
      src/Surfaces/SurfaceManagerGui.cpp
  6. 1
      src/Surfaces/TriangleSurface.cpp

5
src/Commands/MoveSurfaceCommand.cpp

@ -12,14 +12,11 @@ namespace ofx{
}
void MoveSurfaceCommand::exec(){
// Store surface location by copying vertices
_previousVertices = _surface->getVertices();
_surface->setMoved(false);
}
void MoveSurfaceCommand::undo(){
//for (auto i = 0; i < _previousVertices.size(); i++) {
//_surface->setVertex(i, _previousVertices[i]);
//}
_surface->moveBy(_previousVertices[0] - _surface->getVertices()[0]);
_projectionEditor->updateJoints();
_previousVertices.clear();

4
src/Surfaces/BaseSurface.cpp

@ -4,6 +4,7 @@ namespace ofx {
namespace piMapper {
BaseSurface::BaseSurface() {
_moved = false;
ofEnableNormalizedTexCoords();
createDefaultTexture();
}
@ -86,5 +87,8 @@ void BaseSurface::drawTexture(ofVec2f position) {
BaseSource* BaseSurface::getDefaultSource() {
return defaultSource;
}
void BaseSurface::setMoved(bool moved){ _moved = moved; }
bool BaseSurface::getMoved(){ return _moved; }
}
}

11
src/Surfaces/BaseSurface.h

@ -24,24 +24,21 @@ class BaseSurface {
virtual vector<ofVec3f>& getVertices() {};
virtual vector<ofVec2f>& getTexCoords() {};
// Draws a texture using ofMesh
void drawTexture(ofVec2f position);
//void setTexture(ofTexture* texturePtr);
void setSource(BaseSource* newSource);
//ofTexture* getTexture();
//ofTexture* getDefaultTexture();
BaseSource* getSource();
BaseSource* getDefaultSource();
void setMoved(bool moved);
bool getMoved();
protected:
ofMesh mesh;
//ofTexture* texture;
ofTexture defaultTexture;
BaseSource* source;
BaseSource* defaultSource;
void createDefaultTexture();
bool _moved;
};
}
}

1
src/Surfaces/QuadSurface.cpp

@ -117,6 +117,7 @@ void QuadSurface::moveBy(ofVec2f v) {
vertices[i] += v;
}
calculate4dTextureCoords();
setMoved(true);
}
int QuadSurface::getType() { return SurfaceType::QUAD_SURFACE; }

14
src/Surfaces/SurfaceManagerGui.cpp

@ -124,6 +124,9 @@ void SurfaceManagerGui::mousePressed(ofMouseEventArgs& args) {
if (!bSurfaceSelected) {
for (int i = surfaceManager->size() - 1; i >= 0; i--) {
if (surfaceManager->getSurface(i)->hitTest(ofVec2f(args.x, args.y))) {
// TODO: Do not repeat this command if attempting to select an
// already selected surface.
_commandManager->exec(new SelectSurfaceCommand(
surfaceManager,
surfaceManager->getSurface(i),
@ -140,6 +143,7 @@ void SurfaceManagerGui::mousePressed(ofMouseEventArgs& args) {
clickPosition = ofVec2f(args.x, args.y);
startDrag();
// TODO: Undo this command if surface not moved on mouse release
_commandManager->exec(
new MoveSurfaceCommand(
surfaceManager->getSelectedSurface(),
@ -159,6 +163,12 @@ void SurfaceManagerGui::mouseReleased(ofMouseEventArgs& args) {
stopDrag();
projectionEditor.stopDragJoints();
textureEditor.stopDragJoints();
// Check if surface has moved
if (!surfaceManager->getSelectedSurface()->getMoved()) {
_commandManager->undo();
}
}
void SurfaceManagerGui::mouseDragged(ofMouseEventArgs& args) {
@ -233,9 +243,7 @@ void SurfaceManagerGui::setMode(int newGuiMode) {
void SurfaceManagerGui::drawSelectedSurfaceHighlight() {
if (surfaceManager->getSelectedSurface() == NULL) return;
ofPolyline line = surfaceManager->getSelectedSurface()->getHitArea();
ofPushStyle();
ofSetLineWidth(1);
ofSetColor(255, 255, 255, 255);
@ -245,9 +253,7 @@ void SurfaceManagerGui::drawSelectedSurfaceHighlight() {
void SurfaceManagerGui::drawSelectedSurfaceTextureHighlight() {
if (surfaceManager->getSelectedSurface() == NULL) return;
ofPolyline line = surfaceManager->getSelectedSurface()->getTextureHitArea();
ofPushStyle();
ofSetLineWidth(1);
ofSetColor(255, 255, 0, 255);

1
src/Surfaces/TriangleSurface.cpp

@ -76,6 +76,7 @@ void TriangleSurface::moveBy(ofVec2f v) {
for (int i = 0; i < vertices.size(); i++) {
vertices[i] += v;
}
setMoved(true);
}
int TriangleSurface::getType() { return SurfaceType::TRIANGLE_SURFACE; }

Loading…
Cancel
Save