std::string compare(mapnik::geometry::geometry<std::int64_t> const& g) { vector_tile::Tile_Feature feature = geometry_to_feature(g); mapnik::vector_tile_impl::Geometry<double> geoms(feature,0.0,0.0,1.0,1.0); auto g2 = mapnik::vector_tile_impl::decode_geometry<double>(geoms,feature.type()); return decode_to_path_string(g2); }
geom::Geometry* CascadedPolygonUnion::unionTree( index::strtree::ItemsList* geomTree) { /** * Recursively unions all subtrees in the list into single geometries. * The result is a list of Geometry's only */ std::auto_ptr<GeometryListHolder> geoms(reduceToGeometries(geomTree)); return binaryUnion(geoms.get()); }
Collider3DRef Collider3D::Build(const PrimitiveList& list) { std::size_t primitiveCount = list.GetSize(); if (primitiveCount > 1) { std::vector<Collider3DRef> geoms(primitiveCount); for (unsigned int i = 0; i < primitiveCount; ++i) geoms[i] = CreateGeomFromPrimitive(list.GetPrimitive(i)); return CompoundCollider3D::New(std::move(geoms)); } else if (primitiveCount > 0) return CreateGeomFromPrimitive(list.GetPrimitive(0)); else return NullCollider3D::New(); }
GeometryListHolder* CascadedPolygonUnion::reduceToGeometries(index::strtree::ItemsList* geomTree) { std::auto_ptr<GeometryListHolder> geoms (new GeometryListHolder()); typedef index::strtree::ItemsList::iterator iterator_type; iterator_type end = geomTree->end(); for (iterator_type i = geomTree->begin(); i != end; ++i) { if ((*i).get_type() == index::strtree::ItemsListItem::item_is_list) { std::auto_ptr<geom::Geometry> geom (unionTree((*i).get_itemslist())); geoms->push_back_owned(geom.get()); geom.release(); } else if ((*i).get_type() == index::strtree::ItemsListItem::item_is_geometry) { geoms->push_back(reinterpret_cast<geom::Geometry*>((*i).get_geometry())); } else { assert(!"should never be reached"); } } return geoms.release(); }
NzBaseGeom* NzBaseGeom::Build(NzPhysWorld* physWorld, const NzPrimitiveList& list) { unsigned int primitiveCount = list.GetSize(); #if NAZARA_PHYSICS_SAFE if (primitiveCount == 0) { NazaraError("PrimitiveList must have at least one primitive"); return nullptr; } #endif if (primitiveCount > 1) { std::vector<NzBaseGeom*> geoms(primitiveCount); for (unsigned int i = 0; i < primitiveCount; ++i) geoms[i] = CreateGeomFromPrimitive(physWorld, list.GetPrimitive(i)); return new NzCompoundGeom(physWorld, &geoms[0], primitiveCount); } else return CreateGeomFromPrimitive(physWorld, list.GetPrimitive(0)); }