summaryrefslogtreecommitdiff
path: root/goodies/source/filter.vcl/icgm/class4.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'goodies/source/filter.vcl/icgm/class4.cxx')
-rw-r--r--goodies/source/filter.vcl/icgm/class4.cxx864
1 files changed, 0 insertions, 864 deletions
diff --git a/goodies/source/filter.vcl/icgm/class4.cxx b/goodies/source/filter.vcl/icgm/class4.cxx
deleted file mode 100644
index ee63d9636696..000000000000
--- a/goodies/source/filter.vcl/icgm/class4.cxx
+++ /dev/null
@@ -1,864 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: class4.cxx,v $
- * $Revision: 1.9 $
- *
- * 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_goodies.hxx"
-
-#include <main.hxx>
-#include <chart.hxx>
-#include <outact.hxx>
-#include <math.h>
-
-using namespace ::com::sun::star;
-
-double CGM::ImplGetOrientation( FloatPoint& rCenter, FloatPoint& rPoint )
-{
- double fOrientation;
-
- double nX = rPoint.X - rCenter.X;
- double nY = rPoint.Y - rCenter.Y;
-
- fOrientation = acos( nX / sqrt( nX * nX + nY * nY ) ) * 57.29577951308;
- if ( nY > 0 )
- fOrientation = 360 - fOrientation;
-
- return fOrientation;
-}
-
-// ---------------------------------------------------------------
-
-void CGM::ImplSwitchStartEndAngle( double& rStartAngle, double& rEndAngle )
-{
- double nTemp;
- nTemp = rStartAngle;
- rStartAngle = rEndAngle;
- rEndAngle = nTemp;
-}
-
-// ---------------------------------------------------------------
-
-void CGM::ImplGetVector( double* pVector )
-{
- if ( pElement->eVDCType == VDC_REAL )
- {
- for ( sal_uInt32 i = 0; i < 4; i++ )
- {
- pVector[ i ] = (double)ImplGetFloat( pElement->eVDCRealPrecision, pElement->nVDCRealSize );
- }
- }
- else
- {
- for ( sal_uInt32 i = 0; i < 4; i++ )
- {
- pVector[ i ] = (double)ImplGetI( pElement->nVDCIntegerPrecision );
- }
- }
- pVector[ 0 ] *= mnVDCXmul;
- pVector[ 2 ] *= mnVDCXmul;
- pVector[ 1 ] *= mnVDCYmul;
- pVector[ 3 ] *= mnVDCYmul;
-}
-
-// ---------------------------------------------------------------
-sal_Bool CGM::ImplGetEllipse( FloatPoint& rCenter, FloatPoint& rRadius, double& rAngle )
-{
- FloatPoint aPoint1, aPoint2;
- double fRot1, fRot2;
- ImplGetPoint( rCenter, sal_True );
- ImplGetPoint( aPoint1, sal_True );
- ImplGetPoint( aPoint2, sal_True );
- fRot1 = ImplGetOrientation( rCenter, aPoint1 );
- fRot2 = ImplGetOrientation( rCenter, aPoint2 );
- rAngle = ImplGetOrientation( rCenter, aPoint1 );
- aPoint1.X -= rCenter.X;
- aPoint1.Y -= rCenter.Y;
- rRadius.X = sqrt( aPoint1.X * aPoint1.X + aPoint1.Y * aPoint1.Y );
- aPoint2.X -= rCenter.X;
- aPoint2.Y -= rCenter.Y;
- rRadius.Y = sqrt( aPoint2.X * aPoint2.X + aPoint2.Y * aPoint2.Y );
-
- if ( fRot1 > fRot2 )
- {
- if ( ( fRot1 - fRot2 ) < 180 )
- return sal_False;
- }
- else
- {
- if ( ( fRot2 - fRot1 ) > 180 )
- return sal_False;
- }
- return sal_True;
-}
-
-void CGM::ImplDoClass4()
-{
- if ( mbFirstOutPut )
- mpOutAct->FirstOutPut();
-
- if ( mpBitmapInUse && ( mnElementID != 9 ) ) // vorhandene grafik verarbeiten,
- { // da jetzt nicht bitmap actions anstehen
- CGMBitmapDescriptor* pBmpDesc = mpBitmapInUse->GetBitmap();
- // irgendetwas mit der Bitmap anfangen
- mpOutAct->DrawBitmap( pBmpDesc );
- delete mpBitmapInUse;
- mpBitmapInUse = NULL;
- }
-
- if ( ( mpChart == NULL ) || mpChart->IsAnnotation() )
- {
- switch ( mnElementID )
- {
- case 0x01 : ComOut( CGM_LEVEL1, "PolyLine" )
- {
- sal_uInt32 nPoints = mnElementSize / ImplGetPointSize();
- Polygon aPolygon( (sal_uInt16)nPoints );
- for ( sal_uInt16 i = 0; i < nPoints; i++)
- {
- FloatPoint aFloatPoint;
- ImplGetPoint( aFloatPoint, sal_True );
- aPolygon.SetPoint( Point( (long)aFloatPoint.X, (long)aFloatPoint.Y ), i );
- }
- if ( mbFigure )
- mpOutAct->RegPolyLine( aPolygon );
- else
- mpOutAct->DrawPolyLine( aPolygon );
- }
- break;
-
- case 0x02 : ComOut( CGM_LEVEL1 | CGM_EXTENDED_PRIMITIVES_SET, "Disjoint PolyLine" )
- {
- USHORT nPoints = sal::static_int_cast< USHORT >(
- mnElementSize / ImplGetPointSize());
- if ( ! ( nPoints & 1 ) )
- {
- nPoints >>= 1;
- FloatPoint aFloatPoint;
- if ( mbFigure )
- {
- Polygon aPolygon( nPoints );
- for ( sal_uInt16 i = 0; i < nPoints; i++ )
- {
- ImplGetPoint( aFloatPoint, sal_True );
- aPolygon.SetPoint( Point( (long)aFloatPoint.X, (long)aFloatPoint.Y ), 0 );
- }
- mpOutAct->RegPolyLine( aPolygon );
- }
- else
- {
- mpOutAct->BeginGroup();
- Polygon aPolygon( (sal_uInt16)2 );
- for ( sal_uInt16 i = 0; i < nPoints; i++ )
- {
- ImplGetPoint( aFloatPoint, sal_True );
- aPolygon.SetPoint( Point( (long)aFloatPoint.X, (long)aFloatPoint.Y ), 0 );
- ImplGetPoint( aFloatPoint, sal_True );
- aPolygon.SetPoint( Point( (long)aFloatPoint.X, (long)aFloatPoint.Y ), 1);
- mpOutAct->DrawPolyLine( aPolygon );
- }
- mpOutAct->EndGroup();
- }
- }
- }
- break;
-
- case 0x03 : ComOut( CGM_LEVEL1, "PolyMarker" ) break;
- case 0x04 : ComOut( CGM_LEVEL1, "Text" )
- {
- FloatPoint aFloatPoint;
- sal_uInt32 nType, nSize;
-
- if ( mbFigure )
- mpOutAct->CloseRegion();
-
- ImplGetPoint ( aFloatPoint, sal_True );
- nType = ImplGetUI16( 4 );
- nSize = ImplGetUI( 1 );
- mpSource[ mnParaSize + nSize ] = 0;
-
- ComOut( CGM_DESCRIPTION, (char*)mpSource + mnParaSize );
-
- awt::Size aSize;
- awt::Point aPoint( (long)aFloatPoint.X, (long)aFloatPoint.Y );
- mpOutAct->DrawText( aPoint, aSize,
- (char*)mpSource + mnParaSize, nSize, (FinalFlag)nType );
-// mnParaSize += nSize;
- mnParaSize = mnElementSize;
- }
- break;
-
- case 0x05 : ComOut( CGM_LEVEL1 | CGM_EXTENDED_PRIMITIVES_SET, "Restricted Text" )
- {
- double dx, dy;
- FloatPoint aFloatPoint;
- sal_uInt32 nType, nSize;
-
- if ( mbFigure )
- mpOutAct->CloseRegion();
-
- if ( pElement->eVDCType == VDC_REAL )
- {
- dx = ImplGetFloat( pElement->eVDCRealPrecision, pElement->nVDCRealSize );
- dy = ImplGetFloat( pElement->eVDCRealPrecision, pElement->nVDCRealSize );
- }
- else
- {
- dx = (double)ImplGetI( pElement->nVDCIntegerPrecision );
- dy = (double)ImplGetI( pElement->nVDCIntegerPrecision );
- }
- ImplMapDouble( dx );
- ImplMapDouble( dy );
-
- ImplGetPoint ( aFloatPoint, sal_True );
- nType = ImplGetUI16( 4 );
- nSize = ImplGetUI( 1 );
-
- mpSource[ mnParaSize + nSize ] = 0;
-
- ComOut( CGM_DESCRIPTION, (char*)mpSource + mnParaSize );
-
- awt::Point aPoint( (long)aFloatPoint.X, (long)aFloatPoint.Y );
- awt::Size aSize((long)dx, (long)dy);
- mpOutAct->DrawText( aPoint, aSize ,
- (char*)mpSource + mnParaSize, nSize, (FinalFlag)nType );
-// mnParaSize += nSize;
- mnParaSize = mnElementSize;
- }
- break;
-
- case 0x06 : ComOut( CGM_LEVEL1 | CGM_EXTENDED_PRIMITIVES_SET, "Append Text" )
- {
- sal_uInt32 nSize;
- sal_uInt32 nType = ImplGetUI16( 4 );
-
- nSize = ImplGetUI( 1 );
- mpSource[ mnParaSize + nSize ] = 0;
-
- ComOut( CGM_DESCRIPTION, (char*)mpSource + mnParaSize );
-
- mpOutAct->AppendText( (char*)mpSource + mnParaSize, nSize, (FinalFlag)nType );
-// mnParaSize += nSize;
- mnParaSize = mnElementSize;
- }
- break;
-
- case 0x07 : ComOut( CGM_LEVEL1, "Polygon" )
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
-
- USHORT nPoints = sal::static_int_cast< USHORT >(
- mnElementSize / ImplGetPointSize());
- Polygon aPolygon( nPoints );
- for ( USHORT i = 0; i < nPoints; i++)
- {
- FloatPoint aFloatPoint;
- ImplGetPoint( aFloatPoint, sal_True );
- aPolygon.SetPoint( Point ( (long)( aFloatPoint.X ), (long)( aFloatPoint.Y ) ), i );
- }
- mpOutAct->DrawPolygon( aPolygon );
- }
- break;
-
- case 0x08 : ComOut( CGM_LEVEL1 | CGM_EXTENDED_PRIMITIVES_SET, "Polygon Set" )
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
-
- USHORT nPoints = 0;
- Point* pPoints = new Point[ 0x4000 ];
-
- PolyPolygon aPolyPolygon;
- FloatPoint aFloatPoint;
- sal_uInt32 nEdgeFlag;
- while ( mnParaSize < mnElementSize )
- {
- ImplGetPoint( aFloatPoint, sal_True );
- nEdgeFlag = ImplGetUI16();
- pPoints[ nPoints++ ] = Point( (long)aFloatPoint.X, (long)aFloatPoint.Y );
- if ( ( nEdgeFlag & 2 ) || ( mnParaSize == mnElementSize ) )
- {
- Polygon aPolygon( nPoints );
- for ( USHORT i = 0; i < nPoints; i++ )
- {
- aPolygon.SetPoint( pPoints[ i ], i );
- }
- aPolyPolygon.Insert( aPolygon, POLYPOLY_APPEND );
- nPoints = 0;
- }
- }
- delete[] pPoints;
- mpOutAct->DrawPolyPolygon( aPolyPolygon );
- }
- break;
-
- case 0x09 : ComOut( CGM_LEVEL1, "Cell Array" )
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
-
- if ( mpBitmapInUse )
- {
- CGMBitmap* pBmpDesc = mpBitmapInUse->GetNext();
- if ( pBmpDesc ) // eventuell bekommen wir eine bitmap zurck, die nicht
- { // zur vorherigen pat -> diese mssen wir dann auch lschen
- mpOutAct->DrawBitmap( pBmpDesc->GetBitmap() );
- delete pBmpDesc;
- }
- }
- else
- {
- mpBitmapInUse = new CGMBitmap( *this );
- }
- }
- break;
-
- case 0x0a : ComOut( CGM_LEVEL1, "Generalized Drawing Primitive" )
- {
- ImplGetI( pElement->nIntegerPrecision ); //-Wall is this needed
- ImplGetUI( pElement->nIntegerPrecision ); //-Wall is this needed
- mnParaSize = mnElementSize;
- }
- break;
-
- case 0x0b : ComOut( CGM_LEVEL1 | CGM_EXTENDED_PRIMITIVES_SET, "Rectangle" )
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
-
- FloatRect aFloatRect;
- ImplGetRectangle( aFloatRect, sal_True );
- mpOutAct->DrawRectangle( aFloatRect );
- }
- break;
-
- case 0x0c : ComOut( CGM_LEVEL1 | CGM_EXTENDED_PRIMITIVES_SET, "Circle" )
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
-
- double fRotation = 0;
- FloatPoint aCenter, aRadius;
- ImplGetPoint( aCenter, sal_True );
- if ( pElement->eVDCType == VDC_REAL )
- aRadius.X = ImplGetFloat( pElement->eVDCRealPrecision, pElement->nVDCRealSize );
- else
- aRadius.X = (double)ImplGetI( pElement->nVDCIntegerPrecision );
- ImplMapDouble( aRadius.X );
- aRadius.Y = aRadius.X;
- mpOutAct->DrawEllipse( aCenter, aRadius, fRotation );
- }
- break;
-
- case 0x0d : ComOut( CGM_LEVEL1 | CGM_EXTENDED_PRIMITIVES_SET, "Circular Arc 3 Point" )
- {
- int nSwitch = 0;
-
- FloatPoint aStartingPoint, aIntermediatePoint, aEndingPoint, aCenterPoint;
- ImplGetPoint( aStartingPoint, sal_True );
- ImplGetPoint( aIntermediatePoint, sal_True );
- ImplGetPoint( aEndingPoint, sal_True );
-
- double fA = aIntermediatePoint.X - aStartingPoint.X;
- double fB = aIntermediatePoint.Y - aStartingPoint.Y;
- double fC = aEndingPoint.X - aStartingPoint.X;
- double fD = aEndingPoint.Y - aStartingPoint.Y;
-
- double fE = fA * ( aStartingPoint.X + aIntermediatePoint.X ) + fB * ( aStartingPoint.Y + aIntermediatePoint.Y );
- double fF = fC * ( aStartingPoint.X + aEndingPoint.X ) + fD * ( aStartingPoint.Y + aEndingPoint.Y );
-
- double fG = 2.0 * ( fA * ( aEndingPoint.Y - aIntermediatePoint.Y ) - fB * ( aEndingPoint.X - aIntermediatePoint.X ) );
-
- aCenterPoint.X = ( fD * fE - fB * fF ) / fG;
- aCenterPoint.Y = ( fA * fF - fC * fE ) / fG;
-
- if ( fG != 0 )
- {
- double fStartAngle = ImplGetOrientation( aCenterPoint, aStartingPoint );
- double fInterAngle = ImplGetOrientation( aCenterPoint, aIntermediatePoint );
- double fEndAngle = ImplGetOrientation( aCenterPoint, aEndingPoint );
-
- if ( fStartAngle > fEndAngle )
- {
- nSwitch ^=1;
- aIntermediatePoint = aEndingPoint;
- aEndingPoint = aStartingPoint;
- aStartingPoint = aIntermediatePoint;
- fG = fStartAngle;
- fStartAngle = fEndAngle;
- fEndAngle = fG;
- }
- if ( ! ( fInterAngle > fStartAngle ) && ( fInterAngle < fEndAngle ) )
- {
- nSwitch ^=1;
- aIntermediatePoint = aEndingPoint;
- aEndingPoint = aStartingPoint;
- aStartingPoint = aIntermediatePoint;
- fG = fStartAngle;
- fStartAngle = fEndAngle;
- fEndAngle = fG;
- }
- double fRadius = sqrt( pow( ( aStartingPoint.X - aCenterPoint.X ), 2 ) + pow( ( aStartingPoint.Y - aCenterPoint.Y ), 2 ) ) ;
-
- if ( mbFigure )
- {
- Rectangle aBoundingBox( Point( (long)( aCenterPoint.X - fRadius ), long( aCenterPoint.Y - fRadius ) ),
- Size( ( static_cast< long >( 2 * fRadius ) ), (long)( 2 * fRadius) ) );
- Polygon aPolygon( aBoundingBox, Point( (long)aStartingPoint.X, (long)aStartingPoint.Y ) ,Point( (long)aEndingPoint.X, (long)aEndingPoint.Y ), POLY_ARC );
- if ( nSwitch )
- mpOutAct->RegPolyLine( aPolygon, sal_True );
- else
- mpOutAct->RegPolyLine( aPolygon );
- }
- else
- {
- fG = 0;
- FloatPoint aRadius;
- aRadius.X = aRadius.Y = fRadius;
- mpOutAct->DrawEllipticalArc( aCenterPoint, aRadius, fG, 2, fStartAngle, fEndAngle );
- }
- }
- }
- break;
-
- case 0x0e : ComOut( CGM_LEVEL1 | CGM_EXTENDED_PRIMITIVES_SET, "Circular Arc 3 Point Close" )
- {
- int nSwitch = 0;
-
- if ( mbFigure )
- mpOutAct->CloseRegion();
-
- FloatPoint aStartingPoint, aIntermediatePoint, aEndingPoint, aCenterPoint;
- ImplGetPoint( aStartingPoint );
- ImplGetPoint( aIntermediatePoint );
- ImplGetPoint( aEndingPoint );
-
- double fA = aIntermediatePoint.X - aStartingPoint.X;
- double fB = aIntermediatePoint.Y - aStartingPoint.Y;
- double fC = aEndingPoint.X - aStartingPoint.X;
- double fD = aEndingPoint.Y - aStartingPoint.Y;
-
- double fE = fA * ( aStartingPoint.X + aIntermediatePoint.X ) + fB * ( aStartingPoint.Y + aIntermediatePoint.Y );
- double fF = fC * ( aStartingPoint.X + aEndingPoint.X ) + fD * ( aStartingPoint.Y + aEndingPoint.Y );
-
- double fG = 2.0 * ( fA * ( aEndingPoint.Y - aIntermediatePoint.Y ) - fB * ( aEndingPoint.X - aIntermediatePoint.X ) );
-
- aCenterPoint.X = ( fD * fE - fB * fF ) / fG;
- aCenterPoint.Y = ( fA * fF - fC * fE ) / fG;
-
- if ( fG != 0 )
- {
- double fStartAngle = ImplGetOrientation( aCenterPoint, aStartingPoint );
- double fInterAngle = ImplGetOrientation( aCenterPoint, aIntermediatePoint );
- double fEndAngle = ImplGetOrientation( aCenterPoint, aEndingPoint );
-
- if ( fStartAngle > fEndAngle )
- {
- nSwitch ^=1;
- aIntermediatePoint = aEndingPoint;
- aEndingPoint = aStartingPoint;
- aStartingPoint = aIntermediatePoint;
- fG = fStartAngle;
- fStartAngle = fEndAngle;
- fEndAngle = fG;
- }
- if ( ! ( fInterAngle > fStartAngle ) && ( fInterAngle < fEndAngle ) )
- {
- nSwitch ^=1;
- aIntermediatePoint = aEndingPoint;
- aEndingPoint = aStartingPoint;
- aStartingPoint = aIntermediatePoint;
- fG = fStartAngle;
- fStartAngle = fEndAngle;
- fEndAngle = fG;
- }
- FloatPoint fRadius;
- fRadius.Y = fRadius.X = sqrt( pow( ( aStartingPoint.X - aCenterPoint.X ), 2 ) + pow( ( aStartingPoint.Y - aCenterPoint.Y ), 2 ) ) ;
-
- sal_uInt32 nType = ImplGetUI16();
- if ( nType == 0 )
- nType = 0; // is PIE
- else
- nType = 1; // is CHORD
-
- double fOrientation = 0;
- mpOutAct->DrawEllipticalArc( aCenterPoint, fRadius, fOrientation, nType, fStartAngle, fEndAngle );
- }
- }
- break;
-
- case 0x0f : ComOut( CGM_LEVEL1 | CGM_EXTENDED_PRIMITIVES_SET, "Circular Arc Centre" )
- {
- double fOrientation, fStartAngle, fEndAngle, vector[ 4 ];
- FloatPoint aCenter, aRadius;
-
- if ( mbFigure )
- mpOutAct->CloseRegion();
-
- ImplGetPoint( aCenter, sal_True );
- ImplGetVector( &vector[ 0 ] );
-
- if ( pElement->eVDCType == VDC_REAL )
- {
- aRadius.X = (double)ImplGetFloat( pElement->eVDCRealPrecision, pElement->nVDCRealSize );
- }
- else
- {
- aRadius.X = (double)ImplGetI( pElement->nVDCIntegerPrecision );
- }
-
- ImplMapDouble( aRadius.X );
- aRadius.Y = aRadius.X;
-
- fStartAngle = acos( vector[ 0 ] / sqrt( vector[ 0 ] * vector[ 0 ] + vector[ 1 ] * vector[ 1 ] ) ) * 57.29577951308;
- fEndAngle = acos( vector[ 2 ] / sqrt( vector[ 2 ] * vector[ 2 ] + vector[ 3 ] * vector[ 3 ] ) ) * 57.29577951308;
-
- if ( vector[ 1 ] > 0 )
- fStartAngle = 360 - fStartAngle;
- if ( vector[ 3 ] > 0 )
- fEndAngle = 360 - fEndAngle;
-
- if ( mbAngReverse )
- ImplSwitchStartEndAngle( fStartAngle, fEndAngle );
-
- if ( mbFigure )
- {
- Rectangle aBoundingBox(
- Point( (long)( aCenter.X - aRadius.X ), long( aCenter.Y - aRadius.X ) ),
- Size( static_cast< long >( 2 * aRadius.X ), (long)( 2 * aRadius.X ) ) );
- Polygon aPolygon( aBoundingBox,
- Point( (long)vector[ 0 ], (long)vector[ 1 ] ),
- Point( (long)vector[ 2 ], (long)vector[ 3 ] ), POLY_ARC );
- mpOutAct->RegPolyLine( aPolygon );
- }
- else
- {
- fOrientation = 0;
- mpOutAct->DrawEllipticalArc( aCenter, aRadius, fOrientation, 2, fStartAngle, fEndAngle );
- }
- mnParaSize = mnElementSize;
-
- }
- break;
-
- case 0x10 : ComOut( CGM_LEVEL1 | CGM_EXTENDED_PRIMITIVES_SET, "Circular Arc Centre Close" )
- {
- double fOrientation, fStartAngle, fEndAngle, vector[ 4 ];
- FloatPoint aCenter, aRadius;
-
- if ( mbFigure )
- mpOutAct->CloseRegion();
-
- ImplGetPoint( aCenter, sal_True );
- ImplGetVector( &vector[ 0 ] );
- if ( pElement->eVDCType == VDC_REAL )
- {
- aRadius.X = (double)ImplGetFloat( pElement->eVDCRealPrecision, pElement->nVDCRealSize );
- }
- else
- {
- aRadius.X = (double)ImplGetI( pElement->nVDCIntegerPrecision );
- }
- ImplMapDouble( aRadius.X );
- aRadius.Y = aRadius.X;
- fStartAngle = acos( vector[ 0 ] / sqrt( vector[ 0 ] * vector[ 0 ] + vector[ 1 ] * vector[ 1 ] ) ) * 57.29577951308;
- fEndAngle = acos( vector[ 2 ] / sqrt( vector[ 2 ] * vector[ 2 ] + vector[ 3 ] * vector[ 3 ] ) ) * 57.29577951308;
-
- if ( vector[ 1 ] > 0 )
- fStartAngle = 360 - fStartAngle;
- if ( vector[ 3 ] > 0 )
- fEndAngle = 360 - fEndAngle;
-
- if ( mbAngReverse )
- ImplSwitchStartEndAngle( fStartAngle, fEndAngle );
-
-
- sal_uInt32 nType = ImplGetUI16();
- if ( nType == 0 )
- nType = 0; // is PIE
- else
- nType = 1; // is CHORD
- fOrientation = 0;
-
- mpOutAct->DrawEllipticalArc( aCenter, aRadius, fOrientation,
- nType, fStartAngle, fEndAngle );
- mnParaSize = mnElementSize;
- }
- break;
-
- case 0x11 : ComOut( CGM_LEVEL1 | CGM_EXTENDED_PRIMITIVES_SET, "Ellipse" )
- {
- double fOrientation;
- FloatPoint aCenter, aRadius;
-
- if ( mbFigure )
- mpOutAct->CloseRegion();
-
- ImplGetEllipse( aCenter, aRadius, fOrientation ) ;
- mpOutAct->DrawEllipse( aCenter, aRadius, fOrientation ) ;
- }
- break;
-
- case 0x12 : ComOut( CGM_LEVEL1 | CGM_EXTENDED_PRIMITIVES_SET, "Elliptical Arc" )
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
-
- double fOrientation, fStartAngle, fEndAngle, vector[ 4 ];
- FloatPoint aCenter, aRadius;
-
- if ( mbFigure )
- mpOutAct->CloseRegion();
-
- sal_Bool bDirection = ImplGetEllipse( aCenter, aRadius, fOrientation );
- ImplGetVector( &vector[ 0 ] );
-
- fStartAngle = acos( vector[ 0 ] / sqrt( vector[ 0 ] * vector[ 0 ] + vector[ 1 ] * vector[ 1 ] ) ) * 57.29577951308;
- fEndAngle = acos( vector[ 2 ] / sqrt( vector[ 2 ] * vector[ 2 ] + vector[ 3 ] * vector[ 3 ] ) ) * 57.29577951308;
-
- if ( vector[ 1 ] > 0 )
- fStartAngle = 360 - fStartAngle;
- if ( vector[ 3 ] > 0 )
- fEndAngle = 360 - fEndAngle;
-
- if ( bDirection )
- mpOutAct->DrawEllipticalArc( aCenter, aRadius, fOrientation,
- 2, fStartAngle, fEndAngle );
- else
- mpOutAct->DrawEllipticalArc( aCenter, aRadius, fOrientation,
- 2, fEndAngle, fStartAngle);
- }
- break;
-
- case 0x13 : ComOut( CGM_LEVEL1 | CGM_EXTENDED_PRIMITIVES_SET, "Elliptical Arc Close" )
- {
- double fOrientation, fStartAngle, fEndAngle, vector[ 4 ];
- FloatPoint aCenter, aRadius;
-
- if ( mbFigure )
- mpOutAct->CloseRegion();
-
- sal_Bool bDirection = ImplGetEllipse( aCenter, aRadius, fOrientation );
- ImplGetVector( &vector[ 0 ] );
-
- fStartAngle = acos( vector[ 0 ] / sqrt( vector[ 0 ] * vector[ 0 ] + vector[ 1 ] * vector[ 1 ] ) ) * 57.29577951308;
- fEndAngle = acos( vector[ 2 ] / sqrt( vector[ 2 ] * vector[ 2 ] + vector[ 3 ] * vector[ 3 ] ) ) * 57.29577951308;
-
- if ( vector[ 1 ] > 0 )
- fStartAngle = 360 - fStartAngle;
- if ( vector[ 3 ] > 0 )
- fEndAngle = 360 - fEndAngle;
-
- sal_uInt32 nType = ImplGetUI16();
- if ( nType == 0 )
- nType = 0; // is PIE
- else
- nType = 1; // is CHORD
-
- if ( bDirection )
- mpOutAct->DrawEllipticalArc( aCenter, aRadius, fOrientation,
- nType, fStartAngle, fEndAngle );
- else
- mpOutAct->DrawEllipticalArc( aCenter, aRadius, fOrientation,
- nType, fEndAngle, fStartAngle);
- }
- break;
- case 0x14 : ComOut( CGM_LEVEL2, "Circular Arc Centre Reversed" )
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
- }
- break;
- case 0x15 : ComOut( CGM_LEVEL2, "Connection Edge" ) // NS
- {
-// if ( mbFigure )
-// mpOutAct->CloseRegion();
- }
- break;
- case 0x16 : ComOut( CGM_LEVEL3, "Hyperbolic Arc" ) // NS
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
- }
- break;
- case 0x17 : ComOut( CGM_LEVEL3, "Parabolic Arc" ) // NS
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
- }
- break;
- case 0x18 : ComOut( CGM_LEVEL3, "Non Uniform B-Spline" ) // NS
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
- }
- break;
- case 0x19 : ComOut( CGM_LEVEL3, "Non Uniform Rational B-Spline" ) // NS
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
- }
- break;
- case 0x1a : ComOut( CGM_LEVEL3, "Polybezier" )
- {
- sal_uInt32 nOrder = ImplGetI( pElement->nIntegerPrecision );
-
- USHORT nNumberOfPoints = sal::static_int_cast< USHORT >(( mnElementSize - pElement->nIntegerPrecision ) / ImplGetPointSize());
-
- Polygon aPolygon( nNumberOfPoints );
-
- for ( USHORT i = 0; i < nNumberOfPoints; i++)
- {
- FloatPoint aFloatPoint;
- ImplGetPoint( aFloatPoint, sal_True );
- aPolygon.SetPoint( Point ( (long)( aFloatPoint.X ), (long)( aFloatPoint.Y ) ), i );
- }
- if ( nOrder & 4 )
- {
- for ( USHORT i = 0; i < nNumberOfPoints; i++ )
- {
- if ( ( i % 3 ) == 0 )
- aPolygon.SetFlags( i, POLY_NORMAL );
- else
- aPolygon.SetFlags( i, POLY_CONTROL );
- }
- }
- else
- {
- for ( USHORT i = 0; i < nNumberOfPoints; i++ )
- {
- switch ( i & 3 )
- {
- case 0 :
- case 3 : aPolygon.SetFlags( i, POLY_NORMAL ); break;
- default : aPolygon.SetFlags( i, POLY_CONTROL ); break;
- }
- }
- }
- if ( mbFigure )
- mpOutAct->RegPolyLine( aPolygon );
- else
- mpOutAct->DrawPolybezier( aPolygon );
- mnParaSize = mnElementSize;
- }
- break;
-
- case 0x1b : ComOut( CGM_LEVEL3, "Polysymbol" ) // NS
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
- }
- break;
- case 0x1c : ComOut( CGM_LEVEL3, "Bitonal Tile" ) // NS
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
- }
- break;
- case 0x1d : ComOut( CGM_LEVEL3, "Tile" ) // NS
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
- }
- break;
- case 0x1e : ComOut( CGM_UNKNOWN_LEVEL, "Insert Object" )
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
- }
- break;
- case 0xff : ComOut( CGM_GDSF_ONLY, "Polybezier" )
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
- }
- break;
- case 0xfe : ComOut( CGM_GDSF_ONLY, "Sharp Polybezier" )
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
- }
- break;
- case 0xfd : ComOut( CGM_GDSF_ONLY, "Polyspline" )
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
- }
- break;
- case 0xfc : ComOut( CGM_GDSF_ONLY, "Reounded Rectangle" )
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
- }
- break;
- case 0xfb : ComOut( CGM_GDSF_ONLY, "Begin Cell Array" )
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
- }
- break;
- case 0xfa : ComOut( CGM_GDSF_ONLY, "End Cell Array" )
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
- }
- break;
- case 0xf9 : ComOut( CGM_GDSF_ONLY, "Insert File" )
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
- }
- break;
- case 0xf8 : ComOut( CGM_GDSF_ONLY, "Block Text" )
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
- }
- break;
- case 0xf7 : ComOut( CGM_GDSF_ONLY, "Variable Width Polyline" )
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
- }
- break;
- case 0xf6 : ComOut( CGM_GDSF_ONLY, "Elliptical Arc 3 Point" )
- {
- if ( mbFigure )
- mpOutAct->CloseRegion();
- }
- break;
- case 0xf1 : ComOut( CGM_GDSF_ONLY, "Hyperlink Definition" ) break;
- default: ComOut( CGM_UNKNOWN_COMMAND, "" ) break;
- }
- }
- else
- mnParaSize = mnElementSize;
-};
-
-