Changeset 2836

Show
Ignore:
Timestamp:
03/31/08 14:38:46 (9 months ago)
Author:
ksprotte
Message:

added rect-publisher to geometry

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/projects/bos/m2/geometry.lisp

    r2835 r2836  
    327327          (plusp lon))) 
    328328 
     329;;; publish - subscribe on rectangles 
     330(defstruct rect-publisher 
     331  subscribers) 
     332 
     333(setf (documentation 'make-rect-publisher 'function) 
     334      "MAKE-RECT-PUBLISHER creates a new publisher object.") 
     335 
     336(defstruct rect-subscriber 
     337  object rectangle callback-fn) 
     338 
     339(defun register-rect-subscriber (publisher subscriber rectangle callback-fn) 
     340  "Register SUBSCRIBER with associated RECTANGLE and CALLBACK-FN with 
     341PUBLISHER, so that on changes in RECTANGLE, CALLBACK-FN will be called 
     342with SUBSCRIBER as the only arg." 
     343  (push (make-rect-subscriber :object subscriber :rectangle (copy-list rectangle) :callback-fn callback-fn) 
     344        (rect-publisher-subscribers publisher))) 
     345 
     346(defun publish-rect-change (publisher rectangle) 
     347  "Tells PUBLISHER about changes in RECTANGLE. All subscribers whose 
     348own rectangle intersects with RECTANGLE will be notified." 
     349  (dolist (subscriber (rect-publisher-subscribers publisher)) 
     350    (when (rectangle-intersects-p rectangle (rect-subscriber-rectangle subscriber)) 
     351      (funcall (rect-subscriber-callback-fn subscriber) (rect-subscriber-object subscriber))))) 
     352 
  • trunk/projects/bos/m2/packages.lisp

    r2834 r2836  
    1515           #:find-boundary-point 
    1616           #:region-to-polygon 
    17            #:format-lon-lat)) 
     17           #:format-lon-lat 
     18           ;; 
     19           #:make-rect-publisher 
     20           #:register-rect-subscriber 
     21           #:publish-rect-change)) 
    1822 
    1923(defpackage :geo-utm