tweak XYWnd code

This commit is contained in:
Garux 2019-08-23 14:40:45 +03:00
parent 1e0f7ba781
commit fb773e2bcb
3 changed files with 96 additions and 224 deletions

View File

@ -104,9 +104,7 @@ VIEWTYPE XYWindow_getViewType(){
} }
Vector3 XYWindow_windowToWorld( const WindowVector& position ){ Vector3 XYWindow_windowToWorld( const WindowVector& position ){
Vector3 result( 0, 0, 0 ); return g_pParentWnd->GetXYWnd()->XY_ToPoint( static_cast<int>( position.x() ), static_cast<int>( position.y() ) );
g_pParentWnd->GetXYWnd()->XY_ToPoint( static_cast<int>( position.x() ), static_cast<int>( position.y() ), result );
return result;
} }
Vector3 Camera_getOrigin(){ Vector3 Camera_getOrigin(){

View File

@ -262,15 +262,15 @@ void XYWnd::ZoomOut(){
SetScale( Scale() * 4.0f / 5.0f ); SetScale( Scale() * 4.0f / 5.0f );
} }
void XYWnd::ZoomInWithMouse( int pointx, int pointy ){ void XYWnd::ZoomInWithMouse( int x, int y ){
const float old_scale = Scale(); const float old_scale = Scale();
ZoomIn(); ZoomIn();
if ( g_xywindow_globals.m_bZoomInToPointer && old_scale != Scale() ) { if ( g_xywindow_globals.m_bZoomInToPointer && old_scale != Scale() ) {
const float scale_diff = 1.0 / old_scale - 1.0 / Scale(); const float scale_diff = 1.0 / old_scale - 1.0 / Scale();
NDIM1NDIM2( m_viewType ) NDIM1NDIM2( m_viewType )
Vector3 origin = GetOrigin(); Vector3 origin = GetOrigin();
origin[nDim1] += scale_diff * ( pointx - 0.5 * Width() ); origin[nDim1] += scale_diff * ( x - 0.5 * Width() );
origin[nDim2] -= scale_diff * ( pointy - 0.5 * Height() ); origin[nDim2] -= scale_diff * ( y - 0.5 * Height() );
SetOrigin( origin ); SetOrigin( origin );
} }
} }
@ -402,31 +402,31 @@ gboolean xywnd_chasemouse( gpointer data ){
return TRUE; return TRUE;
} }
bool XYWnd::chaseMouseMotion( int pointx, int pointy ){ bool XYWnd::chaseMouseMotion( const int x, const int y ){
m_chasemouse_delta_x = 0; m_chasemouse_delta_x = 0;
m_chasemouse_delta_y = 0; m_chasemouse_delta_y = 0;
if ( g_xywindow_globals_private.m_bChaseMouse && getButtonState() == RAD_LBUTTON ) { if ( g_xywindow_globals_private.m_bChaseMouse && getButtonState() == RAD_LBUTTON ) {
const int epsilon = 16; const int epsilon = 16;
if ( pointx < epsilon ) { if ( x < epsilon ) {
m_chasemouse_delta_x = std::max( pointx, 0 ) - epsilon; m_chasemouse_delta_x = std::max( x, 0 ) - epsilon;
} }
else if ( ( pointx - m_nWidth ) > -epsilon ) { else if ( ( x - m_nWidth ) > -epsilon ) {
m_chasemouse_delta_x = std::min( ( pointx - m_nWidth ), 0 ) + epsilon; m_chasemouse_delta_x = std::min( ( x - m_nWidth ), 0 ) + epsilon;
} }
if ( pointy < epsilon ) { if ( y < epsilon ) {
m_chasemouse_delta_y = std::max( pointy, 0 ) - epsilon; m_chasemouse_delta_y = std::max( y, 0 ) - epsilon;
} }
else if ( ( pointy - m_nHeight ) > -epsilon ) { else if ( ( y - m_nHeight ) > -epsilon ) {
m_chasemouse_delta_y = std::min( ( pointy - m_nHeight ), 0 ) + epsilon; m_chasemouse_delta_y = std::min( ( y - m_nHeight ), 0 ) + epsilon;
} }
if ( m_chasemouse_delta_y != 0 || m_chasemouse_delta_x != 0 ) { if ( m_chasemouse_delta_y != 0 || m_chasemouse_delta_x != 0 ) {
//globalOutputStream() << "chasemouse motion: x=" << pointx << " y=" << pointy << "... "; //globalOutputStream() << "chasemouse motion: x=" << x << " y=" << y << "... ";
m_chasemouse_current_x = pointx; m_chasemouse_current_x = x;
m_chasemouse_current_y = pointy; m_chasemouse_current_y = y;
if ( m_chasemouse_handler == 0 ) { if ( m_chasemouse_handler == 0 ) {
//globalOutputStream() << "chasemouse timer start... "; //globalOutputStream() << "chasemouse timer start... ";
g_chasemouse_timer.start(); g_chasemouse_timer.start();
@ -548,26 +548,16 @@ void XYWnd::overlayDraw(){
glMatrixMode( GL_MODELVIEW ); glMatrixMode( GL_MODELVIEW );
glLoadMatrixf( reinterpret_cast<const float*>( &m_modelview ) ); glLoadMatrixf( reinterpret_cast<const float*>( &m_modelview ) );
NDIM1NDIM2( m_viewType )
Vector3 v( g_vector3_identity );
glColor4f( 0.2f, 0.9f, 0.2f, 0.8f ); glColor4f( 0.2f, 0.9f, 0.2f, 0.8f );
glBegin( GL_LINES ); glBegin( GL_LINES );
if ( m_viewType == XY ) { for( int i = 0, dim1 = nDim1, dim2 = nDim2; i < 2; ++i, std::swap( dim1, dim2 ) ){
glVertex2f( 2.0f * g_MinWorldCoord, m_mousePosition[1] ); v[dim1] = m_mousePosition[dim1];
glVertex2f( 2.0f * g_MaxWorldCoord, m_mousePosition[1] ); v[dim2] = 2.0f * g_MinWorldCoord;
glVertex2f( m_mousePosition[0], 2.0f * g_MinWorldCoord ); glVertex3fv( vector3_to_array( v ) );
glVertex2f( m_mousePosition[0], 2.0f * g_MaxWorldCoord ); v[dim2] = 2.0f * g_MaxWorldCoord;
} glVertex3fv( vector3_to_array( v ) );
else if ( m_viewType == YZ ) {
glVertex3f( m_mousePosition[0], 2.0f * g_MinWorldCoord, m_mousePosition[2] );
glVertex3f( m_mousePosition[0], 2.0f * g_MaxWorldCoord, m_mousePosition[2] );
glVertex3f( m_mousePosition[0], m_mousePosition[1], 2.0f * g_MinWorldCoord );
glVertex3f( m_mousePosition[0], m_mousePosition[1], 2.0f * g_MaxWorldCoord );
}
else
{
glVertex3f( 2.0f * g_MinWorldCoord, m_mousePosition[1], m_mousePosition[2] );
glVertex3f( 2.0f * g_MaxWorldCoord, m_mousePosition[1], m_mousePosition[2] );
glVertex3f( m_mousePosition[0], m_mousePosition[1], 2.0f * g_MinWorldCoord );
glVertex3f( m_mousePosition[0], m_mousePosition[1], 2.0f * g_MaxWorldCoord );
} }
glEnd(); glEnd();
} }
@ -792,13 +782,10 @@ FBO* XYWnd::fbo_get(){
return m_fbo = m_fbo? m_fbo : GlobalOpenGL().support_ARB_framebuffer_object? new FBO : new FBO_fallback; return m_fbo = m_fbo? m_fbo : GlobalOpenGL().support_ARB_framebuffer_object? new FBO : new FBO_fallback;
} }
void XYWnd::SetCustomPivotOrigin( int pointx, int pointy ){ void XYWnd::SetCustomPivotOrigin( int x, int y ) const {
Vector3 point;
XY_ToPoint( pointx, pointy, point );
bool set[3] = { true, true, true }; bool set[3] = { true, true, true };
set[GetViewType()] = false; set[GetViewType()] = false;
GlobalSelectionSystem().setCustomTransformOrigin( XY_ToPoint( x, y ), set );
GlobalSelectionSystem().setCustomTransformOrigin( point, set );
SceneChangeNotify(); SceneChangeNotify();
} }
@ -807,9 +794,8 @@ unsigned int MoveCamera_buttons(){
} }
void XYWnd_PositionCamera( XYWnd* xywnd, int x, int y, CamWnd& camwnd ){ void XYWnd_PositionCamera( XYWnd* xywnd, int x, int y, CamWnd& camwnd ){
Vector3 origin( Camera_getOrigin( camwnd ) ); Vector3 origin = xywnd->XY_ToPoint( x, y, true );
xywnd->XY_ToPoint( x, y, origin ); origin[xywnd->GetViewType()] = Camera_getOrigin( camwnd )[xywnd->GetViewType()];
xywnd->XY_SnapToGrid( origin );
Camera_setOrigin( camwnd, origin ); Camera_setOrigin( camwnd, origin );
} }
@ -819,11 +805,7 @@ unsigned int OrientCamera_buttons(){
void XYWnd_OrientCamera( XYWnd* xywnd, int x, int y, CamWnd& camwnd ){ void XYWnd_OrientCamera( XYWnd* xywnd, int x, int y, CamWnd& camwnd ){
//globalOutputStream() << Camera_getAngles( camwnd ) << " b4\n"; //globalOutputStream() << Camera_getAngles( camwnd ) << " b4\n";
Vector3 point = g_vector3_identity; const Vector3 point = xywnd->XY_ToPoint( x, y ) - Camera_getOrigin( camwnd );
xywnd->XY_ToPoint( x, y, point );
//xywnd->XY_SnapToGrid( point );
vector3_subtract( point, Camera_getOrigin( camwnd ) );
const VIEWTYPE viewtype = xywnd->GetViewType(); const VIEWTYPE viewtype = xywnd->GetViewType();
NDIM1NDIM2( viewtype ) NDIM1NDIM2( viewtype )
const int nAngle = ( viewtype == XY ) ? CAMERA_YAW : CAMERA_PITCH; const int nAngle = ( viewtype == XY ) ? CAMERA_YAW : CAMERA_PITCH;
@ -831,7 +813,7 @@ void XYWnd_OrientCamera( XYWnd* xywnd, int x, int y, CamWnd& camwnd ){
Vector3 angles( Camera_getAngles( camwnd ) ); Vector3 angles( Camera_getAngles( camwnd ) );
angles[nAngle] = static_cast<float>( radians_to_degrees( atan2( point[nDim2], point[nDim1] ) ) ); angles[nAngle] = static_cast<float>( radians_to_degrees( atan2( point[nDim2], point[nDim1] ) ) );
if( angles[CAMERA_YAW] < 0 ) if( angles[CAMERA_YAW] < 0 )
angles[CAMERA_YAW] = angles[CAMERA_YAW] + 360; angles[CAMERA_YAW] += 360;
if ( nAngle == CAMERA_PITCH ){ if ( nAngle == CAMERA_PITCH ){
if( fabs( angles[CAMERA_PITCH] ) > 90 ){ if( fabs( angles[CAMERA_PITCH] ) > 90 ){
angles[CAMERA_PITCH] = ( angles[CAMERA_PITCH] > 0 ) ? ( -angles[CAMERA_PITCH] + 180 ) : ( -angles[CAMERA_PITCH] - 180 ); angles[CAMERA_PITCH] = ( angles[CAMERA_PITCH] > 0 ) ? ( -angles[CAMERA_PITCH] + 180 ) : ( -angles[CAMERA_PITCH] - 180 );
@ -888,11 +870,8 @@ void XYWnd::NewBrushDrag_End( int x, int y ){
} }
void XYWnd::NewBrushDrag( int x, int y, bool square, bool cube ){ void XYWnd::NewBrushDrag( int x, int y, bool square, bool cube ){
Vector3 mins, maxs; Vector3 mins = XY_ToPoint( m_nNewBrushPressx, m_nNewBrushPressy, true );
XY_ToPoint( m_nNewBrushPressx, m_nNewBrushPressy, mins ); Vector3 maxs = XY_ToPoint( x, y, true );
XY_SnapToGrid( mins );
XY_ToPoint( x, y, maxs );
XY_SnapToGrid( maxs );
const int nDim = GetViewType(); const int nDim = GetViewType();
@ -1212,11 +1191,8 @@ void XYWnd::XY_MouseUp( int x, int y, unsigned int buttons ){
} }
void XYWnd::XY_MouseMoved( int x, int y, unsigned int buttons ){ void XYWnd::XY_MouseMoved( int x, int y, unsigned int buttons ){
{ m_mousePosition = XY_ToPoint( x, y, true );
m_mousePosition[0] = m_mousePosition[1] = m_mousePosition[2] = 0.0;
XY_ToPoint( x, y, m_mousePosition );
XY_SnapToGrid( m_mousePosition );
}
// rbutton = drag xy origin // rbutton = drag xy origin
if ( m_move_started ) { if ( m_move_started ) {
} }
@ -1290,19 +1266,14 @@ inline float normalised_to_world( float normalised, float world_origin, float no
} }
// TTimo: watch it, this doesn't init one of the 3 coords Vector3 XYWnd::XY_ToPoint( int x, int y, bool snap /* = false */ ) const {
void XYWnd::XY_ToPoint( int x, int y, Vector3& point ){ Vector3 point( g_vector3_identity );
const float normalised2world_scale_x = m_nWidth / 2 / m_fScale; const float normalised2world_scale_x = m_nWidth / 2 / m_fScale;
const float normalised2world_scale_y = m_nHeight / 2 / m_fScale; const float normalised2world_scale_y = m_nHeight / 2 / m_fScale;
NDIM1NDIM2( m_viewType ) NDIM1NDIM2( m_viewType )
point[nDim1] = normalised_to_world( screen_normalised( x, m_nWidth ), m_vOrigin[nDim1], normalised2world_scale_x ); point[nDim1] = normalised_to_world( screen_normalised( x, m_nWidth ), m_vOrigin[nDim1], normalised2world_scale_x );
point[nDim2] = normalised_to_world( -screen_normalised( y, m_nHeight ), m_vOrigin[nDim2], normalised2world_scale_y ); point[nDim2] = normalised_to_world( -screen_normalised( y, m_nHeight ), m_vOrigin[nDim2], normalised2world_scale_y );
} return snap? vector3_snapped( point, GetSnapGridSize() ) : point;
void XYWnd::XY_SnapToGrid( Vector3& point ){
NDIM1NDIM2( m_viewType )
point[nDim1] = float_snapped( point[nDim1], GetSnapGridSize() );
point[nDim2] = float_snapped( point[nDim2], GetSnapGridSize() );
} }
@ -1444,10 +1415,6 @@ void WXY_SetBackgroundImage(){
============== ==============
*/ */
double two_to_the_power( int power ){
return pow( 2.0f, power );
}
void XYWnd::XY_DrawAxis( void ){ void XYWnd::XY_DrawAxis( void ){
const char g_AxisName[3] = { 'X', 'Y', 'Z' }; const char g_AxisName[3] = { 'X', 'Y', 'Z' };
NDIM1NDIM2( m_viewType ) NDIM1NDIM2( m_viewType )
@ -1510,7 +1477,7 @@ void XYWnd::XY_DrawGrid( void ) {
int power = minor_power; int power = minor_power;
while ( ( power % 3 ) != 0 || ( step * m_fScale ) <= 32.0f ) { // make sure major grid spacing is at least 32 pixels on the screen while ( ( power % 3 ) != 0 || ( step * m_fScale ) <= 32.0f ) { // make sure major grid spacing is at least 32 pixels on the screen
++power; ++power;
step = float(two_to_the_power( power ) ); step = pow( 2.0f, power );
} }
mask = ( 1 << ( power - minor_power ) ) - 1; mask = ( 1 << ( power - minor_power ) ) - 1;
while ( ( stepx * m_fScale ) <= 32.0f ) // text step x must be at least 32 while ( ( stepx * m_fScale ) <= 32.0f ) // text step x must be at least 32
@ -1818,29 +1785,18 @@ void XYWnd::XY_DrawBlockGrid(){
} }
void XYWnd::DrawCameraIcon( const Vector3& origin, const Vector3& angles ){ void XYWnd::DrawCameraIcon( const Vector3& origin, const Vector3& angles ){
float x, y, fov, box;
double a;
fov = 48 / m_fScale;
box = 16 / m_fScale;
// globalOutputStream() << "pitch " << angles[CAMERA_PITCH] << " yaw " << angles[CAMERA_YAW] << "\n"; // globalOutputStream() << "pitch " << angles[CAMERA_PITCH] << " yaw " << angles[CAMERA_YAW] << "\n";
const float fov = 48 / m_fScale;
const float box = 16 / m_fScale;
if ( m_viewType == XY ) { NDIM1NDIM2( m_viewType )
x = origin[0]; const float x = origin[nDim1];
y = origin[1]; const float y = origin[nDim2];
a = degrees_to_radians( angles[CAMERA_YAW] ); const double a = ( m_viewType == XY )?
} degrees_to_radians( angles[CAMERA_YAW] )
else if ( m_viewType == YZ ) { : ( m_viewType == YZ )?
x = origin[1]; degrees_to_radians( ( angles[CAMERA_YAW] > 180 ) ? ( 180.0f - angles[CAMERA_PITCH] ) : angles[CAMERA_PITCH] )
y = origin[2]; : degrees_to_radians( ( angles[CAMERA_YAW] < 270 && angles[CAMERA_YAW] > 90 ) ? ( 180.0f - angles[CAMERA_PITCH] ) : angles[CAMERA_PITCH] );
a = degrees_to_radians( ( angles[CAMERA_YAW] > 180 ) ? ( 180.0f - angles[CAMERA_PITCH] ) : angles[CAMERA_PITCH] );
}
else
{
x = origin[0];
y = origin[2];
a = degrees_to_radians( ( angles[CAMERA_YAW] < 270 && angles[CAMERA_YAW] > 90 ) ? ( 180.0f - angles[CAMERA_PITCH] ) : angles[CAMERA_PITCH] );
}
glColor3f( 0.0, 0.0, 1.0 ); glColor3f( 0.0, 0.0, 1.0 );
glBegin( GL_LINE_STRIP ); glBegin( GL_LINE_STRIP );
@ -1861,8 +1817,6 @@ void XYWnd::DrawCameraIcon( const Vector3& origin, const Vector3& angles ){
} }
// can be greatly simplified but per usual i am in a hurry
// which is not an excuse, just a fact
void XYWnd::PaintSizeInfo( const int nDim1, const int nDim2 ){ void XYWnd::PaintSizeInfo( const int nDim1, const int nDim2 ){
const AABB bounds = GlobalSelectionSystem().getBoundsSelected(); const AABB bounds = GlobalSelectionSystem().getBoundsSelected();
if ( bounds.extents == g_vector3_identity ) { if ( bounds.extents == g_vector3_identity ) {
@ -1875,130 +1829,56 @@ void XYWnd::PaintSizeInfo( const int nDim1, const int nDim2 ){
const Vector3 size = bounds.extents * 2; const Vector3 size = bounds.extents * 2;
const char* dimStrings[] = {"x:", "y:", "z:"}; const char* dimStrings[] = {"x:", "y:", "z:"};
typedef const char* OrgStrings[2];
const OrgStrings orgStrings[] = { { "x:", "y:", }, { "x:", "z:", }, { "y:", "z:", } };
glColor3f( g_xywindow_globals.color_selbrushes[0] * .65f, glColor3fv( vector3_to_array( g_xywindow_globals.color_selbrushes * .65f ) );
g_xywindow_globals.color_selbrushes[1] * .65f,
g_xywindow_globals.color_selbrushes[2] * .65f );
StringOutputStream dimensions( 16 ); StringOutputStream dimensions( 16 );
if ( m_viewType == XY ) { Vector3 v( g_vector3_identity );
glBegin( GL_LINES );
glVertex3f( min[nDim1], min[nDim2] - 6.0f / m_fScale, 0.0f );
glVertex3f( min[nDim1], min[nDim2] - 10.0f / m_fScale, 0.0f );
glVertex3f( min[nDim1], min[nDim2] - 10.0f / m_fScale, 0.0f );
glVertex3f( max[nDim1], min[nDim2] - 10.0f / m_fScale, 0.0f );
glVertex3f( max[nDim1], min[nDim2] - 6.0f / m_fScale, 0.0f );
glVertex3f( max[nDim1], min[nDim2] - 10.0f / m_fScale, 0.0f );
glVertex3f( max[nDim1] + 6.0f / m_fScale, min[nDim2], 0.0f );
glVertex3f( max[nDim1] + 10.0f / m_fScale, min[nDim2], 0.0f );
glVertex3f( max[nDim1] + 10.0f / m_fScale, min[nDim2], 0.0f );
glVertex3f( max[nDim1] + 10.0f / m_fScale, max[nDim2], 0.0f );
glVertex3f( max[nDim1] + 6.0f / m_fScale, max[nDim2], 0.0f );
glVertex3f( max[nDim1] + 10.0f / m_fScale, max[nDim2], 0.0f );
glBegin( GL_LINE_STRIP );
v[nDim1] = min[nDim1];
v[nDim2] = min[nDim2] - 6.f / m_fScale;
glVertex3fv( vector3_to_array( v ) );
v[nDim2] = min[nDim2] - 10.f / m_fScale;
glVertex3fv( vector3_to_array( v ) );
v[nDim1] = max[nDim1];
glVertex3fv( vector3_to_array( v ) );
v[nDim2] = min[nDim2] - 6.f / m_fScale;
glVertex3fv( vector3_to_array( v ) );
glEnd(); glEnd();
glRasterPos3f( mid[nDim1], min[nDim2] - 20.0f / m_fScale, 0.0f ); glBegin( GL_LINE_STRIP );
v[nDim2] = max[nDim2];
v[nDim1] = max[nDim1] + 6.f / m_fScale;
glVertex3fv( vector3_to_array( v ) );
v[nDim1] = max[nDim1] + 10.f / m_fScale;
glVertex3fv( vector3_to_array( v ) );
v[nDim2] = min[nDim2];
glVertex3fv( vector3_to_array( v ) );
v[nDim1] = max[nDim1] + 6.f / m_fScale;
glVertex3fv( vector3_to_array( v ) );
glEnd();
v[nDim1] = mid[nDim1];
v[nDim2] = min[nDim2] - 20.f / m_fScale;
glRasterPos3fv( vector3_to_array( v ) );
dimensions << dimStrings[nDim1] << size[nDim1]; dimensions << dimStrings[nDim1] << size[nDim1];
GlobalOpenGL().drawString( dimensions.c_str() ); GlobalOpenGL().drawString( dimensions.c_str() );
dimensions.clear(); dimensions.clear();
glRasterPos3f( max[nDim1] + 16.0f / m_fScale, mid[nDim2], 0.0f ); v[nDim1] = max[nDim1] + 16.f / m_fScale;
v[nDim2] = mid[nDim2];
glRasterPos3fv( vector3_to_array( v ) );
dimensions << dimStrings[nDim2] << size[nDim2]; dimensions << dimStrings[nDim2] << size[nDim2];
GlobalOpenGL().drawString( dimensions.c_str() ); GlobalOpenGL().drawString( dimensions.c_str() );
dimensions.clear(); dimensions.clear();
glRasterPos3f( min[nDim1] + 4, max[nDim2] + 8 / m_fScale, 0.0f ); v[nDim1] = min[nDim1] + 4.f;
dimensions << "(" << orgStrings[0][0] << min[nDim1] << " " << orgStrings[0][1] << max[nDim2] << ")"; v[nDim2] = max[nDim2] + 8.f / m_fScale;
glRasterPos3fv( vector3_to_array( v ) );
dimensions << "(" << dimStrings[nDim1] << min[nDim1] << " " << dimStrings[nDim2] << max[nDim2] << ")";
GlobalOpenGL().drawString( dimensions.c_str() ); GlobalOpenGL().drawString( dimensions.c_str() );
}
else if ( m_viewType == XZ ) {
glBegin( GL_LINES );
glVertex3f( min[nDim1], 0, min[nDim2] - 6.0f / m_fScale );
glVertex3f( min[nDim1], 0, min[nDim2] - 10.0f / m_fScale );
glVertex3f( min[nDim1], 0,min[nDim2] - 10.0f / m_fScale );
glVertex3f( max[nDim1], 0,min[nDim2] - 10.0f / m_fScale );
glVertex3f( max[nDim1], 0,min[nDim2] - 6.0f / m_fScale );
glVertex3f( max[nDim1], 0,min[nDim2] - 10.0f / m_fScale );
glVertex3f( max[nDim1] + 6.0f / m_fScale, 0,min[nDim2] );
glVertex3f( max[nDim1] + 10.0f / m_fScale, 0,min[nDim2] );
glVertex3f( max[nDim1] + 10.0f / m_fScale, 0,min[nDim2] );
glVertex3f( max[nDim1] + 10.0f / m_fScale, 0,max[nDim2] );
glVertex3f( max[nDim1] + 6.0f / m_fScale, 0,max[nDim2] );
glVertex3f( max[nDim1] + 10.0f / m_fScale, 0,max[nDim2] );
glEnd();
glRasterPos3f( mid[nDim1], 0, min[nDim2] - 20.0f / m_fScale );
dimensions << dimStrings[nDim1] << size[nDim1];
GlobalOpenGL().drawString( dimensions.c_str() );
dimensions.clear();
glRasterPos3f( max[nDim1] + 16.0f / m_fScale, 0, mid[nDim2] );
dimensions << dimStrings[nDim2] << size[nDim2];
GlobalOpenGL().drawString( dimensions.c_str() );
dimensions.clear();
glRasterPos3f( min[nDim1] + 4, 0, max[nDim2] + 8 / m_fScale );
dimensions << "(" << orgStrings[1][0] << min[nDim1] << " " << orgStrings[1][1] << max[nDim2] << ")";
GlobalOpenGL().drawString( dimensions.c_str() );
}
else
{
glBegin( GL_LINES );
glVertex3f( 0, min[nDim1], min[nDim2] - 6.0f / m_fScale );
glVertex3f( 0, min[nDim1], min[nDim2] - 10.0f / m_fScale );
glVertex3f( 0, min[nDim1], min[nDim2] - 10.0f / m_fScale );
glVertex3f( 0, max[nDim1], min[nDim2] - 10.0f / m_fScale );
glVertex3f( 0, max[nDim1], min[nDim2] - 6.0f / m_fScale );
glVertex3f( 0, max[nDim1], min[nDim2] - 10.0f / m_fScale );
glVertex3f( 0, max[nDim1] + 6.0f / m_fScale, min[nDim2] );
glVertex3f( 0, max[nDim1] + 10.0f / m_fScale, min[nDim2] );
glVertex3f( 0, max[nDim1] + 10.0f / m_fScale, min[nDim2] );
glVertex3f( 0, max[nDim1] + 10.0f / m_fScale, max[nDim2] );
glVertex3f( 0, max[nDim1] + 6.0f / m_fScale, max[nDim2] );
glVertex3f( 0, max[nDim1] + 10.0f / m_fScale, max[nDim2] );
glEnd();
glRasterPos3f( 0, mid[nDim1], min[nDim2] - 20.0f / m_fScale );
dimensions << dimStrings[nDim1] << size[nDim1];
GlobalOpenGL().drawString( dimensions.c_str() );
dimensions.clear();
glRasterPos3f( 0, max[nDim1] + 16.0f / m_fScale, mid[nDim2] );
dimensions << dimStrings[nDim2] << size[nDim2];
GlobalOpenGL().drawString( dimensions.c_str() );
dimensions.clear();
glRasterPos3f( 0, min[nDim1] + 4.0f, max[nDim2] + 8 / m_fScale );
dimensions << "(" << orgStrings[2][0] << min[nDim1] << " " << orgStrings[2][1] << max[nDim2] << ")";
GlobalOpenGL().drawString( dimensions.c_str() );
}
} }
class XYRenderer : public Renderer class XYRenderer : public Renderer
@ -2305,11 +2185,9 @@ void XYWnd::XY_Draw(){
} }
void XYWnd_MouseToPoint( XYWnd* xywnd, int x, int y, Vector3& point ){ void XYWnd_MouseToPoint( XYWnd* xywnd, int x, int y, Vector3& point ){
xywnd->XY_ToPoint( x, y, point ); point = xywnd->XY_ToPoint( x, y, true );
xywnd->XY_SnapToGrid( point );
const int nDim = xywnd->GetViewType(); const int nDim = xywnd->GetViewType();
float fWorkMid = float_mid( Select_getWorkZone().d_work_min[nDim], Select_getWorkZone().d_work_max[nDim] ); const float fWorkMid = float_mid( Select_getWorkZone().d_work_min[nDim], Select_getWorkZone().d_work_max[nDim] );
point[nDim] = float_snapped( fWorkMid, GetGridSize() ); point[nDim] = float_snapped( fWorkMid, GetGridSize() );
} }

View File

@ -138,8 +138,7 @@ void NewBrushDrag_Begin( int x, int y );
void NewBrushDrag( int x, int y, bool square, bool cube ); void NewBrushDrag( int x, int y, bool square, bool cube );
void NewBrushDrag_End( int x, int y ); void NewBrushDrag_End( int x, int y );
void XY_ToPoint( int x, int y, Vector3& point ); Vector3 XY_ToPoint( int x, int y, bool snap = false ) const;
void XY_SnapToGrid( Vector3& point );
void Move_Begin(); void Move_Begin();
void Move_End(); void Move_End();
@ -153,7 +152,7 @@ guint m_zoom_focusOut;
void ZoomIn(); void ZoomIn();
void ZoomOut(); void ZoomOut();
void ZoomInWithMouse( int pointx, int pointy ); void ZoomInWithMouse( int x, int y );
void FocusOnBounds( const AABB& bounds ); void FocusOnBounds( const AABB& bounds );
void SetActive( bool b ){ void SetActive( bool b ){
@ -164,7 +163,7 @@ bool Active(){
return m_bActive; return m_bActive;
}; };
void SetCustomPivotOrigin( int pointx, int pointy ); void SetCustomPivotOrigin( int x, int y ) const;
void SetViewType( VIEWTYPE n ); void SetViewType( VIEWTYPE n );
bool m_bActive; bool m_bActive;
@ -177,7 +176,7 @@ int m_chasemouse_delta_x, m_chasemouse_delta_y;
guint m_chasemouse_handler; guint m_chasemouse_handler;
void ChaseMouse(); void ChaseMouse();
bool chaseMouseMotion( int pointx, int pointy ); bool chaseMouseMotion( int x, int y );
void updateModelview(); void updateModelview();
void updateProjection(); void updateProjection();
@ -213,9 +212,6 @@ Vector3 m_mousePosition;
VIEWTYPE m_viewType; VIEWTYPE m_viewType;
void OriginalButtonUp( guint32 nFlags, int point, int pointy );
void OriginalButtonDown( guint32 nFlags, int point, int pointy );
void PaintSizeInfo( int nDim1, int nDim2 ); void PaintSizeInfo( int nDim1, int nDim2 );
int m_entityCreate_x, m_entityCreate_y; int m_entityCreate_x, m_entityCreate_y;
@ -241,7 +237,7 @@ void EntityCreate_MouseMove( int x, int y );
void EntityCreate_MouseUp( int x, int y ); void EntityCreate_MouseUp( int x, int y );
void OnEntityCreate( const char* item ); void OnEntityCreate( const char* item );
VIEWTYPE GetViewType(){ VIEWTYPE GetViewType() const {
return m_viewType; return m_viewType;
} }
void SetScale( float f ); void SetScale( float f );