@@ -162,167 +162,3 @@ def matchGroups(sources, targets):
162162 group2Success , group2 = matchGroups (s1 [1 ], t1 [1 ])
163163 assert group2Success , "Something has gone wrong in matchGroups"
164164 return True , group1 + group2
165-
166- # ======================================================================
167-
168- # ============================== TESTING ===============================
169-
170- # ======================================================================
171-
172-
173- if __name__ == "__main__" :
174- # For testing purposes
175- import sys
176- from PySide import QtGui , QtCore
177- import time
178-
179- startMoving = False
180-
181- class agent (QtGui .QGraphicsItem ):
182- def __init__ (self , radius , x , y ):
183- QtGui .QGraphicsItem .__init__ (self )
184- self .radius = radius
185- self .setPos (x , y )
186- self .inGroup1 = True
187- self .isGroupMarker = False
188- self .goingTo = None
189-
190- def boundingRect (self ):
191- """sets the area that is updated by drawing"""
192- adjust = 4.0
193- return QtCore .QRectF (- self .radius - adjust , - self .radius - adjust ,
194- 2 * self .radius + 2 * adjust ,
195- 2 * self .radius + 2 * adjust )
196-
197- def paint (self , painter , option , widget ):
198- if self .isGroupMarker :
199- painter .setPen (QtGui .QPen (QtCore .Qt .black , 10 ))
200- elif self .inGroup1 :
201- painter .setPen (QtGui .QPen (QtCore .Qt .blue , 1 ))
202- else :
203- painter .setPen (QtGui .QPen (QtCore .Qt .red , 1 ))
204- bounding = QtCore .QRect (- self .radius , - self .radius ,
205- 2 * self .radius , 2 * self .radius )
206- painter .drawEllipse (bounding )
207- self .update ()
208-
209- def move (self ):
210- if self .goingTo :
211- newX = (49 * self .pos ().x () + self .goingTo .x ()) / 50
212- newY = (49 * self .pos ().y () + self .goingTo .y ()) / 50
213- self .setPos (newX , newY )
214-
215- class target (QtGui .QGraphicsItem ):
216- def __init__ (self , radius , x , y ):
217- QtGui .QGraphicsItem .__init__ (self )
218- self .radius = radius
219- self .setPos (x , y )
220- self .inGroup1 = True
221- self .isGroupMarker = False
222-
223- def boundingRect (self ):
224- """sets the area that is updated by drawing"""
225- adjust = 4.0
226- return QtCore .QRectF (- self .radius - adjust , - self .radius - adjust , 2 * self .radius + 2 * adjust , 2 * self .radius + 2 * adjust )
227-
228- def paint (self , painter , option , widget ):
229- if self .isGroupMarker :
230- painter .setPen (QtGui .QPen (QtCore .Qt .darkGreen , 10 ))
231- elif self .inGroup1 :
232- painter .setPen (QtGui .QPen (QtCore .Qt .magenta , 1 ))
233- else :
234- painter .setPen (QtGui .QPen (QtCore .Qt .yellow , 1 ))
235- bounding = QtCore .QRect (- self .radius ,
236- - self .radius , 2 * self .radius ,
237- 2 * self .radius )
238- painter .drawEllipse (bounding )
239- self .update ()
240-
241- def move (self ):
242- self .setPos (self .pos ().x () + randrange (- 2 , 2 ),
243- self .pos ().y () + randrange (- 2 , 2 ))
244- if self .pos ().x () >= 600 :
245- self .setPos (599 , self .pos ().y ())
246- elif self .pos ().x () <= - 600 :
247- self .setPos (- 599 , self .pos ().y ())
248- if self .pos ().y () >= 400 :
249- self .setPos (self .pos ().x (), 399 )
250- elif self .pos ().y () <= - 400 :
251- self .setPos (self .pos ().x (), - 399 )
252-
253- class View (QtGui .QGraphicsView ):
254- def __init__ (self ):
255- QtGui .QGraphicsView .__init__ (self )
256-
257- self .scene = QtGui .QGraphicsScene (self )
258- self .scene .setItemIndexMethod (QtGui .QGraphicsScene .NoIndex )
259- self .scene .setSceneRect (- 600 , - 600 , 1200 , 1200 )
260- self .setScene (self .scene )
261- self .setCacheMode (QtGui .QGraphicsView .CacheBackground )
262- self .setRenderHint (QtGui .QPainter .Antialiasing )
263- self .setTransformationAnchor (QtGui .QGraphicsView .AnchorUnderMouse )
264- self .setResizeAnchor (QtGui .QGraphicsView .AnchorViewCenter )
265-
266- self .setBackgroundBrush (QtCore .Qt .lightGray )
267-
268- self .scale (0.8 , 0.8 )
269- self .setMinimumSize (1500 , 900 )
270- self .setWindowTitle (self .tr ("Clustering test" ))
271-
272- self .agents = []
273- noofagents = 40 * 8
274-
275- for f in range (noofagents ):
276- item = agent (5 , (randrange (- 800 , 800 )), (randrange (- 600 , 600 )))
277- self .scene .addItem (item )
278- self .agents .append (item )
279-
280- self .targets = []
281- """nooftargets = 110
282-
283- for f in range(nooftargets):
284- item = target(7, (randrange(-900, 900)),
285- (randrange(-200, 200)))
286- self.scene.addItem(item)
287- self.targets.append(item)"""
288-
289- rows = 40
290- columns = 8
291- for row in range (rows ):
292- for col in range (columns ):
293- item = target (7 , - 500 + 1100 * row / rows ,
294- - 100 + 250 * col / columns )
295- self .scene .addItem (item )
296- self .targets .append (item )
297-
298- def accessFunc (x ): return (x .pos ().x (), x .pos ().y (), 0 )
299-
300- t = time .time ()
301- success , pairings = clusterMatch (self .agents , self .targets ,
302- accessFunc , accessFunc )
303- logger .debug (str (time .time () - t ))
304- assert success , "There was a problem executing clusterMatch"
305-
306- for p in pairings :
307- self .agents [p [0 ][0 ]].goingTo = p [1 ][1 ]
308-
309- self .timer = QtCore .QTimer (self )
310- self .connect (self .timer , QtCore .SIGNAL ("timeout()" ), self .step )
311- self .timer .start (50 )
312-
313- def step (self ):
314- global startMoving
315- if startMoving :
316- for a in self .agents :
317- a .move ()
318-
319- def mousePressEvent (self , event ):
320- global startMoving
321- startMoving = True
322-
323- app = QtGui .QApplication (sys .argv )
324-
325- widget = View ()
326- widget .show ()
327-
328- sys .exit (app .exec_ ())
0 commit comments