|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: This module contains helper functions for use with scratch pads.
//
// $NoKeywords: $
//=============================================================================//
#ifndef SCRATCHPADUTILS_H
#define SCRATCHPADUTILS_H
#ifdef _WIN32
#pragma once
#endif
#include "iscratchpad3d.h"
// Use this to make a graph.
class CScratchPadGraph { public:
typedef int LineID;
CScratchPadGraph();
// Initialze the orientation and scales of the two axes.
// Axis indices are 0, 1, or 2 for x, y, and z.
void Init( IScratchPad3D *pPad,
Vector vTimeAxis = Vector(0,-1,0), float flInchesPerSecond=1, Vector vTimeLineColor=Vector(0,0,1), float flTimeOrigin=0, // Where the origin of the graph is.
float flTimeLabelEveryNSeconds=1, Vector vValueAxis = Vector(0,0,1), float flInchesPerValue=1, Vector vValueLineColor=Vector(1,0,0), float flValueOrigin=0 // Where the origin of the graph is.
);
bool IsInitted() const;
// Add another line into the graph.
LineID AddLine( Vector vColor ); void AddSample( LineID iLine, float flTime, float flValue ); void AddVerticalLine( float flTime, float flMinValue, float flMaxValue, const CSPColor &vColor ); // Get the 3D position of a sample on the graph (so you can draw other things there).
Vector GetSamplePosition( float flTime, float flValue );
private:
void UpdateTicksAndStuff( float flTime, float flValue );
private: class CLineInfo { public: bool m_bFirst; float m_flLastTime; float m_flLastValue; Vector m_vColor; };
IScratchPad3D *m_pPad;
CUtlVector<CLineInfo> m_LineInfos;
Vector m_vTimeAxis; float m_flInchesPerSecond;
Vector m_vValueAxis; float m_flInchesPerValue;
// How often to make a time label.
float m_flTimeLabelEveryNSeconds; int m_nTimeLabelsDrawn;
Vector m_vTimeLineColor; Vector m_vValueLineColor;
float m_flTimeOrigin; float m_flValueOrigin; // Used to extend the value border.
float m_flHighestValue; float m_flHighestTime; };
// Draw a cone.
void ScratchPad_DrawLitCone( IScratchPad3D *pPad, const Vector &vBaseCenter, const Vector &vTip, const Vector &vBrightColor, const Vector &vDarkColor, const Vector &vLightDir, float baseWidth, int nSegments );
// Draw a cylinder.
void ScratchPad_DrawLitCylinder( IScratchPad3D *pPad, const Vector &v1, const Vector &v2, const Vector &vBrightColor, const Vector &vDarkColor, const Vector &vLightDir, float width, int nSegments );
// Draw an arrow.
void ScratchPad_DrawArrow( IScratchPad3D *pPad, const Vector &vPos, const Vector &vDirection, const Vector &vColor, float flLength=20, float flLineWidth=3, float flHeadWidth=8, int nCylinderSegments=5, int nHeadSegments=8, float flArrowHeadPercentage = 0.3f // How much of the line is the arrow head.
);
// Draw an arrow with less parameters.. it generates parameters based on length
// automatically to make the arrow look good.
void ScratchPad_DrawArrowSimple( IScratchPad3D *pPad, const Vector &vPos, const Vector &vDirection, const Vector &vColor, float flLength );
void ScratchPad_DrawSphere( IScratchPad3D *pPad, const Vector &vCenter, float flRadius, const Vector &vColor, int nSubDivs=7 );
void ScratchPad_DrawAABB( IScratchPad3D *pPad, const Vector &vMins, const Vector &vMaxs, const Vector &vColor = Vector( 1,1,1 ) );
#endif // SCRATCHPADUTILS_H
|