Skip to content

Commit

Permalink
plugins/import: Wrap OGDF graph generators (WIP)
Browse files Browse the repository at this point in the history
  • Loading branch information
anlambert committed Nov 14, 2023
1 parent 964d3b6 commit 8402eb0
Show file tree
Hide file tree
Showing 6 changed files with 146 additions and 2 deletions.
5 changes: 3 additions & 2 deletions library/talipot-ogdf/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ ENDIF(WIN32)

DISABLE_COMPILER_WARNINGS()

SET(TalipotOGDF_SRCS src/TalipotToOGDF.cpp src/OGDFLayoutPluginBase.cpp)
SET(TalipotOGDF_SRCS src/TalipotToOGDF.cpp src/OGDFLayoutPluginBase.cpp
src/OGDFUtils.cpp)

ADD_LIBRARY(${LibTalipotOGDFName} SHARED ${TalipotOGDF_SRCS})

Expand All @@ -21,7 +22,7 @@ INSTALL(
ARCHIVE DESTINATION ${TalipotLibInstallDir})

INSTALL(FILES include/talipot/OGDFLayoutPluginBase.h
include/talipot/TalipotToOGDF.h
include/talipot/TalipotToOGDF.h include/talipot/OGDFUtils.h
DESTINATION ${TalipotIncludeInstallDir}/talipot/)

IF(TALIPOT_ACTIVATE_PYTHON_WHEEL_TARGET)
Expand Down
23 changes: 23 additions & 0 deletions library/talipot-ogdf/include/talipot/OGDFUtils.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/**
*
* Copyright (C) 2023 The Talipot developers
*
* Talipot is a fork of Tulip, created by David Auber
* and the Tulip development Team from LaBRI, University of Bordeaux
*
* See the AUTHORS file at the top-level directory of this distribution
* License: GNU General Public License version 3, or any later version
* See top-level LICENSE file for more information
*
*/

#ifndef TALIPOT_OGDF_UTILS_H
#define TALIPOT_OGDF_UTILS_H

#include <ogdf/basic/Graph.h>
#include <talipot/Graph.h>

TLP_OGDF_SCOPE tlp::Graph *convertOGDFGraphToTalipotGraph(ogdf::Graph &graph,
tlp::Graph *tlpGraph = nullptr);

#endif // TALIPOT_OGDF_UTILS_H
39 changes: 39 additions & 0 deletions library/talipot-ogdf/src/OGDFUtils.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/**
*
* Copyright (C) 2023 The Talipot developers
*
* Talipot is a fork of Tulip, created by David Auber
* and the Tulip development Team from LaBRI, University of Bordeaux
*
* See the AUTHORS file at the top-level directory of this distribution
* License: GNU General Public License version 3, or any later version
* See top-level LICENSE file for more information
*
*/

#include <unordered_map>

#include <talipot/OGDFUtils.h>

using namespace std;

tlp::Graph *TLP_OGDF_SCOPE convertOGDFGraphToTalipotGraph(ogdf::Graph &graph,
tlp::Graph *tlpGraph) {
if (!tlpGraph) {
tlpGraph = tlp::newGraph();
} else {
tlpGraph->clear();
}

unordered_map<ogdf::node, tlp::node> nodesMap;

for (ogdf::node n : graph.nodes) {
nodesMap[n] = tlpGraph->addNode();
}

for (ogdf::edge e : graph.edges) {
tlpGraph->addEdge(nodesMap[e->source()], nodesMap[e->target()]);
}

return tlpGraph;
}
1 change: 1 addition & 0 deletions plugins/import/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ ADD_SUBDIRECTORY(SocialNetwork)
ADD_SUBDIRECTORY(BibTeX)
ADD_SUBDIRECTORY(Graphviz)
ADD_SUBDIRECTORY(Git)
ADD_SUBDIRECTORY(OGDF)

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR} ${TalipotCoreBuildInclude}
${TalipotCoreInclude} ${TalipotGUIInclude})
Expand Down
18 changes: 18 additions & 0 deletions plugins/import/OGDF/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR} ${TalipotCoreBuildInclude}
${TalipotCoreInclude} ${OGDFInclude} ${TalipotOGDFInclude})

SET(PLUGINS_SRCS OGDFPetersenGraph.cpp)

DISABLE_COMPILER_WARNINGS()

TALIPOT_ADD_PLUGIN(
NAME
OGDFGraphGenerators
SRCS
${PLUGINS_SRCS}
LINKS
${LibTalipotCoreName}
${LibTalipotOGDFName}
${OGDF_LIBRARY}
INSTALL_DIR
${TalipotPluginsInstallDir})
62 changes: 62 additions & 0 deletions plugins/import/OGDF/OGDFPetersenGraph.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/**
*
* Copyright (C) 2023 The Talipot developers
*
* Talipot is a fork of Tulip, created by David Auber
* and the Tulip development Team from LaBRI, University of Bordeaux
*
* See the AUTHORS file at the top-level directory of this distribution
* License: GNU General Public License version 3, or any later version
* See top-level LICENSE file for more information
*
*/

#include <talipot/ImportModule.h>
#include <talipot/OGDFUtils.h>

#include <ogdf/basic/graph_generators/deterministic.h>

using namespace std;

static constexpr string_view paramHelp[] = {
// n
"the number of nodes on the outer cycle.",

// m
"the length of jumps for the inner part.",
};

//=================================================================================

class OGDFPetersenGraph : public tlp::ImportModule {
public:
PLUGININFORMATION(
"Petersen Graph (OGDF)", "Antoine Lambert", "11/2023",
"Creates an outer cycle of nodes 1, ..., n, each of which has a direct neighbor (a "
"corresponding inner node). For two outer nodes i, j, there is an edge between their "
"corresponding inner nodes if the absolute difference of i and j equals the jump length m.",
"1.0", "Graph")

OGDFPetersenGraph(tlp::PluginContext *context) : tlp::ImportModule(context) {
addInParameter<uint>("n", paramHelp[0].data(), "5");
addInParameter<uint>("m", paramHelp[1].data(), "2");
}

bool importGraph() override {
uint n = 5;
uint m = 2;

if (dataSet != nullptr) {
dataSet->get("n", n);
dataSet->get("m", m);
}

ogdf::Graph g;
petersenGraph(g, n, m);
convertOGDFGraphToTalipotGraph(g, graph);

return true;
}
};

PLUGIN(OGDFPetersenGraph)

0 comments on commit 8402eb0

Please sign in to comment.