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