summaryrefslogtreecommitdiffstats
path: root/xmloff/source
diff options
context:
space:
mode:
authorArmin Weiss <aw@openoffice.org>2000-11-24 15:36:47 +0000
committerArmin Weiss <aw@openoffice.org>2000-11-24 15:36:47 +0000
commit74b56b3c2572179819c646eee87f1caa1ce12652 (patch)
treeb8098ef21de0228b02b1264fc4e88bd0e2ab5632 /xmloff/source
parentMerge SRC614: 24.11.00 - 17:35:00 (NoBranch) (diff)
downloadcore-74b56b3c2572179819c646eee87f1caa1ce12652.tar.gz
core-74b56b3c2572179819c646eee87f1caa1ce12652.zip
#80594# XML 3d import/eport added
Diffstat (limited to 'xmloff/source')
-rw-r--r--xmloff/source/draw/ximp3dobject.cxx537
-rw-r--r--xmloff/source/draw/ximp3dobject.hxx196
-rw-r--r--xmloff/source/draw/ximp3dscene.cxx453
-rw-r--r--xmloff/source/draw/ximp3dscene.hxx192
4 files changed, 1378 insertions, 0 deletions
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 <cppuhelper/extract.hxx>
+#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 <com/sun/star/beans/XPropertySet.hpp>
+#endif
+
+#ifndef _COM_SUN_STAR_DRAWING_POINTSEQUENCESEQUENCE_HPP_
+#include <com/sun/star/drawing/PointSequenceSequence.hpp>
+#endif
+
+#ifndef _COM_SUN_STAR_DRAWING_POINTSEQUENCE_HPP_
+#include <com/sun/star/drawing/PointSequence.hpp>
+#endif
+
+#ifndef _XEXPTRANSFORM_HXX
+#include "xexptran.hxx"
+#endif
+
+#ifndef _COM_SUN_STAR_DRAWING_POLYPOLYGONBEZIERCOORDS_HPP_
+#include <com/sun/star/drawing/PolyPolygonBezierCoords.hpp>
+#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 <com/sun/star/drawing/PolyPolygonShape3D.hpp>
+#endif
+
+#ifndef _COM_SUN_STAR_DRAWING_DOUBLESEQUENCE_HPP_
+#include <com/sun/star/drawing/DoubleSequence.hpp>
+#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 <com/sun/star/drawing/XShapes.hpp>
+#endif
+
+#ifndef _RTTI_HXX
+#include <tools/rtti.hxx>
+#endif
+
+#ifndef _COM_SUN_STAR_DRAWING_HOMOGENMATRIX_HPP_
+#include <com/sun/star/drawing/HomogenMatrix.hpp>
+#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 <com/sun/star/drawing/Direction3D.hpp>
+#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 <com/sun/star/drawing/XShapes.hpp>
+#endif
+
+#ifndef _RTTI_HXX
+#include <tools/rtti.hxx>
+#endif
+
+#ifndef _COM_SUN_STAR_DRAWING_HOMOGENMATRIX_HPP_
+#include <com/sun/star/drawing/HomogenMatrix.hpp>
+#endif
+
+#ifndef _COM_SUN_STAR_DRAWING_PROJECTIONMODE_HPP_
+#include <com/sun/star/drawing/ProjectionMode.hpp>
+#endif
+
+#ifndef _COM_SUN_STAR_DRAWING_SHADEMODE_HPP_
+#include <com/sun/star/drawing/ShadeMode.hpp>
+#endif
+
+#ifndef _TOOLS_COLOR_HXX
+#include <tools/color.hxx>
+#endif
+
+#ifndef _SVX_VECTOR3D_HXX
+#include <goodies/vector3d.hxx>
+#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