On 2010-05-24 14:16 +0100, Leo wrote:
> Hello,
>
> I have found when running plplot on another thread, none of the drivers
> including qt on linux works well; they all crash the underlying lisp.
> The only driver that works for me is aqt on darwin but sadly my server
> is running linux - openSUSE 11.0 (X86-64).
>
> For information.
>
> Leo
It seems this is due to the fact my code is not robust. Anyone here can
help make it robust? Thanks.
(defmacro with-plot-window (&body body)
(let ((xx (gensym "XX"))
(yy (gensym "YY"))
(corners (gensym "CORNERS")))
`(let ((,xx (make-array 0 :adjustable t :fill-pointer t))
(,yy (make-array 0 :adjustable t :fill-pointer t))
(,corners (list 0 0 0 0)))
(labels ((adjust-corners (x y)
(when (< x (first ,corners))
(setf (first ,corners) x))
(when (> x (second ,corners))
(setf (second ,corners) x))
(when (< y (third ,corners))
(setf (third ,corners) y))
(when (> y (fourth ,corners))
(setf (fourth ,corners) y))
,corners)
(plot-point (x y &optional (symbol-type 2))
(plclear)
(apply #'plwind (adjust-corners x y))
(plcol0 15) ; black foreground
(plbox "bcnst" 0 0 "bcnstv" 0 0)
(pllab "(x)" "(y)" "cl-plplot")
(plcol0 1) ; red foreground
(vector-push-extend x ,xx)
(vector-push-extend y ,yy)
(plpoin ,xx ,yy symbol-type)
(plline ,xx ,yy)
(plflush)))
(plsdev *plot-device*)
(plscol0 0 255 255 255) ; swap black and white
(plscol0 15 0 0 0)
(plinit)
(plwid 1)
(pladv 0)
(plvsta)
(unwind-protect (progn ,@body)
(plend))))))
;; test
(with-plot-window
(loop for (x y) in '((1 1) (-2 4) (3 9) (-4 16) (5 25))
do (plot-point x y)
(sleep 1)))
Leo
--
CCL-USER> (if you fail to plan (plan to fail))
------------------------------------------------------------------------------
_______________________________________________
Plplot-general mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/plplot-general