ToddAtWSU

08-20-2007, 02:47 PM

I have a plot that is 3-dimensional. I start the plot out by having it appear you are above the plot looking down on it so all the lines of data appear to be flat along the x and y axes. I then make it possible to rotate about the x-axis so it appears the user is now standing in front of the object and looking at it. An example of this is if I am in a helicopter over a mountain range, I do not see which is higher, just where the mountains lie. Then when I get to the ground I suddenly see all the peaks and valleys of the mountains. This is how my data appears on the screen when I rotate it about the x-axis.

The problem I am having is I allow the user to click on one of these lines with the mouse. I am capturing the mouse's coordinates and converting them to the ortho coordinates and then looping through my lines to see if the user clicked on a line and if so I am changing its color and doing other things with it. This code is working fine when I have no rotation about the x-axis. But once I add rotation into the picture, my line grabbing is off. My code snippet looks like this:

for( int point = 0 ; point < numPoints ; point++ )

{

// If this is true, we have found a selection

double xData;

double yData;

if( ps->getDataMode( ) == PointSet::VECTOR_DATA )

{

xData = ps->x->at( point );

yData = ps->y->at( point );

}

else if( ps->getDataMode( ) == PointSet::POINTER_DATA )

{

xData = ps->xData[point];

yData = ps->yData[point];

}

double xWaver = ( mCurrentXMax - mCurrentXMin ) * 0.02;

double yWaver = ( mCurrentYMax - mCurrentYMin ) * 0.02 - mDataLayer->getXRotation( );

if( ( xData > x - xWaver && xData < x + xWaver ) &&

( yData > y - yWaver && yData < y + yWaver ) )

{

foundSweep = true;

break;

} // end if( ps->x->at( point ) == x && ps->y->at( point ) == y )

} // end for( int point = 0 ; point < numPoints && foundSweep == false ; point++ )

if( foundSweep == true )

{

break;

}

} // end for( int sets = 0 ; sets < numPointSets && foundSweep == false ; sets++ ) I am creating a "waver" so I basically say if the data falls into the mouseclick +/- a waver amount, I must have clicked on it. But I don't know how to account for the rotation in the x-axis. This stretches things out on the y-axis to the viewer but messes up my grabbing. When a line appeared to run about y = 34, with the rotation, the line appears to be on some spots at y = 34 to y = 36 because of the peaks rising up and the low portions staying low.

Does anybody have an idea how I can account for the rotation to allow almost flawless clicking of the lines in my plot? Thanks for any help you have and please let me know if I can provide any more information that would assist you in helping me resolve this.

The problem I am having is I allow the user to click on one of these lines with the mouse. I am capturing the mouse's coordinates and converting them to the ortho coordinates and then looping through my lines to see if the user clicked on a line and if so I am changing its color and doing other things with it. This code is working fine when I have no rotation about the x-axis. But once I add rotation into the picture, my line grabbing is off. My code snippet looks like this:

for( int point = 0 ; point < numPoints ; point++ )

{

// If this is true, we have found a selection

double xData;

double yData;

if( ps->getDataMode( ) == PointSet::VECTOR_DATA )

{

xData = ps->x->at( point );

yData = ps->y->at( point );

}

else if( ps->getDataMode( ) == PointSet::POINTER_DATA )

{

xData = ps->xData[point];

yData = ps->yData[point];

}

double xWaver = ( mCurrentXMax - mCurrentXMin ) * 0.02;

double yWaver = ( mCurrentYMax - mCurrentYMin ) * 0.02 - mDataLayer->getXRotation( );

if( ( xData > x - xWaver && xData < x + xWaver ) &&

( yData > y - yWaver && yData < y + yWaver ) )

{

foundSweep = true;

break;

} // end if( ps->x->at( point ) == x && ps->y->at( point ) == y )

} // end for( int point = 0 ; point < numPoints && foundSweep == false ; point++ )

if( foundSweep == true )

{

break;

}

} // end for( int sets = 0 ; sets < numPointSets && foundSweep == false ; sets++ ) I am creating a "waver" so I basically say if the data falls into the mouseclick +/- a waver amount, I must have clicked on it. But I don't know how to account for the rotation in the x-axis. This stretches things out on the y-axis to the viewer but messes up my grabbing. When a line appeared to run about y = 34, with the rotation, the line appears to be on some spots at y = 34 to y = 36 because of the peaks rising up and the low portions staying low.

Does anybody have an idea how I can account for the rotation to allow almost flawless clicking of the lines in my plot? Thanks for any help you have and please let me know if I can provide any more information that would assist you in helping me resolve this.