User Tools

Site Tools


ngillet:solution_homework2
Critères & points attribués (/10)
Rappel du contexte 4
Résultats 5
Qualité du code (commentaires, structures utilisées, …) 5
Animation du dessin 0
Explication en dehors du code 3
Total (/50) 17

Vous auriez pu faire un effort de présentation pour rendre le fichier python disponible proprement. Vos commentaires sont insuffisants ainsi que globalement le travail fournit.

  • Homework 2 :

Mon travail était d'implémenter un algorithme de graphe oignon. L'algorithme commence à la racine de l'arbre. Ce nœud racine est rendu transparent, puis agrandit et recentrer pour englober tout le graphe. On prend ensuite chacun de ses fils, puis on réitère l'opération décrite précédemment avec chaque sous graphe. On transforme ainsi chaque nœud en “tranche d'oignon”. Problème : à la fin de l’exécution, les tranches se chevauchent, je n'ai pas trouvé de moyen pour arranger ca… Petite constatation amusante (bien que peu pertinente), si on exécute le script suffisamment de fois, un oignon se dessine.

<code onions.py>

# Powered by Python 2.7

# To cancel the modifications performed by the script # on the current graph, click on the undo button.

# Some useful keyboards shortcuts : # * Ctrl + D : comment selected lines. # * Ctrl + Shift + D : uncomment selected lines. # * Ctrl + I : indent selected lines. # * Ctrl + Shift + I : unindent selected lines. # * Ctrl + Return : run script. # * Ctrl + F : find selected text. # * Ctrl + R : replace selected text. # * Ctrl + Space : show auto-completion dialog.

from tulip import *

# the updateVisualization(centerViews = True) function can be called # during script execution to update the opened views

# the pauseScript() function can be called to pause the script execution. # To resume the script execution, you will have to click on the “Run script ” button.

# the runGraphScript(scriptFile, graph) function can be called to launch another edited script on a tlp.Graph object. # The scriptFile parameter defines the script name to call (in the form [a-zA-Z0-9_]+.py)

# the main(graph) function must be defined # to run the script on the current graph

def main(graph):

onions_down(graph)

def subset(graph,node,sub):

if graph.outdeg(node)<=0:
	return
nodes = graph.getOutNodes(node)
if nodes == None:
	return
for n in nodes:
	sub.append(n)
	subset(graph,n,sub)

def onions_down(graph):

if	graph.numberOfNodes()<0:
	return
root = graph.getSource()
if graph.outdeg(root)<=0:
	return
subTrees = graph.getOutNodes(root)

onionSlice(graph,root)	
updateVisualization(centerViews = True)

for rootTree in subTrees:
	sub = list()
	sub.append(rootTree)
	subset(graph,rootTree,sub)
	subTree = graph.inducedSubGraph(sub)
	onions_down(subTree)

def onionSlice(graph,node):

viewColor =  graph.getColorProperty("viewColor")
viewLayout =  graph.getLayoutProperty("viewLayout")
viewSize = graph.getSizeProperty("viewSize")
viewSelection =  graph.getBooleanProperty("viewSelection")	

# on change la couleur	
transparent = tlp.Color(0,0,0,0)
viewColor[node] = transparent

# on calcule puis on change la taille
min = viewLayout.getMin(graph) # la position la plus en bas a gauche du sous graphe         
max = viewLayout.getMax(graph) # la position la plus en haut a droite du sous graphe

newWidth = max.getX() - min.getX()
newHeight = max.getY() - min.getY()

maxSize = viewSize.getMax(graph).getH() # on recupere la taille du noeud le plus grand
# de plus, nous ne considerons que les noeuds ronds (donc width=height)
x=1.3
y=2
newSize = tlp.Size((newWidth+ maxSize)*x,(newHeight+ maxSize)*y) # on ne tient pas compte de la profondeur
viewSize[node] = newSize

# on place le noeud au "milieu" du sous-graphe
centerX = (newWidth/2) + min.getX()
centerY = (newHeight/2) + min.getY()	
center = tlp.Coord(centerX,centerY)

coord = viewLayout.getNodeValue(node)
coord.set(center)
viewLayout.setNodeValue(node, coord)	

</code>

/net/html/perso/melancon/Visual_Analytics_Course/data/pages/ngillet/solution_homework2.txt · Last modified: 2012/10/22 15:21 by bpinaud