diff options
Diffstat (limited to '')
-rw-r--r-- | src/3rdparty/adaptagrams/libavoid/viscluster.cpp | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/src/3rdparty/adaptagrams/libavoid/viscluster.cpp b/src/3rdparty/adaptagrams/libavoid/viscluster.cpp new file mode 100644 index 0000000..ebc0c50 --- /dev/null +++ b/src/3rdparty/adaptagrams/libavoid/viscluster.cpp @@ -0,0 +1,116 @@ +/* + * vim: ts=4 sw=4 et tw=0 wm=0 + * + * libavoid - Fast, Incremental, Object-avoiding Line Router + * + * Copyright (C) 2004-2008 Monash University + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * See the file LICENSE.LGPL distributed with the library. + * + * Licensees holding a valid commercial license may use this file in + * accordance with the commercial license agreement provided with the + * library. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * Author(s): Michael Wybrow +*/ + +#include <cstdlib> + +#include "libavoid/viscluster.h" +#include "libavoid/router.h" +#include "libavoid/assertions.h" +#include "libavoid/debug.h" + + +namespace Avoid { + + +ClusterRef::ClusterRef(Router *router, Polygon& polygon, const unsigned int id) + : m_router(router), + m_polygon(polygon, router), + m_rectangular_polygon(m_polygon.boundingRectPolygon()), + m_active(false) +{ + COLA_ASSERT(m_router != nullptr); + m_id = m_router->assignId(id); + + m_router->addCluster(this); +} + + +ClusterRef::~ClusterRef() +{ + if (m_router->m_currently_calling_destructors == false) + { + err_printf("ERROR: ClusterRef::~ClusterRef() shouldn't be called directly.\n"); + err_printf(" It is owned by the router. Call Router::deleteCluster() instead.\n"); + abort(); + } +} + + +void ClusterRef::makeActive(void) +{ + COLA_ASSERT(!m_active); + + // Add to clusterRefs list. + m_clusterrefs_pos = m_router->clusterRefs.insert( + m_router->clusterRefs.begin(), this); + + m_active = true; +} + + +void ClusterRef::makeInactive(void) +{ + COLA_ASSERT(m_active); + + // Remove from clusterRefs list. + m_router->clusterRefs.erase(m_clusterrefs_pos); + + m_active = false; +} + + +void ClusterRef::setNewPoly(Polygon& poly) +{ + m_polygon = ReferencingPolygon(poly, m_router); + m_rectangular_polygon = m_polygon.boundingRectPolygon(); +} + + +unsigned int ClusterRef::id(void) const +{ + return m_id; +} + + +ReferencingPolygon& ClusterRef::polygon(void) +{ + return m_polygon; +} + + +Polygon& ClusterRef::rectangularPolygon(void) +{ + return m_rectangular_polygon; +} + + +Router *ClusterRef::router(void) const +{ + return m_router; +} + + +} + + |