/* SPDX-License-Identifier: GPL-2.0-or-later */ /** \file * \ingroup freestyle * \brief Functions taking 0D input */ #include "AdvancedFunctions0D.h" #include "Canvas.h" #include "../view_map/Functions0D.h" #include "../view_map/SteerableViewMap.h" namespace Freestyle::Functions0D { int DensityF0D::operator()(Interface0DIterator &iter) { Canvas *canvas = Canvas::getInstance(); int bound = _filter.getBound(); if ((iter->getProjectedX() - bound < 0) || (iter->getProjectedX() + bound > canvas->width()) || (iter->getProjectedY() - bound < 0) || (iter->getProjectedY() + bound > canvas->height())) { result = 0.0; return 0; } RGBImage image; canvas->readColorPixels((int)iter->getProjectedX() - bound, (int)iter->getProjectedY() - bound, _filter.maskSize(), _filter.maskSize(), image); result = _filter.getSmoothedPixel( &image, (int)iter->getProjectedX(), (int)iter->getProjectedY()); return 0; } int LocalAverageDepthF0D::operator()(Interface0DIterator &iter) { Canvas *iViewer = Canvas::getInstance(); int bound = _filter.getBound(); if ((iter->getProjectedX() - bound < 0) || (iter->getProjectedX() + bound > iViewer->width()) || (iter->getProjectedY() - bound < 0) || (iter->getProjectedY() + bound > iViewer->height())) { result = 0.0; return 0; } GrayImage image; iViewer->readDepthPixels((int)iter->getProjectedX() - bound, (int)iter->getProjectedY() - bound, _filter.maskSize(), _filter.maskSize(), image); result = _filter.getSmoothedPixel( &image, (int)iter->getProjectedX(), (int)iter->getProjectedY()); return 0; } int ReadMapPixelF0D::operator()(Interface0DIterator &iter) { Canvas *canvas = Canvas::getInstance(); result = canvas->readMapPixel( _mapName, _level, (int)iter->getProjectedX(), (int)iter->getProjectedY()); return 0; } int ReadSteerableViewMapPixelF0D::operator()(Interface0DIterator &iter) { SteerableViewMap *svm = Canvas::getInstance()->getSteerableViewMap(); result = svm->readSteerableViewMapPixel( _orientation, _level, (int)iter->getProjectedX(), (int)iter->getProjectedY()); return 0; } int ReadCompleteViewMapPixelF0D::operator()(Interface0DIterator &iter) { SteerableViewMap *svm = Canvas::getInstance()->getSteerableViewMap(); result = svm->readCompleteViewMapPixel( _level, (int)iter->getProjectedX(), (int)iter->getProjectedY()); return 0; } int GetViewMapGradientNormF0D::operator()(Interface0DIterator &iter) { SteerableViewMap *svm = Canvas::getInstance()->getSteerableViewMap(); float pxy = svm->readCompleteViewMapPixel( _level, (int)iter->getProjectedX(), (int)iter->getProjectedY()); float gx = svm->readCompleteViewMapPixel( _level, (int)iter->getProjectedX() + _step, (int)iter->getProjectedY()) - pxy; float gy = svm->readCompleteViewMapPixel( _level, (int)iter->getProjectedX(), (int)iter->getProjectedY() + _step) - pxy; result = Vec2f(gx, gy).norm(); return 0; } } // namespace Freestyle::Functions0D