[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: draw window mouse events
- Subject: Re: draw window mouse events
- From: "Mark Hadfield" <m.hadfield(at)niwa.cri.nz>
- Date: Fri, 28 Apr 2000 08:22:43 +1200
- Cache-Post-Path: clam-55!unknown@gust.niwa.cri.nz
- Newsgroups: comp.lang.idl-pvwave
- Organization: NIWA
- References: <39087CCA.263A52DC@u.washington.edu>
- Xref: news.doit.wisc.edu comp.lang.idl-pvwave:19428
"Rick Towler" <rtowler@u.washington.edu> wrote in message
news:39087CCA.263A52DC@u.washington.edu...
> I have been trying to implement middle and third button events in my
> draw widget in much the same way as in the IDL demo d_objworld2.pro. I
> have not found it easy to understand how everything happens in this demo
> program.
>
> I am interested in getting one of these buttons to utilize the TRANSLATE
> feature of the trackball object so I can translate my models. I did
> have the left button transforming the model but I have broken that in my
> quest to understand this whole process which obviously I don't since I
> can't get it working again.
>...
> Hints and/or pointers to examples that are a wee bit simpler than
> d_objworld2 are much appreciated.
Well if you like you can look at my MGHgrWindow class:
http://katipo.niwa.cri.nz/~hadfield/gust/software/idl/mghgrwindow__define.pr
o
It calls a number of other routines, all of which you can find in
http://katipo.niwa.cri.nz/~hadfield/gust/software/idl/MARKS_ROUTINES.tar.gz
MGHgrWindow provides for a range of manipulations with the mouse (rotate,
translate, scale). In particular see methods EventTrack, EventScale and
EventTranslate. But I don't guarantee that its code is any simpler or easier
to understand than the IDL demo.
Looking through the code again, I note that I have used the Trackball object
for rotation only. Scaling and translation are done through calls to the
model's Translate and Scale methods. The basic logic for handling mouse
events is pretty simple:
Press events
Reduce window's QUALITY for faster redraws
Store event.x and event.y (say as x0, y0)
Motion events
Scale/translate according to values of [event.x-x0, event.y-y0]
Set x0 = event.x, y0 = event.y
Draw
Release events
Restore window quality
Draw
Forget x0 & y0
Hope this helps
---
Mark Hadfield
m.hadfield@niwa.cri.nz http://katipo.niwa.cri.nz/~hadfield/
National Institute for Water and Atmospheric Research
PO Box 14-901, Wellington, New Zealand