1*63bba73cSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*63bba73cSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*63bba73cSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*63bba73cSAndrew Rist * distributed with this work for additional information 6*63bba73cSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*63bba73cSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*63bba73cSAndrew Rist * "License"); you may not use this file except in compliance 9*63bba73cSAndrew Rist * with the License. You may obtain a copy of the License at 10*63bba73cSAndrew Rist * 11*63bba73cSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*63bba73cSAndrew Rist * 13*63bba73cSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*63bba73cSAndrew Rist * software distributed under the License is distributed on an 15*63bba73cSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*63bba73cSAndrew Rist * KIND, either express or implied. See the License for the 17*63bba73cSAndrew Rist * specific language governing permissions and limitations 18*63bba73cSAndrew Rist * under the License. 19*63bba73cSAndrew Rist * 20*63bba73cSAndrew Rist *************************************************************/ 21*63bba73cSAndrew Rist 22*63bba73cSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_xmloff.hxx" 26cdf0e10cSrcweir #include <comphelper/extract.hxx> 27cdf0e10cSrcweir #include "ximp3dobject.hxx" 28cdf0e10cSrcweir #include <xmloff/XMLShapeStyleContext.hxx> 29cdf0e10cSrcweir #include <xmloff/xmluconv.hxx> 30cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp> 31cdf0e10cSrcweir #include <com/sun/star/drawing/PointSequenceSequence.hpp> 32cdf0e10cSrcweir #include <com/sun/star/drawing/PointSequence.hpp> 33cdf0e10cSrcweir #include "xexptran.hxx" 34cdf0e10cSrcweir #include <com/sun/star/drawing/PolyPolygonBezierCoords.hpp> 35cdf0e10cSrcweir #include <xmloff/families.hxx> 36cdf0e10cSrcweir #include "ximpstyl.hxx" 37cdf0e10cSrcweir #include <xmloff/xmltoken.hxx> 38cdf0e10cSrcweir #include <com/sun/star/drawing/PolyPolygonShape3D.hpp> 39cdf0e10cSrcweir #include <com/sun/star/drawing/DoubleSequence.hpp> 40cdf0e10cSrcweir 41cdf0e10cSrcweir using ::rtl::OUString; 42cdf0e10cSrcweir using ::rtl::OUStringBuffer; 43cdf0e10cSrcweir 44cdf0e10cSrcweir using namespace ::com::sun::star; 45cdf0e10cSrcweir 46cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 47cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 48cdf0e10cSrcweir 49cdf0e10cSrcweir TYPEINIT1( SdXML3DObjectContext, SdXMLShapeContext ); 50cdf0e10cSrcweir 51cdf0e10cSrcweir SdXML3DObjectContext::SdXML3DObjectContext( 52cdf0e10cSrcweir SvXMLImport& rImport, 53cdf0e10cSrcweir sal_uInt16 nPrfx, 54cdf0e10cSrcweir const OUString& rLocalName, 55cdf0e10cSrcweir const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, 56cdf0e10cSrcweir uno::Reference< drawing::XShapes >& rShapes, 57cdf0e10cSrcweir sal_Bool bTemporaryShape) 58cdf0e10cSrcweir : SdXMLShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ), 59cdf0e10cSrcweir mbSetTransform( sal_False ) 60cdf0e10cSrcweir { 61cdf0e10cSrcweir sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; 62cdf0e10cSrcweir for(sal_Int16 i=0; i < nAttrCount; i++) 63cdf0e10cSrcweir { 64cdf0e10cSrcweir OUString sAttrName = xAttrList->getNameByIndex( i ); 65cdf0e10cSrcweir OUString aLocalName; 66cdf0e10cSrcweir sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName ); 67cdf0e10cSrcweir OUString sValue = xAttrList->getValueByIndex( i ); 68cdf0e10cSrcweir const SvXMLTokenMap& rAttrTokenMap = GetImport().GetShapeImport()->Get3DObjectAttrTokenMap(); 69cdf0e10cSrcweir 70cdf0e10cSrcweir switch(rAttrTokenMap.Get(nPrefix, aLocalName)) 71cdf0e10cSrcweir { 72cdf0e10cSrcweir case XML_TOK_3DOBJECT_DRAWSTYLE_NAME: 73cdf0e10cSrcweir { 74cdf0e10cSrcweir maDrawStyleName = sValue; 75cdf0e10cSrcweir break; 76cdf0e10cSrcweir } 77cdf0e10cSrcweir case XML_TOK_3DOBJECT_TRANSFORM: 78cdf0e10cSrcweir { 79cdf0e10cSrcweir SdXMLImExTransform3D aTransform(sValue, GetImport().GetMM100UnitConverter()); 80cdf0e10cSrcweir if(aTransform.NeedsAction()) 81cdf0e10cSrcweir mbSetTransform = aTransform.GetFullHomogenTransform(mxHomMat); 82cdf0e10cSrcweir break; 83cdf0e10cSrcweir } 84cdf0e10cSrcweir } 85cdf0e10cSrcweir } 86cdf0e10cSrcweir } 87cdf0e10cSrcweir 88cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 89cdf0e10cSrcweir 90cdf0e10cSrcweir SdXML3DObjectContext::~SdXML3DObjectContext() 91cdf0e10cSrcweir { 92cdf0e10cSrcweir } 93cdf0e10cSrcweir 94cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 95cdf0e10cSrcweir 96cdf0e10cSrcweir void SdXML3DObjectContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList) 97cdf0e10cSrcweir { 98cdf0e10cSrcweir uno::Reference< beans::XPropertySet > xPropSet(mxShape, uno::UNO_QUERY); 99cdf0e10cSrcweir if(xPropSet.is()) 100cdf0e10cSrcweir { 101cdf0e10cSrcweir // set parameters 102cdf0e10cSrcweir if(mbSetTransform) 103cdf0e10cSrcweir { 104cdf0e10cSrcweir uno::Any aAny; 105cdf0e10cSrcweir aAny <<= mxHomMat; 106cdf0e10cSrcweir xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DTransformMatrix")), aAny); 107cdf0e10cSrcweir } 108cdf0e10cSrcweir 109cdf0e10cSrcweir // call parent 110cdf0e10cSrcweir SdXMLShapeContext::StartElement(xAttrList); 111cdf0e10cSrcweir } 112cdf0e10cSrcweir } 113cdf0e10cSrcweir 114cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 115cdf0e10cSrcweir 116cdf0e10cSrcweir void SdXML3DObjectContext::EndElement() 117cdf0e10cSrcweir { 118cdf0e10cSrcweir // call parent 119cdf0e10cSrcweir SdXMLShapeContext::EndElement(); 120cdf0e10cSrcweir } 121cdf0e10cSrcweir 122cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 123cdf0e10cSrcweir /* 124cdf0e10cSrcweir void SdXML3DObjectContext::AddShape(uno::Reference< drawing::XShape >& xShape) 125cdf0e10cSrcweir { 126cdf0e10cSrcweir if(xShape.is() && mxShapes.is()) 127cdf0e10cSrcweir { 128cdf0e10cSrcweir // set shape local 129cdf0e10cSrcweir mxShape = xShape; 130cdf0e10cSrcweir 131cdf0e10cSrcweir // add new shape to parent 132cdf0e10cSrcweir mxShapes->add( xShape ); 133cdf0e10cSrcweir } 134cdf0e10cSrcweir } 135cdf0e10cSrcweir */ 136cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 137cdf0e10cSrcweir /* 138cdf0e10cSrcweir void SdXML3DObjectContext::SetStyle() 139cdf0e10cSrcweir { 140cdf0e10cSrcweir // set style on shape 141cdf0e10cSrcweir if(maDrawStyleName.getLength() && mxShape.is()) 142cdf0e10cSrcweir { 143cdf0e10cSrcweir const SvXMLStyleContext* pStyle = 0L; 144cdf0e10cSrcweir sal_Bool bAutoStyle(sal_False); 145cdf0e10cSrcweir 146cdf0e10cSrcweir if(GetImport().GetShapeImport()->GetAutoStylesContext()) 147cdf0e10cSrcweir pStyle = GetImport().GetShapeImport()->GetAutoStylesContext()->FindStyleChildContext( 148cdf0e10cSrcweir XML_STYLE_FAMILY_SD_GRAPHICS_ID, maDrawStyleName); 149cdf0e10cSrcweir 150cdf0e10cSrcweir if(pStyle) 151cdf0e10cSrcweir bAutoStyle = sal_True; 152cdf0e10cSrcweir 153cdf0e10cSrcweir if(!pStyle && GetImport().GetShapeImport()->GetStylesContext()) 154cdf0e10cSrcweir pStyle = GetImport().GetShapeImport()->GetStylesContext()-> 155cdf0e10cSrcweir FindStyleChildContext(XML_STYLE_FAMILY_SD_GRAPHICS_ID, maDrawStyleName); 156cdf0e10cSrcweir 157cdf0e10cSrcweir if(pStyle && pStyle->ISA(XMLShapeStyleContext)) 158cdf0e10cSrcweir { 159cdf0e10cSrcweir uno::Reference< beans::XPropertySet > xPropSet(mxShape, uno::UNO_QUERY); 160cdf0e10cSrcweir if(xPropSet.is()) 161cdf0e10cSrcweir { 162cdf0e10cSrcweir XMLShapeStyleContext* pDocStyle = (XMLShapeStyleContext*)pStyle; 163cdf0e10cSrcweir 164cdf0e10cSrcweir if(pDocStyle->GetStyle().is()) 165cdf0e10cSrcweir { 166cdf0e10cSrcweir // set style on object 167cdf0e10cSrcweir uno::Any aAny; 168cdf0e10cSrcweir aAny <<= pDocStyle->GetStyle(); 169cdf0e10cSrcweir xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("Style")), aAny); 170cdf0e10cSrcweir } 171cdf0e10cSrcweir 172cdf0e10cSrcweir if(bAutoStyle) 173cdf0e10cSrcweir { 174cdf0e10cSrcweir // set PropertySet on object 175cdf0e10cSrcweir pDocStyle->FillPropertySet(xPropSet); 176cdf0e10cSrcweir } 177cdf0e10cSrcweir } 178cdf0e10cSrcweir } 179cdf0e10cSrcweir } 180cdf0e10cSrcweir } 181cdf0e10cSrcweir */ 182cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 183cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 184cdf0e10cSrcweir 185cdf0e10cSrcweir TYPEINIT1( SdXML3DCubeObjectShapeContext, SdXML3DObjectContext); 186cdf0e10cSrcweir 187cdf0e10cSrcweir SdXML3DCubeObjectShapeContext::SdXML3DCubeObjectShapeContext( 188cdf0e10cSrcweir SvXMLImport& rImport, 189cdf0e10cSrcweir sal_uInt16 nPrfx, 190cdf0e10cSrcweir const OUString& rLocalName, 191cdf0e10cSrcweir const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, 192cdf0e10cSrcweir uno::Reference< drawing::XShapes >& rShapes, 193cdf0e10cSrcweir sal_Bool bTemporaryShape) 194cdf0e10cSrcweir : SdXML3DObjectContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ), 195cdf0e10cSrcweir maMinEdge(-2500.0, -2500.0, -2500.0), 196cdf0e10cSrcweir maMaxEdge(2500.0, 2500.0, 2500.0), 197cdf0e10cSrcweir mbMinEdgeUsed(sal_False), 198cdf0e10cSrcweir mbMaxEdgeUsed(sal_False) 199cdf0e10cSrcweir { 200cdf0e10cSrcweir sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; 201cdf0e10cSrcweir for(sal_Int16 i=0; i < nAttrCount; i++) 202cdf0e10cSrcweir { 203cdf0e10cSrcweir OUString sAttrName = xAttrList->getNameByIndex( i ); 204cdf0e10cSrcweir OUString aLocalName; 205cdf0e10cSrcweir sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName ); 206cdf0e10cSrcweir OUString sValue = xAttrList->getValueByIndex( i ); 207cdf0e10cSrcweir const SvXMLTokenMap& rAttrTokenMap = GetImport().GetShapeImport()->Get3DCubeObjectAttrTokenMap(); 208cdf0e10cSrcweir 209cdf0e10cSrcweir switch(rAttrTokenMap.Get(nPrefix, aLocalName)) 210cdf0e10cSrcweir { 211cdf0e10cSrcweir case XML_TOK_3DCUBEOBJ_MINEDGE: 212cdf0e10cSrcweir { 213cdf0e10cSrcweir ::basegfx::B3DVector aNewVec; 214cdf0e10cSrcweir GetImport().GetMM100UnitConverter().convertB3DVector(aNewVec, sValue); 215cdf0e10cSrcweir 216cdf0e10cSrcweir if(aNewVec != maMinEdge) 217cdf0e10cSrcweir { 218cdf0e10cSrcweir maMinEdge = aNewVec; 219cdf0e10cSrcweir mbMinEdgeUsed = sal_True; 220cdf0e10cSrcweir } 221cdf0e10cSrcweir break; 222cdf0e10cSrcweir } 223cdf0e10cSrcweir case XML_TOK_3DCUBEOBJ_MAXEDGE: 224cdf0e10cSrcweir { 225cdf0e10cSrcweir ::basegfx::B3DVector aNewVec; 226cdf0e10cSrcweir GetImport().GetMM100UnitConverter().convertB3DVector(aNewVec, sValue); 227cdf0e10cSrcweir 228cdf0e10cSrcweir if(aNewVec != maMaxEdge) 229cdf0e10cSrcweir { 230cdf0e10cSrcweir maMaxEdge = aNewVec; 231cdf0e10cSrcweir mbMaxEdgeUsed = sal_True; 232cdf0e10cSrcweir } 233cdf0e10cSrcweir break; 234cdf0e10cSrcweir } 235cdf0e10cSrcweir } 236cdf0e10cSrcweir } 237cdf0e10cSrcweir } 238cdf0e10cSrcweir 239cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 240cdf0e10cSrcweir 241cdf0e10cSrcweir SdXML3DCubeObjectShapeContext::~SdXML3DCubeObjectShapeContext() 242cdf0e10cSrcweir { 243cdf0e10cSrcweir } 244cdf0e10cSrcweir 245cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 246cdf0e10cSrcweir 247cdf0e10cSrcweir void SdXML3DCubeObjectShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList) 248cdf0e10cSrcweir { 249cdf0e10cSrcweir // create shape 250cdf0e10cSrcweir AddShape( "com.sun.star.drawing.Shape3DCubeObject" ); 251cdf0e10cSrcweir if(mxShape.is()) 252cdf0e10cSrcweir { 253cdf0e10cSrcweir // add, set style and properties from base shape 254cdf0e10cSrcweir SetStyle(); 255cdf0e10cSrcweir SdXML3DObjectContext::StartElement(xAttrList); 256cdf0e10cSrcweir 257cdf0e10cSrcweir // set local parameters on shape 258cdf0e10cSrcweir uno::Reference< beans::XPropertySet > xPropSet(mxShape, uno::UNO_QUERY); 259cdf0e10cSrcweir if(xPropSet.is()) 260cdf0e10cSrcweir { 261cdf0e10cSrcweir // set parameters 262cdf0e10cSrcweir drawing::Position3D aPosition3D; 263cdf0e10cSrcweir drawing::Direction3D aDirection3D; 264cdf0e10cSrcweir 265cdf0e10cSrcweir // convert from min, max to size to be set 266cdf0e10cSrcweir maMaxEdge = maMaxEdge - maMinEdge; 267cdf0e10cSrcweir 268cdf0e10cSrcweir aPosition3D.PositionX = maMinEdge.getX(); 269cdf0e10cSrcweir aPosition3D.PositionY = maMinEdge.getY(); 270cdf0e10cSrcweir aPosition3D.PositionZ = maMinEdge.getZ(); 271cdf0e10cSrcweir 272cdf0e10cSrcweir aDirection3D.DirectionX = maMaxEdge.getX(); 273cdf0e10cSrcweir aDirection3D.DirectionY = maMaxEdge.getY(); 274cdf0e10cSrcweir aDirection3D.DirectionZ = maMaxEdge.getZ(); 275cdf0e10cSrcweir 276cdf0e10cSrcweir uno::Any aAny; 277cdf0e10cSrcweir aAny <<= aPosition3D; 278cdf0e10cSrcweir xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DPosition")), aAny); 279cdf0e10cSrcweir aAny <<= aDirection3D; 280cdf0e10cSrcweir xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSize")), aAny); 281cdf0e10cSrcweir } 282cdf0e10cSrcweir } 283cdf0e10cSrcweir } 284cdf0e10cSrcweir 285cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 286cdf0e10cSrcweir 287cdf0e10cSrcweir void SdXML3DCubeObjectShapeContext::EndElement() 288cdf0e10cSrcweir { 289cdf0e10cSrcweir // call parent 290cdf0e10cSrcweir SdXML3DObjectContext::EndElement(); 291cdf0e10cSrcweir } 292cdf0e10cSrcweir 293cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 294cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 295cdf0e10cSrcweir 296cdf0e10cSrcweir TYPEINIT1( SdXML3DSphereObjectShapeContext, SdXML3DObjectContext); 297cdf0e10cSrcweir 298cdf0e10cSrcweir SdXML3DSphereObjectShapeContext::SdXML3DSphereObjectShapeContext( 299cdf0e10cSrcweir SvXMLImport& rImport, 300cdf0e10cSrcweir sal_uInt16 nPrfx, 301cdf0e10cSrcweir const OUString& rLocalName, 302cdf0e10cSrcweir const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, 303cdf0e10cSrcweir uno::Reference< drawing::XShapes >& rShapes, 304cdf0e10cSrcweir sal_Bool bTemporaryShape) 305cdf0e10cSrcweir : SdXML3DObjectContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ), 306cdf0e10cSrcweir maCenter(0.0, 0.0, 0.0), 307cdf0e10cSrcweir maSize(5000.0, 5000.0, 5000.0), 308cdf0e10cSrcweir mbCenterUsed(sal_False), 309cdf0e10cSrcweir mbSizeUsed(sal_False) 310cdf0e10cSrcweir { 311cdf0e10cSrcweir sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; 312cdf0e10cSrcweir for(sal_Int16 i=0; i < nAttrCount; i++) 313cdf0e10cSrcweir { 314cdf0e10cSrcweir OUString sAttrName = xAttrList->getNameByIndex( i ); 315cdf0e10cSrcweir OUString aLocalName; 316cdf0e10cSrcweir sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName ); 317cdf0e10cSrcweir OUString sValue = xAttrList->getValueByIndex( i ); 318cdf0e10cSrcweir const SvXMLTokenMap& rAttrTokenMap = GetImport().GetShapeImport()->Get3DSphereObjectAttrTokenMap(); 319cdf0e10cSrcweir 320cdf0e10cSrcweir switch(rAttrTokenMap.Get(nPrefix, aLocalName)) 321cdf0e10cSrcweir { 322cdf0e10cSrcweir case XML_TOK_3DSPHEREOBJ_CENTER: 323cdf0e10cSrcweir { 324cdf0e10cSrcweir ::basegfx::B3DVector aNewVec; 325cdf0e10cSrcweir GetImport().GetMM100UnitConverter().convertB3DVector(aNewVec, sValue); 326cdf0e10cSrcweir 327cdf0e10cSrcweir if(aNewVec != maCenter) 328cdf0e10cSrcweir { 329cdf0e10cSrcweir maCenter = aNewVec; 330cdf0e10cSrcweir mbCenterUsed = sal_True; 331cdf0e10cSrcweir } 332cdf0e10cSrcweir break; 333cdf0e10cSrcweir } 334cdf0e10cSrcweir case XML_TOK_3DSPHEREOBJ_SIZE: 335cdf0e10cSrcweir { 336cdf0e10cSrcweir ::basegfx::B3DVector aNewVec; 337cdf0e10cSrcweir GetImport().GetMM100UnitConverter().convertB3DVector(aNewVec, sValue); 338cdf0e10cSrcweir 339cdf0e10cSrcweir if(aNewVec != maSize) 340cdf0e10cSrcweir { 341cdf0e10cSrcweir maSize = aNewVec; 342cdf0e10cSrcweir mbSizeUsed = sal_True; 343cdf0e10cSrcweir } 344cdf0e10cSrcweir break; 345cdf0e10cSrcweir } 346cdf0e10cSrcweir } 347cdf0e10cSrcweir } 348cdf0e10cSrcweir } 349cdf0e10cSrcweir 350cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 351cdf0e10cSrcweir 352cdf0e10cSrcweir SdXML3DSphereObjectShapeContext::~SdXML3DSphereObjectShapeContext() 353cdf0e10cSrcweir { 354cdf0e10cSrcweir } 355cdf0e10cSrcweir 356cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 357cdf0e10cSrcweir 358cdf0e10cSrcweir void SdXML3DSphereObjectShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList) 359cdf0e10cSrcweir { 360cdf0e10cSrcweir // create shape 361cdf0e10cSrcweir AddShape( "com.sun.star.drawing.Shape3DSphereObject" ); 362cdf0e10cSrcweir if(mxShape.is()) 363cdf0e10cSrcweir { 364cdf0e10cSrcweir // add, set style and properties from base shape 365cdf0e10cSrcweir SetStyle(); 366cdf0e10cSrcweir SdXML3DObjectContext::StartElement(xAttrList); 367cdf0e10cSrcweir 368cdf0e10cSrcweir // set local parameters on shape 369cdf0e10cSrcweir uno::Reference< beans::XPropertySet > xPropSet(mxShape, uno::UNO_QUERY); 370cdf0e10cSrcweir if(xPropSet.is()) 371cdf0e10cSrcweir { 372cdf0e10cSrcweir // set parameters 373cdf0e10cSrcweir drawing::Position3D aPosition3D; 374cdf0e10cSrcweir drawing::Direction3D aDirection3D; 375cdf0e10cSrcweir 376cdf0e10cSrcweir aPosition3D.PositionX = maCenter.getX(); 377cdf0e10cSrcweir aPosition3D.PositionY = maCenter.getY(); 378cdf0e10cSrcweir aPosition3D.PositionZ = maCenter.getZ(); 379cdf0e10cSrcweir 380cdf0e10cSrcweir aDirection3D.DirectionX = maSize.getX(); 381cdf0e10cSrcweir aDirection3D.DirectionY = maSize.getY(); 382cdf0e10cSrcweir aDirection3D.DirectionZ = maSize.getZ(); 383cdf0e10cSrcweir 384cdf0e10cSrcweir uno::Any aAny; 385cdf0e10cSrcweir aAny <<= aPosition3D; 386cdf0e10cSrcweir xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DPosition")), aAny); 387cdf0e10cSrcweir aAny <<= aDirection3D; 388cdf0e10cSrcweir xPropSet->setPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DSize")), aAny); 389cdf0e10cSrcweir } 390cdf0e10cSrcweir } 391cdf0e10cSrcweir } 392cdf0e10cSrcweir 393cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 394cdf0e10cSrcweir 395cdf0e10cSrcweir void SdXML3DSphereObjectShapeContext::EndElement() 396cdf0e10cSrcweir { 397cdf0e10cSrcweir // call parent 398cdf0e10cSrcweir SdXML3DObjectContext::EndElement(); 399cdf0e10cSrcweir } 400cdf0e10cSrcweir 401cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 402cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 403cdf0e10cSrcweir 404cdf0e10cSrcweir TYPEINIT1( SdXML3DPolygonBasedShapeContext, SdXML3DObjectContext ); 405cdf0e10cSrcweir 406cdf0e10cSrcweir SdXML3DPolygonBasedShapeContext::SdXML3DPolygonBasedShapeContext( 407cdf0e10cSrcweir SvXMLImport& rImport, 408cdf0e10cSrcweir sal_uInt16 nPrfx, 409cdf0e10cSrcweir const OUString& rLocalName, 410cdf0e10cSrcweir const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, 411cdf0e10cSrcweir uno::Reference< drawing::XShapes >& rShapes, 412cdf0e10cSrcweir sal_Bool bTemporaryShape) 413cdf0e10cSrcweir : SdXML3DObjectContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ) 414cdf0e10cSrcweir { 415cdf0e10cSrcweir sal_Int16 nAttrCount = xAttrList.is() ? xAttrList->getLength() : 0; 416cdf0e10cSrcweir for(sal_Int16 i=0; i < nAttrCount; i++) 417cdf0e10cSrcweir { 418cdf0e10cSrcweir OUString sAttrName = xAttrList->getNameByIndex( i ); 419cdf0e10cSrcweir OUString aLocalName; 420cdf0e10cSrcweir sal_uInt16 nPrefix = GetImport().GetNamespaceMap().GetKeyByAttrName( sAttrName, &aLocalName ); 421cdf0e10cSrcweir OUString sValue = xAttrList->getValueByIndex( i ); 422cdf0e10cSrcweir const SvXMLTokenMap& rAttrTokenMap = GetImport().GetShapeImport()->Get3DPolygonBasedAttrTokenMap(); 423cdf0e10cSrcweir 424cdf0e10cSrcweir switch(rAttrTokenMap.Get(nPrefix, aLocalName)) 425cdf0e10cSrcweir { 426cdf0e10cSrcweir case XML_TOK_3DPOLYGONBASED_VIEWBOX: 427cdf0e10cSrcweir { 428cdf0e10cSrcweir maViewBox = sValue; 429cdf0e10cSrcweir break; 430cdf0e10cSrcweir } 431cdf0e10cSrcweir case XML_TOK_3DPOLYGONBASED_D: 432cdf0e10cSrcweir { 433cdf0e10cSrcweir maPoints = sValue; 434cdf0e10cSrcweir break; 435cdf0e10cSrcweir } 436cdf0e10cSrcweir } 437cdf0e10cSrcweir } 438cdf0e10cSrcweir } 439cdf0e10cSrcweir 440cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 441cdf0e10cSrcweir 442cdf0e10cSrcweir SdXML3DPolygonBasedShapeContext::~SdXML3DPolygonBasedShapeContext() 443cdf0e10cSrcweir { 444cdf0e10cSrcweir } 445cdf0e10cSrcweir 446cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 447cdf0e10cSrcweir 448cdf0e10cSrcweir void SdXML3DPolygonBasedShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList) 449cdf0e10cSrcweir { 450cdf0e10cSrcweir uno::Reference< beans::XPropertySet > xPropSet(mxShape, uno::UNO_QUERY); 451cdf0e10cSrcweir if(xPropSet.is()) 452cdf0e10cSrcweir { 453cdf0e10cSrcweir // set parameters 454cdf0e10cSrcweir if(maPoints.getLength() && maViewBox.getLength()) 455cdf0e10cSrcweir { 456cdf0e10cSrcweir SdXMLImExViewBox aViewBox(maViewBox, GetImport().GetMM100UnitConverter()); 457cdf0e10cSrcweir awt::Point aMinPoint(aViewBox.GetX(), aViewBox.GetY()); 458cdf0e10cSrcweir awt::Size aMaxSize(aViewBox.GetWidth(), aViewBox.GetHeight()); 459cdf0e10cSrcweir SdXMLImExSvgDElement aPoints(maPoints, aViewBox, 460cdf0e10cSrcweir aMinPoint, aMaxSize, GetImport().GetMM100UnitConverter()); 461cdf0e10cSrcweir 462cdf0e10cSrcweir // convert to double sequences 463cdf0e10cSrcweir drawing::PointSequenceSequence& xPoSeSe = 464cdf0e10cSrcweir (drawing::PointSequenceSequence&)aPoints.GetPointSequenceSequence(); 465cdf0e10cSrcweir sal_Int32 nOuterSequenceCount = xPoSeSe.getLength(); 466cdf0e10cSrcweir drawing::PointSequence* pInnerSequence = xPoSeSe.getArray(); 467cdf0e10cSrcweir 468cdf0e10cSrcweir drawing::PolyPolygonShape3D xPolyPolygon3D; 469cdf0e10cSrcweir xPolyPolygon3D.SequenceX.realloc(nOuterSequenceCount); 470cdf0e10cSrcweir xPolyPolygon3D.SequenceY.realloc(nOuterSequenceCount); 471cdf0e10cSrcweir xPolyPolygon3D.SequenceZ.realloc(nOuterSequenceCount); 472cdf0e10cSrcweir drawing::DoubleSequence* pOuterSequenceX = xPolyPolygon3D.SequenceX.getArray(); 473cdf0e10cSrcweir drawing::DoubleSequence* pOuterSequenceY = xPolyPolygon3D.SequenceY.getArray(); 474cdf0e10cSrcweir drawing::DoubleSequence* pOuterSequenceZ = xPolyPolygon3D.SequenceZ.getArray(); 475cdf0e10cSrcweir 476cdf0e10cSrcweir for(sal_Int32 a(0L); a < nOuterSequenceCount; a++) 477cdf0e10cSrcweir { 478cdf0e10cSrcweir sal_Int32 nInnerSequenceCount(pInnerSequence->getLength()); 479cdf0e10cSrcweir awt::Point* pArray = pInnerSequence->getArray(); 480cdf0e10cSrcweir 481cdf0e10cSrcweir pOuterSequenceX->realloc(nInnerSequenceCount); 482cdf0e10cSrcweir pOuterSequenceY->realloc(nInnerSequenceCount); 483cdf0e10cSrcweir pOuterSequenceZ->realloc(nInnerSequenceCount); 484cdf0e10cSrcweir double* pInnerSequenceX = pOuterSequenceX->getArray(); 485cdf0e10cSrcweir double* pInnerSequenceY = pOuterSequenceY->getArray(); 486cdf0e10cSrcweir double* pInnerSequenceZ = pOuterSequenceZ->getArray(); 487cdf0e10cSrcweir 488cdf0e10cSrcweir for(sal_Int32 b(0L); b < nInnerSequenceCount; b++) 489cdf0e10cSrcweir { 490cdf0e10cSrcweir *pInnerSequenceX++ = pArray->X; 491cdf0e10cSrcweir *pInnerSequenceY++ = pArray->Y; 492cdf0e10cSrcweir *pInnerSequenceZ++ = 0.0; 493cdf0e10cSrcweir pArray++; 494cdf0e10cSrcweir } 495cdf0e10cSrcweir pInnerSequence++; 496cdf0e10cSrcweir 497cdf0e10cSrcweir pOuterSequenceX++; 498cdf0e10cSrcweir pOuterSequenceY++; 499cdf0e10cSrcweir pOuterSequenceZ++; 500cdf0e10cSrcweir } 501cdf0e10cSrcweir 502cdf0e10cSrcweir // set poly 503cdf0e10cSrcweir uno::Any aAny; 504cdf0e10cSrcweir aAny <<= xPolyPolygon3D; 505cdf0e10cSrcweir xPropSet->setPropertyValue( 506cdf0e10cSrcweir OUString(RTL_CONSTASCII_USTRINGPARAM("D3DPolyPolygon3D")), aAny); 507cdf0e10cSrcweir } 508cdf0e10cSrcweir 509cdf0e10cSrcweir // call parent 510cdf0e10cSrcweir SdXML3DObjectContext::StartElement(xAttrList); 511cdf0e10cSrcweir } 512cdf0e10cSrcweir } 513cdf0e10cSrcweir 514cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 515cdf0e10cSrcweir 516cdf0e10cSrcweir void SdXML3DPolygonBasedShapeContext::EndElement() 517cdf0e10cSrcweir { 518cdf0e10cSrcweir // call parent 519cdf0e10cSrcweir SdXML3DObjectContext::EndElement(); 520cdf0e10cSrcweir } 521cdf0e10cSrcweir 522cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 523cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 524cdf0e10cSrcweir 525cdf0e10cSrcweir TYPEINIT1( SdXML3DLatheObjectShapeContext, SdXML3DPolygonBasedShapeContext); 526cdf0e10cSrcweir 527cdf0e10cSrcweir SdXML3DLatheObjectShapeContext::SdXML3DLatheObjectShapeContext( 528cdf0e10cSrcweir SvXMLImport& rImport, 529cdf0e10cSrcweir sal_uInt16 nPrfx, 530cdf0e10cSrcweir const OUString& rLocalName, 531cdf0e10cSrcweir const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, 532cdf0e10cSrcweir uno::Reference< drawing::XShapes >& rShapes, 533cdf0e10cSrcweir sal_Bool bTemporaryShape) 534cdf0e10cSrcweir : SdXML3DPolygonBasedShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ) 535cdf0e10cSrcweir { 536cdf0e10cSrcweir } 537cdf0e10cSrcweir 538cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 539cdf0e10cSrcweir 540cdf0e10cSrcweir SdXML3DLatheObjectShapeContext::~SdXML3DLatheObjectShapeContext() 541cdf0e10cSrcweir { 542cdf0e10cSrcweir } 543cdf0e10cSrcweir 544cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 545cdf0e10cSrcweir 546cdf0e10cSrcweir void SdXML3DLatheObjectShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList) 547cdf0e10cSrcweir { 548cdf0e10cSrcweir // create shape 549cdf0e10cSrcweir AddShape( "com.sun.star.drawing.Shape3DLatheObject" ); 550cdf0e10cSrcweir if(mxShape.is()) 551cdf0e10cSrcweir { 552cdf0e10cSrcweir // add, set style and properties from base shape 553cdf0e10cSrcweir SetStyle(); 554cdf0e10cSrcweir SdXML3DPolygonBasedShapeContext::StartElement(xAttrList); 555cdf0e10cSrcweir } 556cdf0e10cSrcweir } 557cdf0e10cSrcweir 558cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 559cdf0e10cSrcweir 560cdf0e10cSrcweir void SdXML3DLatheObjectShapeContext::EndElement() 561cdf0e10cSrcweir { 562cdf0e10cSrcweir // call parent 563cdf0e10cSrcweir SdXML3DPolygonBasedShapeContext::EndElement(); 564cdf0e10cSrcweir } 565cdf0e10cSrcweir 566cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 567cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 568cdf0e10cSrcweir 569cdf0e10cSrcweir TYPEINIT1( SdXML3DExtrudeObjectShapeContext, SdXML3DPolygonBasedShapeContext); 570cdf0e10cSrcweir 571cdf0e10cSrcweir SdXML3DExtrudeObjectShapeContext::SdXML3DExtrudeObjectShapeContext( 572cdf0e10cSrcweir SvXMLImport& rImport, 573cdf0e10cSrcweir sal_uInt16 nPrfx, 574cdf0e10cSrcweir const OUString& rLocalName, 575cdf0e10cSrcweir const com::sun::star::uno::Reference< com::sun::star::xml::sax::XAttributeList>& xAttrList, 576cdf0e10cSrcweir uno::Reference< drawing::XShapes >& rShapes, 577cdf0e10cSrcweir sal_Bool bTemporaryShape) 578cdf0e10cSrcweir : SdXML3DPolygonBasedShapeContext( rImport, nPrfx, rLocalName, xAttrList, rShapes, bTemporaryShape ) 579cdf0e10cSrcweir { 580cdf0e10cSrcweir } 581cdf0e10cSrcweir 582cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 583cdf0e10cSrcweir 584cdf0e10cSrcweir SdXML3DExtrudeObjectShapeContext::~SdXML3DExtrudeObjectShapeContext() 585cdf0e10cSrcweir { 586cdf0e10cSrcweir } 587cdf0e10cSrcweir 588cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 589cdf0e10cSrcweir 590cdf0e10cSrcweir void SdXML3DExtrudeObjectShapeContext::StartElement(const uno::Reference< xml::sax::XAttributeList>& xAttrList) 591cdf0e10cSrcweir { 592cdf0e10cSrcweir AddShape( "com.sun.star.drawing.Shape3DExtrudeObject" ); 593cdf0e10cSrcweir if(mxShape.is()) 594cdf0e10cSrcweir { 595cdf0e10cSrcweir // add, set style and properties from base shape 596cdf0e10cSrcweir SetStyle(); 597cdf0e10cSrcweir SdXML3DPolygonBasedShapeContext::StartElement(xAttrList); 598cdf0e10cSrcweir } 599cdf0e10cSrcweir } 600cdf0e10cSrcweir 601cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 602cdf0e10cSrcweir 603cdf0e10cSrcweir void SdXML3DExtrudeObjectShapeContext::EndElement() 604cdf0e10cSrcweir { 605cdf0e10cSrcweir // call parent 606cdf0e10cSrcweir SdXML3DPolygonBasedShapeContext::EndElement(); 607cdf0e10cSrcweir } 608cdf0e10cSrcweir 609cdf0e10cSrcweir // EOF 610