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