1 /*
2 * Copyright (C) 2010-2011 Dmitry Marakasov
3 *
4 * This file is part of glosm.
5 *
6 * glosm is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * glosm is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with glosm. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include <glosm/Projection.hh>
21
Projection(ProjectFunction pf,UnProjectFunction uf)22 Projection::Projection(ProjectFunction pf, UnProjectFunction uf): project_(pf), unproject_(uf) {
23 }
24
Project(const Vector3i & point,const Vector3i & ref) const25 Vector3f Projection::Project(const Vector3i& point, const Vector3i& ref) const {
26 return project_(point, ref);
27 }
28
UnProject(const Vector3f & point,const Vector3i & ref) const29 Vector3i Projection::UnProject(const Vector3f& point, const Vector3i& ref) const {
30 return unproject_(point, ref);
31 }
32
ProjectPoints(const std::vector<Vector3i> & in,const Vector3i & ref,std::vector<Vector3f> & out) const33 void Projection::ProjectPoints(const std::vector<Vector3i>& in, const Vector3i& ref, std::vector<Vector3f>& out) const {
34 /* "slow" fallback implementation; though virtual calls
35 * add overhead, it's too small (~3%) to even care; but this
36 * may be redefined in subclasses */
37 out.reserve(out.size() + in.size());
38 for (std::vector<Vector3i>::const_iterator i = in.begin(); i != in.end(); ++i)
39 out.push_back(project_(*i, ref));
40 }
41