Files
FC1/Editor/Grid.cpp
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

86 lines
2.4 KiB
C++

////////////////////////////////////////////////////////////////////////////
//
// Crytek Engine Source File.
// Copyright (C), Crytek Studios, 2002.
// -------------------------------------------------------------------------
// File name: grid.cpp
// Version: v1.00
// Created: 8/7/2002 by Timur.
// Compilers: Visual Studio.NET
// Description:
// -------------------------------------------------------------------------
// History:
//
////////////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "Grid.h"
//////////////////////////////////////////////////////////////////////////
CGrid::CGrid()
{
scale = 1;
size = 1;
majorLine = 10;
bEnabled = true;
bAngleSnapEnabled = true;
angleSnap = 5;
}
//////////////////////////////////////////////////////////////////////////
Vec3 CGrid::Snap( const Vec3 &vec ) const
{
if (!bEnabled || size<0.001f)
return vec;
Vec3 snapped;
snapped.x = floor((vec.x/size)/scale + 0.5f) * size * scale;
snapped.y = floor((vec.y/size)/scale + 0.5f) * size * scale;
snapped.z = floor((vec.z/size)/scale + 0.5f) * size * scale;
return snapped;
}
//////////////////////////////////////////////////////////////////////////
float CGrid::SnapAngle( float angle ) const
{
if (!bAngleSnapEnabled)
return angle;
return floor(angle/angleSnap + 0.5f) * angleSnap;
}
//////////////////////////////////////////////////////////////////////////
Vec3 CGrid::SnapAngle( const Vec3 &vec ) const
{
if (!bAngleSnapEnabled)
return vec;
Vec3 snapped;
snapped.x = floor(vec.x/angleSnap + 0.5f) * angleSnap;
snapped.y = floor(vec.y/angleSnap + 0.5f) * angleSnap;
snapped.z = floor(vec.z/angleSnap + 0.5f) * angleSnap;
return snapped;
}
//////////////////////////////////////////////////////////////////////////
void CGrid::Serialize( XmlNodeRef &xmlNode,bool bLoading )
{
if (bLoading)
{
// Loading.
xmlNode->getAttr( "Size",size );
xmlNode->getAttr( "Scale",scale );
xmlNode->getAttr( "Enabled",bEnabled );
xmlNode->getAttr( "MajorSize",majorLine );
xmlNode->getAttr( "AngleSnap",angleSnap );
xmlNode->getAttr( "AngleSnapEnabled",bAngleSnapEnabled );
}
else
{
// Saving.
xmlNode->setAttr( "Size",size );
xmlNode->setAttr( "Scale",scale );
xmlNode->setAttr( "Enabled",bEnabled );
xmlNode->setAttr( "MajorSize",majorLine );
xmlNode->setAttr( "AngleSnap",angleSnap );
xmlNode->setAttr( "AngleSnapEnabled",bAngleSnapEnabled );
}
}