25 #ifndef AVOID_IMPROVEHYPEREDGES_H 26 #define AVOID_IMPROVEHYPEREDGES_H 35 struct HyperedgeTreeNode;
36 struct HyperedgeTreeEdge;
37 class HyperedgeShiftSegment;
43 typedef std::list<ShiftSegment *> ShiftSegmentList;
44 typedef std::map<JunctionRef *, ShiftSegmentList> RootSegmentsMap;
45 typedef std::map<JunctionRef *, HyperedgeTreeNode *>
46 JunctionHyperedgeTreeNodeMap;
47 typedef std::set<JunctionRef *> JunctionSet;
51 class HyperedgeImprover
60 void setRouter(Router *router);
64 HyperedgeNewAndDeletedObjectLists newAndDeletedObjectLists(
void)
const;
67 void execute(
bool canMakeMajorChanges);
71 void createShiftSegmentsForDimensionExcluding(HyperedgeTreeNode *node,
72 const size_t dim, HyperedgeTreeEdge *ignore,
73 ShiftSegmentList& segments);
76 void createShiftSegmentsForDimensionExcluding(HyperedgeTreeEdge *edge,
77 const size_t dim, HyperedgeTreeNode *ignore,
78 ShiftSegmentList& segments);
84 void mergeOverlappingSegments(ShiftSegmentList& segments);
90 void buildHyperedgeSegments(
const size_t dim);
96 void removeZeroLengthEdges(
void);
102 void moveJunctionsAlongCommonEdges(
void);
108 void nudgeHyperedgeSegments(
size_t dimension,
unsigned int& versionNumber);
112 void writeHyperedgeSegmentsBackToConnPaths(
void);
116 void outputHyperedgesToSVG(
unsigned int pass,
117 HyperedgeShiftSegment *activeSegment =
nullptr);
122 void getEndpoints(JunctionRef *junction, JunctionRef *ignore,
123 std::set<VertInf *>& endpoints);
129 HyperedgeTreeNode *moveJunctionAlongCommonEdge(HyperedgeTreeNode *
self,
130 bool& nodeMapHasChanged);
134 void removeZeroLengthEdges(HyperedgeTreeNode *
self,
135 HyperedgeTreeEdge *ignored);
139 void removeZeroLengthEdges(HyperedgeTreeEdge *
self,
140 HyperedgeTreeNode *ignored);
143 JunctionHyperedgeTreeNodeMap m_hyperedge_tree_junctions;
144 JunctionSet m_hyperedge_tree_roots;
145 RootSegmentsMap m_root_shift_segments;
146 ShiftSegmentList m_all_shift_segments;
153 bool m_can_make_major_changes;
std::list< ConnRef * > ConnRefList
A list of ConnRef objects.
Definition: connector.h:47
libavoid: Object-avoiding orthogonal and polyline connector routing library.
Definition: actioninfo.cpp:33
std::list< JunctionRef * > JunctionRefList
A list of JunctionRef objects.
Definition: hyperedge.h:53