From aa0fc78c4f69c29f2065faa544db489548fca630 Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Sat, 19 Sep 2026 20:02:03 +0200 Subject: [PATCH] rogueviz:: embeddings:: edgelists can now include comments, skipped lines, and can be symmetrized --- rogueviz/embeddings/embeddings.cpp | 41 ++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/rogueviz/embeddings/embeddings.cpp b/rogueviz/embeddings/embeddings.cpp index def2649b..dd97a626 100644 --- a/rogueviz/embeddings/embeddings.cpp +++ b/rogueviz/embeddings/embeddings.cpp @@ -41,6 +41,11 @@ void symmetrize() { } } +int skiplines = 0; + +int nodes_skiplines; +string nodes_fname; + void read_edgelist(const string& fname) { rogueviz::init(RV_GRAPH); @@ -54,14 +59,43 @@ void read_edgelist(const string& fname) { ensure_edge(); indenter_finish ind(true, "Reading edgelist..."); + if(nodes_fname != "") { + indenter_finish ind(true, "Reading preinit nodes..."); + fhstream f(nodes_fname, "rt"); + if(!f.f) return file_error(fname); + + char buf[1000]; + for(int i=0; i> edgesets; + char buf[1000]; + for(int i=0; i= 9000) throw hr_exception("too long lines not supported"); + + char buf1[10000], buf2[10000]; + sscanf(str.c_str(), "%s%s", buf1, buf2); + int i = rogueviz::getid(buf1), j = rogueviz::getid(buf2); + if(i == -1 && j == -1) continue; + if(i == -1 || j == -1) throw hr_exception("weird line"); sizeto(directed_edges, i); sizeto(directed_edges, j); @@ -171,6 +205,9 @@ int a = arg::add3("-edgelist", [] { arg::shift(); read_edgelist(arg::args()); }) + arg::add3("-missing-edges-env", [] { auto env = std::getenv("MISSING_EDGES"); if(env) set_missing_edges(atof(env)); }) + arg::add3("-el-rv", [] { if(rogueviz::rv_quality == 0) force_rvgraph(); current = std::make_shared (); }) + arg::add3("-render-radius", [] { arg::shift_arg_formula(render_radius); }) + + arg::add3("-el-skiplines", [] { arg::shift(); skiplines = arg::argi(); }) + + arg::add3("-el-nodelist", [] { arg::shift(); nodes_fname = arg::argi(); arg::shift(); nodes_skiplines = arg::args(); }) + + arg::add3("-el-symmetrize", [] { symmetrize(); }) + arg::add3("-edge-arrow", [] { arg::shift(); any->arrow_scale = arg::argf(); });