// Code based in: "Weighted graphs: generate a layout in C++" // https://rodic.fr/blog/c-weighted-graph-layout-fruchterman-reingold/ #ifndef GRAPHAUTOLAYOUT_H #define GRAPHAUTOLAYOUT_H #include //#include #include #include // class ParseMatpower; #include "ImportForm.h" class GraphAutoLayout { public: struct GraphLayoutNode { wxRealPoint position; wxRealPoint displacement; }; struct GraphLayoutEdge { GraphLayoutNode &node1; GraphLayoutNode &node2; float weight; }; GraphAutoLayout(); GraphAutoLayout(std::vector busData, std::vector branchData); ~GraphAutoLayout(); void CalculatePositions(int iterations, double scale); protected: void AddLink(size_t index1, size_t index2, float weight = 1.f); void Compute(size_t iterations); std::vector m_nodes; std::vector m_edges; std::vector m_busData; std::vector m_branchData; }; #endif // GRAPHAUTOLAYOUT_H