fenfire-commits
[Top][All Lists]
Advanced

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

[ff-cvs] fenfire/org/fenfire/view/lava mindMapView2D.py


From: Asko Soukka
Subject: [ff-cvs] fenfire/org/fenfire/view/lava mindMapView2D.py
Date: Thu, 14 Aug 2003 15:44:15 -0400

CVSROOT:        /cvsroot/fenfire
Module name:    fenfire
Branch:         
Changes by:     Asko Soukka <address@hidden>    03/08/14 15:44:15

Modified files:
        org/fenfire/view/lava: mindMapView2D.py 

Log message:
        interpolating 'adjacent' to centered node works

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/fenfire/fenfire/org/fenfire/view/lava/mindMapView2D.py.diff?tr1=1.12&tr2=1.13&r1=text&r2=text

Patches:
Index: fenfire/org/fenfire/view/lava/mindMapView2D.py
diff -u fenfire/org/fenfire/view/lava/mindMapView2D.py:1.12 
fenfire/org/fenfire/view/lava/mindMapView2D.py:1.13
--- fenfire/org/fenfire/view/lava/mindMapView2D.py:1.12 Thu Aug 14 13:31:40 2003
+++ fenfire/org/fenfire/view/lava/mindMapView2D.py      Thu Aug 14 15:44:15 2003
@@ -114,10 +114,9 @@
         self.context = None
         self.maxDepth = 5
 
-        self.lastCenter = None
-        self.lastAngle = None
-        self.fromCenter = None
-        self.fromAngle = None
+        # Stored data to help interpolation to nodes next to accursed
+        self.current = {'centerNode': None, 'startAngle': 0., 'rotationAngle': 
0.}
+        self.previous = {'centerNode': None, 'startAngle': 0., 
'rotationAngle': 0.}
         
         ### fillet set up
         self.angle = 1
@@ -163,7 +162,7 @@
         if depth == 0: return 0
         if self.maxDepth > 10: depth = depth * (10/self.maxDepth)
 
-        d = (self.box[0] * 1./4.0) * (1-math.log10(depth))
+        d = (self.box[0] * 1./3.) * (1-math.log10(depth))
         if dbg: p('dist: ', d)
         return d
 
@@ -196,34 +195,36 @@
         pl = self.getPlace(vs, paper2screen, 0,0, node, 0,0)
         self.nodes.put(node, pl)
 
-        if self.lastCenter != node:
-            self.fromCenter = self.lastCenter
-            self.fromAngle = self.lastAngle
-        print "Old:", self.fromCenter, "New:", self.lastCenter
+        # If update interpolation help data only, if has moved
+        if self.current['centerNode'] != node: self.previous = 
self.current.copy()
                          
         links = self.getLinks(self.fen, node)
 
-        fromIndex = None
-        newIndex = None
-        if (self.fromCenter != None):
-            fromLinks = self.getLinks(self.fen, self.fromCenter)
+        # Now, let's see, where we have came from...
+        previousIndex = None
+        currentIndex = None
+        if (self.previous['centerNode'] != None):
+            previousLinks = self.getLinks(self.fen, 
self.previous['centerNode'])
             try:
-                fromIndex = fromLinks.index(node)
-                newIndex = links.index(self.fromCenter)
+                previousIndex = previousLinks.index(node)
+                currentIndex = links.index(self.previous['centerNode'])
             except ValueError: pass
 
         if len(links) > 0:
-            angle = 2*Math.PI / float(len(links))
-            if fromIndex != None and newIndex != None:
-                startAngle = self.fromAngle*float(fromIndex) - Math.PI
+            rotationAngle = 2*Math.PI / float(len(links))
+
+            # Calculates the "correct" starting angle
+            if previousIndex != None and currentIndex != None:
+                startAngle = self.previous['startAngle'] \
+                             + 
self.previous['rotationAngle']*float(previousIndex)-Math.PI \
+                             + rotationAngle*float(len(links)-currentIndex)
             else: startAngle = 0
-            print self.fromCenter, fromIndex, newIndex, startAngle
-            self.doMindMapCS(vs, paper2screen, node,
-                             links, 0,0, startAngle, angle, 1)
-        self.drawMindMap(vs)
 
-        self.lastCenter = node
-        self.lastAngle = angle
+            self.doMindMapCS(vs, paper2screen, node, links, 0,0, startAngle, 
rotationAngle, 1)
+            self.current['startAngle'] = startAngle
+            self.current['rotationAngle'] = rotationAngle
+        self.drawMindMap(vs)
+        self.current['centerNode'] = node
 
     def drawMindMap(self, vs):
         i = self.net.n.keySet().iterator()
@@ -298,9 +299,18 @@
                 self.doLink.put(link, None)
                 place = self.nodes.get(link)
                 newLinks = self.getLinks(fen, link)
-                newAngle = rotationAngle / float(len(newLinks))
+                newAngle = Math.PI*2./float(len(newLinks))
+
+                fromIndex = None
+                try: fromIndex = newLinks.index(centerNode)
+                except ValueError: pass
+                if fromIndex != None:
+                    newStartAngle = (startAngle+rotationAngle*i-Math.PI) \
+                                    + newAngle*float(len(newLinks)-fromIndex)
+                else: newStartAngle = 0
+                
                 self.doMindMapCS(vs, into, link, newLinks, place[1], place[2],
-                                 startAngle+rotationAngle*(i - 0.5), newAngle, 
depth + 1)
+                                 newStartAngle, newAngle, depth + 1)
             
     def getPlace(self, vs, into, x0,y0, key, angle, depth):
         xy = self.getXY(x0,y0, angle, depth)




reply via email to

[Prev in Thread] Current Thread [Next in Thread]