Changeset 1882

Show
Ignore:
Timestamp:
08/09/07 01:34:16 (1 year ago)
Author:
arj..@yirdis.nl
Message:

Line.split_segment and merge_segment now return a list of added/removed handles. also fixed some bugs in merge_segment.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • gaphas/trunk/gaphas/item.py

    r1840 r1882  
    530530        The min number of parts is 2. 
    531531 
     532        A list of new handles is returned. 
     533 
     534        Note that ``split_segment`` is not able to reconnect constraints that 
     535        are connected to the segment.  
     536 
    532537        >>> a = Line() 
    533538        >>> a.handles()[1].pos = (20, 0) 
     
    535540        2 
    536541        >>> a.split_segment(0) 
    537         >>> len(a.handles()) 
    538         3 
    539         >>> a.handles()[1] 
    540         <Handle object on (10, 0)> 
     542        [<Handle object on (10, 0)>] 
     543        >>> a.handles() 
     544        [<Handle object on (0, 0)>, <Handle object on (10, 0)>, <Handle object on (20, 0)>] 
     545 
     546        A line segment can be split into multiple (equal) parts: 
     547 
    541548        >>> b = Line() 
    542549        >>> b.handles()[1].pos = (20, 16) 
     
    544551        [<Handle object on (0, 0)>, <Handle object on (20, 16)>] 
    545552        >>> b.split_segment(0, parts=4) 
     553        [<Handle object on (5, 4)>, <Handle object on (10, 8)>, <Handle object on (15, 12)>] 
    546554        >>> len(b.handles()) 
    547555        5 
     
    561569                do_split(segment + 1, parts - 1) 
    562570        do_split(segment, parts) 
     571        # TODO: or reconnect them from here. 
     572        # Force orthogonal constraints to be recreated 
    563573        self.orthogonal = self.orthogonal 
     574        return self._handles[segment+1:segment+parts] 
    564575 
    565576    @observed 
     
    569580        The parts parameter indicates how many segments should be merged 
    570581 
     582        The deleted handles are returned as a list. 
     583 
    571584        >>> a = Line() 
    572585        >>> a.handles()[1].pos = (20, 0) 
    573         >>> a.split_segment(0) 
     586        >>> _ = a.split_segment(0) 
    574587        >>> a.handles() 
    575588        [<Handle object on (0, 0)>, <Handle object on (10, 0)>, <Handle object on (20, 0)>] 
    576589        >>> a.merge_segment(0) 
    577         >>> len(a.handles()) 
    578         2 
     590        [<Handle object on (10, 0)>] 
     591        >>> a.handles() 
     592        [<Handle object on (0, 0)>, <Handle object on (20, 0)>] 
    579593        >>> try: a.merge_segment(0) 
    580594        ... except AssertionError: print 'okay' 
    581595        okay 
     596 
     597        More than two segments can be merged at once: 
     598        >>> _ = a.split_segment(0) 
     599        >>> _ = a.split_segment(0) 
     600        >>> _ = a.split_segment(0) 
     601        >>> a.handles() 
     602        [<Handle object on (0, 0)>, <Handle object on (2.5, 0)>, <Handle object on (5, 0)>, <Handle object on (10, 0)>, <Handle object on (20, 0)>] 
     603        >>> a.merge_segment(0, parts=4) 
     604        [<Handle object on (2.5, 0)>, <Handle object on (5, 0)>, <Handle object on (10, 0)>] 
     605        >>> a.handles() 
     606        [<Handle object on (0, 0)>, <Handle object on (20, 0)>] 
    582607        """ 
    583608        assert len(self._handles) > 2, 'Not enough segments' 
     
    585610            raise IndexError("index out of range (0 > %d > %d)" % (segment, len(self._handles) - 1)) 
    586611        if segment == 0: segment = 1 
     612        deleted_handles = [self._handles[segment]] 
    587613        del self._handles[segment] 
    588614        if parts > 2: 
    589             merge_segment(segment, parts - 1
     615            deleted_handles.extend(self.merge_segment(segment, parts - 1)
    590616        else: 
    591617            # Force orthogonal constraints to be recreated 
    592618            self.orthogonal = self.orthogonal 
     619        return deleted_handles 
    593620 
    594621    reversible_pair(split_segment, merge_segment) 
     
    639666        >>> a.handles()[1].pos = 30, 30 
    640667        >>> a.split_segment(0) 
     668        [<Handle object on (15, 15)>] 
    641669        >>> a.handles()[1].pos = 25, 5 
    642670        >>> a.point(-1, 0) 
  • gaphas/trunk/gaphas/solver.py

    r1881 r1882  
    532532        False 
    533533        """ 
    534         # use a copy of the original set, so constraints may be deleted in th
    535         # meantime. 
     534        # Use a copy of the original set, so constraints may b
     535        # deleted in the meantime. 
    536536        variables = set(variables) 
    537537        for c in set(self._constraints): 
  • gaphas/trunk/undo.txt

    r1803 r1882  
    377377 
    378378    >>> l.split_segment(0) 
     379    [<Handle object on (5, 5)>] 
    379380    >>> l.handles() 
    380381    [<Handle object on (0, 0)>, <Handle object on (5, 5)>, <Handle object on (10, 10)>]