;; set up some simulated data
(def x (append (iseq 1 18) (list 30 40)))
(def y (+ x (* 2 (normal-rand 20))))
;; construct the plot
(def myplot (plot-points x y))
;; add a new "mouse mode", with menu title, cusror and mouse method name
(send myplot :add-mouse-mode 'point-moving
:title "Point Moving"
:cursor 'finger
:click :do-point-moving)
;; add the new mouse method
(defmeth myplot :do-point-moving (x y a b)
(let ((p (send self :drag-point x y :draw nil)))
(if p (send self :set-regression-line))))
;; add method for drawing the regression line for the current data
(defmeth myplot :set-regression-line ()
(let ((coefs (send self :calculate-coefficients)))
(send self :clear-lines :draw nil)
(send self :abline (select coefs 0) (select coefs 1))))
;; add method for calculating regression coefficients for current data
(defmeth myplot :calculate-coefficients ()
(let* ((i (iseq 0 (- (send self :num-points) 1)))
(x (send self :point-coordinate 0 i))
(y (send self :point-coordinate 1 i))
(m (regression-model x y :print nil)))
(send m :coef-estimates)))
;; add the regression line
(send myplot :set-regression-line)
;; put the plot in "point moving" mode
(send myplot :mouse-mode 'point-moving)
syntax highlighted by Code2HTML, v. 0.9.1