Calling a Plugin in Tulip

After digging Tulip‘s code for several days, I still couldn’t find out how to load and run a plugin. This afternoon, my thesis project assistant sent me a working sample code that does what I want! Only in one or two days I guess. Oh God, he’s so fast!

This is how it’s done.

  1. Initialize Tulip. At least I can figure this out myself 🙂

    tlp::initTulipLib();
    tlp::loadPlugins();
    
  2. Check the existence of a plugin.

    string layoutName = "Circular";
    tlp::LayoutProperty::factory->pluginExists(layoutName);
    
  3. And this is the most important chunk of code that I’m looking for.

    tlp::LayoutProperty *myLayout = graph->getProperty<tlp::LayoutProperty>("viewLayout");
    graph->computeProperty(layoutName, myLayout, errorMsg);
    

After that, the layouting is hopefully done. We only need to iterate the vertices and get position of each vertex.

tmp1 = myLayout->getNodeValue(n);
printf("node: %d, x=%f, y=%f, z=%fn", n.id, tmp1.getX(), tmp1.getY(), tmp1.getZ());

Bermain dengan graf

Tanpa basa-basi, langsung aja buka http://github.com/fajran/graph-experiment/tree/master =D

Yang sudah ada itu struktur data sangat sederhana untuk graph, node, dan edge. Selain itu, ada juga fungsi layouting dengan teknik force-directed layout dg algoritma Fruchterman Reingold yg di-port dari Prefuse.

Berhubung dibuat pakai Python dan lagi teringat pengen nyoba Jython, maka saya jg sekalian nyoba ngebandingin Python dan Jython. Jython yang dipake adalah Jython 2.5b0. Ujicoba dilakukan di atas Ubuntu 8.04 32bit, Intel Core Duo 1.83GHz, RAM 2GB, aplikasi lain yg nyala yg mungkin mempengaruhi hasil adalah Eclipse (gak dipake, lupa ditutup aja =P), Banshee, dan Firefox. Inilah hasilnya..

Edge Node Python Jython
100 93 5.348 6.421
200 171 17.403 13.945
300 234 33.011 22.798
400 294 53.674 35.107
500 358 77.672 50.576

Waahh.. pake Jython hasilnya lebih cepet euy!

Oprek2 dikit, jadilah graph plotter yg dibuat pake Python Imaging Library. Source code udah ada di repo git yg disebut di atas. Berikut ini 5 gambar dari 5 graf yg dipake di uji coba di atas.

Nyoba2 layouting di Prefuse

Bikin sesuatu yg bernama LevelLayout. Terpaksa dibikin berhubung NodeLinkTreeLayout yang diharapkan tuk bekerja ternyata tidak bekerja. Yaa.. sekalian lah.

Pake data versi lengkap tetep aja lemotubbies. Jadi bikin data versi rada kecil namun komplit. Uh, ini apa emang musti dioptimasi atau emang prefusenya aja yang dodolz?

Oya, sekarang kodingan udah ditaro juga di github. Coba diintip di http://github.com/fajran/ubuntu-pkg-vis-prefuse/tree/master