void updateLevel() { TTool::Application *app = TTool::getApplication(); if (!app->getCurrentLevel()->getLevel()) return; TXshSimpleLevelP xl = app->getCurrentLevel()->getLevel()->getSimpleLevel(); if (app->getCurrentFrame()->getFrameType() != TFrameHandle::LevelFrame) return; TFrameId fid = app->getCurrentFrame()->getFid(); TVectorImageP src = xl->getFrame(fid, true); int count = src->getStrokeCount(); for (int i = 1; i < 10; i++) { ++fid; if (!xl->isFid(fid)) { TVectorImageP vi = new TVectorImage(); xl->setFrame(fid, vi); } TVectorImageP vi = xl->getFrame(fid, true); TVectorImageP dst = src->clone(); deform(dst.getPointer(), src.getPointer(), (double)i / (double)9); count = dst->getStrokeCount(); vi->mergeImage(dst, TAffine()); app->getCurrentTool()->getTool()->notifyImageChanged(fid); } }
void DSC::VelocityFunc::take_time_step(DeformableSimplicialComplex& dsc) { compute_time = 0.; deform_time = 0.; deform(dsc); time_step++; }
ofMesh ofxFfd::deformMesh(ofMesh mesh){ ofMesh dst; dst.append(mesh); for ( int i=0; i<mesh.getNumVertices(); i++ ) { ofVec3f vec = mesh.getVertex(i); dst.setVertex(i, deform(vec)); } return dst; }
void deform(TVectorImage *dstImage, const TVectorImage *srcImage, double t = 1.0) { update(); int n = srcImage->getStrokeCount(); if ((int)dstImage->getStrokeCount() < n) n = dstImage->getStrokeCount(); std::vector<int> ii(n); std::vector<TStroke *> oldStrokes(n); for (int i = 0; i < n; i++) { ii[i] = i; oldStrokes[i] = srcImage->getStroke(i); deform(dstImage->getStroke(i), oldStrokes[i], t); } dstImage->notifyChangedStrokes(ii, oldStrokes); }
ofVec3f ofxFfd::deformPoint(const ofVec3f &vec){ return deform(vec); }