From 0a3c6ff8a2349da579aed26e193b2d24bf63027c Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Sun, 7 Feb 2016 12:50:49 +0100 Subject: [PATCH] Move vertex on `moveSelectionBy` --- src/Surfaces/SurfaceManager.cpp | 23 ++++++++++++++++++----- src/Surfaces/SurfaceManager.h | 4 ++-- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/Surfaces/SurfaceManager.cpp b/src/Surfaces/SurfaceManager.cpp index 80e8d75..14bc82c 100644 --- a/src/Surfaces/SurfaceManager.cpp +++ b/src/Surfaces/SurfaceManager.cpp @@ -8,7 +8,7 @@ SurfaceManager::SurfaceManager(){ selectedSurface = 0; ofAddListener(_surfaces.vertexChangedEvent, this, &SurfaceManager::onVertexChanged); ofAddListener(_surfaces.verticesChangedEvent, this, &SurfaceManager::onVerticesChanged); - _selectedVertexIndex = 0; + _selectedVertexIndex = -1; } void SurfaceManager::draw(){ @@ -28,6 +28,7 @@ void SurfaceManager::removeSelectedSurface(){ if(_surfaces[i] == selectedSurface){ _surfaces.erase(i); selectedSurface = 0; + _selectedVertexIndex = -1; break; } } @@ -76,6 +77,7 @@ BaseSurface * SurfaceManager::selectSurface(int index){ } selectedSurface = _surfaces[index]; + _selectedVertexIndex = -1; ofSendMessage("surfaceSelected"); return selectedSurface; } @@ -84,6 +86,7 @@ BaseSurface * SurfaceManager::selectSurface(BaseSurface * surface){ for(int i = 0; i < _surfaces.size(); i++){ if(_surfaces[i] == surface){ selectedSurface = surface; + _selectedVertexIndex = -1; ofSendMessage("surfaceSelected"); ofNotifyEvent(surfaceSelectedEvent, i, this); return selectedSurface; @@ -96,6 +99,7 @@ BaseSurface * SurfaceManager::selectSurface(BaseSurface * surface){ BaseSurface * SurfaceManager::selectNextSurface(){ int next; + _selectedVertexIndex = -1; if(selectedSurface == 0){ next = 0; @@ -123,6 +127,7 @@ BaseSurface * SurfaceManager::selectNextSurface(){ BaseSurface * SurfaceManager::selectPrevSurface(){ int prev; + _selectedVertexIndex = -1; if(selectedSurface == 0){ prev = _surfaces.size() - 1; @@ -160,7 +165,9 @@ void SurfaceManager::selectNextVertex(){ int numVertices = selectedSurface->getVertices().size(); - if(_selectedVertexIndex < numVertices - 1){ + if(_selectedVertexIndex == -1){ + _selectedVertexIndex = 0; + }else if(_selectedVertexIndex < numVertices - 1){ _selectedVertexIndex += 1; }else{ _selectedVertexIndex = 0; @@ -191,13 +198,19 @@ void SurfaceManager::moveSelectionBy(ofVec2f v){ return; } - selectedSurface->moveBy(v); + if(_selectedVertexIndex != -1){ + selectedSurface->getVertices()[_selectedVertexIndex] += v; + ofNotifyEvent(vertexChangedEvent, _selectedVertexIndex, this); + }else{ + selectedSurface->moveBy(v); + } // TODO: use member variable for this in the future } void SurfaceManager::deselectSurface(){ selectedSurface = 0; + _selectedVertexIndex = -1; } BaseSurface * SurfaceManager::getSurface(int index){ @@ -213,8 +226,8 @@ int SurfaceManager::size(){ return _surfaces.size(); } -void SurfaceManager::onVertexChanged(ofVec3f & vertex){ - ofNotifyEvent(vertexChangedEvent, vertex, this); +void SurfaceManager::onVertexChanged(int & i){ + ofNotifyEvent(vertexChangedEvent, i, this); } void SurfaceManager::onVerticesChanged(vector & vertices){ diff --git a/src/Surfaces/SurfaceManager.h b/src/Surfaces/SurfaceManager.h index 1f19e4f..dfbbcf2 100644 --- a/src/Surfaces/SurfaceManager.h +++ b/src/Surfaces/SurfaceManager.h @@ -51,12 +51,12 @@ class SurfaceManager { int size(); - ofEvent vertexChangedEvent; + ofEvent vertexChangedEvent; ofEvent > verticesChangedEvent; ofEvent surfaceSelectedEvent; ofEvent vertexSelectedEvent; - void onVertexChanged(ofVec3f & vertex); + void onVertexChanged(int & i); void onVerticesChanged(vector & vertices); private: