From 179fa413b047bede6e32109e2ce82437c5fb8d34 Mon Sep 17 00:00:00 2001 From: MenTaLguY Date: Mon, 16 Jan 2006 02:36:01 +0000 Subject: moving trunk for module inkscape (bzr r1) --- src/libavoid/graph.h | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 src/libavoid/graph.h (limited to 'src/libavoid/graph.h') diff --git a/src/libavoid/graph.h b/src/libavoid/graph.h new file mode 100644 index 000000000..d30f394cf --- /dev/null +++ b/src/libavoid/graph.h @@ -0,0 +1,127 @@ +/* + * vim: ts=4 sw=4 et tw=0 wm=0 + * + * libavoid - Fast, Incremental, Object-avoiding Line Router + * Copyright (C) 2004-2005 Michael Wybrow + * + * 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. + * + * 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. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * +*/ + +#ifndef AVOID_GRAPH_H +#define AVOID_GRAPH_H + + +#include +#include +#include +using std::pair; + +#include "libavoid/vertices.h" + + +namespace Avoid { + + +extern bool UseAStarSearch; +extern bool IgnoreRegions; +extern bool SelectiveReroute; +extern bool IncludeEndpoints; +extern bool UseLeesAlgorithm; +extern bool InvisibilityGrph; +extern bool PartialFeedback; + + +typedef std::list ShapeList; +typedef std::list FlagList; + + +class EdgeInf +{ + public: + EdgeInf(VertInf *v1, VertInf *v2); + ~EdgeInf(); + double getDist(void); + void setDist(double dist); + void alertConns(void); + void addConn(bool *flag); + void addCycleBlocker(void); + void addBlocker(int b); + bool hasBlocker(int b); + pair ids(void); + pair points(void); + void db_print(void); + void checkVis(void); + VertInf *otherVert(VertInf *vert); + static EdgeInf *checkEdgeVisibility(VertInf *i, VertInf *j, + bool knownNew = false); + static EdgeInf *existingEdge(VertInf *i, VertInf *j); + + EdgeInf *lstPrev; + EdgeInf *lstNext; + private: + bool _added; + bool _visible; + VertInf *_v1; + VertInf *_v2; + EdgeInfList::iterator _pos1; + EdgeInfList::iterator _pos2; + ShapeList _blockers; + FlagList _conns; + double _dist; + + void makeActive(void); + void makeInactive(void); + int firstBlocker(void); + bool isBetween(VertInf *i, VertInf *j); +}; + + +class EdgeList +{ + public: + EdgeList(); + void addEdge(EdgeInf *edge); + void removeEdge(EdgeInf *edge); + EdgeInf *begin(void); + EdgeInf *end(void); + private: + EdgeInf *_firstEdge; + EdgeInf *_lastEdge; + unsigned int _count; +}; + + +extern EdgeList visGraph; +extern EdgeList invisGraph; + +class ShapeRef; + +extern void newBlockingShape(Polygn *poly, int pid); +extern void checkAllBlockedEdges(int pid); +extern void checkAllMissingEdges(void); +extern void generateContains(VertInf *pt); +extern void adjustContainsWithAdd(const Polygn& poly, const int p_shape); +extern void adjustContainsWithDel(const int p_shape); +extern void markConnectors(ShapeRef *shape); +extern void printInfo(void); + + +} + + +#endif + + -- cgit v1.2.3