Axiom.Core.StaticGeometry.CalculateBounds C# (CSharp) Method

CalculateBounds() protected method

protected CalculateBounds ( VertexData vertexData, Vector3 position, Axiom.MathLib.Quaternion orientation, Vector3 scale ) : Axiom.MathLib.AxisAlignedBox
vertexData Axiom.Graphics.VertexData
position Vector3
orientation Axiom.MathLib.Quaternion
scale Vector3
return Axiom.MathLib.AxisAlignedBox
		protected unsafe AxisAlignedBox CalculateBounds( VertexData vertexData,
			Vector3 position, Quaternion orientation,
			Vector3 scale )
		{
			VertexElement posElem =
				vertexData.vertexDeclaration.FindElementBySemantic( VertexElementSemantic.Position );
			HardwareVertexBuffer vbuf = vertexData.vertexBufferBinding.GetBuffer( posElem.Source );
			IntPtr src = vbuf.Lock( BufferLocking.ReadOnly );
			byte* vertex = (byte*)src.ToPointer();

			Vector3 min = Vector3.Zero;
			Vector3 max = Vector3.Zero;
			bool first = true;

			for ( int j = 0; j < vertexData.vertexCount; ++j, vertex += vbuf.VertexSize )
			{
				float* pFloat = (float*)( vertex + posElem.Offset );
				Vector3 pt = new Vector3( *pFloat++, *pFloat++, *pFloat++ );
				// Transform to world (scale, rotate, translate)
				pt = ( orientation * ( pt * scale ) ) + position;
				if ( first )
				{
					min = max = pt;
					first = false;
				}
				else
				{
					min.Floor( pt );
					max.Ceil( pt );
				}
			}
			vbuf.Unlock();
			return new AxisAlignedBox( min, max );
		}