office-gobmx/chart2/source/view/main/Stripe.cxx
Sebastian Spaeth 63bb42ab7d Add vim/emacs modelines to all source files
Fixes #fdo30794
Based on bin/add-modelines script (originally posted in mail
1286706307.1871.1399280959@webmail.messagingengine.com)

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2010-10-13 10:57:18 +02:00

363 lines
11 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_chart2.hxx"
#include "Stripe.hxx"
#include "CommonConverters.hxx"
#include <com/sun/star/drawing/PolyPolygonShape3D.hpp>
#include <com/sun/star/drawing/DoubleSequence.hpp>
#include <basegfx/polygon/b3dpolygon.hxx>
#include <basegfx/polygon/b3dpolygontools.hxx>
using namespace ::com::sun::star;
//.............................................................................
namespace chart
{
//.............................................................................
Stripe::Stripe( const drawing::Position3D& rPoint1
, const drawing::Direction3D& rDirectionToPoint2
, const drawing::Direction3D& rDirectionToPoint4 )
: m_aPoint1(rPoint1)
, m_aPoint2(rPoint1+rDirectionToPoint2)
, m_aPoint3(m_aPoint2+rDirectionToPoint4)
, m_aPoint4(rPoint1+rDirectionToPoint4)
, m_bInvertNormal(false)
, m_bManualNormalSet(false)
{
}
Stripe::Stripe( const drawing::Position3D& rPoint1
, const drawing::Position3D& rPoint2
, double fDepth )
: m_aPoint1(rPoint1)
, m_aPoint2(rPoint2)
, m_aPoint3(rPoint2)
, m_aPoint4(rPoint1)
, m_bInvertNormal(false)
, m_bManualNormalSet(false)
{
m_aPoint3.PositionZ += fDepth;
m_aPoint4.PositionZ += fDepth;
}
Stripe::Stripe( const drawing::Position3D& rPoint1
, const drawing::Position3D& rPoint2
, const drawing::Position3D& rPoint3
, const drawing::Position3D& rPoint4 )
: m_aPoint1(rPoint1)
, m_aPoint2(rPoint2)
, m_aPoint3(rPoint3)
, m_aPoint4(rPoint4)
, m_bInvertNormal(false)
, m_bManualNormalSet(false)
{
}
void Stripe::SetManualNormal( const drawing::Direction3D& rNormal )
{
m_aManualNormal = rNormal;
m_bManualNormalSet = true;
}
void Stripe::InvertNormal( bool bInvertNormal )
{
m_bInvertNormal = bInvertNormal;
}
uno::Any Stripe::getPolyPolygonShape3D() const
{
drawing::PolyPolygonShape3D aPP;
aPP.SequenceX.realloc(1);
aPP.SequenceY.realloc(1);
aPP.SequenceZ.realloc(1);
drawing::DoubleSequence* pOuterSequenceX = aPP.SequenceX.getArray();
drawing::DoubleSequence* pOuterSequenceY = aPP.SequenceY.getArray();
drawing::DoubleSequence* pOuterSequenceZ = aPP.SequenceZ.getArray();
pOuterSequenceX->realloc(4);
pOuterSequenceY->realloc(4);
pOuterSequenceZ->realloc(4);
double* pInnerSequenceX = pOuterSequenceX->getArray();
double* pInnerSequenceY = pOuterSequenceY->getArray();
double* pInnerSequenceZ = pOuterSequenceZ->getArray();
*pInnerSequenceX++ = m_aPoint1.PositionX;
*pInnerSequenceY++ = m_aPoint1.PositionY;
*pInnerSequenceZ++ = m_aPoint1.PositionZ;
*pInnerSequenceX++ = m_aPoint2.PositionX;
*pInnerSequenceY++ = m_aPoint2.PositionY;
*pInnerSequenceZ++ = m_aPoint2.PositionZ;
*pInnerSequenceX++ = m_aPoint3.PositionX;
*pInnerSequenceY++ = m_aPoint3.PositionY;
*pInnerSequenceZ++ = m_aPoint3.PositionZ;
*pInnerSequenceX++ = m_aPoint4.PositionX;
*pInnerSequenceY++ = m_aPoint4.PositionY;
*pInnerSequenceZ++ = m_aPoint4.PositionZ;
return uno::Any( &aPP, ::getCppuType((const drawing::PolyPolygonShape3D*)0) );
}
drawing::Direction3D Stripe::getNormal() const
{
drawing::Direction3D aRet(1.0,0.0,0.0);
if( m_bManualNormalSet )
aRet = m_aManualNormal;
else
{
::basegfx::B3DPolygon aPolygon3D;
aPolygon3D.append(Position3DToB3DPoint( m_aPoint1 ));
aPolygon3D.append(Position3DToB3DPoint( m_aPoint2 ));
aPolygon3D.append(Position3DToB3DPoint( m_aPoint3 ));
aPolygon3D.append(Position3DToB3DPoint( m_aPoint4 ));
::basegfx::B3DVector aNormal(::basegfx::tools::getNormal(aPolygon3D));
aRet = B3DVectorToDirection3D(aNormal);
}
if( m_bInvertNormal )
{
aRet.DirectionX *= -1.0;
aRet.DirectionY *= -1.0;
aRet.DirectionZ *= -1.0;
}
return aRet;
}
uno::Any Stripe::getNormalsPolygon() const
{
drawing::PolyPolygonShape3D aPP;
aPP.SequenceX.realloc(1);
aPP.SequenceY.realloc(1);
aPP.SequenceZ.realloc(1);
drawing::DoubleSequence* pOuterSequenceX = aPP.SequenceX.getArray();
drawing::DoubleSequence* pOuterSequenceY = aPP.SequenceY.getArray();
drawing::DoubleSequence* pOuterSequenceZ = aPP.SequenceZ.getArray();
pOuterSequenceX->realloc(4);
pOuterSequenceY->realloc(4);
pOuterSequenceZ->realloc(4);
double* pInnerSequenceX = pOuterSequenceX->getArray();
double* pInnerSequenceY = pOuterSequenceY->getArray();
double* pInnerSequenceZ = pOuterSequenceZ->getArray();
drawing::Direction3D aNormal( getNormal() );
for(sal_Int32 nN=4; --nN; )
{
*pInnerSequenceX++ = aNormal.DirectionX;
*pInnerSequenceY++ = aNormal.DirectionY;
*pInnerSequenceZ++ = aNormal.DirectionZ;
}
return uno::Any( &aPP, ::getCppuType((const drawing::PolyPolygonShape3D*)0) );
}
uno::Any Stripe::getTexturePolygon( short nRotatedTexture ) const
{
drawing::PolyPolygonShape3D aPP;
aPP.SequenceX.realloc(1);
aPP.SequenceY.realloc(1);
aPP.SequenceZ.realloc(1);
drawing::DoubleSequence* pOuterSequenceX = aPP.SequenceX.getArray();
drawing::DoubleSequence* pOuterSequenceY = aPP.SequenceY.getArray();
drawing::DoubleSequence* pOuterSequenceZ = aPP.SequenceZ.getArray();
pOuterSequenceX->realloc(4);
pOuterSequenceY->realloc(4);
pOuterSequenceZ->realloc(4);
double* pInnerSequenceX = pOuterSequenceX->getArray();
double* pInnerSequenceY = pOuterSequenceY->getArray();
double* pInnerSequenceZ = pOuterSequenceZ->getArray();
if( nRotatedTexture==0 )
{
*pInnerSequenceX++ = 0.0;
*pInnerSequenceY++ = 0.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 0.0;
*pInnerSequenceY++ = 1.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 1.0;
*pInnerSequenceY++ = 1.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 1.0;
*pInnerSequenceY++ = 0.0;
*pInnerSequenceZ++ = 0.0;
}
else if( nRotatedTexture==1 )
{
*pInnerSequenceX++ = 1.0;
*pInnerSequenceY++ = 0.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 0.0;
*pInnerSequenceY++ = 0.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 0.0;
*pInnerSequenceY++ = 1.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 1.0;
*pInnerSequenceY++ = 1.0;
*pInnerSequenceZ++ = 0.0;
}
else if( nRotatedTexture==2 )
{
*pInnerSequenceX++ = 1.0;
*pInnerSequenceY++ = 1.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 1.0;
*pInnerSequenceY++ = 0.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 0.0;
*pInnerSequenceY++ = 0.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 0.0;
*pInnerSequenceY++ = 1.0;
*pInnerSequenceZ++ = 0.0;
}
else if( nRotatedTexture==3 )
{
*pInnerSequenceX++ = 0.0;
*pInnerSequenceY++ = 1.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 1.0;
*pInnerSequenceY++ = 1.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 1.0;
*pInnerSequenceY++ = 0.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 0.0;
*pInnerSequenceY++ = 0.0;
*pInnerSequenceZ++ = 0.0;
}
else if( nRotatedTexture==4 )
{
*pInnerSequenceX++ = 1.0;
*pInnerSequenceY++ = 0.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 1.0;
*pInnerSequenceY++ = 1.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 0.0;
*pInnerSequenceY++ = 1.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 0.0;
*pInnerSequenceY++ = 0.0;
*pInnerSequenceZ++ = 0.0;
}
else if( nRotatedTexture==5 )
{
*pInnerSequenceX++ = 0.0;
*pInnerSequenceY++ = 0.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 1.0;
*pInnerSequenceY++ = 0.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 1.0;
*pInnerSequenceY++ = 1.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 0.0;
*pInnerSequenceY++ = 1.0;
*pInnerSequenceZ++ = 0.0;
}
else if( nRotatedTexture==6 )
{
*pInnerSequenceX++ = 0.0;
*pInnerSequenceY++ = 1.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 0.0;
*pInnerSequenceY++ = 0.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 1.0;
*pInnerSequenceY++ = 0.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 1.0;
*pInnerSequenceY++ = 1.0;
*pInnerSequenceZ++ = 0.0;
}
else if( nRotatedTexture==7 )
{
*pInnerSequenceX++ = 1.0;
*pInnerSequenceY++ = 1.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 0.0;
*pInnerSequenceY++ = 1.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 0.0;
*pInnerSequenceY++ = 0.0;
*pInnerSequenceZ++ = 0.0;
*pInnerSequenceX++ = 1.0;
*pInnerSequenceY++ = 0.0;
*pInnerSequenceZ++ = 0.0;
}
return uno::Any( &aPP, ::getCppuType((const drawing::PolyPolygonShape3D*)0) );
}
//.............................................................................
} //namespace chart
//.............................................................................
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */