Boost Users :

Subject: Re: [Boost-users] [Geometry] Compilation errors after moving to 1.55b1
From: Szymon Gatner (szymon.gatner_at_[hidden])
Date: 2013-10-29 14:10:10

Visual Studio 2012 Update 3, Windows 7.

Full contents of cpp file:

#include "pch.h"
#include "area_outline_node.hpp"
#include <lgs/foreach.hpp>
#include "hex.hpp"
#include <lgs/renderer.hpp>
#include "faction.hpp"
#include "alliance.hpp"

#include "neighbor_graph.hpp"
#include <lgs/graph/bfs_search.hpp>
#include <lgs/opengl/geometry.hpp>
#include "hex_functions.hpp"

#include <lgs/opengl/opengl.hpp>

#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/geometry/geometries/register/point.hpp>

using namespace boost::geometry;

BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET(Vec2i, int, cs::cartesian, x, y,
setX, setY);

namespace
{
int points[][2] = {{16, 0}, {60,0}, {76,32}, {60, 64}, {16, 64}, {0, 32}};

typedef Vec2i Point;
typedef model::polygon<Point, false> Poly;
typedef strategy::transform::translate_transformer<Point, Point>
Translate; <<<< error here

Poly hexPoly;

struct FactionBorderHex
{
FactionBorderHex(Faction& faction) : faction_(&faction) {}

bool operator()(const Hex* hex) const
{
return hex->faction() == faction_ && IsFactionBorderHex()(hex);
}

Faction* faction_;
};
}

AreaOutlineNode::AreaOutlineNode()
{
if (hexPoly.outer().empty())
{
append(hexPoly, points);
correct(hexPoly);
}
}

void AreaOutlineNode::setFaction(Faction* faction)
{
if (faction_ != faction)
{
faction_ = faction;
meshes_.clear();

if (faction_)
{
setArea(faction_->hexes());
}
}
}

void AreaOutlineNode::setArea(const Lgs::Vector<Hex*>& area)
{
boost::unordered_set<Hex*> factionBorder = faction_->getBorder();

std::vector<Vec2f> verts;

while (!factionBorder.empty())
{
Lgs::Vector<Hex*> border = floodFill(*factionBorder.begin(),
HexNeighborGraph(), FactionBorderHex(*faction_));

Poly polySum;

foreach (Hex* hex, border)
{
factionBorder.erase(hex);

Vec2i pos = pixelPosition(*hex);
Poly poly;

transform(hexPoly, poly, Translate(pos.x(), pos.y()));

std::vector<Poly> multiSum;
union_(polySum, poly, multiSum);

polySum = multiSum.front();
}

verts.assign(polySum.outer().begin(), polySum.outer().end());
meshes_.emplace_back(new Lgs::Geometry(Lgs::GeometryType::LineStrip));
meshes_.back()->setVertices(&verts.front(), verts.size());
meshes_.back()->setColors(&faction_->alliance()->borderColor(), 1);
}
}

void AreaOutlineNode::doRender(Renderer& r, const Recti& cullRect) const
{
if (faction_)
{

foreach (const boost::shared_ptr<Lgs::Geometry>& mesh, meshes_)
{
//r.drawMesh(mesh);
mesh->draw();
}
}
}

Sizei AreaOutlineNode::size() const
{
//FIXME: proper size based on envelope()
return Sizei(10000, 10000);
}

2013/10/29 Mateusz Loskot <mateusz_at_[hidden]>

> On 29 October 2013 15:10, Szymon Gatner <szymon.gatner_at_[hidden]> wrote:
> > Moving to 1.55b1 from 1.54 gives:
> >
> > Error 1 error C2976:
> > 'boost::geometry::strategy::transform::translate_transformer' : too few
> > template arguments
> >
> > offending line is:
> >
> > typedef strategy::transform::translate_transformer<Point, Point>
> Translate;
>
> Compilation of what test case/example of Boost.Geometry
> using what compiler causes this error?
>
> Best regards,
> --
> Mateusz Loskot, http://mateusz.loskot.net
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]

>

```--
Szymon Gatner
The Lordz Games Studio
www.thelordzgamesstudio.com