hl2_src-leak-2017/src/hammer/RenderUtils.cpp

96 lines
2.4 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#include "stdafx.h"
#include "Render2D.h"
#include "RenderUtils.h"
#include "mapview2d.h"
#include "toolinterface.h"
//-----------------------------------------------------------------------------
// Purpose: Draws the measurements of a brush in the 2D view.
// Input : pRender -
// Mins -
// Maxs -
// nFlags -
//-----------------------------------------------------------------------------
void DrawBoundsText(CRender2D *pRender, const Vector &Mins, const Vector &Maxs, int nFlags)
{
CMapView2D *pView = (CMapView2D*) pRender->GetView();
// Calculate the solid's extents along our 2D view axes.
Vector Extents = Maxs - Mins;
Vector Center = (Mins + Maxs ) * 0.5f;
for ( int i=0; i<3;i++ )
Extents[i] = fabs(Extents[i]);
// Transform the solids mins and maxs to 2D view space. These are used
// for placing the text in the view.
Vector2D projMins, projMaxs, projCenter;
pRender->TransformPoint( projMins, Mins );
pRender->TransformPoint( projMaxs, Maxs );
pRender->TransformPoint( projCenter, Center );
if( projMins.x > projMaxs.x )
{
V_swap( projMins.x, projMaxs.x );
}
if( projMins.y > projMaxs.y )
{
V_swap( projMins.y, projMaxs.y );
}
//
// display the extents of this brush
//
char extentText[30];
int nTextX, nTextY;
int nTextFlags;
pRender->SetTextColor( 255, 255, 255 );
// horz
sprintf( extentText, "%.1f", Extents[pView->axHorz] );
nTextFlags = CRender2D::TEXT_JUSTIFY_HORZ_CENTER;
nTextX = projCenter.x;
if ( nFlags & DBT_TOP )
{
nTextY = projMins.y - (HANDLE_RADIUS*3);
nTextFlags |= CRender2D::TEXT_JUSTIFY_TOP;
}
else
{
nTextY = projMaxs.y + (HANDLE_RADIUS*3);
nTextFlags |= CRender2D::TEXT_JUSTIFY_BOTTOM;
}
pRender->DrawText( extentText, nTextX, nTextY, nTextFlags );
// vert
sprintf( extentText, "%.1f", Extents[pView->axVert] );
nTextFlags = CRender2D::TEXT_JUSTIFY_VERT_CENTER;
nTextY = projCenter.y;
if ( nFlags & DBT_LEFT )
{
nTextX = projMins.x - (HANDLE_RADIUS*3);
nTextFlags |= CRender2D::TEXT_JUSTIFY_LEFT;
}
else
{
nTextX = projMaxs.x + (HANDLE_RADIUS*3);
nTextFlags |= CRender2D::TEXT_JUSTIFY_RIGHT;
}
pRender->DrawText( extentText, nTextX, nTextY, nTextFlags );
}