Dylan,
> I've got a wireframe cube in which I am plotting some (x,y,z) data.
> That works well. What I'd like the user to be able to do is
> effectively crop the data in the cube in a similar fashion to how it
> is done in 2D using Photoshop. So, for example, when the user
> chooses to crop the data, they will be presented with a greyed out,
> quasi translucent cube inside the wireframe cube and by using the
> mouse, they can move the cube and resize it. Once they have moved
> the greyed out cube around and size it to include all the data they
> desire, they can hit enter or whatever, and my code can take over
> extracting the data plotted within this grey cube and do stuff with
> it.
Well, fine.
> So, I know how to make cubes and draw points and display triangles.
> But I have no idea who to make a cube that the user can enlarge by
> dragging the corners of it or move around by dragging the middle of
> it.
>
> Any thoughts and/or suggestions?
Yes.
I've had to build a 3D-GUI last year myself as a part of the work for
my universities degree.
Aside from the classical 3D-GUI (three orthogonal views as 2D-
projections), I would like to propose the following solution:
* make the inner cube wireframed also (this enables you to use
"picking" more reliably than with a solid / xparent geometry -
picking problem: corners "hidden" by the cubes faces / determining
what the user wanted to pick from an (Z-)ordered list of intersec-
tions)
If you should want to impose the impression that the inner cube
has visible faces rather than just being a wireframe, use Shape3Ds
with some xparency, additionally.
When you stick with the Cube(), you'll probably have to do some
clever maths for scaling and positioning. A wf geometry(array) is
much more flexible in this aspect.
* put some tiny, solid cubes as "handles" at its corners
* use picking along with colouring / hiliting to identify the chosen
geometry / handle. Especially the hiliting can take a lot of
possible surprises for the user from your GUI. The visual feedback
seems essential to me - especially with the sometimes "interesting"
way, picking works.
* use the prebuilt PickBehaviour-classes to move the corners around.
-> PickMouseRotate and PickMouseTranslate (afair), but keep in mind
that when you rotate the model in 3-space, the axes still stay their
way. The standard mousepicking-classes do not respect the orienta-
tion of the current view. This might lead to some nasty surprises.
* use J3Ds cabapilities of scaling instead of rebuilding your geo-
metry every time. Keep an internal variable that stores your current
scalefactor, since after an operation the new size will be "1.0".
* Keep a "reset view" button at hand - in case the user should feel
lost and / or confused.
Maybe you might want to enable the user to have the inner cube
("focus") rendered solid / xparent on demand to get a better impres-
sion of its current form and extent. A Swing-button might serve you
well. (To mix Swing with J3D, please have a look at the FAQ at
J3d.org, in case you haven't done this yet. In short: globally switch
off Swings lightweightness.)
Pros:
+ easy navigation, very little abstraction for the user.
+ no switching between your rendered scene and the three 2D-pro-
jections / no multiported views.
+ very little (or even none at all) context switching for the user.
He/She should be able to do everything that is needed in one con-
text, before switching over to the rest of the (2D-)GUI (if any).
The switching is tiring and requires many long mouse moves. This
is highly inefficient.
Cons:
- nonstandard; the user thus has to be taught how to use this
interface
last but not least:
* keep in mind that picking sometimes might behave a bit strange and
that it might require some tweaking
* have a look at and keep an eye on the (picking) demos delivered with
the J3D-API / documentation / tutorial. The three dimensional game
might help you very much for a start. It is a slight bit similar to
what you want to do. ("FourByFour")
If you want to spare some work, have the user modify only the facing
sides. Three buttons "<- X ->", "<- Y ->" and "<- Z ->" (nice styled
icons, of course) should do the trick.
+ less work for you, easier geometry modification
- less intuitive GUI, more 3D-/2D-context switching for the user,
"heavier mousing". ;-)
- less flexible
HTH.
Regards,
Andre
===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST". For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".