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(){ void MoveSurfaceCommand::exec(){
// Store surface location by copying vertices
_previousVertices = _surface->getVertices(); _previousVertices = _surface->getVertices();
_surface->setMoved(false);
} }
void MoveSurfaceCommand::undo(){ void MoveSurfaceCommand::undo(){
//for (auto i = 0; i < _previousVertices.size(); i++) {
//_surface->setVertex(i, _previousVertices[i]);
//}
_surface->moveBy(_previousVertices[0] - _surface->getVertices()[0]); _surface->moveBy(_previousVertices[0] - _surface->getVertices()[0]);
_projectionEditor->updateJoints(); _projectionEditor->updateJoints();
_previousVertices.clear(); _previousVertices.clear();

4
src/Surfaces/BaseSurface.cpp

@ -4,6 +4,7 @@ namespace ofx {
namespace piMapper { namespace piMapper {
BaseSurface::BaseSurface() { BaseSurface::BaseSurface() {
_moved = false;
ofEnableNormalizedTexCoords(); ofEnableNormalizedTexCoords();
createDefaultTexture(); createDefaultTexture();
} }
@ -86,5 +87,8 @@ void BaseSurface::drawTexture(ofVec2f position) {
BaseSource* BaseSurface::getDefaultSource() { BaseSource* BaseSurface::getDefaultSource() {
return defaultSource; 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<ofVec3f>& getVertices() {};
virtual vector<ofVec2f>& getTexCoords() {}; virtual vector<ofVec2f>& getTexCoords() {};
// Draws a texture using ofMesh
void drawTexture(ofVec2f position); void drawTexture(ofVec2f position);
//void setTexture(ofTexture* texturePtr);
void setSource(BaseSource* newSource); void setSource(BaseSource* newSource);
//ofTexture* getTexture();
//ofTexture* getDefaultTexture();
BaseSource* getSource(); BaseSource* getSource();
BaseSource* getDefaultSource(); BaseSource* getDefaultSource();
void setMoved(bool moved);
bool getMoved();
protected: protected:
ofMesh mesh; ofMesh mesh;
//ofTexture* texture;
ofTexture defaultTexture; ofTexture defaultTexture;
BaseSource* source; BaseSource* source;
BaseSource* defaultSource; BaseSource* defaultSource;
void createDefaultTexture(); void createDefaultTexture();
bool _moved;
}; };
} }
} }

1
src/Surfaces/QuadSurface.cpp

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

14
src/Surfaces/SurfaceManagerGui.cpp

@ -124,6 +124,9 @@ void SurfaceManagerGui::mousePressed(ofMouseEventArgs& args) {
if (!bSurfaceSelected) { if (!bSurfaceSelected) {
for (int i = surfaceManager->size() - 1; i >= 0; i--) { for (int i = surfaceManager->size() - 1; i >= 0; i--) {
if (surfaceManager->getSurface(i)->hitTest(ofVec2f(args.x, args.y))) { 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( _commandManager->exec(new SelectSurfaceCommand(
surfaceManager, surfaceManager,
surfaceManager->getSurface(i), surfaceManager->getSurface(i),
@ -140,6 +143,7 @@ void SurfaceManagerGui::mousePressed(ofMouseEventArgs& args) {
clickPosition = ofVec2f(args.x, args.y); clickPosition = ofVec2f(args.x, args.y);
startDrag(); startDrag();
// TODO: Undo this command if surface not moved on mouse release
_commandManager->exec( _commandManager->exec(
new MoveSurfaceCommand( new MoveSurfaceCommand(
surfaceManager->getSelectedSurface(), surfaceManager->getSelectedSurface(),
@ -159,6 +163,12 @@ void SurfaceManagerGui::mouseReleased(ofMouseEventArgs& args) {
stopDrag(); stopDrag();
projectionEditor.stopDragJoints(); projectionEditor.stopDragJoints();
textureEditor.stopDragJoints(); textureEditor.stopDragJoints();
// Check if surface has moved
if (!surfaceManager->getSelectedSurface()->getMoved()) {
_commandManager->undo();
}
} }
void SurfaceManagerGui::mouseDragged(ofMouseEventArgs& args) { void SurfaceManagerGui::mouseDragged(ofMouseEventArgs& args) {
@ -233,9 +243,7 @@ void SurfaceManagerGui::setMode(int newGuiMode) {
void SurfaceManagerGui::drawSelectedSurfaceHighlight() { void SurfaceManagerGui::drawSelectedSurfaceHighlight() {
if (surfaceManager->getSelectedSurface() == NULL) return; if (surfaceManager->getSelectedSurface() == NULL) return;
ofPolyline line = surfaceManager->getSelectedSurface()->getHitArea(); ofPolyline line = surfaceManager->getSelectedSurface()->getHitArea();
ofPushStyle(); ofPushStyle();
ofSetLineWidth(1); ofSetLineWidth(1);
ofSetColor(255, 255, 255, 255); ofSetColor(255, 255, 255, 255);
@ -245,9 +253,7 @@ void SurfaceManagerGui::drawSelectedSurfaceHighlight() {
void SurfaceManagerGui::drawSelectedSurfaceTextureHighlight() { void SurfaceManagerGui::drawSelectedSurfaceTextureHighlight() {
if (surfaceManager->getSelectedSurface() == NULL) return; if (surfaceManager->getSelectedSurface() == NULL) return;
ofPolyline line = surfaceManager->getSelectedSurface()->getTextureHitArea(); ofPolyline line = surfaceManager->getSelectedSurface()->getTextureHitArea();
ofPushStyle(); ofPushStyle();
ofSetLineWidth(1); ofSetLineWidth(1);
ofSetColor(255, 255, 0, 255); 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++) { for (int i = 0; i < vertices.size(); i++) {
vertices[i] += v; vertices[i] += v;
} }
setMoved(true);
} }
int TriangleSurface::getType() { return SurfaceType::TRIANGLE_SURFACE; } int TriangleSurface::getType() { return SurfaceType::TRIANGLE_SURFACE; }

Loading…
Cancel
Save