Re: routing tables to dia network map



At 22:08 07.03.04, Philippe Biondi wrote:

On Sun, 7 Mar 2004, W. Borgert wrote:

[...]

> > - Dia python plugin / simple XML generator / no parser at all / other ?
>
> I think, a stand-alone Python programme would be the best
> solution, using either the standard Python XML library or
> the libxml2 module for Python.  There is no much gain in
> having it a Dia plugin, right?

I really doubt this : if one can live with the huge Dia dependency one gets the ability to place object dependent on their size - computed by Dia itself. How can any external tool deliver this ?


I don't know, that's why I ask the question. The best approach for me,
would be to be able to import some dia module that will handle all the
xml stuff for me. My dream would be sth that looks like :

import dia

mygraph = dia.A_new_graph()

router1 = dia.A_new_icon("Cisco router")
router2 = dia.A_new_icon("Cisco router")
net1 = dia.A_new_icon("Cloud")
dia.mygraph.add(router1,(0,0))
dia.mygraph.add(net1,(20,0))
dia.mygraph.add(router1,(40,0))
dia.mygraph.connect(router1, net1)
dia.mygraph.connect(router2, net1)
dia.mygraph.writefile("mymap.dia")

Maybe something similar like the dirty script below will do the trick.
Note: I'm not including al it's dependencies (they are just working on win32 anyway, _but_ what it does is similar to what I think you want to do. It's based on pydia which is included in the Dia package for a long time now [I've written this plug-in almost two years ago ;-]

Creates a diagram with connected objects (here UML Packackes, which reperenst the dependency tree of a given component) :

#!/usr/bin/env python

import sys

import gtk
import dia

# Another HACK to get my tools
sys.path.insert(0, r'c:\util\tool')

def dlg_destroy (w):
        w.destroy ()

def dia_generate_dia_cb (data, flags) :

        import os

        os.chdir(r'd:\graph\dia\bin')
        sModule = 'dia.exe'

        import deps2dia
        deps = {}
        deps2dia.GetDeps (sModule, deps)
        deps2dia.RemoveWellKnown (deps)

        maxcnt = 0
        bycnt = {}
        for s in deps.keys () :
                a = deps[s]
                n = len(a)
                if maxcnt < n :
                        maxcnt = n
                #sys.stderr.write(s + " ")
                if bycnt.has_key (n) :
                        bycnt[n].append(s)
                else :
                        bycnt[n] = [s]

        dt = dia.get_object_type("UML - LargePackage")
        layer = data.layers[0]
        # create objects sorted by number of deps
        objs = {}
        x = 0
        y = 0
        yofs = len(bycnt.keys())
        for i in range(0, maxcnt +1) :
                if bycnt.has_key(i) :
                        x = 0
                        for s in bycnt[i] :
o, h1, h2 = dt.create(x * 15.0, yofs - y * 10.0)
                                o.properties["name"] = s
                                layer.add_object(o)
                                objs[s] = o
                                x += 1
                        y += 1

        # add dependencies
        dt = dia.get_object_type("UML - Dependency")
        for s in objs.keys() :
                o1 = objs[s]
                for sd in deps[s] :
                        o2 = objs[sd]
                        opos = o1.properties['obj_pos'].value
                        x = opos.x + o1.properties['elem_width'].value / 2
                        y = opos.y + o1.properties['elem_height'].value
                        o, h1, h2 = dt.create(x, y)
                        layer.add_object(o)
                        # connect it
                        h1.connect (o1.connections[6])
                        h2.connect (o2.connections[1])

        layer.update_extents()
        dia.active_display().add_update_all()

dia.register_callback ("Dia Group Properties",
                       "<Display>/Debug/Dependencies",
                       dia_generate_dia_cb)


and get this diagram :

 [Cisco icon]--[cloud icon]--[Cisco icon]


Does this exists ?
I know there is a dia module, but it is not installed in the python library.
I imagine it is only for the python plugin.
It is, but obviously Dia Python plug-ins can call external tools.


Is it ok to use it in external
programs ? And how to use it ?

The only way to use pydia in fact is for a Python scripts running embedded in Dia. There are some more or less simple examples in the distribution.

        Hans
-------- Hans "at" Breuer "dot" Org -----------
Tell me what you need, and I'll tell you how to
get along without it.                -- Dilbert




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]