From feb2f7442b2034d50bdf6a4458439fbfa154bb07 Mon Sep 17 00:00:00 2001 From: Krisjanis Rijnieks Date: Fri, 29 Jan 2016 21:27:34 +0100 Subject: [PATCH] Implement `moveTexCoords` for `GridWarpSurface` textures --- src/Surfaces/GridWarpSurface.cpp | 16 +++++++++++++--- src/UserInterface/TextureEditor.cpp | 6 +++++- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/Surfaces/GridWarpSurface.cpp b/src/Surfaces/GridWarpSurface.cpp index 03a39f8..de68fa3 100644 --- a/src/Surfaces/GridWarpSurface.cpp +++ b/src/Surfaces/GridWarpSurface.cpp @@ -107,9 +107,19 @@ ofPolyline GridWarpSurface::getTextureHitArea(){ ofPolyline line; vector & texCoords = mesh.getTexCoords(); ofVec2f textureSize = ofVec2f(source->getTexture()->getWidth(), source->getTexture()->getHeight()); - for(int i = 0; i < texCoords.size(); i++){ - line.addVertex(ofPoint(texCoords[i] * textureSize)); - } + + int vertsPerRow = _gridCols + 1; + int vertsPerCol = _gridRows + 1; + + int a = 0; + int b = _gridCols; + int c = (_gridRows * vertsPerRow) + (vertsPerRow - 1); + int d = (_gridRows * vertsPerRow); + + line.addVertex(ofPoint(texCoords[a] * textureSize)); + line.addVertex(ofPoint(texCoords[b] * textureSize)); + line.addVertex(ofPoint(texCoords[c] * textureSize)); + line.addVertex(ofPoint(texCoords[d] * textureSize)); line.close(); return line; diff --git a/src/UserInterface/TextureEditor.cpp b/src/UserInterface/TextureEditor.cpp index e32ceb1..17266fb 100644 --- a/src/UserInterface/TextureEditor.cpp +++ b/src/UserInterface/TextureEditor.cpp @@ -242,10 +242,15 @@ void TextureEditor::moveTexCoords(ofVec2f by){ if(surface == 0){ return; } + vector & texCoords = surface->getTexCoords(); ofVec2f textureSize = ofVec2f(surface->getSource()->getTexture()->getWidth(), surface->getSource()->getTexture()->getHeight()); + for(int i = 0; i < joints.size(); i++){ + joints[i]->position += by; + } + if(surface->getType() == SurfaceType::GRID_WARP_SURFACE){ GridWarpSurface * s = (GridWarpSurface *)surface; @@ -281,7 +286,6 @@ void TextureEditor::moveTexCoords(ofVec2f by){ } }else{ for(int i = 0; i < texCoords.size(); i++){ - joints[i]->position += by; surface->setTexCoord(i, joints[i]->position / textureSize); } }