svgtopt/SVG/SVGEngine/src/SVGFourPointRect.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 07 Jan 2010 16:19:02 +0200
changeset 0 d46562c3d99d
permissions -rw-r--r--
Revision: 200951 Kit: 201001

/*
* Copyright (c) 2003 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  SVG Engine header file
 *
*/


#include "SVGFourPointRect.h"

// ---------------------------------------------------------------------------
// Constructor
// ---------------------------------------------------------------------------
TSvgFourPointRect::TSvgFourPointRect( )
{
	iPoint1.iX = 0;
   	iPoint1.iY = 0;

   	iPoint2.iX = 0;
   	iPoint2.iY = 0;

   	iPoint3.iX = 0;
   	iPoint3.iY = 0;

   	iPoint4.iX = 0;
   	iPoint4.iY = 0;
}


// --------------------------------------------------------------------------
// TSvgFourPointRect::TSvgFourPointRect( TGfxRectangle2D aRect )
// ---------------------------------------------------------------------------
TSvgFourPointRect::TSvgFourPointRect( TGfxRectangle2D aRect )
{
    	iPoint1.iX = aRect.iX;
    	iPoint1.iY = aRect.iY;

    	iPoint2.iX = aRect.iX + aRect.iWidth;
    	iPoint2.iY = aRect.iY;

    	iPoint3.iX = aRect.iX;
    	iPoint3.iY = aRect.iY + aRect.iHeight;

    	iPoint4.iX = aRect.iX + aRect.iWidth;
    	iPoint4.iY = aRect.iY + aRect.iHeight;

}

// --------------------------------------------------------------------------
// void TSvgFourPointRect::SetRectPoints( TGfxRectangle2D aRect )
// ---------------------------------------------------------------------------
void TSvgFourPointRect::SetRectPoints( TGfxRectangle2D aRect )
{
    	iPoint1.iX = aRect.iX;
    	iPoint1.iY = aRect.iY;

    	iPoint2.iX = aRect.iX + aRect.iWidth;
    	iPoint2.iY = aRect.iY;

    	iPoint3.iX = aRect.iX;
    	iPoint3.iY = aRect.iY + aRect.iHeight;

    	iPoint4.iX = aRect.iX + aRect.iWidth;
    	iPoint4.iY = aRect.iY + aRect.iHeight;

}

// --------------------------------------------------------------------------
// TSvgFourPointRect::TSvgFourPointRect( TFloatFixPt aX, TFloatFixPt aY, TFloatFixPt aWidth, TFloatFixPt aHeight )
// ---------------------------------------------------------------------------
TSvgFourPointRect::TSvgFourPointRect( TFloatFixPt aX, TFloatFixPt aY, TFloatFixPt aWidth, TFloatFixPt aHeight )
{
		iPoint1.iX = aX;
    	iPoint1.iY = aY;

    	iPoint2.iX = aX + aWidth;
    	iPoint2.iY = aY;

    	iPoint3.iX = aX;
    	iPoint3.iY = aY + aHeight;

    	iPoint4.iX = aX + aWidth;
    	iPoint4.iY = aY + aHeight;
}

// --------------------------------------------------------------------------
// void TSvgFourPointRect::SetRectPoints( TFloatFixPt aX, TFloatFixPt aY, TFloatFixPt aWidth, TFloatFixPt aHeight )
// ---------------------------------------------------------------------------
void TSvgFourPointRect::SetRectPoints( TFloatFixPt aX, TFloatFixPt aY, TFloatFixPt aWidth, TFloatFixPt aHeight )
{
		iPoint1.iX = aX;
    	iPoint1.iY = aY;

    	iPoint2.iX = aX + aWidth;
    	iPoint2.iY = aY;

    	iPoint3.iX = aX;
    	iPoint3.iY = aY + aHeight;

    	iPoint4.iX = aX + aWidth;
    	iPoint4.iY = aY + aHeight;
}




// --------------------------------------------------------------------------
// TSvgFourPointRect::TSvgFourPointRect(TGfxPoint2D aPoint1, TGfxPoint2D aPoint2, TGfxPoint2D aPoint3, TGfxPoint2D aPoint4)
// ---------------------------------------------------------------------------
TSvgFourPointRect::TSvgFourPointRect(TGfxPoint2D aPoint1, TGfxPoint2D aPoint2, TGfxPoint2D aPoint3, TGfxPoint2D aPoint4)
{
	iPoint1 = aPoint1;
	iPoint2 = aPoint2;
	iPoint3 = aPoint3;
	iPoint4 = aPoint4;
}


// --------------------------------------------------------------------------
// void TSvgFourPointRect::SetRectPoints(TGfxPoint2D aPoint1, TGfxPoint2D aPoint2, TGfxPoint2D aPoint3, TGfxPoint2D aPoint4)
// ---------------------------------------------------------------------------
void TSvgFourPointRect::SetRectPoints(TGfxPoint2D aPoint1, TGfxPoint2D aPoint2, TGfxPoint2D aPoint3, TGfxPoint2D aPoint4)
{
	iPoint1 = aPoint1;
	iPoint2 = aPoint2;
	iPoint3 = aPoint3;
	iPoint4 = aPoint4;
}

// --------------------------------------------------------------------------
// TSvgFourPointRect::TSvgFourPointRect(TPoint aPoint1, TPoint aPoint2, TPoint aPoint3, TPoint aPoint4)
// ---------------------------------------------------------------------------
TSvgFourPointRect::TSvgFourPointRect(TPoint aPoint1, TPoint aPoint2, TPoint aPoint3, TPoint aPoint4)
{
	iPoint1.iX = TFloatFixPt(aPoint1.iX);
	iPoint2.iX = TFloatFixPt(aPoint2.iX);
	iPoint3.iX = TFloatFixPt(aPoint3.iX);
	iPoint4.iX = TFloatFixPt(aPoint4.iX);
	iPoint1.iY = TFloatFixPt(aPoint1.iY);
	iPoint2.iY = TFloatFixPt(aPoint2.iY);
	iPoint3.iY = TFloatFixPt(aPoint3.iY);
	iPoint4.iY = TFloatFixPt(aPoint4.iY);

}

// --------------------------------------------------------------------------
// void TSvgFourPointRect::SetRectPoints(TPoint aPoint1, TPoint aPoint2, TPoint aPoint3, TPoint aPoint4)
// ---------------------------------------------------------------------------
void TSvgFourPointRect::SetRectPoints(TPoint aPoint1, TPoint aPoint2, TPoint aPoint3, TPoint aPoint4)
{
	iPoint1.iX = TFloatFixPt(aPoint1.iX);
	iPoint2.iX = TFloatFixPt(aPoint2.iX);
	iPoint3.iX = TFloatFixPt(aPoint3.iX);
	iPoint4.iX = TFloatFixPt(aPoint4.iX);
	iPoint1.iY = TFloatFixPt(aPoint1.iY);
	iPoint2.iY = TFloatFixPt(aPoint2.iY);
	iPoint3.iY = TFloatFixPt(aPoint3.iY);
	iPoint4.iY = TFloatFixPt(aPoint4.iY);

}


// --------------------------------------------------------------------------
// void TSvgFourPointRect::GetPoints(TPoint& aPoint1, TPoint& aPoint2, TPoint& aPoint3, TPoint& aPoint4) const
// ---------------------------------------------------------------------------
void TSvgFourPointRect::GetPoints(TPoint& aPoint1, TPoint& aPoint2, TPoint& aPoint3, TPoint& aPoint4) const
{
		aPoint1.iX = (TInt)iPoint1.iX;
		aPoint1.iY = (TInt)iPoint1.iY;

		aPoint2.iX = (TInt)iPoint2.iX;
		aPoint2.iY = (TInt)iPoint2.iY;

		aPoint3.iX = (TInt)iPoint3.iX;
		aPoint3.iY = (TInt)iPoint3.iY;

		aPoint4.iX = (TInt)iPoint4.iX;
		aPoint4.iY = (TInt)iPoint4.iY;
}

// --------------------------------------------------------------------------
// void TSvgFourPointRect::GetPoints(TGfxPoint2D& aPoint1, TGfxPoint2D& aPoint2, TGfxPoint2D& aPoint3, TGfxPoint2D& aPoint4)
// ---------------------------------------------------------------------------
void TSvgFourPointRect::GetPoints(TGfxPoint2D& aPoint1, TGfxPoint2D& aPoint2, TGfxPoint2D& aPoint3, TGfxPoint2D& aPoint4)
{
		aPoint1 = iPoint1;
		aPoint2 = iPoint2;
		aPoint3 = iPoint3;
		aPoint4 = iPoint4;
}


// --------------------------------------------------------------------------
// void TSvgFourPointRect::GetTRect(TRect& aRect)
// ---------------------------------------------------------------------------
void TSvgFourPointRect::GetTRect(TRect& aRect)
{

	TFloatFixPt lMaxX = iPoint1.iX;

    if (iPoint2.iX > lMaxX)
    {
    	lMaxX = iPoint2.iX;
    }
    if (iPoint3.iX > lMaxX)
    {
    	lMaxX = iPoint3.iX;
    }
    if (iPoint4.iX > lMaxX)
    {
    	lMaxX = iPoint4.iX;
    }

    TFloatFixPt lMaxY = iPoint1.iY;

    if (iPoint2.iY > lMaxY)
    {
    	lMaxY = iPoint2.iY;
    }
    if (iPoint3.iY > lMaxY)
    {
    	lMaxY = iPoint3.iY;
    }
    if (iPoint4.iY > lMaxY)
    {
    	lMaxY = iPoint4.iY;
    }

   	TFloatFixPt lMinX = iPoint1.iX;

    if (iPoint2.iX < lMinX)
    {
    	lMinX = iPoint2.iX;
    }
    if (iPoint3.iX < lMinX)
    {
    	lMinX = iPoint3.iX;
    }
    if (iPoint4.iX < lMinX)
    {
    	lMinX = iPoint4.iX;
    }

    TFloatFixPt lMinY = iPoint1.iY;

    if (iPoint2.iY < lMinY)
    {
    	lMinY = iPoint2.iY;
    }
    if (iPoint3.iY < lMinY)
    {
    	lMinY = iPoint3.iY;
    }
    if (iPoint4.iY < lMinY)
    {
    	lMinY = iPoint4.iY;
    }

    aRect.iBr.iX = lMaxX;
    aRect.iBr.iY = lMaxY;
    aRect.iTl.iX = lMinX;
    aRect.iTl.iY = lMinY;

}


// --------------------------------------------------------------------------
// void TSvgFourPointRect::GetTRect(TGfxRectangle2D& aRect)
// ---------------------------------------------------------------------------
void TSvgFourPointRect::GetTRect(TGfxRectangle2D& aRect)
{

	TFloatFixPt lMaxX = iPoint1.iX;

    if (iPoint2.iX > lMaxX)
    {
    	lMaxX = iPoint2.iX;
    }
    if (iPoint3.iX > lMaxX)
    {
    	lMaxX = iPoint3.iX;
    }
    if (iPoint4.iX > lMaxX)
    {
    	lMaxX = iPoint4.iX;
    }

    TFloatFixPt lMaxY = iPoint1.iY;

    if (iPoint2.iY > lMaxY)
    {
    	lMaxY = iPoint2.iY;
    }
    if (iPoint3.iY > lMaxY)
    {
    	lMaxY = iPoint3.iY;
    }
    if (iPoint4.iY > lMaxY)
    {
    	lMaxY = iPoint4.iY;
    }

   	TFloatFixPt lMinX = iPoint1.iX;

    if (iPoint2.iX < lMinX)
    {
    	lMinX = iPoint2.iX;
    }
    if (iPoint3.iX < lMinX)
    {
    	lMinX = iPoint3.iX;
    }
    if (iPoint4.iX < lMinX)
    {
    	lMinX = iPoint4.iX;
    }

    TFloatFixPt lMinY = iPoint1.iY;

    if (iPoint2.iY < lMinY)
    {
    	lMinY = iPoint2.iY;
    }
    if (iPoint3.iY < lMinY)
    {
    	lMinY = iPoint3.iY;
    }
    if (iPoint4.iY < lMinY)
    {
    	lMinY = iPoint4.iY;
    }

    aRect.iX = lMinX;
    aRect.iY = lMinY;
    aRect.iWidth = lMaxX - lMinX;
    aRect.iHeight = lMaxY - lMinY;

}

// --------------------------------------------------------------------------
// void TSvgFourPointRect::Center(TPoint& aCenter)
// ---------------------------------------------------------------------------
void TSvgFourPointRect::Center(TPoint& aCenter)
{
	TFloatFixPt lMaxX = iPoint1.iX;

    if (iPoint2.iX > lMaxX)
    {
    	lMaxX = iPoint2.iX;
    }
    if (iPoint3.iX > lMaxX)
    {
    	lMaxX = iPoint3.iX;
    }
    if (iPoint4.iX > lMaxX)
    {
    	lMaxX = iPoint4.iX;
    }

    TFloatFixPt lMaxY = iPoint1.iY;

    if (iPoint2.iY > lMaxY)
    {
    	lMaxY = iPoint2.iY;
    }
    if (iPoint3.iY > lMaxY)
    {
    	lMaxY = iPoint3.iY;
    }
    if (iPoint4.iY > lMaxY)
    {
    	lMaxY = iPoint4.iY;
    }

   	TFloatFixPt lMinX = iPoint1.iX;

    if (iPoint2.iX < lMinX)
    {
    	lMinX = iPoint2.iX;
    }
    if (iPoint3.iX < lMinX)
    {
    	lMinX = iPoint3.iX;
    }
    if (iPoint4.iX < lMinX)
    {
    	lMinX = iPoint4.iX;
    }

    TFloatFixPt lMinY = iPoint1.iY;

    if (iPoint2.iY < lMinY)
    {
    	lMinY = iPoint2.iY;
    }
    if (iPoint3.iY < lMinY)
    {
    	lMinY = iPoint3.iY;
    }
    if (iPoint4.iY < lMinY)
    {
    	lMinY = iPoint4.iY;
    }

 	aCenter.iX = (( lMaxX - lMinX ) / TFloatFixPt(2) ) + lMinX;
 	aCenter.iY = (( lMaxY - lMinY ) / TFloatFixPt(2) ) + lMinY;
}

// --------------------------------------------------------------------------
// TBool TSvgFourPointRect::Intersects(const MRect& aFourPointRect)
// ---------------------------------------------------------------------------
TBool TSvgFourPointRect::Intersects(const MRect& aFourPointRect)
{
	TGfxRectangle2D rect;
	TGfxRectangle2D thisRect;

	GetTRect(thisRect);
	((TSvgFourPointRect&)aFourPointRect).GetTRect(rect);

    return ( thisRect.Intersects(rect) );
}