From 74b56b3c2572179819c646eee87f1caa1ce12652 Mon Sep 17 00:00:00 2001 From: Armin Weiss Date: Fri, 24 Nov 2000 15:36:47 +0000 Subject: #80594# XML 3d import/eport added --- xmloff/source/draw/ximp3dobject.cxx | 537 ++++++++++++++++++++++++++++++++++++ xmloff/source/draw/ximp3dobject.hxx | 196 +++++++++++++ xmloff/source/draw/ximp3dscene.cxx | 453 ++++++++++++++++++++++++++++++ xmloff/source/draw/ximp3dscene.hxx | 192 +++++++++++++ 4 files changed, 1378 insertions(+) create mode 100644 xmloff/source/draw/ximp3dobject.cxx create mode 100644 xmloff/source/draw/ximp3dobject.hxx create mode 100644 xmloff/source/draw/ximp3dscene.cxx create mode 100644 xmloff/source/draw/ximp3dscene.hxx (limited to 'xmloff/source') diff --git a/xmloff/source/draw/ximp3dobject.cxx b/xmloff/source/draw/ximp3dobject.cxx new file mode 100644 index 000000000000..4cb6423c6c2a --- /dev/null +++ b/xmloff/source/draw/ximp3dobject.cxx @@ -0,0 +1,537 @@ +/************************************************************************* + * + * $RCSfile: ximp3dobject.cxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: aw $ $Date: 2000-11-24 16:36:47 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#pragma hdrstop + +#ifndef _CPPUHELPER_EXTRACT_HXX_ +#include +#endif + +#ifndef _XIMP3DOBJECT_HXX +#include "ximp3dobject.hxx" +#endif + +#ifndef _XMLOFF_XMLSHAPESTYLECONTEXT_HXX +#include "XMLShapeStyleContext.hxx" +#endif + +#ifndef _XMLOFF_XMLUCONV_HXX +#include "xmluconv.hxx" +#endif + +#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ +#include +#endif + +#ifndef _COM_SUN_STAR_DRAWING_POINTSEQUENCESEQUENCE_HPP_ +#include +#endif + +#ifndef _COM_SUN_STAR_DRAWING_POINTSEQUENCE_HPP_ +#include +#endif + +#ifndef _XEXPTRANSFORM_HXX +#include "xexptran.hxx" +#endif + +#ifndef _COM_SUN_STAR_DRAWING_POLYPOLYGONBEZIERCOORDS_HPP_ +#include +#endif + +#ifndef _XMLOFF_FAMILIES_HXX_ +#include "families.hxx" +#endif + +#ifndef _XIMPSTYLE_HXX +#include "ximpstyl.hxx" +#endif + +#ifndef _XMLOFF_XMLKYWD_HXX +#include "xmlkywd.hxx" +#endif + +#ifndef _COM_SUN_STAR_DRAWING_POLYPOLYGONSHAPE3D_HPP_ +#include +#endif + +#ifndef _COM_SUN_STAR_DRAWING_DOUBLESEQUENCE_HPP_ +#include +#endif + +using namespace ::rtl; +using namespace ::com::sun::star; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +TYPEINIT1( SdXML3DObjectContext, SvXMLImportContext ); + +SdXML3DObjectContext::SdXML3DObjectContext( + SvXMLImport& rImport, + sal_uInt16 nPrfx, + const OUString& rLocalName, + const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, + uno::Reference< drawing::XShapes >& rShapes) +: SvXMLImportContext( rImport, nPrfx, rLocalName ), + mxShapes( rShapes ), + mbSetTransform( FALSE ) +{ + sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; + for(sal_Int16 i=0; i < nAttrCount; i++) + { + OUString sAttrName = xAttrList->getNameByIndex( i ); + OUString aLocalName; + sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName ); + OUString sValue = xAttrList->getValueByIndex( i ); + const SvXMLTokenMap& rAttrTokenMap = GetImport().GetShapeImport()->Get3DObjectAttrTokenMap(); + + switch(rAttrTokenMap.Get(nPrefix, aLocalName)) + { + case XML_TOK_3DOBJECT_DRAWSTYLE_NAME: + { + maDrawStyleName = sValue; + break; + } + case XML_TOK_3DOBJECT_TRANSFORM: + { + SdXMLImExTransform3D aTransform(sValue, GetImport().GetMM100UnitConverter()); + if(aTransform.NeedsAction()) + mbSetTransform = aTransform.GetFullHomogenTransform(mxHomMat); + break; + } + case XML_TOK_3DOBJECT_VIEWBOX: + { + maViewBox = sValue; + break; + } + case XML_TOK_3DOBJECT_D: + { + maPoints = sValue; + break; + } + } + } +} + +////////////////////////////////////////////////////////////////////////////// + +SdXML3DObjectContext::~SdXML3DObjectContext() +{ +} + +////////////////////////////////////////////////////////////////////////////// + +void SdXML3DObjectContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList) +{ + uno::Reference< beans::XPropertySet > xPropSet(mxShape, uno::UNO_QUERY); + if(xPropSet.is()) + { + // set parameters + if(mbSetTransform) + { + uno::Any aAny; + aAny <<= mxHomMat; + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DTransformMatrix")), aAny); + } + + if(maPoints.getLength() && maViewBox.getLength()) + { + SdXMLImExViewBox aViewBox(maViewBox, GetImport().GetMM100UnitConverter()); + awt::Point aMinPoint(aViewBox.GetX(), aViewBox.GetY()); + awt::Size aMaxSize(aViewBox.GetWidth(), aViewBox.GetHeight()); + SdXMLImExSvgDElement aPoints(maPoints, aViewBox, + aMinPoint, aMaxSize, GetImport().GetMM100UnitConverter()); + + // convert to double sequences + drawing::PointSequenceSequence& xPoSeSe = + (drawing::PointSequenceSequence&)aPoints.GetPointSequenceSequence(); + sal_Int32 nOuterSequenceCount = xPoSeSe.getLength(); + drawing::PointSequence* pInnerSequence = xPoSeSe.getArray(); + + drawing::PolyPolygonShape3D xPolyPolygon3D; + xPolyPolygon3D.SequenceX.realloc(nOuterSequenceCount); + xPolyPolygon3D.SequenceY.realloc(nOuterSequenceCount); + xPolyPolygon3D.SequenceZ.realloc(nOuterSequenceCount); + drawing::DoubleSequence* pOuterSequenceX = xPolyPolygon3D.SequenceX.getArray(); + drawing::DoubleSequence* pOuterSequenceY = xPolyPolygon3D.SequenceY.getArray(); + drawing::DoubleSequence* pOuterSequenceZ = xPolyPolygon3D.SequenceZ.getArray(); + + for(sal_Int32 a(0L); a < nOuterSequenceCount; a++) + { + sal_Int32 nInnerSequenceCount(pInnerSequence->getLength()); + awt::Point* pArray = pInnerSequence->getArray(); + + pOuterSequenceX->realloc(nInnerSequenceCount); + pOuterSequenceY->realloc(nInnerSequenceCount); + pOuterSequenceZ->realloc(nInnerSequenceCount); + double* pInnerSequenceX = pOuterSequenceX->getArray(); + double* pInnerSequenceY = pOuterSequenceY->getArray(); + double* pInnerSequenceZ = pOuterSequenceZ->getArray(); + + for(sal_Int32 b(0L); b < nInnerSequenceCount; b++) + { + *pInnerSequenceX++ = pArray->X; + *pInnerSequenceY++ = pArray->Y; + *pInnerSequenceZ++ = 0.0; + pArray++; + } + pInnerSequence++; + + pOuterSequenceX++; + pOuterSequenceY++; + pOuterSequenceZ++; + } + + // set poly + uno::Any aAny; + aAny <<= xPolyPolygon3D; + xPropSet->setPropertyValue( + OUString(RTL_CONSTASCII_USTRINGPARAM("D3DPolyPolygon3D")), aAny); + } + + // call parent + SvXMLImportContext::StartElement(xAttrList); + } +} + +////////////////////////////////////////////////////////////////////////////// + +void SdXML3DObjectContext::EndElement() +{ + // call parent + SvXMLImportContext::EndElement(); +} + +////////////////////////////////////////////////////////////////////////////// + +void SdXML3DObjectContext::AddShape(uno::Reference< drawing::XShape >& xShape) +{ + if(xShape.is() && mxShapes.is()) + { + // add new shape to parent + mxShapes->add( xShape ); + } +} + +////////////////////////////////////////////////////////////////////////////// + +void SdXML3DObjectContext::SetStyle() +{ + // set style on shape + if(maDrawStyleName.getLength() && mxShape.is()) + { + const SvXMLStyleContext* pStyle = 0L; + sal_Bool bAutoStyle(FALSE); + + if(GetImport().GetShapeImport()->GetAutoStylesContext()) + pStyle = GetImport().GetShapeImport()->GetAutoStylesContext()->FindStyleChildContext( + XML_STYLE_FAMILY_SD_GRAPHICS_ID, maDrawStyleName); + + if(pStyle) + bAutoStyle = TRUE; + + if(!pStyle && GetImport().GetShapeImport()->GetStylesContext()) + pStyle = GetImport().GetShapeImport()->GetStylesContext()-> + FindStyleChildContext(XML_STYLE_FAMILY_SD_GRAPHICS_ID, maDrawStyleName); + + if(pStyle && pStyle->ISA(XMLShapeStyleContext)) + { + uno::Reference< beans::XPropertySet > xPropSet(mxShape, uno::UNO_QUERY); + if(xPropSet.is()) + { + XMLShapeStyleContext* pDocStyle = (XMLShapeStyleContext*)pStyle; + + if(pDocStyle->GetStyle().is()) + { + // set style on object + uno::Any aAny; + aAny <<= pDocStyle->GetStyle(); + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("Style")), aAny); + } + + if(bAutoStyle) + { + // set PropertySet on object + pDocStyle->FillPropertySet(xPropSet); + } + } + } + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +TYPEINIT1( SdXML3DCubeObjectShapeContext, SdXML3DObjectContext ); + +SdXML3DCubeObjectShapeContext::SdXML3DCubeObjectShapeContext( + SvXMLImport& rImport, + sal_uInt16 nPrfx, + const OUString& rLocalName, + const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, + uno::Reference< drawing::XShapes >& rShapes) +: SdXML3DObjectContext( rImport, nPrfx, rLocalName, xAttrList, rShapes ) +{ +} + +////////////////////////////////////////////////////////////////////////////// + +SdXML3DCubeObjectShapeContext::~SdXML3DCubeObjectShapeContext() +{ +} + +////////////////////////////////////////////////////////////////////////////// + +void SdXML3DCubeObjectShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList) +{ + // create shape + uno::Reference< lang::XMultiServiceFactory > xServiceFact(GetImport().GetModel(), uno::UNO_QUERY); + if(xServiceFact.is()) + { + uno::Reference< drawing::XShape > xShape(xServiceFact->createInstance( + OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.Shape3DCubeObject"))), uno::UNO_QUERY); + if(xShape.is()) + { + // set shape local + mxShape = xShape; + + // call parent + SdXML3DObjectContext::StartElement(xAttrList); + + // add, set style and properties from base shape + AddShape(xShape); + SetStyle(); + } + } +} + +////////////////////////////////////////////////////////////////////////////// + +void SdXML3DCubeObjectShapeContext::EndElement() +{ + // call parent + SdXML3DObjectContext::EndElement(); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +TYPEINIT1( SdXML3DSphereObjectShapeContext, SdXML3DObjectContext ); + +SdXML3DSphereObjectShapeContext::SdXML3DSphereObjectShapeContext( + SvXMLImport& rImport, + sal_uInt16 nPrfx, + const OUString& rLocalName, + const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, + uno::Reference< drawing::XShapes >& rShapes) +: SdXML3DObjectContext( rImport, nPrfx, rLocalName, xAttrList, rShapes ) +{ +} + +////////////////////////////////////////////////////////////////////////////// + +SdXML3DSphereObjectShapeContext::~SdXML3DSphereObjectShapeContext() +{ +} + +////////////////////////////////////////////////////////////////////////////// + +void SdXML3DSphereObjectShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList) +{ + // create shape + uno::Reference< lang::XMultiServiceFactory > xServiceFact(GetImport().GetModel(), uno::UNO_QUERY); + if(xServiceFact.is()) + { + uno::Reference< drawing::XShape > xShape(xServiceFact->createInstance( + OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.Shape3DSphereObject"))), uno::UNO_QUERY); + if(xShape.is()) + { + // set shape local + mxShape = xShape; + + // call parent + SdXML3DObjectContext::StartElement(xAttrList); + + // add, set style and properties from base shape + AddShape(xShape); + SetStyle(); + } + } +} + +////////////////////////////////////////////////////////////////////////////// + +void SdXML3DSphereObjectShapeContext::EndElement() +{ + // call parent + SdXML3DObjectContext::EndElement(); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +TYPEINIT1( SdXML3DLatheObjectShapeContext, SdXML3DObjectContext ); + +SdXML3DLatheObjectShapeContext::SdXML3DLatheObjectShapeContext( + SvXMLImport& rImport, + sal_uInt16 nPrfx, + const OUString& rLocalName, + const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, + uno::Reference< drawing::XShapes >& rShapes) +: SdXML3DObjectContext( rImport, nPrfx, rLocalName, xAttrList, rShapes ) +{ +} + +////////////////////////////////////////////////////////////////////////////// + +SdXML3DLatheObjectShapeContext::~SdXML3DLatheObjectShapeContext() +{ +} + +////////////////////////////////////////////////////////////////////////////// + +void SdXML3DLatheObjectShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList) +{ + // create shape + uno::Reference< lang::XMultiServiceFactory > xServiceFact(GetImport().GetModel(), uno::UNO_QUERY); + if(xServiceFact.is()) + { + uno::Reference< drawing::XShape > xShape(xServiceFact->createInstance( + OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.Shape3DLatheObject"))), uno::UNO_QUERY); + if(xShape.is()) + { + // set shape local + mxShape = xShape; + + // call parent + SdXML3DObjectContext::StartElement(xAttrList); + + // add, set style and properties from base shape + AddShape(xShape); + SetStyle(); + } + } +} + +////////////////////////////////////////////////////////////////////////////// + +void SdXML3DLatheObjectShapeContext::EndElement() +{ + // call parent + SdXML3DObjectContext::EndElement(); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +TYPEINIT1( SdXML3DExtrudeObjectShapeContext, SdXML3DObjectContext ); + +SdXML3DExtrudeObjectShapeContext::SdXML3DExtrudeObjectShapeContext( + SvXMLImport& rImport, + sal_uInt16 nPrfx, + const OUString& rLocalName, + const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, + uno::Reference< drawing::XShapes >& rShapes) +: SdXML3DObjectContext( rImport, nPrfx, rLocalName, xAttrList, rShapes ) +{ +} + +////////////////////////////////////////////////////////////////////////////// + +SdXML3DExtrudeObjectShapeContext::~SdXML3DExtrudeObjectShapeContext() +{ +} + +////////////////////////////////////////////////////////////////////////////// + +void SdXML3DExtrudeObjectShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList) +{ + // create shape + uno::Reference< lang::XMultiServiceFactory > xServiceFact(GetImport().GetModel(), uno::UNO_QUERY); + if(xServiceFact.is()) + { + uno::Reference< drawing::XShape > xShape(xServiceFact->createInstance( + OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.Shape3DExtrudeObject"))), uno::UNO_QUERY); + if(xShape.is()) + { + // set shape local + mxShape = xShape; + + // call parent + SdXML3DObjectContext::StartElement(xAttrList); + + // add, set style and properties from base shape + AddShape(xShape); + SetStyle(); + } + } +} + +////////////////////////////////////////////////////////////////////////////// + +void SdXML3DExtrudeObjectShapeContext::EndElement() +{ + // call parent + SdXML3DObjectContext::EndElement(); +} + + diff --git a/xmloff/source/draw/ximp3dobject.hxx b/xmloff/source/draw/ximp3dobject.hxx new file mode 100644 index 000000000000..8e7f71f35be8 --- /dev/null +++ b/xmloff/source/draw/ximp3dobject.hxx @@ -0,0 +1,196 @@ +/************************************************************************* + * + * $RCSfile: ximp3dobject.hxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: aw $ $Date: 2000-11-24 16:36:47 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _XIMP3DOBJECT_HXX +#define _XIMP3DOBJECT_HXX + +#ifndef _XMLOFF_XMLICTXT_HXX +#include "xmlictxt.hxx" +#endif + +#ifndef _SDXMLIMP_HXX +#include "sdxmlimp.hxx" +#endif + +#ifndef _XMLOFF_NMSPMAP_HXX +#include "nmspmap.hxx" +#endif + +#ifndef _COM_SUN_STAR_DRAWING_XSHAPES_HPP_ +#include +#endif + +#ifndef _RTTI_HXX +#include +#endif + +#ifndef _COM_SUN_STAR_DRAWING_HOMOGENMATRIX_HPP_ +#include +#endif + +////////////////////////////////////////////////////////////////////////////// +// common shape context + +class SdXML3DObjectContext : public SvXMLImportContext +{ +protected: + // the shape group this object should be created inside + com::sun::star::uno::Reference< com::sun::star::drawing::XShapes > mxShapes; + com::sun::star::uno::Reference< com::sun::star::drawing::XShape > mxShape; + com::sun::star::uno::Reference< com::sun::star::text::XTextCursor > mxCursor; + + rtl::OUString maDrawStyleName; + rtl::OUString maPoints; + rtl::OUString maViewBox; + + com::sun::star::drawing::HomogenMatrix mxHomMat; + BOOL mbSetTransform; + + void SetStyle(); + void AddShape(com::sun::star::uno::Reference< com::sun::star::drawing::XShape >& xShape); + +public: + TYPEINFO(); + + SdXML3DObjectContext( SvXMLImport& rImport, + sal_uInt16 nPrfx, + const rtl::OUString& rLocalName, + const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, + com::sun::star::uno::Reference< com::sun::star::drawing::XShapes >& rShapes); + virtual ~SdXML3DObjectContext(); + + virtual void StartElement(const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList); + virtual void EndElement(); +}; + +////////////////////////////////////////////////////////////////////////////// +// dr3d:3dcube context + +class SdXML3DCubeObjectShapeContext : public SdXML3DObjectContext +{ +public: + TYPEINFO(); + + SdXML3DCubeObjectShapeContext( SvXMLImport& rImport, sal_uInt16 nPrfx, + const rtl::OUString& rLocalName, + const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, + com::sun::star::uno::Reference< com::sun::star::drawing::XShapes >& rShapes); + virtual ~SdXML3DCubeObjectShapeContext(); + + virtual void StartElement(const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList); + virtual void EndElement(); +}; + +////////////////////////////////////////////////////////////////////////////// +// dr3d:3dsphere context + +class SdXML3DSphereObjectShapeContext : public SdXML3DObjectContext +{ +public: + TYPEINFO(); + + SdXML3DSphereObjectShapeContext( SvXMLImport& rImport, sal_uInt16 nPrfx, + const rtl::OUString& rLocalName, + const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, + com::sun::star::uno::Reference< com::sun::star::drawing::XShapes >& rShapes); + virtual ~SdXML3DSphereObjectShapeContext(); + + virtual void StartElement(const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList); + virtual void EndElement(); +}; + +////////////////////////////////////////////////////////////////////////////// +// dr3d:3dlathe context + +class SdXML3DLatheObjectShapeContext : public SdXML3DObjectContext +{ +public: + TYPEINFO(); + + SdXML3DLatheObjectShapeContext( SvXMLImport& rImport, sal_uInt16 nPrfx, + const rtl::OUString& rLocalName, + const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, + com::sun::star::uno::Reference< com::sun::star::drawing::XShapes >& rShapes); + virtual ~SdXML3DLatheObjectShapeContext(); + + virtual void StartElement(const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList); + virtual void EndElement(); +}; + +////////////////////////////////////////////////////////////////////////////// +// dr3d:3dextrude context + +class SdXML3DExtrudeObjectShapeContext : public SdXML3DObjectContext +{ +public: + TYPEINFO(); + + SdXML3DExtrudeObjectShapeContext( SvXMLImport& rImport, sal_uInt16 nPrfx, + const rtl::OUString& rLocalName, + const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, + com::sun::star::uno::Reference< com::sun::star::drawing::XShapes >& rShapes); + virtual ~SdXML3DExtrudeObjectShapeContext(); + + virtual void StartElement(const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList); + virtual void EndElement(); +}; + +#endif // _XIMP3DOBJECT_HXX diff --git a/xmloff/source/draw/ximp3dscene.cxx b/xmloff/source/draw/ximp3dscene.cxx new file mode 100644 index 000000000000..26ab93ada831 --- /dev/null +++ b/xmloff/source/draw/ximp3dscene.cxx @@ -0,0 +1,453 @@ +/************************************************************************* + * + * $RCSfile: ximp3dscene.cxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: aw $ $Date: 2000-11-24 16:36:47 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#pragma hdrstop + +#ifndef _XIMP3DSCENE_HXX +#include "ximp3dscene.hxx" +#endif + +#ifndef _XMLOFF_XMLUCONV_HXX +#include "xmluconv.hxx" +#endif + +#ifndef _XEXPTRANSFORM_HXX +#include "xexptran.hxx" +#endif + +#ifndef _XMLOFF_XMLKYWD_HXX +#include "xmlkywd.hxx" +#endif + +#ifndef _XMLOFF_XMLNMSPE_HXX +#include "xmlnmspe.hxx" +#endif + +#ifndef _COM_SUN_STAR_DRAWING_DIRECTION3D_HPP_ +#include +#endif + +using namespace ::rtl; +using namespace ::com::sun::star; + +////////////////////////////////////////////////////////////////////////////// +// dr3d:3dlight context + +SdXML3DLightContext::SdXML3DLightContext( + SdXMLImport& rImport, + sal_uInt16 nPrfx, + const rtl::OUString& rLName, + const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList) +: SvXMLImportContext( rImport, nPrfx, rLName), + maDiffuseColor(0x00000000), + maDirection(0.0, 0.0, 1.0), + mbEnabled(FALSE), + mbSpecular(FALSE) +{ + // read attributes for the 3DScene + sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; + for(sal_Int16 i=0; i < nAttrCount; i++) + { + OUString sAttrName = xAttrList->getNameByIndex( i ); + OUString aLocalName; + sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName ); + OUString sValue = xAttrList->getValueByIndex( i ); + const SvXMLTokenMap& rAttrTokenMap = GetImport().GetShapeImport()->Get3DLightAttrTokenMap(); + + switch(rAttrTokenMap.Get(nPrefix, aLocalName)) + { + case XML_TOK_3DLIGHT_DIFFUSE_COLOR: + { + GetImport().GetMM100UnitConverter().convertColor(maDiffuseColor, sValue); + break; + } + case XML_TOK_3DLIGHT_DIRECTION: + { + GetImport().GetMM100UnitConverter().convertVector3D(maDirection, sValue); + break; + } + case XML_TOK_3DLIGHT_ENABLED: + { + GetImport().GetMM100UnitConverter().convertBool(mbEnabled, sValue); + break; + } + case XML_TOK_3DLIGHT_SPECULAR: + { + GetImport().GetMM100UnitConverter().convertBool(mbSpecular, sValue); + break; + } + } + } +} + +SdXML3DLightContext::~SdXML3DLightContext() +{ +} + +////////////////////////////////////////////////////////////////////////////// + +TYPEINIT1( SdXML3DSceneShapeContext, SvXMLImportContext ); + +SdXML3DSceneShapeContext::SdXML3DSceneShapeContext( + SvXMLImport& rImport, + USHORT nPrfx, + const OUString& rLocalName, + const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, + uno::Reference< drawing::XShapes >& rShapes) +: SvXMLImportContext( rImport, nPrfx, rLocalName ), + mxShapes(rShapes), + mbSetTransform( FALSE ), + mxPrjMode(drawing::ProjectionMode_PERSPECTIVE), + mnDistance(1000), + mnFocalLength(1000), + mnShadowSlant(0), + mxShadeMode(drawing::ShadeMode_SMOOTH), + maAmbientColor(0x00666666), + mbLightingMode(FALSE) +{ +} + +////////////////////////////////////////////////////////////////////////////// + +SdXML3DSceneShapeContext::~SdXML3DSceneShapeContext() +{ + + // release remembered light contexts, they are no longer needed + while(maList.Count()) + maList.Remove(maList.Count() - 1)->ReleaseRef(); +} + +////////////////////////////////////////////////////////////////////////////// + +void SdXML3DSceneShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList) +{ + // read attributes for the 3DScene + sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; + for(sal_Int16 i=0; i < nAttrCount; i++) + { + OUString sAttrName = xAttrList->getNameByIndex( i ); + OUString aLocalName; + sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName ); + OUString sValue = xAttrList->getValueByIndex( i ); + const SvXMLTokenMap& rAttrTokenMap = GetImport().GetShapeImport()->Get3DSceneShapeAttrTokenMap(); + + switch(rAttrTokenMap.Get(nPrefix, aLocalName)) + { + case XML_TOK_3DSCENESHAPE_X: + { + GetImport().GetMM100UnitConverter().convertMeasure(mnX, sValue); + break; + } + case XML_TOK_3DSCENESHAPE_Y: + { + GetImport().GetMM100UnitConverter().convertMeasure(mnY, sValue); + break; + } + case XML_TOK_3DSCENESHAPE_WIDTH: + { + GetImport().GetMM100UnitConverter().convertMeasure(mnWidth, sValue); + break; + } + case XML_TOK_3DSCENESHAPE_HEIGHT: + { + GetImport().GetMM100UnitConverter().convertMeasure(mnHeight, sValue); + break; + } + case XML_TOK_3DSCENESHAPE_TRANSFORM: + { + SdXMLImExTransform3D aTransform(sValue, GetImport().GetMM100UnitConverter()); + if(aTransform.NeedsAction()) + mbSetTransform = aTransform.GetFullHomogenTransform(mxHomMat); + break; + } + case XML_TOK_3DSCENESHAPE_PROJECTION: + { + if(sValue.equals(OUString(RTL_CONSTASCII_USTRINGPARAM(sXML_parallel)))) + mxPrjMode = drawing::ProjectionMode_PARALLEL; + else + mxPrjMode = drawing::ProjectionMode_PERSPECTIVE; + break; + } + case XML_TOK_3DSCENESHAPE_DISTANCE: + { + GetImport().GetMM100UnitConverter().convertMeasure(mnDistance, sValue); + break; + } + case XML_TOK_3DSCENESHAPE_FOCAL_LENGTH: + { + GetImport().GetMM100UnitConverter().convertMeasure(mnFocalLength, sValue); + break; + } + case XML_TOK_3DSCENESHAPE_SHADOW_SLANT: + { + GetImport().GetMM100UnitConverter().convertNumber(mnShadowSlant, sValue); + break; + } + case XML_TOK_3DSCENESHAPE_SHADE_MODE: + { + if(sValue.equals(OUString(RTL_CONSTASCII_USTRINGPARAM(sXML_flat)))) + mxShadeMode = drawing::ShadeMode_FLAT; + else if(sValue.equals(OUString(RTL_CONSTASCII_USTRINGPARAM(sXML_phong)))) + mxShadeMode = drawing::ShadeMode_PHONG; + else if(sValue.equals(OUString(RTL_CONSTASCII_USTRINGPARAM(sXML_gouraud)))) + mxShadeMode = drawing::ShadeMode_SMOOTH; + else + mxShadeMode = drawing::ShadeMode_DRAFT; + break; + } + case XML_TOK_3DSCENESHAPE_AMBIENT_COLOR: + { + GetImport().GetMM100UnitConverter().convertColor(maAmbientColor, sValue); + break; + } + case XML_TOK_3DSCENESHAPE_LIGHTING_MODE: + { + GetImport().GetMM100UnitConverter().convertBool(mbLightingMode, sValue); + break; + } + } + } +} + +////////////////////////////////////////////////////////////////////////////// + +void SdXML3DSceneShapeContext::EndElement() +{ + if(mxShapes.is()) + { + uno::Reference< drawing::XShape > xShape(mxShapes, uno::UNO_QUERY); + if(xShape.is()) + { + // set local parameters on shape + awt::Point aPoint(mnX, mnY); + awt::Size aSize(mnWidth, mnHeight); + xShape->setPosition(aPoint); + xShape->setSize(aSize); + + uno::Reference< beans::XPropertySet > xPropSet(xShape, uno::UNO_QUERY); + if(xPropSet.is()) + { + uno::Any aAny; + + // world transformation + if(mbSetTransform) + { + aAny <<= mxHomMat; + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DTransformMatrix")), aAny); + } + + // projection "D3DScenePerspective" drawing::ProjectionMode + aAny <<= mxPrjMode; + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DScenePerspective")), aAny); + + // distance + aAny <<= mnDistance; + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneDistance")), aAny); + + // focalLength + aAny <<= mnFocalLength; + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneFocalLength")), aAny); + + // shadowSlant + aAny <<= (sal_Int16)mnShadowSlant; + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneShadowSlant")), aAny); + + // shadeMode + aAny <<= mxShadeMode; + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneShadeMode")), aAny); + + // ambientColor + aAny <<= maAmbientColor.GetColor(); + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneAmbientColor")), aAny); + + // lightingMode + aAny <<= mbLightingMode; + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneTwoSidedLighting")), aAny); + + if(maList.Count()) + { + uno::Any aAny2; + uno::Any aAny3; + + // set lights + for(sal_uInt32 a(0L); a < maList.Count(); a++) + { + SdXML3DLightContext* pCtx = (SdXML3DLightContext*)maList.GetObject(a); + + // set anys + aAny <<= pCtx->GetDiffuseColor().GetColor(); + drawing::Direction3D xLightDir; + xLightDir.DirectionX = pCtx->GetDirection().X(); + xLightDir.DirectionY = pCtx->GetDirection().Y(); + xLightDir.DirectionZ = pCtx->GetDirection().Z(); + aAny2 <<= xLightDir; + aAny3 <<= pCtx->GetEnabled(); + + switch(a) + { + case 0: + { + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightColor1")), aAny); + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightDirection1")), aAny2); + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightOn1")), aAny3); + break; + } + case 1: + { + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightColor2")), aAny); + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightDirection2")), aAny2); + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightOn2")), aAny3); + break; + } + case 2: + { + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightColor3")), aAny); + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightDirection3")), aAny2); + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightOn3")), aAny3); + break; + } + case 3: + { + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightColor4")), aAny); + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightDirection4")), aAny2); + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightOn4")), aAny3); + break; + } + case 4: + { + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightColor5")), aAny); + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightDirection5")), aAny2); + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightOn5")), aAny3); + break; + } + case 5: + { + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightColor6")), aAny); + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightDirection6")), aAny2); + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightOn6")), aAny3); + break; + } + case 6: + { + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightColor7")), aAny); + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightDirection7")), aAny2); + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightOn7")), aAny3); + break; + } + case 7: + { + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightColor8")), aAny); + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightDirection8")), aAny2); + xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSceneLightOn8")), aAny3); + break; + } + } + } + } + } + + // call parent + SvXMLImportContext::EndElement(); + } + } +} + +////////////////////////////////////////////////////////////////////////////// + +SvXMLImportContext* SdXML3DSceneShapeContext::CreateChildContext( USHORT nPrefix, + const OUString& rLocalName, + const uno::Reference< xml::sax::XAttributeList>& xAttrList ) +{ + SvXMLImportContext* pContext = 0L; + + // look for local light context first + if(nPrefix == XML_NAMESPACE_DR3D + && rLocalName.equals(OUString(RTL_CONSTASCII_USTRINGPARAM(sXML_light)))) + { + // dr3d:light inside dr3d:scene context + pContext = new SdXML3DLightContext(GetSdImport(), nPrefix, rLocalName, xAttrList); + + // remember SdXMLPresentationPlaceholderContext for later evaluation + if(pContext) + { + pContext->AddRef(); + maList.Insert((SdXML3DLightContext*)pContext, LIST_APPEND); + } + } + + // call GroupChildContext function at common ShapeImport + if(!pContext) + { + pContext = GetImport().GetShapeImport()->Create3DSceneChildContext( + GetImport(), nPrefix, rLocalName, xAttrList, mxShapes); + } + + // call parent when no own context was created + if(!pContext) + { + pContext = SvXMLImportContext::CreateChildContext( + nPrefix, rLocalName, xAttrList); + } + + return pContext; +} + + diff --git a/xmloff/source/draw/ximp3dscene.hxx b/xmloff/source/draw/ximp3dscene.hxx new file mode 100644 index 000000000000..3ade9fd46362 --- /dev/null +++ b/xmloff/source/draw/ximp3dscene.hxx @@ -0,0 +1,192 @@ +/************************************************************************* + * + * $RCSfile: ximp3dscene.hxx,v $ + * + * $Revision: 1.1 $ + * + * last change: $Author: aw $ $Date: 2000-11-24 16:36:47 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _XIMP3DSCENE_HXX +#define _XIMP3DSCENE_HXX + +#ifndef _XMLOFF_XMLICTXT_HXX +#include "xmlictxt.hxx" +#endif + +#ifndef _SDXMLIMP_HXX +#include "sdxmlimp.hxx" +#endif + +#ifndef _XMLOFF_NMSPMAP_HXX +#include "nmspmap.hxx" +#endif + +#ifndef _COM_SUN_STAR_DRAWING_XSHAPES_HPP_ +#include +#endif + +#ifndef _RTTI_HXX +#include +#endif + +#ifndef _COM_SUN_STAR_DRAWING_HOMOGENMATRIX_HPP_ +#include +#endif + +#ifndef _COM_SUN_STAR_DRAWING_PROJECTIONMODE_HPP_ +#include +#endif + +#ifndef _COM_SUN_STAR_DRAWING_SHADEMODE_HPP_ +#include +#endif + +#ifndef _TOOLS_COLOR_HXX +#include +#endif + +#ifndef _SVX_VECTOR3D_HXX +#include +#endif + +////////////////////////////////////////////////////////////////////////////// +// dr3d:3dlight context + +class SdXML3DLightContext: public SvXMLImportContext +{ + // local parameters which need to be read + Color maDiffuseColor; + Vector3D maDirection; + BOOL mbEnabled; + BOOL mbSpecular; + +public: + SdXML3DLightContext( + SdXMLImport& rImport, + sal_uInt16 nPrfx, + const rtl::OUString& rLName, + const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList >& xAttrList); + virtual ~SdXML3DLightContext(); + + const Color& GetDiffuseColor() { return maDiffuseColor; } + const Vector3D& GetDirection() { return maDirection; } + BOOL GetEnabled() { return mbEnabled; } + BOOL GetSpecular() { return mbSpecular; } +}; +DECLARE_LIST(Imp3DLightList, SdXML3DLightContext*); + +////////////////////////////////////////////////////////////////////////////// +// dr3d:3dscene context + +class SdXML3DSceneShapeContext : public SvXMLImportContext +{ + // the shape group this group is working on + // this is the scene at the same time + com::sun::star::uno::Reference< com::sun::star::drawing::XShapes > mxShapes; + + // list for local light contexts + Imp3DLightList maList; + + // local parameters which need to be read + sal_Int32 mnX; + sal_Int32 mnY; + sal_Int32 mnWidth; + sal_Int32 mnHeight; + + com::sun::star::drawing::HomogenMatrix mxHomMat; + BOOL mbSetTransform; + + com::sun::star::drawing::ProjectionMode mxPrjMode; + sal_Int32 mnDistance; + sal_Int32 mnFocalLength; + sal_Int32 mnShadowSlant; + com::sun::star::drawing::ShadeMode mxShadeMode; + Color maAmbientColor; + BOOL mbLightingMode; + + const SdXMLImport& GetSdImport() const { return (const SdXMLImport&)GetImport(); } + SdXMLImport& GetSdImport() { return (SdXMLImport&)GetImport(); } + +protected: + void SetLocalShapesContext(com::sun::star::uno::Reference< com::sun::star::drawing::XShapes >& rNew) + { mxShapes = rNew; } + +public: + TYPEINFO(); + + SdXML3DSceneShapeContext( + SvXMLImport& rImport, + USHORT nPrfx, + const rtl::OUString& rLocalName, + const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, + com::sun::star::uno::Reference< com::sun::star::drawing::XShapes >& rShapes); + virtual ~SdXML3DSceneShapeContext(); + + virtual void StartElement(const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList); + virtual void EndElement(); + + virtual SvXMLImportContext *CreateChildContext( + USHORT nPrefix, const rtl::OUString& rLocalName, + const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList ); + + const com::sun::star::uno::Reference< com::sun::star::drawing::XShapes >& GetLocalShapesContext() const + { return mxShapes; } + com::sun::star::uno::Reference< com::sun::star::drawing::XShapes >& GetLocalShapesContext() + { return mxShapes; } +}; + + +#endif // _XIMPGROUP_HXX -- cgit