comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » XOR graphics
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
XOR graphics [message #18314] Wed, 15 December 1999 00:00
your name is currently offline  your name
Messages: 7
Registered: June 1999
Junior Member
Hi all,
I was intrigued by someone's comments about using XOR graphics mode (I
think it was DWF).

I am using XOR to plot a moving object. It works OK on a terminal using
TRUECOLOR but screws up the colours on a terminal using PSEUDOCOLOR.

I am still trying to work this out, but I thought I'd try using a PIXMAP
window followed by a copy to the viewable window. However, this
approach, although worked OK on both terminals, was 10 times slower then
using XOR.

Since my application is time critical, it looks as if I'm stuck with
XOR.

I'm using IDL 5.2 under OpenVMS using DECWindows (X windows). Below is a
copy of my test software. I's welcome any comments (it may not be the
tidiest of code but it works).
FUNCTION Plot_rotated_shape, X, Y, Shape, Clr
Point_1 = CONVERT_COORD(X[0], Y[0], /TO_NORMAL) ; Values in norm
coords
Point_2 = CONVERT_COORD(X[1], Y[1], /TO_NORMAL) ; Values in norm
coords
Ang = ATAN(Point_2[1] - Point_1[1], $
Point_2[0] - Point_1[0]) * !RADEG ; DRAWN angle of line
T3D, /RESET, $ ; Create transform matrix
ROTATE = [0, 0, Ang] ; ...rotated to fit line
T3D, TRANSLATE = Point_2 ; ...and moved to end point
POLYFILL, Shape, COLOR = Clr, /NORMAL, /T3D ; Plot shape
RETURN, !P.T ; Return transformation
END

PRO Initialise, Obj_1, Obj_2

DEVICE, DECOMPOSED = 0, RETAIN = 2 ; Screen setup
TVLCT, [255, 155], [0, 200], [0, 255], 1 ; Define colours

Obj_1.X_coord = FINDGEN(200) ; Create some data
Obj_1.Y_coord = Obj_1.X_coord ^ 2
Obj_2.X_coord = FINDGEN(200)
Obj_2.Y_coord = 40000 - Obj_2.X_coord ^ 2

PLOT, Obj_1.X_coord, Obj_1.Y_coord, TICKLEN = 1, /NODATA ; Plot axes

Shape_x = [-15.0, -15.0, 15.0, 15.0, -15.0] ; Define shape
Shape_y = [ -5.0, 5.0, 5.0, -5.0, -5.0]

Obj_1.Shape = CONVERT_COORD(Shape_x, Shape_y, $ ; ...in normalised
/DEVICE, /TO_NORMAL) ; coords
Obj_2.Shape = Obj_1.Shape

END

PRO Exor

; This program draws 2 moving objects along the object trajectories.

; The objects are drawn and then redrawn which effectively erases them
; (because the XOR graphics mode is selected). No underlying info is
lost.

Obj_1 = {X_coord:FLTARR(200), Y_coord:FLTARR(200), Shape:FLTARR(3, 5)}
Obj_2 = Obj_1

Initialise, Obj_1, Obj_2 ; Create some data

Start = SYSTIME(1)

FOR J = 1, 199 DO BEGIN ; Work thru all data
PLOTS, Obj_1.X_coord[J - 1:J], Obj_1.Y_coord[J - 1:J], COLOR = 1 ;
Add track
PLOTS, Obj_2.X_coord[J - 1:J], Obj_2.Y_coord[J - 1:J], COLOR = 2 ;
Add track
DEVICE, SET_GRAPHICS_FUNCTION = 6 ; Set XOR
Obj_1_T3 = Plot_rotated_shape(Obj_1.X_coord[J - 1:J], $ ; Add shape
Obj_1.Y_coord[J - 1:J], Obj_1.Shape, 1)
Obj_2_T3 = Plot_rotated_shape(Obj_2.X_coord[J - 1:J], $ ; Add shape
Obj_2.Y_coord[J - 1:J], Obj_2.Shape, 2)
; WAIT, 0.05 ; Uncomment to watch plot
POLYFILL, Obj_2.Shape, COLOR = 2, /NORMAL, /T3D ; Re-plot shapes
(delete them)
!P.T = Obj_1_T3 ; Transform to other object
POLYFILL, Obj_1.Shape, COLOR = 1, /NORMAL, /T3D
DEVICE, SET_GRAPHICS_FUNCTION = 3 ; Reset the graphics mode
ENDFOR

PRINT, SYSTIME(1) - Start

END

PRO Pix

; This program draws 2 moving objects along the object trajectories.

; Objects are PLOTted to a pixmap, which is subsequently copied to the
; current window.

Obj_1 = {X_coord:FLTARR(200), Y_coord:FLTARR(200), Shape:FLTARR(3, 5)}
Obj_2 = Obj_1

WINDOW, 1, XSIZE = 640, YSIZE = 512 ; Visible window
WINDOW, 0, XSIZE = 640, YSIZE = 512, /PIXMAP ; Define pixmap window
Initialise, Obj_1, Obj_2 ; Create some data

Start = SYSTIME(1)

FOR J = 1, 199 DO BEGIN ; Work thru all data
WSET, 0 ; Use pixmap
PLOT, Obj_1.X_coord, Obj_1.Y_coord, TICKLEN = 1, /NODATA ; Add axes
(white)
OPLOT, Obj_1.X_coord[0:J], Obj_1.Y_coord[0:J], COLOR = 1 ; Add track
OPLOT, Obj_2.X_coord[0:J], Obj_2.Y_coord[0:J], COLOR = 2 ; Add track
Obj_1_T3 = Plot_rotated_shape(Obj_1.X_coord[J - 1:J], $ ; Add shape
Obj_1.Y_coord[J - 1:J], Obj_1.Shape, 1)
Obj_2_T3 = Plot_rotated_shape(Obj_2.X_coord[J - 1:J], $ ; Add shape
Obj_2.Y_coord[J - 1:J], Obj_2.Shape, 2)
; WAIT, 0.05 ; Uncomment to watch plot
WSET, 1
DEVICE, COPY = [0, 0, 640, 512, 0, 0, 0] ; Place on visible window
ENDFOR

PRINT, SYSTIME(1) - Start

END

> EXOR
0.601
> PIX
6.000

Ian Dean

Ian.Dean@GECM.COM
[Message index]
 
Read Message
Previous Topic: xmanager,/no_block
Next Topic: Another Color Twist

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Fri Oct 10 23:04:29 PDT 2025

Total time taken to generate the page: 1.11612 seconds