Changeset 1618

Show
Ignore:
Timestamp:
07/11/07 14:11:06 (1 year ago)
Author:
wrobe..@pld-linux.org
Message:

- constraint solver should solve constraints until all constraints solved
- fixed equality constraint to not juggle its variables forever
- fixed Element's constraints for minimal size

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • gaphas/branches/hw/gaphas/constraint.py

    r1597 r1618  
    120120        assert var in (self.a, self.b) 
    121121 
    122         if var is self.a: 
    123             self.a.value = self.b.value 
    124         else: 
    125             self.b.value = self.a.value 
     122        if self.a.value != self.b.value: 
     123            if var is self.a: 
     124                self.a.value = self.b.value 
     125            else: 
     126                self.b.value = self.a.value 
    126127 
    127128 
  • gaphas/branches/hw/gaphas/item.py

    r1611 r1618  
    361361            add(eq(a=h_se.y, b=h_sw.y)), 
    362362            add(eq(a=h_se.x, b=h_ne.x)), 
    363             # set h_nw < h_se and h_sw < h_ne constraints 
     363            # set h_nw < h_se constraint 
    364364            # with minimal size functionality 
    365             add(lt(smaller=h_nw.y, bigger=h_se.y, delta=30)), 
    366 #            add(lt(smaller=h_ne.y, bigger=h_sw.y, delta=30)), 
    367             add(lt(smaller=h_nw.x, bigger=h_se.x, delta=30)), 
    368 #            add(lt(smaller=h_sw.x, bigger=h_ne.x, delta=30)), 
     365            add(lt(smaller=h_nw.y, bigger=h_se.y, delta=10)), 
     366            add(lt(smaller=h_nw.x, bigger=h_se.x, delta=10)), 
    369367        ] 
    370368 
  • gaphas/branches/hw/gaphas/solver.py

    r1558 r1618  
    343343                        self._marked_cons.remove(c) 
    344344                    self._marked_cons.append(c) 
    345                 elif c not in self._marked_cons
     345                else
    346346                    self._marked_cons.append(c) 
    347347 
  • gaphas/branches/hw/gaphas/tests/test_element.py

    r1540 r1618  
    4646        self.assertEquals(110 * count, float(h_sw.y)) 
    4747 
     48 
     49    def test_minimal_se(self): 
     50        """ 
     51        Test resizing of element by dragging it SE handle. 
     52        """ 
     53        canvas = Canvas() 
     54        box = Box() 
     55        handles = box.handles() 
     56 
     57        canvas.add(box) 
     58 
     59        h_nw, h_ne, h_se, h_sw = handles 
     60        assert h_nw is handles[NW] 
     61        assert h_ne is handles[NE] 
     62        assert h_sw is handles[SW] 
     63        assert h_se is handles[SE] 
     64 
     65        h_se.x -= 20      # h.se.{x,y} == -10 
     66        h_se.y -= 20 
     67        assert h_se.x == h_se.y == -10 
     68 
     69        box.request_update() 
     70        canvas.update() 
     71 
     72        self.assertEquals(10, h_se.x) # h_se changed above, should be 10 
     73        self.assertEquals(10, h_se.y) 
     74 
     75        self.assertEquals(10, h_ne.x) 
     76        self.assertEquals(10, h_sw.y) 
  • gaphas/branches/hw/gaphas/tests/test_solver.py

    r1328 r1618  
    8686 
    8787 
     88 
     89class SizeTestCase(unittest.TestCase): 
     90    """ 
     91    Test size related constraints, i.e. minimal size. 
     92    """ 
     93    def test_min_size(self): 
     94        """Test minimal size constraint""" 
     95        solver = Solver() 
     96        v1 = Variable(0) 
     97        v2 = Variable(10) 
     98        v3 = Variable(10) 
     99        c1 = EqualsConstraint(a=v2, b=v3) 
     100        c3 = EqualsConstraint(a=v3, b=v2) 
     101        c2 = LessThanConstraint(smaller=v1, bigger=v3, delta=10) 
     102        solver.add_constraint(c1) 
     103        solver.add_constraint(c2) 
     104        #solver.add_constraint(c3) 
     105 
     106        # check everyting is ok on start 
     107        solver.solve() 
     108        self.assertEquals(0, v1) 
     109        self.assertEquals(10, v2) 
     110        self.assertEquals(10, v3) 
     111 
     112        # change v1 to 2, after solve it should be 0 again due to LT 
     113        # constraint 
     114        v1.value = 2 
     115        solver.solve() 
     116 
     117        self.assertEquals(0, v1) 
     118        self.assertEquals(10, v2) 
     119        self.assertEquals(10, v3) 
     120 
     121        # change v3 to 20, after solve v2 will follow thanks to EQ 
     122        # constraint 
     123        v3.value = 20 
     124        solver.solve() 
     125 
     126        self.assertEquals(0, v1) 
     127        self.assertEquals(20, v2) 
     128        self.assertEquals(20, v3) 
     129 
     130        # change v3 to 0, after solve it shoul be 10 due to LT.delta = 10, 
     131        # v2 should also be 10 due to EQ constraint 
     132        v3.value = 0 
     133        solver.solve() 
     134 
     135        self.assertEquals(0, v1) 
     136        self.assertEquals(10, v2) 
     137        self.assertEquals(10, v3) 
     138 
     139 
     140 
    88141class SolverSpeedTestCase(unittest.TestCase): 
    89142    """ 
  • gaphas/branches/hw/gaphas/tool.py

    r1615 r1618  
    363363        self._grabbed_handle = handle 
    364364 
    365         # Increment handle strength for the duration of the grab action 
    366         self._grabbed_handle.x.strength += 1 
    367         self._grabbed_handle.y.strength += 1 
    368  
    369365 
    370366    def _find_handle(self, view, event, item): 
     
    482478                self.connect(view, self._grabbed_item, self._grabbed_handle, wx, wy) 
    483479        finally: 
    484             # Decrement handle strength, previously incremented on button press 
    485             if self._grabbed_handle: 
    486                 self._grabbed_handle.x.strength -= 1 
    487                 self._grabbed_handle.y.strength -= 1 
    488480            context.view.queue_draw_item(context.view.hovered_item) 
    489481            context.ungrab()