commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r9420 - in gnuradio/trunk/grc/src: grc/gui/elements gr


From: jblum
Subject: [Commit-gnuradio] r9420 - in gnuradio/trunk/grc/src: grc/gui/elements grc_gnuradio/utils
Date: Tue, 26 Aug 2008 00:41:25 -0600 (MDT)

Author: jblum
Date: 2008-08-26 00:41:25 -0600 (Tue, 26 Aug 2008)
New Revision: 9420

Modified:
   gnuradio/trunk/grc/src/grc/gui/elements/Connection.py
   gnuradio/trunk/grc/src/grc/gui/elements/FlowGraph.py
   gnuradio/trunk/grc/src/grc/gui/elements/Utils.py
   gnuradio/trunk/grc/src/grc_gnuradio/utils/extract_docs.py
Log:
rotation function, cleaned up connection logic

Modified: gnuradio/trunk/grc/src/grc/gui/elements/Connection.py
===================================================================
--- gnuradio/trunk/grc/src/grc/gui/elements/Connection.py       2008-08-26 
01:27:38 UTC (rev 9419)
+++ gnuradio/trunk/grc/src/grc/gui/elements/Connection.py       2008-08-26 
06:41:25 UTC (rev 9420)
@@ -49,72 +49,38 @@
                self._source_rot = None
                self._sink_coor = None
                self._source_coor = None
-
-               sink = self.get_sink()
-               source = self.get_source()
-
                #get the source coordinate
-               x1, y1 = 0, 0
-               connector_length = source.get_connector_length()
-               if source.get_rotation() == 0:
-                       x1 = 0 + connector_length
-               elif source.get_rotation() == 90:
-                       y1 = 0 - connector_length
-               elif source.get_rotation() == 180:
-                       x1 = 0 - connector_length
-               elif source.get_rotation() == 270:
-                       y1 = 0 + connector_length
-               self.x1, self.y1 = x1, y1
-
+               connector_length = self.get_source().get_connector_length()
+               self.x1, self.y1 = 
Utils.get_rotated_coordinate((connector_length, 0), 
self.get_source().get_rotation())
                #get the sink coordinate
-               x2, y2 = 0, 0
-               connector_length = sink.get_connector_length() + 
CONNECTOR_ARROW_HEIGHT
-               if sink.get_rotation() == 0:
-                       x2 = 0 - connector_length
-               elif sink.get_rotation() == 90:
-                       y2 = 0 + connector_length
-               elif sink.get_rotation() == 180:
-                       x2 = 0 + connector_length
-               elif sink.get_rotation() == 270:
-                       y2 = 0 - connector_length
-               self.x2, self.y2 = x2, y2
-
+               connector_length = self.get_sink().get_connector_length() + 
CONNECTOR_ARROW_HEIGHT
+               self.x2, self.y2 = 
Utils.get_rotated_coordinate((-connector_length, 0), 
self.get_sink().get_rotation())
                #build the arrow
-               if sink.get_rotation() == 0:
-                       self.arrow = [(0, 0), (0-CONNECTOR_ARROW_HEIGHT, 
0-CONNECTOR_ARROW_BASE/2), (0-CONNECTOR_ARROW_HEIGHT, 0+CONNECTOR_ARROW_BASE/2)]
-               elif sink.get_rotation() == 90:
-                       self.arrow = [(0, 0), (0-CONNECTOR_ARROW_BASE/2, 
0+CONNECTOR_ARROW_HEIGHT), (0+CONNECTOR_ARROW_BASE/2, 0+CONNECTOR_ARROW_HEIGHT)]
-               elif sink.get_rotation() == 180:
-                       self.arrow = [(0, 0), (0+CONNECTOR_ARROW_HEIGHT, 
0-CONNECTOR_ARROW_BASE/2), (0+CONNECTOR_ARROW_HEIGHT, 0+CONNECTOR_ARROW_BASE/2)]
-               elif sink.get_rotation() == 270:
-                       self.arrow = [(0, 0), (0-CONNECTOR_ARROW_BASE/2, 
0-CONNECTOR_ARROW_HEIGHT), (0+CONNECTOR_ARROW_BASE/2, 0-CONNECTOR_ARROW_HEIGHT)]
-
+               self.arrow = [(0, 0),
+                       Utils.get_rotated_coordinate((-CONNECTOR_ARROW_HEIGHT, 
-CONNECTOR_ARROW_BASE/2), self.get_sink().get_rotation()),
+                       Utils.get_rotated_coordinate((-CONNECTOR_ARROW_HEIGHT, 
CONNECTOR_ARROW_BASE/2), self.get_sink().get_rotation()),
+               ]
                self._update_after_move()
 
        def _update_after_move(self):
                """Calculate coordinates."""
-
                self.clear()
-
                #source connector
                source = self.get_source()
                X, Y = source.get_connector_coordinate()
                x1, y1 = self.x1 + X, self.y1 + Y
                self.add_line((x1, y1), (X, Y))
-
                #sink connector
                sink = self.get_sink()
                X, Y = sink.get_connector_coordinate()
                x2, y2 = self.x2 + X, self.y2 + Y
                self.add_line((x2, y2), (X, Y))
-
                #adjust arrow
                self._arrow = [(x+X, y+Y) for x,y in self.arrow]
-
                #add the horizontal and vertical lines in this connection
                if abs(source.get_connector_direction() - 
sink.get_connector_direction()) == 180:
                        #2 possible point sets to create a 3-line connector
-                       mid_x, mid_y = (x1 + x2)/2, (y1 + y2)/2
+                       mid_x, mid_y = (x1 + x2)/2.0, (y1 + y2)/2.0
                        points = [((mid_x, y1), (mid_x, y2)), ((x1, mid_y), 
(x2, mid_y))]
                        #source connector -> points[0][0] should be in the 
direction of source (if possible)
                        if Utils.get_angle_from_coordinates((x1, y1), 
points[0][0]) != source.get_connector_direction(): points.reverse()
@@ -123,9 +89,10 @@
                        #points[0][0] -> source connector should not be in the 
direction of source
                        if Utils.get_angle_from_coordinates(points[0][0], (x1, 
y1)) == source.get_connector_direction(): points.reverse()
                        #create 3-line connector
-                       self.add_line((x1, y1), points[0][0])
-                       self.add_line(points[0][0], points[0][1])
-                       self.add_line((x2, y2), points[0][1])
+                       p1, p2 = map(int, points[0][0]), map(int, points[0][1])
+                       self.add_line((x1, y1), p1)
+                       self.add_line(p1, p2)
+                       self.add_line((x2, y2), p2)
                else:
                        #2 possible points to create a right-angled connector
                        points = [(x1, y2), (x2, y1)]

Modified: gnuradio/trunk/grc/src/grc/gui/elements/FlowGraph.py
===================================================================
--- gnuradio/trunk/grc/src/grc/gui/elements/FlowGraph.py        2008-08-26 
01:27:38 UTC (rev 9419)
+++ gnuradio/trunk/grc/src/grc/gui/elements/FlowGraph.py        2008-08-26 
06:41:25 UTC (rev 9420)
@@ -24,6 +24,7 @@
 from grc.Constants import *
 from grc.Actions import *
 import Colors
+import Utils
 from grc.gui.ParamsDialog import ParamsDialog
 from Element import Element
 from grc.elements import FlowGraph as _FlowGraph
@@ -266,15 +267,13 @@
                """
                if not self.get_selected_blocks(): return False
                #determine the number of degrees to rotate
-               direction = {DIR_LEFT: 90, DIR_RIGHT:270}[direction]
-               cos_r = {0: 1, 90: 0, 180: -1, 270: 0}[direction]
-               sin_r = {0: 0, 90: 1, 180: 0, 270: -1}[direction]
+               rotation = {DIR_LEFT: 90, DIR_RIGHT:270}[direction]
                #initialize min and max coordinates
                min_x, min_y = self.get_selected_block().get_coordinate()
                max_x, max_y = self.get_selected_block().get_coordinate()
                #rotate each selected block, and find min/max coordinate
                for selected_block in self.get_selected_blocks():
-                       selected_block.rotate(direction)
+                       selected_block.rotate(rotation)
                        #update the min/max coordinate
                        x, y = selected_block.get_coordinate()
                        min_x, min_y = min(min_x, x), min(min_y, y)
@@ -284,9 +283,8 @@
                #rotate the blocks around the center point
                for selected_block in self.get_selected_blocks():
                        x, y = selected_block.get_coordinate()
-                       x, y = x - ctr_x, y - ctr_y
-                       x, y = (x*cos_r + y*sin_r + ctr_x, -x*sin_r + y*cos_r + 
ctr_y)
-                       selected_block.set_coordinate((x, y))
+                       x, y = Utils.get_rotated_coordinate((x - ctr_x, y - 
ctr_y), rotation)
+                       selected_block.set_coordinate((x + ctr_x, y + ctr_y))
                return True
 
        def remove_selected(self):

Modified: gnuradio/trunk/grc/src/grc/gui/elements/Utils.py
===================================================================
--- gnuradio/trunk/grc/src/grc/gui/elements/Utils.py    2008-08-26 01:27:38 UTC 
(rev 9419)
+++ gnuradio/trunk/grc/src/grc/gui/elements/Utils.py    2008-08-26 06:41:25 UTC 
(rev 9420)
@@ -19,6 +19,28 @@
 address@hidden grc.gui.elements.Utils
 #Shared functions for flow graph elements.
 
+from grc.Constants import POSSIBLE_ROTATIONS
+
+def get_rotated_coordinate(coor, rotation):
+       """!
+       Rotate the coordinate by the given rotation.
+       @param coor the coordinate x, y tuple
+       @param rotation the angle in degrees
+       @return the rotated coordinates
+       """
+       #handles negative angles
+       rotation = (rotation + 360)%360
+       assert rotation in POSSIBLE_ROTATIONS
+       #determine the number of degrees to rotate
+       cos_r, sin_r = {
+               0: (1, 0),
+               90: (0, 1),
+               180: (-1, 0),
+               270: (0, -1),
+       }[rotation]
+       x, y = coor
+       return (x*cos_r + y*sin_r, -x*sin_r + y*cos_r)
+
 def get_angle_from_coordinates((x1,y1), (x2,y2)):
        """!
        Given two points, calculate the vector direction from point1 to point2, 
directions are multiples of 90 degrees.
@@ -26,9 +48,9 @@
        @param (x2,y2) the coordinate of point 2
        @return the direction in degrees
        """
-       if y1 == y2:#0 or 180           
+       if y1 == y2:#0 or 180
                if x2 > x1: return 0
-               else: return 180                
+               else: return 180
        else:#90 or 270
                if y2 > y1: return 270
                else: return 90
@@ -36,6 +58,7 @@
 def xml_encode(string):
        """
        Encode a string into an xml safe string by replacing special characters.
+       Needed for gtk pango markup in labels.
        @param string the input string
        @return output string with safe characters
        """

Modified: gnuradio/trunk/grc/src/grc_gnuradio/utils/extract_docs.py
===================================================================
--- gnuradio/trunk/grc/src/grc_gnuradio/utils/extract_docs.py   2008-08-26 
01:27:38 UTC (rev 9419)
+++ gnuradio/trunk/grc/src/grc_gnuradio/utils/extract_docs.py   2008-08-26 
06:41:25 UTC (rev 9420)
@@ -19,7 +19,7 @@
 address@hidden grc_gnuradio.utils.extract_docs
 #Extract documentation from the gnuradio doxygen files.
 
-from grc_gnuradio.Constants import *
+from grc_gnuradio.Constants import DOCS_DIR
 from lxml import etree
 import os
 





reply via email to

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