1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski *
3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file
5*b1cdbd2cSJim Jagielski * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file
7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski *
11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski *
13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the
17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski * under the License.
19*b1cdbd2cSJim Jagielski *
20*b1cdbd2cSJim Jagielski *************************************************************/
21*b1cdbd2cSJim Jagielski
22*b1cdbd2cSJim Jagielski
23*b1cdbd2cSJim Jagielski
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_svx.hxx"
26*b1cdbd2cSJim Jagielski
27*b1cdbd2cSJim Jagielski #define _SVX_USE_UNOGLOBALS_
28*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/HomogenMatrix.hpp>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/Position3D.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/Direction3D.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/DoubleSequence.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/CameraGeometry.hpp>
33*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
34*b1cdbd2cSJim Jagielski #include <vos/mutex.hxx>
35*b1cdbd2cSJim Jagielski #include <comphelper/serviceinfohelper.hxx>
36*b1cdbd2cSJim Jagielski
37*b1cdbd2cSJim Jagielski #include <rtl/uuid.h>
38*b1cdbd2cSJim Jagielski #include <rtl/memory.h>
39*b1cdbd2cSJim Jagielski #include <svx/svdpool.hxx>
40*b1cdbd2cSJim Jagielski #include <svx/unoshape.hxx>
41*b1cdbd2cSJim Jagielski #include <svx/unopage.hxx>
42*b1cdbd2cSJim Jagielski #include <editeng/unoprnms.hxx>
43*b1cdbd2cSJim Jagielski #include <svx/polysc3d.hxx>
44*b1cdbd2cSJim Jagielski #include "svx/globl3d.hxx"
45*b1cdbd2cSJim Jagielski #include <svx/cube3d.hxx>
46*b1cdbd2cSJim Jagielski #include <svx/sphere3d.hxx>
47*b1cdbd2cSJim Jagielski #include <svx/lathe3d.hxx>
48*b1cdbd2cSJim Jagielski #include <svx/extrud3d.hxx>
49*b1cdbd2cSJim Jagielski #include <svx/polygn3d.hxx>
50*b1cdbd2cSJim Jagielski #include "svx/unoshprp.hxx"
51*b1cdbd2cSJim Jagielski #include "svx/svdmodel.hxx"
52*b1cdbd2cSJim Jagielski #include <basegfx/polygon/b3dpolygon.hxx>
53*b1cdbd2cSJim Jagielski #include <basegfx/polygon/b3dpolygontools.hxx>
54*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/PolyPolygonShape3D.hpp>
55*b1cdbd2cSJim Jagielski #include <basegfx/polygon/b2dpolypolygontools.hxx>
56*b1cdbd2cSJim Jagielski
57*b1cdbd2cSJim Jagielski using ::rtl::OUString;
58*b1cdbd2cSJim Jagielski using namespace ::vos;
59*b1cdbd2cSJim Jagielski using namespace ::cppu;
60*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
61*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
62*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang;
63*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::container;
64*b1cdbd2cSJim Jagielski
65*b1cdbd2cSJim Jagielski #define INTERFACE_TYPE( xint ) \
66*b1cdbd2cSJim Jagielski ::getCppuType((const Reference< xint >*)0)
67*b1cdbd2cSJim Jagielski
68*b1cdbd2cSJim Jagielski #define QUERYINT( xint ) \
69*b1cdbd2cSJim Jagielski if( rType == ::getCppuType((const Reference< xint >*)0) ) \
70*b1cdbd2cSJim Jagielski aAny <<= Reference< xint >(this)
71*b1cdbd2cSJim Jagielski
72*b1cdbd2cSJim Jagielski /***********************************************************************
73*b1cdbd2cSJim Jagielski * class Svx3DSceneObject *
74*b1cdbd2cSJim Jagielski ***********************************************************************/
75*b1cdbd2cSJim Jagielski
76*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
Svx3DSceneObject(SdrObject * pObj,SvxDrawPage * pDrawPage)77*b1cdbd2cSJim Jagielski Svx3DSceneObject::Svx3DSceneObject( SdrObject* pObj, SvxDrawPage* pDrawPage ) throw()
78*b1cdbd2cSJim Jagielski : SvxShape( pObj, aSvxMapProvider.GetMap(SVXMAP_3DSCENEOBJECT), aSvxMapProvider.GetPropertySet(SVXMAP_3DSCENEOBJECT, SdrObject::GetGlobalDrawObjectItemPool()) )
79*b1cdbd2cSJim Jagielski , mxPage( pDrawPage )
80*b1cdbd2cSJim Jagielski {
81*b1cdbd2cSJim Jagielski }
82*b1cdbd2cSJim Jagielski
83*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
~Svx3DSceneObject()84*b1cdbd2cSJim Jagielski Svx3DSceneObject::~Svx3DSceneObject() throw()
85*b1cdbd2cSJim Jagielski {
86*b1cdbd2cSJim Jagielski }
87*b1cdbd2cSJim Jagielski
88*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
Create(SdrObject * pNewObj,SvxDrawPage * pNewPage)89*b1cdbd2cSJim Jagielski void Svx3DSceneObject::Create( SdrObject* pNewObj, SvxDrawPage* pNewPage )
90*b1cdbd2cSJim Jagielski {
91*b1cdbd2cSJim Jagielski SvxShape::Create( pNewObj, pNewPage );
92*b1cdbd2cSJim Jagielski mxPage = pNewPage;
93*b1cdbd2cSJim Jagielski }
94*b1cdbd2cSJim Jagielski
95*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
queryAggregation(const uno::Type & rType)96*b1cdbd2cSJim Jagielski uno::Any SAL_CALL Svx3DSceneObject::queryAggregation( const uno::Type & rType ) throw(uno::RuntimeException)
97*b1cdbd2cSJim Jagielski {
98*b1cdbd2cSJim Jagielski uno::Any aAny;
99*b1cdbd2cSJim Jagielski
100*b1cdbd2cSJim Jagielski QUERYINT( drawing::XShapes );
101*b1cdbd2cSJim Jagielski else QUERYINT( container::XIndexAccess );
102*b1cdbd2cSJim Jagielski else QUERYINT( container::XElementAccess );
103*b1cdbd2cSJim Jagielski else
104*b1cdbd2cSJim Jagielski return SvxShape::queryAggregation( rType );
105*b1cdbd2cSJim Jagielski
106*b1cdbd2cSJim Jagielski return aAny;
107*b1cdbd2cSJim Jagielski }
108*b1cdbd2cSJim Jagielski
queryInterface(const uno::Type & rType)109*b1cdbd2cSJim Jagielski uno::Any SAL_CALL Svx3DSceneObject::queryInterface( const uno::Type & rType ) throw( uno::RuntimeException )
110*b1cdbd2cSJim Jagielski {
111*b1cdbd2cSJim Jagielski return SvxShape::queryInterface( rType );
112*b1cdbd2cSJim Jagielski }
113*b1cdbd2cSJim Jagielski
acquire()114*b1cdbd2cSJim Jagielski void SAL_CALL Svx3DSceneObject::acquire() throw ( )
115*b1cdbd2cSJim Jagielski {
116*b1cdbd2cSJim Jagielski SvxShape::acquire();
117*b1cdbd2cSJim Jagielski }
118*b1cdbd2cSJim Jagielski
release()119*b1cdbd2cSJim Jagielski void SAL_CALL Svx3DSceneObject::release() throw ( )
120*b1cdbd2cSJim Jagielski {
121*b1cdbd2cSJim Jagielski SvxShape::release();
122*b1cdbd2cSJim Jagielski }
123*b1cdbd2cSJim Jagielski
124*b1cdbd2cSJim Jagielski // XTypeProvider
125*b1cdbd2cSJim Jagielski
getTypes()126*b1cdbd2cSJim Jagielski uno::Sequence< uno::Type > SAL_CALL Svx3DSceneObject::getTypes()
127*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
128*b1cdbd2cSJim Jagielski {
129*b1cdbd2cSJim Jagielski
130*b1cdbd2cSJim Jagielski return SvxShape::getTypes();
131*b1cdbd2cSJim Jagielski }
132*b1cdbd2cSJim Jagielski
getImplementationId()133*b1cdbd2cSJim Jagielski uno::Sequence< sal_Int8 > SAL_CALL Svx3DSceneObject::getImplementationId()
134*b1cdbd2cSJim Jagielski throw (uno::RuntimeException)
135*b1cdbd2cSJim Jagielski {
136*b1cdbd2cSJim Jagielski static uno::Sequence< sal_Int8 > aId;
137*b1cdbd2cSJim Jagielski if( aId.getLength() == 0 )
138*b1cdbd2cSJim Jagielski {
139*b1cdbd2cSJim Jagielski aId.realloc( 16 );
140*b1cdbd2cSJim Jagielski rtl_createUuid( (sal_uInt8 *)aId.getArray(), 0, sal_True );
141*b1cdbd2cSJim Jagielski }
142*b1cdbd2cSJim Jagielski return aId;
143*b1cdbd2cSJim Jagielski }
144*b1cdbd2cSJim Jagielski
145*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
add(const Reference<drawing::XShape> & xShape)146*b1cdbd2cSJim Jagielski void SAL_CALL Svx3DSceneObject::add( const Reference< drawing::XShape >& xShape )
147*b1cdbd2cSJim Jagielski throw( uno::RuntimeException)
148*b1cdbd2cSJim Jagielski {
149*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
150*b1cdbd2cSJim Jagielski
151*b1cdbd2cSJim Jagielski SvxShape* pShape = SvxShape::getImplementation( xShape );
152*b1cdbd2cSJim Jagielski
153*b1cdbd2cSJim Jagielski if(!mpObj.is() || !mxPage.is() || pShape == NULL || NULL != pShape->GetSdrObject() )
154*b1cdbd2cSJim Jagielski throw uno::RuntimeException();
155*b1cdbd2cSJim Jagielski
156*b1cdbd2cSJim Jagielski SdrObject* pSdrShape = mxPage->_CreateSdrObject( xShape );
157*b1cdbd2cSJim Jagielski if( pSdrShape->ISA(E3dObject) )
158*b1cdbd2cSJim Jagielski {
159*b1cdbd2cSJim Jagielski mpObj->GetSubList()->NbcInsertObject( pSdrShape );
160*b1cdbd2cSJim Jagielski
161*b1cdbd2cSJim Jagielski if(pShape)
162*b1cdbd2cSJim Jagielski pShape->Create( pSdrShape, mxPage.get() );
163*b1cdbd2cSJim Jagielski }
164*b1cdbd2cSJim Jagielski else
165*b1cdbd2cSJim Jagielski {
166*b1cdbd2cSJim Jagielski SdrObject::Free( pSdrShape );
167*b1cdbd2cSJim Jagielski throw uno::RuntimeException();
168*b1cdbd2cSJim Jagielski }
169*b1cdbd2cSJim Jagielski
170*b1cdbd2cSJim Jagielski if( mpModel )
171*b1cdbd2cSJim Jagielski mpModel->SetChanged();
172*b1cdbd2cSJim Jagielski }
173*b1cdbd2cSJim Jagielski
174*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
remove(const Reference<drawing::XShape> & xShape)175*b1cdbd2cSJim Jagielski void SAL_CALL Svx3DSceneObject::remove( const Reference< drawing::XShape >& xShape )
176*b1cdbd2cSJim Jagielski throw( uno::RuntimeException )
177*b1cdbd2cSJim Jagielski {
178*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
179*b1cdbd2cSJim Jagielski
180*b1cdbd2cSJim Jagielski SvxShape* pShape = SvxShape::getImplementation( xShape );
181*b1cdbd2cSJim Jagielski
182*b1cdbd2cSJim Jagielski if(!mpObj.is() || pShape == NULL)
183*b1cdbd2cSJim Jagielski throw uno::RuntimeException();
184*b1cdbd2cSJim Jagielski
185*b1cdbd2cSJim Jagielski SdrObject* pSdrShape = pShape->GetSdrObject();
186*b1cdbd2cSJim Jagielski if(pSdrShape == NULL || pSdrShape->GetObjList()->GetOwnerObj() != mpObj.get())
187*b1cdbd2cSJim Jagielski {
188*b1cdbd2cSJim Jagielski throw uno::RuntimeException();
189*b1cdbd2cSJim Jagielski }
190*b1cdbd2cSJim Jagielski else
191*b1cdbd2cSJim Jagielski {
192*b1cdbd2cSJim Jagielski SdrObjList& rList = *pSdrShape->GetObjList();
193*b1cdbd2cSJim Jagielski
194*b1cdbd2cSJim Jagielski const sal_uInt32 nObjCount = rList.GetObjCount();
195*b1cdbd2cSJim Jagielski sal_uInt32 nObjNum = 0;
196*b1cdbd2cSJim Jagielski while( nObjNum < nObjCount )
197*b1cdbd2cSJim Jagielski {
198*b1cdbd2cSJim Jagielski if(rList.GetObj( nObjNum ) == pSdrShape )
199*b1cdbd2cSJim Jagielski break;
200*b1cdbd2cSJim Jagielski nObjNum++;
201*b1cdbd2cSJim Jagielski }
202*b1cdbd2cSJim Jagielski
203*b1cdbd2cSJim Jagielski if( nObjNum < nObjCount )
204*b1cdbd2cSJim Jagielski {
205*b1cdbd2cSJim Jagielski SdrObject* pObject = rList.NbcRemoveObject( nObjNum );
206*b1cdbd2cSJim Jagielski SdrObject::Free( pObject );
207*b1cdbd2cSJim Jagielski }
208*b1cdbd2cSJim Jagielski else
209*b1cdbd2cSJim Jagielski {
210*b1cdbd2cSJim Jagielski DBG_ASSERT( 0, "Fatality! SdrObject is not belonging to its SdrObjList! [CL]" );
211*b1cdbd2cSJim Jagielski }
212*b1cdbd2cSJim Jagielski }
213*b1cdbd2cSJim Jagielski }
214*b1cdbd2cSJim Jagielski
215*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
getCount()216*b1cdbd2cSJim Jagielski sal_Int32 SAL_CALL Svx3DSceneObject::getCount()
217*b1cdbd2cSJim Jagielski throw( uno::RuntimeException )
218*b1cdbd2cSJim Jagielski {
219*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
220*b1cdbd2cSJim Jagielski
221*b1cdbd2cSJim Jagielski sal_Int32 nRetval = 0;
222*b1cdbd2cSJim Jagielski
223*b1cdbd2cSJim Jagielski if(mpObj.is() && mpObj->ISA(E3dPolyScene) && mpObj->GetSubList())
224*b1cdbd2cSJim Jagielski nRetval = mpObj->GetSubList()->GetObjCount();
225*b1cdbd2cSJim Jagielski return nRetval;
226*b1cdbd2cSJim Jagielski }
227*b1cdbd2cSJim Jagielski
228*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
229*b1cdbd2cSJim Jagielski
getByIndex(sal_Int32 Index)230*b1cdbd2cSJim Jagielski uno::Any SAL_CALL Svx3DSceneObject::getByIndex( sal_Int32 Index )
231*b1cdbd2cSJim Jagielski throw( lang::IndexOutOfBoundsException, lang::WrappedTargetException, uno::RuntimeException)
232*b1cdbd2cSJim Jagielski {
233*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
234*b1cdbd2cSJim Jagielski
235*b1cdbd2cSJim Jagielski if( !mpObj.is() || mpObj->GetSubList() == NULL )
236*b1cdbd2cSJim Jagielski throw uno::RuntimeException();
237*b1cdbd2cSJim Jagielski
238*b1cdbd2cSJim Jagielski if( mpObj->GetSubList()->GetObjCount() <= (sal_uInt32)Index )
239*b1cdbd2cSJim Jagielski throw lang::IndexOutOfBoundsException();
240*b1cdbd2cSJim Jagielski
241*b1cdbd2cSJim Jagielski SdrObject* pDestObj = mpObj->GetSubList()->GetObj( Index );
242*b1cdbd2cSJim Jagielski if(pDestObj == NULL)
243*b1cdbd2cSJim Jagielski throw lang::IndexOutOfBoundsException();
244*b1cdbd2cSJim Jagielski
245*b1cdbd2cSJim Jagielski Reference< drawing::XShape > xShape( pDestObj->getUnoShape(), uno::UNO_QUERY );
246*b1cdbd2cSJim Jagielski uno::Any aAny;
247*b1cdbd2cSJim Jagielski aAny <<= xShape;
248*b1cdbd2cSJim Jagielski return aAny;
249*b1cdbd2cSJim Jagielski }
250*b1cdbd2cSJim Jagielski
251*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
252*b1cdbd2cSJim Jagielski // ::com::sun::star::container::XElementAccess
253*b1cdbd2cSJim Jagielski
getElementType()254*b1cdbd2cSJim Jagielski uno::Type SAL_CALL Svx3DSceneObject::getElementType()
255*b1cdbd2cSJim Jagielski throw( uno::RuntimeException )
256*b1cdbd2cSJim Jagielski {
257*b1cdbd2cSJim Jagielski return ::getCppuType(( const Reference< drawing::XShape>*)0);
258*b1cdbd2cSJim Jagielski }
259*b1cdbd2cSJim Jagielski
260*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
hasElements()261*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL Svx3DSceneObject::hasElements()
262*b1cdbd2cSJim Jagielski throw( uno::RuntimeException )
263*b1cdbd2cSJim Jagielski {
264*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
265*b1cdbd2cSJim Jagielski
266*b1cdbd2cSJim Jagielski return mpObj.is() && mpObj->GetSubList() && (mpObj->GetSubList()->GetObjCount() > 0);
267*b1cdbd2cSJim Jagielski }
268*b1cdbd2cSJim Jagielski
269*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
270*b1cdbd2cSJim Jagielski
ConvertHomogenMatrixToObject(E3dObject * pObject,const Any & rValue)271*b1cdbd2cSJim Jagielski static bool ConvertHomogenMatrixToObject( E3dObject* pObject, const Any& rValue )
272*b1cdbd2cSJim Jagielski {
273*b1cdbd2cSJim Jagielski drawing::HomogenMatrix m;
274*b1cdbd2cSJim Jagielski if( rValue >>= m )
275*b1cdbd2cSJim Jagielski {
276*b1cdbd2cSJim Jagielski basegfx::B3DHomMatrix aMat;
277*b1cdbd2cSJim Jagielski aMat.set(0, 0, m.Line1.Column1);
278*b1cdbd2cSJim Jagielski aMat.set(0, 1, m.Line1.Column2);
279*b1cdbd2cSJim Jagielski aMat.set(0, 2, m.Line1.Column3);
280*b1cdbd2cSJim Jagielski aMat.set(0, 3, m.Line1.Column4);
281*b1cdbd2cSJim Jagielski aMat.set(1, 0, m.Line2.Column1);
282*b1cdbd2cSJim Jagielski aMat.set(1, 1, m.Line2.Column2);
283*b1cdbd2cSJim Jagielski aMat.set(1, 2, m.Line2.Column3);
284*b1cdbd2cSJim Jagielski aMat.set(1, 3, m.Line2.Column4);
285*b1cdbd2cSJim Jagielski aMat.set(2, 0, m.Line3.Column1);
286*b1cdbd2cSJim Jagielski aMat.set(2, 1, m.Line3.Column2);
287*b1cdbd2cSJim Jagielski aMat.set(2, 2, m.Line3.Column3);
288*b1cdbd2cSJim Jagielski aMat.set(2, 3, m.Line3.Column4);
289*b1cdbd2cSJim Jagielski aMat.set(3, 0, m.Line4.Column1);
290*b1cdbd2cSJim Jagielski aMat.set(3, 1, m.Line4.Column2);
291*b1cdbd2cSJim Jagielski aMat.set(3, 2, m.Line4.Column3);
292*b1cdbd2cSJim Jagielski aMat.set(3, 3, m.Line4.Column4);
293*b1cdbd2cSJim Jagielski pObject->SetTransform(aMat);
294*b1cdbd2cSJim Jagielski return true;
295*b1cdbd2cSJim Jagielski }
296*b1cdbd2cSJim Jagielski return false;
297*b1cdbd2cSJim Jagielski }
298*b1cdbd2cSJim Jagielski
ConvertObjectToHomogenMatric(E3dObject * pObject,Any & rValue)299*b1cdbd2cSJim Jagielski static void ConvertObjectToHomogenMatric( E3dObject* pObject, Any& rValue )
300*b1cdbd2cSJim Jagielski {
301*b1cdbd2cSJim Jagielski drawing::HomogenMatrix aHomMat;
302*b1cdbd2cSJim Jagielski const basegfx::B3DHomMatrix& rMat = pObject->GetTransform();
303*b1cdbd2cSJim Jagielski aHomMat.Line1.Column1 = rMat.get(0, 0);
304*b1cdbd2cSJim Jagielski aHomMat.Line1.Column2 = rMat.get(0, 1);
305*b1cdbd2cSJim Jagielski aHomMat.Line1.Column3 = rMat.get(0, 2);
306*b1cdbd2cSJim Jagielski aHomMat.Line1.Column4 = rMat.get(0, 3);
307*b1cdbd2cSJim Jagielski aHomMat.Line2.Column1 = rMat.get(1, 0);
308*b1cdbd2cSJim Jagielski aHomMat.Line2.Column2 = rMat.get(1, 1);
309*b1cdbd2cSJim Jagielski aHomMat.Line2.Column3 = rMat.get(1, 2);
310*b1cdbd2cSJim Jagielski aHomMat.Line2.Column4 = rMat.get(1, 3);
311*b1cdbd2cSJim Jagielski aHomMat.Line3.Column1 = rMat.get(2, 0);
312*b1cdbd2cSJim Jagielski aHomMat.Line3.Column2 = rMat.get(2, 1);
313*b1cdbd2cSJim Jagielski aHomMat.Line3.Column3 = rMat.get(2, 2);
314*b1cdbd2cSJim Jagielski aHomMat.Line3.Column4 = rMat.get(2, 3);
315*b1cdbd2cSJim Jagielski aHomMat.Line4.Column1 = rMat.get(3, 0);
316*b1cdbd2cSJim Jagielski aHomMat.Line4.Column2 = rMat.get(3, 1);
317*b1cdbd2cSJim Jagielski aHomMat.Line4.Column3 = rMat.get(3, 2);
318*b1cdbd2cSJim Jagielski aHomMat.Line4.Column4 = rMat.get(3, 3);
319*b1cdbd2cSJim Jagielski rValue <<= aHomMat;
320*b1cdbd2cSJim Jagielski }
321*b1cdbd2cSJim Jagielski
322*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
323*b1cdbd2cSJim Jagielski #include <svx/svditer.hxx>
324*b1cdbd2cSJim Jagielski
325*b1cdbd2cSJim Jagielski struct ImpRememberTransAndRect
326*b1cdbd2cSJim Jagielski {
327*b1cdbd2cSJim Jagielski basegfx::B3DHomMatrix maMat;
328*b1cdbd2cSJim Jagielski Rectangle maRect;
329*b1cdbd2cSJim Jagielski };
330*b1cdbd2cSJim Jagielski
setPropertyValueImpl(const::rtl::OUString & rName,const SfxItemPropertySimpleEntry * pProperty,const::com::sun::star::uno::Any & rValue)331*b1cdbd2cSJim Jagielski bool Svx3DSceneObject::setPropertyValueImpl( const ::rtl::OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
332*b1cdbd2cSJim Jagielski {
333*b1cdbd2cSJim Jagielski switch( pProperty->nWID )
334*b1cdbd2cSJim Jagielski {
335*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
336*b1cdbd2cSJim Jagielski {
337*b1cdbd2cSJim Jagielski // Transformationsmatrix in das Objekt packen
338*b1cdbd2cSJim Jagielski if( ConvertHomogenMatrixToObject( static_cast< E3dObject* >( mpObj.get() ), rValue ) )
339*b1cdbd2cSJim Jagielski return true;
340*b1cdbd2cSJim Jagielski break;
341*b1cdbd2cSJim Jagielski }
342*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_CAMERA_GEOMETRY:
343*b1cdbd2cSJim Jagielski {
344*b1cdbd2cSJim Jagielski // set CameraGeometry at scene
345*b1cdbd2cSJim Jagielski E3dScene* pScene = static_cast< E3dScene* >( mpObj.get() );
346*b1cdbd2cSJim Jagielski drawing::CameraGeometry aCamGeo;
347*b1cdbd2cSJim Jagielski
348*b1cdbd2cSJim Jagielski if(rValue >>= aCamGeo)
349*b1cdbd2cSJim Jagielski {
350*b1cdbd2cSJim Jagielski basegfx::B3DPoint aVRP(aCamGeo.vrp.PositionX, aCamGeo.vrp.PositionY, aCamGeo.vrp.PositionZ);
351*b1cdbd2cSJim Jagielski basegfx::B3DVector aVPN(aCamGeo.vpn.DirectionX, aCamGeo.vpn.DirectionY, aCamGeo.vpn.DirectionZ);
352*b1cdbd2cSJim Jagielski basegfx::B3DVector aVUP(aCamGeo.vup.DirectionX, aCamGeo.vup.DirectionY, aCamGeo.vup.DirectionZ);
353*b1cdbd2cSJim Jagielski
354*b1cdbd2cSJim Jagielski // rescue scene transformation
355*b1cdbd2cSJim Jagielski ImpRememberTransAndRect aSceneTAR;
356*b1cdbd2cSJim Jagielski aSceneTAR.maMat = pScene->GetTransform();
357*b1cdbd2cSJim Jagielski aSceneTAR.maRect = pScene->GetSnapRect();
358*b1cdbd2cSJim Jagielski
359*b1cdbd2cSJim Jagielski // rescue object transformations
360*b1cdbd2cSJim Jagielski SdrObjListIter aIter(*pScene->GetSubList(), IM_DEEPWITHGROUPS);
361*b1cdbd2cSJim Jagielski List aObjTrans;
362*b1cdbd2cSJim Jagielski while(aIter.IsMore())
363*b1cdbd2cSJim Jagielski {
364*b1cdbd2cSJim Jagielski E3dObject* p3DObj = (E3dObject*)aIter.Next();
365*b1cdbd2cSJim Jagielski basegfx::B3DHomMatrix* pNew = new basegfx::B3DHomMatrix;
366*b1cdbd2cSJim Jagielski *pNew = p3DObj->GetTransform();
367*b1cdbd2cSJim Jagielski aObjTrans.Insert(pNew, LIST_APPEND);
368*b1cdbd2cSJim Jagielski }
369*b1cdbd2cSJim Jagielski
370*b1cdbd2cSJim Jagielski // reset object transformations
371*b1cdbd2cSJim Jagielski aIter.Reset();
372*b1cdbd2cSJim Jagielski while(aIter.IsMore())
373*b1cdbd2cSJim Jagielski {
374*b1cdbd2cSJim Jagielski E3dObject* p3DObj = (E3dObject*)aIter.Next();
375*b1cdbd2cSJim Jagielski p3DObj->NbcSetTransform(basegfx::B3DHomMatrix());
376*b1cdbd2cSJim Jagielski }
377*b1cdbd2cSJim Jagielski
378*b1cdbd2cSJim Jagielski // reset scene transformation and make a complete recalc
379*b1cdbd2cSJim Jagielski pScene->NbcSetTransform(basegfx::B3DHomMatrix());
380*b1cdbd2cSJim Jagielski
381*b1cdbd2cSJim Jagielski // fill old camera from new parameters
382*b1cdbd2cSJim Jagielski Camera3D aCam(pScene->GetCamera());
383*b1cdbd2cSJim Jagielski const basegfx::B3DRange& rVolume = pScene->GetBoundVolume();
384*b1cdbd2cSJim Jagielski double fW = rVolume.getWidth();
385*b1cdbd2cSJim Jagielski double fH = rVolume.getHeight();
386*b1cdbd2cSJim Jagielski
387*b1cdbd2cSJim Jagielski const SfxItemSet& rSceneSet = pScene->GetMergedItemSet();
388*b1cdbd2cSJim Jagielski double fCamPosZ =
389*b1cdbd2cSJim Jagielski (double)((const SfxUInt32Item&)rSceneSet.Get(SDRATTR_3DSCENE_DISTANCE)).GetValue();
390*b1cdbd2cSJim Jagielski double fCamFocal =
391*b1cdbd2cSJim Jagielski (double)((const SfxUInt32Item&)rSceneSet.Get(SDRATTR_3DSCENE_FOCAL_LENGTH)).GetValue();
392*b1cdbd2cSJim Jagielski
393*b1cdbd2cSJim Jagielski aCam.SetAutoAdjustProjection(sal_False);
394*b1cdbd2cSJim Jagielski aCam.SetViewWindow(- fW / 2, - fH / 2, fW, fH);
395*b1cdbd2cSJim Jagielski basegfx::B3DPoint aLookAt;
396*b1cdbd2cSJim Jagielski basegfx::B3DPoint aCamPos(0.0, 0.0, fCamPosZ);
397*b1cdbd2cSJim Jagielski aCam.SetPosAndLookAt(aCamPos, aLookAt);
398*b1cdbd2cSJim Jagielski aCam.SetFocalLength(fCamFocal / 100.0);
399*b1cdbd2cSJim Jagielski aCam.SetDefaults(basegfx::B3DPoint(0.0, 0.0, fCamPosZ), aLookAt, fCamFocal / 100.0);
400*b1cdbd2cSJim Jagielski aCam.SetDeviceWindow(Rectangle(0, 0, (long)fW, (long)fH));
401*b1cdbd2cSJim Jagielski
402*b1cdbd2cSJim Jagielski // set at scene
403*b1cdbd2cSJim Jagielski pScene->SetCamera(aCam);
404*b1cdbd2cSJim Jagielski
405*b1cdbd2cSJim Jagielski // #91047# use imported VRP, VPN and VUP (if used)
406*b1cdbd2cSJim Jagielski sal_Bool bVRPUsed(!aVRP.equal(basegfx::B3DPoint(0.0, 0.0, 1.0)));
407*b1cdbd2cSJim Jagielski sal_Bool bVPNUsed(!aVPN.equal(basegfx::B3DVector(0.0, 0.0, 1.0)));
408*b1cdbd2cSJim Jagielski sal_Bool bVUPUsed(!aVUP.equal(basegfx::B3DVector(0.0, 1.0, 0.0)));
409*b1cdbd2cSJim Jagielski
410*b1cdbd2cSJim Jagielski if(bVRPUsed || bVPNUsed || bVUPUsed)
411*b1cdbd2cSJim Jagielski {
412*b1cdbd2cSJim Jagielski pScene->GetCameraSet().SetViewportValues(aVRP, aVPN, aVUP);
413*b1cdbd2cSJim Jagielski }
414*b1cdbd2cSJim Jagielski
415*b1cdbd2cSJim Jagielski // set object transformations again at objects
416*b1cdbd2cSJim Jagielski aIter.Reset();
417*b1cdbd2cSJim Jagielski sal_uInt32 nIndex(0L);
418*b1cdbd2cSJim Jagielski while(aIter.IsMore())
419*b1cdbd2cSJim Jagielski {
420*b1cdbd2cSJim Jagielski E3dObject* p3DObj = (E3dObject*)aIter.Next();
421*b1cdbd2cSJim Jagielski basegfx::B3DHomMatrix* pMat = (basegfx::B3DHomMatrix*)aObjTrans.GetObject(nIndex++);
422*b1cdbd2cSJim Jagielski p3DObj->NbcSetTransform(*pMat);
423*b1cdbd2cSJim Jagielski delete pMat;
424*b1cdbd2cSJim Jagielski }
425*b1cdbd2cSJim Jagielski
426*b1cdbd2cSJim Jagielski // set scene transformation again at scene
427*b1cdbd2cSJim Jagielski pScene->NbcSetTransform(aSceneTAR.maMat);
428*b1cdbd2cSJim Jagielski pScene->NbcSetSnapRect(aSceneTAR.maRect);
429*b1cdbd2cSJim Jagielski
430*b1cdbd2cSJim Jagielski return true;
431*b1cdbd2cSJim Jagielski }
432*b1cdbd2cSJim Jagielski break;
433*b1cdbd2cSJim Jagielski }
434*b1cdbd2cSJim Jagielski default:
435*b1cdbd2cSJim Jagielski return SvxShape::setPropertyValueImpl(rName, pProperty, rValue);
436*b1cdbd2cSJim Jagielski }
437*b1cdbd2cSJim Jagielski
438*b1cdbd2cSJim Jagielski throw IllegalArgumentException();
439*b1cdbd2cSJim Jagielski }
440*b1cdbd2cSJim Jagielski
441*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
442*b1cdbd2cSJim Jagielski
getPropertyValueImpl(const::rtl::OUString & rName,const SfxItemPropertySimpleEntry * pProperty,::com::sun::star::uno::Any & rValue)443*b1cdbd2cSJim Jagielski bool Svx3DSceneObject::getPropertyValueImpl( const ::rtl::OUString& rName, const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
444*b1cdbd2cSJim Jagielski {
445*b1cdbd2cSJim Jagielski switch( pProperty->nWID )
446*b1cdbd2cSJim Jagielski {
447*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
448*b1cdbd2cSJim Jagielski {
449*b1cdbd2cSJim Jagielski // Objekt in eine homogene 4x4 Matrix packen
450*b1cdbd2cSJim Jagielski ConvertObjectToHomogenMatric( static_cast< E3dObject* >( mpObj.get() ), rValue );
451*b1cdbd2cSJim Jagielski break;
452*b1cdbd2cSJim Jagielski }
453*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_CAMERA_GEOMETRY:
454*b1cdbd2cSJim Jagielski {
455*b1cdbd2cSJim Jagielski // get CameraGeometry from scene
456*b1cdbd2cSJim Jagielski E3dScene* pScene = static_cast< E3dScene* >( mpObj.get() );
457*b1cdbd2cSJim Jagielski drawing::CameraGeometry aCamGeo;
458*b1cdbd2cSJim Jagielski
459*b1cdbd2cSJim Jagielski // fill Vectors from scene camera
460*b1cdbd2cSJim Jagielski B3dCamera& aCameraSet = pScene->GetCameraSet();
461*b1cdbd2cSJim Jagielski basegfx::B3DPoint aVRP(aCameraSet.GetVRP());
462*b1cdbd2cSJim Jagielski basegfx::B3DVector aVPN(aCameraSet.GetVPN());
463*b1cdbd2cSJim Jagielski basegfx::B3DVector aVUP(aCameraSet.GetVUV());
464*b1cdbd2cSJim Jagielski
465*b1cdbd2cSJim Jagielski // transfer to structure
466*b1cdbd2cSJim Jagielski aCamGeo.vrp.PositionX = aVRP.getX();
467*b1cdbd2cSJim Jagielski aCamGeo.vrp.PositionY = aVRP.getY();
468*b1cdbd2cSJim Jagielski aCamGeo.vrp.PositionZ = aVRP.getZ();
469*b1cdbd2cSJim Jagielski aCamGeo.vpn.DirectionX = aVPN.getX();
470*b1cdbd2cSJim Jagielski aCamGeo.vpn.DirectionY = aVPN.getY();
471*b1cdbd2cSJim Jagielski aCamGeo.vpn.DirectionZ = aVPN.getZ();
472*b1cdbd2cSJim Jagielski aCamGeo.vup.DirectionX = aVUP.getX();
473*b1cdbd2cSJim Jagielski aCamGeo.vup.DirectionY = aVUP.getY();
474*b1cdbd2cSJim Jagielski aCamGeo.vup.DirectionZ = aVUP.getZ();
475*b1cdbd2cSJim Jagielski
476*b1cdbd2cSJim Jagielski rValue <<= aCamGeo;
477*b1cdbd2cSJim Jagielski break;
478*b1cdbd2cSJim Jagielski }
479*b1cdbd2cSJim Jagielski default:
480*b1cdbd2cSJim Jagielski return SvxShape::getPropertyValueImpl( rName, pProperty, rValue );
481*b1cdbd2cSJim Jagielski }
482*b1cdbd2cSJim Jagielski
483*b1cdbd2cSJim Jagielski return true;
484*b1cdbd2cSJim Jagielski }
485*b1cdbd2cSJim Jagielski
486*b1cdbd2cSJim Jagielski // ::com::sun::star::lang::XServiceInfo
getSupportedServiceNames()487*b1cdbd2cSJim Jagielski uno::Sequence< OUString > SAL_CALL Svx3DSceneObject::getSupportedServiceNames()
488*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
489*b1cdbd2cSJim Jagielski {
490*b1cdbd2cSJim Jagielski uno::Sequence< OUString > aSeq( SvxShape::getSupportedServiceNames() );
491*b1cdbd2cSJim Jagielski comphelper::ServiceInfoHelper::addToSequence( aSeq, 1, "com.sun.star.drawing.Shape3DScene" );
492*b1cdbd2cSJim Jagielski return aSeq;
493*b1cdbd2cSJim Jagielski }
494*b1cdbd2cSJim Jagielski
495*b1cdbd2cSJim Jagielski /***********************************************************************
496*b1cdbd2cSJim Jagielski * *
497*b1cdbd2cSJim Jagielski ***********************************************************************/
498*b1cdbd2cSJim Jagielski
499*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
Svx3DCubeObject(SdrObject * pObj)500*b1cdbd2cSJim Jagielski Svx3DCubeObject::Svx3DCubeObject( SdrObject* pObj ) throw()
501*b1cdbd2cSJim Jagielski : SvxShape( pObj, aSvxMapProvider.GetMap(SVXMAP_3DCUBEOBJEKT), aSvxMapProvider.GetPropertySet(SVXMAP_3DCUBEOBJEKT, SdrObject::GetGlobalDrawObjectItemPool()) )
502*b1cdbd2cSJim Jagielski {
503*b1cdbd2cSJim Jagielski }
504*b1cdbd2cSJim Jagielski
505*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
~Svx3DCubeObject()506*b1cdbd2cSJim Jagielski Svx3DCubeObject::~Svx3DCubeObject() throw()
507*b1cdbd2cSJim Jagielski {
508*b1cdbd2cSJim Jagielski }
509*b1cdbd2cSJim Jagielski
510*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
setPropertyValueImpl(const::rtl::OUString & rName,const SfxItemPropertySimpleEntry * pProperty,const::com::sun::star::uno::Any & rValue)511*b1cdbd2cSJim Jagielski bool Svx3DCubeObject::setPropertyValueImpl( const ::rtl::OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
512*b1cdbd2cSJim Jagielski {
513*b1cdbd2cSJim Jagielski OGuard aGuard( Application::GetSolarMutex() );
514*b1cdbd2cSJim Jagielski
515*b1cdbd2cSJim Jagielski switch( pProperty->nWID )
516*b1cdbd2cSJim Jagielski {
517*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
518*b1cdbd2cSJim Jagielski {
519*b1cdbd2cSJim Jagielski // Transformationsmatrix in das Objekt packen
520*b1cdbd2cSJim Jagielski if( ConvertHomogenMatrixToObject( static_cast< E3dObject* >( mpObj.get() ), rValue ) )
521*b1cdbd2cSJim Jagielski return true;
522*b1cdbd2cSJim Jagielski break;
523*b1cdbd2cSJim Jagielski }
524*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_POSITION:
525*b1cdbd2cSJim Jagielski {
526*b1cdbd2cSJim Jagielski // Position in das Objekt packen
527*b1cdbd2cSJim Jagielski drawing::Position3D aUnoPos;
528*b1cdbd2cSJim Jagielski if( rValue >>= aUnoPos )
529*b1cdbd2cSJim Jagielski {
530*b1cdbd2cSJim Jagielski basegfx::B3DPoint aPos(aUnoPos.PositionX, aUnoPos.PositionY, aUnoPos.PositionZ);
531*b1cdbd2cSJim Jagielski static_cast< E3dCubeObj* >( mpObj.get() )->SetCubePos(aPos);
532*b1cdbd2cSJim Jagielski return true;
533*b1cdbd2cSJim Jagielski }
534*b1cdbd2cSJim Jagielski break;
535*b1cdbd2cSJim Jagielski }
536*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_SIZE:
537*b1cdbd2cSJim Jagielski {
538*b1cdbd2cSJim Jagielski // Groesse in das Objekt packen
539*b1cdbd2cSJim Jagielski drawing::Direction3D aDirection;
540*b1cdbd2cSJim Jagielski if( rValue >>= aDirection )
541*b1cdbd2cSJim Jagielski {
542*b1cdbd2cSJim Jagielski basegfx::B3DVector aSize(aDirection.DirectionX, aDirection.DirectionY, aDirection.DirectionZ);
543*b1cdbd2cSJim Jagielski static_cast< E3dCubeObj* >( mpObj.get() )->SetCubeSize(aSize);
544*b1cdbd2cSJim Jagielski return true;
545*b1cdbd2cSJim Jagielski }
546*b1cdbd2cSJim Jagielski break;
547*b1cdbd2cSJim Jagielski }
548*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_POS_IS_CENTER:
549*b1cdbd2cSJim Jagielski {
550*b1cdbd2cSJim Jagielski sal_Bool bNew = sal_False;
551*b1cdbd2cSJim Jagielski // sal_Bool bPosIsCenter in das Objekt packen
552*b1cdbd2cSJim Jagielski if( rValue >>= bNew )
553*b1cdbd2cSJim Jagielski {
554*b1cdbd2cSJim Jagielski static_cast< E3dCubeObj* >( mpObj.get() )->SetPosIsCenter(bNew);
555*b1cdbd2cSJim Jagielski return true;
556*b1cdbd2cSJim Jagielski }
557*b1cdbd2cSJim Jagielski break;
558*b1cdbd2cSJim Jagielski }
559*b1cdbd2cSJim Jagielski default:
560*b1cdbd2cSJim Jagielski return SvxShape::setPropertyValueImpl( rName, pProperty, rValue );
561*b1cdbd2cSJim Jagielski }
562*b1cdbd2cSJim Jagielski
563*b1cdbd2cSJim Jagielski throw IllegalArgumentException();
564*b1cdbd2cSJim Jagielski }
565*b1cdbd2cSJim Jagielski
566*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
567*b1cdbd2cSJim Jagielski
getPropertyValueImpl(const::rtl::OUString & rName,const SfxItemPropertySimpleEntry * pProperty,::com::sun::star::uno::Any & rValue)568*b1cdbd2cSJim Jagielski bool Svx3DCubeObject::getPropertyValueImpl( const ::rtl::OUString& rName, const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
569*b1cdbd2cSJim Jagielski {
570*b1cdbd2cSJim Jagielski switch( pProperty->nWID )
571*b1cdbd2cSJim Jagielski {
572*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
573*b1cdbd2cSJim Jagielski {
574*b1cdbd2cSJim Jagielski // Transformation in eine homogene Matrix packen
575*b1cdbd2cSJim Jagielski ConvertObjectToHomogenMatric( static_cast< E3dObject* >( mpObj.get() ), rValue );
576*b1cdbd2cSJim Jagielski break;
577*b1cdbd2cSJim Jagielski }
578*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_POSITION:
579*b1cdbd2cSJim Jagielski {
580*b1cdbd2cSJim Jagielski // Position packen
581*b1cdbd2cSJim Jagielski const basegfx::B3DPoint& rPos = ((E3dCubeObj*)mpObj.get())->GetCubePos();
582*b1cdbd2cSJim Jagielski drawing::Position3D aPos;
583*b1cdbd2cSJim Jagielski
584*b1cdbd2cSJim Jagielski aPos.PositionX = rPos.getX();
585*b1cdbd2cSJim Jagielski aPos.PositionY = rPos.getY();
586*b1cdbd2cSJim Jagielski aPos.PositionZ = rPos.getZ();
587*b1cdbd2cSJim Jagielski
588*b1cdbd2cSJim Jagielski rValue <<= aPos;
589*b1cdbd2cSJim Jagielski break;
590*b1cdbd2cSJim Jagielski }
591*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_SIZE:
592*b1cdbd2cSJim Jagielski {
593*b1cdbd2cSJim Jagielski // Groesse packen
594*b1cdbd2cSJim Jagielski const basegfx::B3DVector& rSize = static_cast<E3dCubeObj*>(mpObj.get())->GetCubeSize();
595*b1cdbd2cSJim Jagielski drawing::Direction3D aDir;
596*b1cdbd2cSJim Jagielski
597*b1cdbd2cSJim Jagielski aDir.DirectionX = rSize.getX();
598*b1cdbd2cSJim Jagielski aDir.DirectionY = rSize.getY();
599*b1cdbd2cSJim Jagielski aDir.DirectionZ = rSize.getZ();
600*b1cdbd2cSJim Jagielski
601*b1cdbd2cSJim Jagielski rValue <<= aDir;
602*b1cdbd2cSJim Jagielski break;
603*b1cdbd2cSJim Jagielski }
604*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_POS_IS_CENTER:
605*b1cdbd2cSJim Jagielski {
606*b1cdbd2cSJim Jagielski rValue <<= static_cast<E3dCubeObj*>(mpObj.get())->GetPosIsCenter();
607*b1cdbd2cSJim Jagielski break;
608*b1cdbd2cSJim Jagielski }
609*b1cdbd2cSJim Jagielski default:
610*b1cdbd2cSJim Jagielski return SvxShape::getPropertyValueImpl( rName, pProperty, rValue );
611*b1cdbd2cSJim Jagielski }
612*b1cdbd2cSJim Jagielski
613*b1cdbd2cSJim Jagielski return true;
614*b1cdbd2cSJim Jagielski }
615*b1cdbd2cSJim Jagielski
616*b1cdbd2cSJim Jagielski // ::com::sun::star::lang::XServiceInfo
getSupportedServiceNames()617*b1cdbd2cSJim Jagielski uno::Sequence< OUString > SAL_CALL Svx3DCubeObject::getSupportedServiceNames()
618*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
619*b1cdbd2cSJim Jagielski {
620*b1cdbd2cSJim Jagielski uno::Sequence< OUString > aSeq( SvxShape::getSupportedServiceNames() );
621*b1cdbd2cSJim Jagielski comphelper::ServiceInfoHelper::addToSequence( aSeq, 2, "com.sun.star.drawing.Shape3D",
622*b1cdbd2cSJim Jagielski "com.sun.star.drawing.Shape3DCube");
623*b1cdbd2cSJim Jagielski return aSeq;
624*b1cdbd2cSJim Jagielski }
625*b1cdbd2cSJim Jagielski
626*b1cdbd2cSJim Jagielski /***********************************************************************
627*b1cdbd2cSJim Jagielski * *
628*b1cdbd2cSJim Jagielski ***********************************************************************/
629*b1cdbd2cSJim Jagielski
630*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
Svx3DSphereObject(SdrObject * pObj)631*b1cdbd2cSJim Jagielski Svx3DSphereObject::Svx3DSphereObject( SdrObject* pObj ) throw()
632*b1cdbd2cSJim Jagielski : SvxShape( pObj, aSvxMapProvider.GetMap(SVXMAP_3DSPHEREOBJECT), aSvxMapProvider.GetPropertySet(SVXMAP_3DSPHEREOBJECT, SdrObject::GetGlobalDrawObjectItemPool()) )
633*b1cdbd2cSJim Jagielski {
634*b1cdbd2cSJim Jagielski }
635*b1cdbd2cSJim Jagielski
636*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
~Svx3DSphereObject()637*b1cdbd2cSJim Jagielski Svx3DSphereObject::~Svx3DSphereObject() throw()
638*b1cdbd2cSJim Jagielski {
639*b1cdbd2cSJim Jagielski }
640*b1cdbd2cSJim Jagielski
641*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
642*b1cdbd2cSJim Jagielski
setPropertyValueImpl(const::rtl::OUString & rName,const SfxItemPropertySimpleEntry * pProperty,const::com::sun::star::uno::Any & rValue)643*b1cdbd2cSJim Jagielski bool Svx3DSphereObject::setPropertyValueImpl( const ::rtl::OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
644*b1cdbd2cSJim Jagielski {
645*b1cdbd2cSJim Jagielski switch( pProperty->nWID )
646*b1cdbd2cSJim Jagielski {
647*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
648*b1cdbd2cSJim Jagielski {
649*b1cdbd2cSJim Jagielski // Transformationsmatrix in das Objekt packen
650*b1cdbd2cSJim Jagielski if( ConvertHomogenMatrixToObject( static_cast< E3dObject* >( mpObj.get() ), rValue ) )
651*b1cdbd2cSJim Jagielski return true;
652*b1cdbd2cSJim Jagielski break;
653*b1cdbd2cSJim Jagielski }
654*b1cdbd2cSJim Jagielski
655*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_POSITION:
656*b1cdbd2cSJim Jagielski {
657*b1cdbd2cSJim Jagielski // Position in das Objekt packen
658*b1cdbd2cSJim Jagielski drawing::Position3D aUnoPos;
659*b1cdbd2cSJim Jagielski if( rValue >>= aUnoPos )
660*b1cdbd2cSJim Jagielski {
661*b1cdbd2cSJim Jagielski basegfx::B3DPoint aPos(aUnoPos.PositionX, aUnoPos.PositionY, aUnoPos.PositionZ);
662*b1cdbd2cSJim Jagielski static_cast<E3dSphereObj*>(mpObj.get())->SetCenter(aPos);
663*b1cdbd2cSJim Jagielski return true;
664*b1cdbd2cSJim Jagielski }
665*b1cdbd2cSJim Jagielski break;
666*b1cdbd2cSJim Jagielski }
667*b1cdbd2cSJim Jagielski
668*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_SIZE:
669*b1cdbd2cSJim Jagielski {
670*b1cdbd2cSJim Jagielski // Groesse in das Objekt packen
671*b1cdbd2cSJim Jagielski drawing::Direction3D aDir;
672*b1cdbd2cSJim Jagielski if( rValue >>= aDir )
673*b1cdbd2cSJim Jagielski {
674*b1cdbd2cSJim Jagielski basegfx::B3DVector aPos(aDir.DirectionX, aDir.DirectionY, aDir.DirectionZ);
675*b1cdbd2cSJim Jagielski static_cast<E3dSphereObj*>(mpObj.get())->SetSize(aPos);
676*b1cdbd2cSJim Jagielski return true;
677*b1cdbd2cSJim Jagielski }
678*b1cdbd2cSJim Jagielski break;
679*b1cdbd2cSJim Jagielski }
680*b1cdbd2cSJim Jagielski default:
681*b1cdbd2cSJim Jagielski return SvxShape::setPropertyValueImpl( rName, pProperty, rValue );
682*b1cdbd2cSJim Jagielski }
683*b1cdbd2cSJim Jagielski
684*b1cdbd2cSJim Jagielski throw IllegalArgumentException();
685*b1cdbd2cSJim Jagielski }
686*b1cdbd2cSJim Jagielski
687*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
688*b1cdbd2cSJim Jagielski
getPropertyValueImpl(const::rtl::OUString & rName,const SfxItemPropertySimpleEntry * pProperty,::com::sun::star::uno::Any & rValue)689*b1cdbd2cSJim Jagielski bool Svx3DSphereObject::getPropertyValueImpl( const ::rtl::OUString& rName, const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
690*b1cdbd2cSJim Jagielski {
691*b1cdbd2cSJim Jagielski switch( pProperty->nWID )
692*b1cdbd2cSJim Jagielski {
693*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
694*b1cdbd2cSJim Jagielski {
695*b1cdbd2cSJim Jagielski // Transformation in eine homogene Matrix packen
696*b1cdbd2cSJim Jagielski ConvertObjectToHomogenMatric( static_cast< E3dObject* >( mpObj.get() ), rValue );
697*b1cdbd2cSJim Jagielski break;
698*b1cdbd2cSJim Jagielski }
699*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_POSITION:
700*b1cdbd2cSJim Jagielski {
701*b1cdbd2cSJim Jagielski // Position packen
702*b1cdbd2cSJim Jagielski const basegfx::B3DPoint& rPos = ((E3dSphereObj*)mpObj.get())->Center();
703*b1cdbd2cSJim Jagielski drawing::Position3D aPos;
704*b1cdbd2cSJim Jagielski
705*b1cdbd2cSJim Jagielski aPos.PositionX = rPos.getX();
706*b1cdbd2cSJim Jagielski aPos.PositionY = rPos.getY();
707*b1cdbd2cSJim Jagielski aPos.PositionZ = rPos.getZ();
708*b1cdbd2cSJim Jagielski
709*b1cdbd2cSJim Jagielski rValue <<= aPos;
710*b1cdbd2cSJim Jagielski break;
711*b1cdbd2cSJim Jagielski }
712*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_SIZE:
713*b1cdbd2cSJim Jagielski {
714*b1cdbd2cSJim Jagielski // Groesse packen
715*b1cdbd2cSJim Jagielski const basegfx::B3DVector& rSize = ((E3dSphereObj*)mpObj.get())->Size();
716*b1cdbd2cSJim Jagielski drawing::Direction3D aDir;
717*b1cdbd2cSJim Jagielski
718*b1cdbd2cSJim Jagielski aDir.DirectionX = rSize.getX();
719*b1cdbd2cSJim Jagielski aDir.DirectionY = rSize.getY();
720*b1cdbd2cSJim Jagielski aDir.DirectionZ = rSize.getZ();
721*b1cdbd2cSJim Jagielski
722*b1cdbd2cSJim Jagielski rValue <<= aDir;
723*b1cdbd2cSJim Jagielski break;
724*b1cdbd2cSJim Jagielski }
725*b1cdbd2cSJim Jagielski default:
726*b1cdbd2cSJim Jagielski return SvxShape::getPropertyValueImpl( rName, pProperty, rValue );
727*b1cdbd2cSJim Jagielski }
728*b1cdbd2cSJim Jagielski
729*b1cdbd2cSJim Jagielski return true;
730*b1cdbd2cSJim Jagielski }
731*b1cdbd2cSJim Jagielski
732*b1cdbd2cSJim Jagielski // ::com::sun::star::lang::XServiceInfo
getSupportedServiceNames()733*b1cdbd2cSJim Jagielski uno::Sequence< OUString > SAL_CALL Svx3DSphereObject::getSupportedServiceNames()
734*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
735*b1cdbd2cSJim Jagielski {
736*b1cdbd2cSJim Jagielski uno::Sequence< OUString > aSeq( SvxShape::getSupportedServiceNames() );
737*b1cdbd2cSJim Jagielski comphelper::ServiceInfoHelper::addToSequence( aSeq, 2, "com.sun.star.drawing.Shape3D",
738*b1cdbd2cSJim Jagielski "com.sun.star.drawing.Shape3DSphere");
739*b1cdbd2cSJim Jagielski return aSeq;
740*b1cdbd2cSJim Jagielski }
741*b1cdbd2cSJim Jagielski
742*b1cdbd2cSJim Jagielski /***********************************************************************
743*b1cdbd2cSJim Jagielski * *
744*b1cdbd2cSJim Jagielski ***********************************************************************/
745*b1cdbd2cSJim Jagielski
746*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
Svx3DLatheObject(SdrObject * pObj)747*b1cdbd2cSJim Jagielski Svx3DLatheObject::Svx3DLatheObject( SdrObject* pObj ) throw()
748*b1cdbd2cSJim Jagielski : SvxShape( pObj, aSvxMapProvider.GetMap(SVXMAP_3DLATHEOBJECT), aSvxMapProvider.GetPropertySet(SVXMAP_3DLATHEOBJECT, SdrObject::GetGlobalDrawObjectItemPool()) )
749*b1cdbd2cSJim Jagielski {
750*b1cdbd2cSJim Jagielski }
751*b1cdbd2cSJim Jagielski
752*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
~Svx3DLatheObject()753*b1cdbd2cSJim Jagielski Svx3DLatheObject::~Svx3DLatheObject() throw()
754*b1cdbd2cSJim Jagielski {
755*b1cdbd2cSJim Jagielski }
756*b1cdbd2cSJim Jagielski
PolyPolygonShape3D_to_B3dPolyPolygon(const Any & rValue,basegfx::B3DPolyPolygon & rResultPolygon,bool bCorrectPolygon)757*b1cdbd2cSJim Jagielski bool PolyPolygonShape3D_to_B3dPolyPolygon(
758*b1cdbd2cSJim Jagielski const Any& rValue,
759*b1cdbd2cSJim Jagielski basegfx::B3DPolyPolygon& rResultPolygon,
760*b1cdbd2cSJim Jagielski bool bCorrectPolygon)
761*b1cdbd2cSJim Jagielski {
762*b1cdbd2cSJim Jagielski drawing::PolyPolygonShape3D aSourcePolyPolygon;
763*b1cdbd2cSJim Jagielski if( !(rValue >>= aSourcePolyPolygon) )
764*b1cdbd2cSJim Jagielski return false;
765*b1cdbd2cSJim Jagielski
766*b1cdbd2cSJim Jagielski sal_Int32 nOuterSequenceCount = aSourcePolyPolygon.SequenceX.getLength();
767*b1cdbd2cSJim Jagielski if(nOuterSequenceCount != aSourcePolyPolygon.SequenceY.getLength() || nOuterSequenceCount != aSourcePolyPolygon.SequenceZ.getLength())
768*b1cdbd2cSJim Jagielski return false;
769*b1cdbd2cSJim Jagielski
770*b1cdbd2cSJim Jagielski drawing::DoubleSequence* pInnerSequenceX = aSourcePolyPolygon.SequenceX.getArray();
771*b1cdbd2cSJim Jagielski drawing::DoubleSequence* pInnerSequenceY = aSourcePolyPolygon.SequenceY.getArray();
772*b1cdbd2cSJim Jagielski drawing::DoubleSequence* pInnerSequenceZ = aSourcePolyPolygon.SequenceZ.getArray();
773*b1cdbd2cSJim Jagielski for(sal_Int32 a(0L);a<nOuterSequenceCount;a++)
774*b1cdbd2cSJim Jagielski {
775*b1cdbd2cSJim Jagielski sal_Int32 nInnerSequenceCount = pInnerSequenceX->getLength();
776*b1cdbd2cSJim Jagielski if(nInnerSequenceCount != pInnerSequenceY->getLength() || nInnerSequenceCount != pInnerSequenceZ->getLength())
777*b1cdbd2cSJim Jagielski {
778*b1cdbd2cSJim Jagielski return false;
779*b1cdbd2cSJim Jagielski }
780*b1cdbd2cSJim Jagielski basegfx::B3DPolygon aNewPolygon;
781*b1cdbd2cSJim Jagielski double* pArrayX = pInnerSequenceX->getArray();
782*b1cdbd2cSJim Jagielski double* pArrayY = pInnerSequenceY->getArray();
783*b1cdbd2cSJim Jagielski double* pArrayZ = pInnerSequenceZ->getArray();
784*b1cdbd2cSJim Jagielski for(sal_Int32 b(0L);b<nInnerSequenceCount;b++)
785*b1cdbd2cSJim Jagielski {
786*b1cdbd2cSJim Jagielski aNewPolygon.append(basegfx::B3DPoint(*pArrayX++,*pArrayY++,*pArrayZ++));
787*b1cdbd2cSJim Jagielski }
788*b1cdbd2cSJim Jagielski pInnerSequenceX++;
789*b1cdbd2cSJim Jagielski pInnerSequenceY++;
790*b1cdbd2cSJim Jagielski pInnerSequenceZ++;
791*b1cdbd2cSJim Jagielski
792*b1cdbd2cSJim Jagielski // #i101520# correction is needed for imported polygons of old format,
793*b1cdbd2cSJim Jagielski // see callers
794*b1cdbd2cSJim Jagielski if(bCorrectPolygon)
795*b1cdbd2cSJim Jagielski {
796*b1cdbd2cSJim Jagielski basegfx::tools::checkClosed(aNewPolygon);
797*b1cdbd2cSJim Jagielski }
798*b1cdbd2cSJim Jagielski
799*b1cdbd2cSJim Jagielski rResultPolygon.append(aNewPolygon);
800*b1cdbd2cSJim Jagielski }
801*b1cdbd2cSJim Jagielski return true;
802*b1cdbd2cSJim Jagielski }
803*b1cdbd2cSJim Jagielski
B3dPolyPolygon_to_PolyPolygonShape3D(const basegfx::B3DPolyPolygon & rSourcePolyPolygon,Any & rValue)804*b1cdbd2cSJim Jagielski static void B3dPolyPolygon_to_PolyPolygonShape3D( const basegfx::B3DPolyPolygon& rSourcePolyPolygon, Any& rValue )
805*b1cdbd2cSJim Jagielski {
806*b1cdbd2cSJim Jagielski drawing::PolyPolygonShape3D aRetval;
807*b1cdbd2cSJim Jagielski aRetval.SequenceX.realloc(rSourcePolyPolygon.count());
808*b1cdbd2cSJim Jagielski aRetval.SequenceY.realloc(rSourcePolyPolygon.count());
809*b1cdbd2cSJim Jagielski aRetval.SequenceZ.realloc(rSourcePolyPolygon.count());
810*b1cdbd2cSJim Jagielski drawing::DoubleSequence* pOuterSequenceX = aRetval.SequenceX.getArray();
811*b1cdbd2cSJim Jagielski drawing::DoubleSequence* pOuterSequenceY = aRetval.SequenceY.getArray();
812*b1cdbd2cSJim Jagielski drawing::DoubleSequence* pOuterSequenceZ = aRetval.SequenceZ.getArray();
813*b1cdbd2cSJim Jagielski for(sal_uInt32 a(0L);a<rSourcePolyPolygon.count();a++)
814*b1cdbd2cSJim Jagielski {
815*b1cdbd2cSJim Jagielski const basegfx::B3DPolygon aPoly(rSourcePolyPolygon.getB3DPolygon(a));
816*b1cdbd2cSJim Jagielski sal_Int32 nPointCount(aPoly.count());
817*b1cdbd2cSJim Jagielski if(aPoly.isClosed()) nPointCount++;
818*b1cdbd2cSJim Jagielski pOuterSequenceX->realloc(nPointCount);
819*b1cdbd2cSJim Jagielski pOuterSequenceY->realloc(nPointCount);
820*b1cdbd2cSJim Jagielski pOuterSequenceZ->realloc(nPointCount);
821*b1cdbd2cSJim Jagielski double* pInnerSequenceX = pOuterSequenceX->getArray();
822*b1cdbd2cSJim Jagielski double* pInnerSequenceY = pOuterSequenceY->getArray();
823*b1cdbd2cSJim Jagielski double* pInnerSequenceZ = pOuterSequenceZ->getArray();
824*b1cdbd2cSJim Jagielski for(sal_uInt32 b(0L);b<aPoly.count();b++)
825*b1cdbd2cSJim Jagielski {
826*b1cdbd2cSJim Jagielski const basegfx::B3DPoint aPoint(aPoly.getB3DPoint(b));
827*b1cdbd2cSJim Jagielski *pInnerSequenceX++ = aPoint.getX();
828*b1cdbd2cSJim Jagielski *pInnerSequenceY++ = aPoint.getY();
829*b1cdbd2cSJim Jagielski *pInnerSequenceZ++ = aPoint.getZ();
830*b1cdbd2cSJim Jagielski }
831*b1cdbd2cSJim Jagielski if(aPoly.isClosed())
832*b1cdbd2cSJim Jagielski {
833*b1cdbd2cSJim Jagielski const basegfx::B3DPoint aPoint(aPoly.getB3DPoint(0L));
834*b1cdbd2cSJim Jagielski *pInnerSequenceX++ = aPoint.getX();
835*b1cdbd2cSJim Jagielski *pInnerSequenceY++ = aPoint.getY();
836*b1cdbd2cSJim Jagielski *pInnerSequenceZ++ = aPoint.getZ();
837*b1cdbd2cSJim Jagielski }
838*b1cdbd2cSJim Jagielski pOuterSequenceX++;
839*b1cdbd2cSJim Jagielski pOuterSequenceY++;
840*b1cdbd2cSJim Jagielski pOuterSequenceZ++;
841*b1cdbd2cSJim Jagielski }
842*b1cdbd2cSJim Jagielski rValue <<= aRetval;
843*b1cdbd2cSJim Jagielski }
844*b1cdbd2cSJim Jagielski
845*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
846*b1cdbd2cSJim Jagielski
setPropertyValueImpl(const::rtl::OUString & rName,const SfxItemPropertySimpleEntry * pProperty,const::com::sun::star::uno::Any & rValue)847*b1cdbd2cSJim Jagielski bool Svx3DLatheObject::setPropertyValueImpl( const ::rtl::OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
848*b1cdbd2cSJim Jagielski {
849*b1cdbd2cSJim Jagielski switch( pProperty->nWID )
850*b1cdbd2cSJim Jagielski {
851*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
852*b1cdbd2cSJim Jagielski {
853*b1cdbd2cSJim Jagielski // Transformationsmatrix in das Objekt packen
854*b1cdbd2cSJim Jagielski if( ConvertHomogenMatrixToObject( static_cast< E3dObject* >( mpObj.get() ), rValue ) )
855*b1cdbd2cSJim Jagielski return true;
856*b1cdbd2cSJim Jagielski break;
857*b1cdbd2cSJim Jagielski }
858*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_POLYPOLYGON3D:
859*b1cdbd2cSJim Jagielski {
860*b1cdbd2cSJim Jagielski // Polygondefinition in das Objekt packen
861*b1cdbd2cSJim Jagielski basegfx::B3DPolyPolygon aNewB3DPolyPolygon;
862*b1cdbd2cSJim Jagielski
863*b1cdbd2cSJim Jagielski // #i101520# Probably imported
864*b1cdbd2cSJim Jagielski if( PolyPolygonShape3D_to_B3dPolyPolygon( rValue, aNewB3DPolyPolygon, true ) )
865*b1cdbd2cSJim Jagielski {
866*b1cdbd2cSJim Jagielski // #105127# SetPolyPoly3D sets the Svx3DVerticalSegmentsItem to the number
867*b1cdbd2cSJim Jagielski // of points of the polygon. Thus, value gets lost. To avoid this, rescue
868*b1cdbd2cSJim Jagielski // item here and re-set after setting the polygon.
869*b1cdbd2cSJim Jagielski const sal_uInt32 nPrevVerticalSegs(static_cast<E3dLatheObj*>(mpObj.get())->GetVerticalSegments());
870*b1cdbd2cSJim Jagielski
871*b1cdbd2cSJim Jagielski // Polygon setzen
872*b1cdbd2cSJim Jagielski const basegfx::B3DHomMatrix aIdentity;
873*b1cdbd2cSJim Jagielski const basegfx::B2DPolyPolygon aB2DPolyPolygon(basegfx::tools::createB2DPolyPolygonFromB3DPolyPolygon(aNewB3DPolyPolygon, aIdentity));
874*b1cdbd2cSJim Jagielski static_cast<E3dLatheObj*>(mpObj.get())->SetPolyPoly2D(aB2DPolyPolygon);
875*b1cdbd2cSJim Jagielski const sal_uInt32 nPostVerticalSegs(static_cast<E3dLatheObj*>(mpObj.get())->GetVerticalSegments());
876*b1cdbd2cSJim Jagielski
877*b1cdbd2cSJim Jagielski if(nPrevVerticalSegs != nPostVerticalSegs)
878*b1cdbd2cSJim Jagielski {
879*b1cdbd2cSJim Jagielski // restore the vertical segment count
880*b1cdbd2cSJim Jagielski static_cast<E3dLatheObj*>(mpObj.get())->SetMergedItem(Svx3DVerticalSegmentsItem(nPrevVerticalSegs));
881*b1cdbd2cSJim Jagielski }
882*b1cdbd2cSJim Jagielski return true;
883*b1cdbd2cSJim Jagielski }
884*b1cdbd2cSJim Jagielski break;
885*b1cdbd2cSJim Jagielski }
886*b1cdbd2cSJim Jagielski default:
887*b1cdbd2cSJim Jagielski return SvxShape::setPropertyValueImpl( rName, pProperty, rValue );
888*b1cdbd2cSJim Jagielski }
889*b1cdbd2cSJim Jagielski
890*b1cdbd2cSJim Jagielski throw IllegalArgumentException();
891*b1cdbd2cSJim Jagielski }
892*b1cdbd2cSJim Jagielski
893*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
getPropertyValueImpl(const::rtl::OUString & rName,const SfxItemPropertySimpleEntry * pProperty,::com::sun::star::uno::Any & rValue)894*b1cdbd2cSJim Jagielski bool Svx3DLatheObject::getPropertyValueImpl( const ::rtl::OUString& rName, const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
895*b1cdbd2cSJim Jagielski {
896*b1cdbd2cSJim Jagielski switch( pProperty->nWID )
897*b1cdbd2cSJim Jagielski {
898*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
899*b1cdbd2cSJim Jagielski {
900*b1cdbd2cSJim Jagielski // Transformation in eine homogene Matrix packen
901*b1cdbd2cSJim Jagielski drawing::HomogenMatrix aHomMat;
902*b1cdbd2cSJim Jagielski basegfx::B3DHomMatrix aMat = static_cast<E3dObject*>(mpObj.get())->GetTransform();
903*b1cdbd2cSJim Jagielski
904*b1cdbd2cSJim Jagielski // pack evtl. transformed matrix to output
905*b1cdbd2cSJim Jagielski aHomMat.Line1.Column1 = aMat.get(0, 0);
906*b1cdbd2cSJim Jagielski aHomMat.Line1.Column2 = aMat.get(0, 1);
907*b1cdbd2cSJim Jagielski aHomMat.Line1.Column3 = aMat.get(0, 2);
908*b1cdbd2cSJim Jagielski aHomMat.Line1.Column4 = aMat.get(0, 3);
909*b1cdbd2cSJim Jagielski aHomMat.Line2.Column1 = aMat.get(1, 0);
910*b1cdbd2cSJim Jagielski aHomMat.Line2.Column2 = aMat.get(1, 1);
911*b1cdbd2cSJim Jagielski aHomMat.Line2.Column3 = aMat.get(1, 2);
912*b1cdbd2cSJim Jagielski aHomMat.Line2.Column4 = aMat.get(1, 3);
913*b1cdbd2cSJim Jagielski aHomMat.Line3.Column1 = aMat.get(2, 0);
914*b1cdbd2cSJim Jagielski aHomMat.Line3.Column2 = aMat.get(2, 1);
915*b1cdbd2cSJim Jagielski aHomMat.Line3.Column3 = aMat.get(2, 2);
916*b1cdbd2cSJim Jagielski aHomMat.Line3.Column4 = aMat.get(2, 3);
917*b1cdbd2cSJim Jagielski aHomMat.Line4.Column1 = aMat.get(3, 0);
918*b1cdbd2cSJim Jagielski aHomMat.Line4.Column2 = aMat.get(3, 1);
919*b1cdbd2cSJim Jagielski aHomMat.Line4.Column3 = aMat.get(3, 2);
920*b1cdbd2cSJim Jagielski aHomMat.Line4.Column4 = aMat.get(3, 3);
921*b1cdbd2cSJim Jagielski
922*b1cdbd2cSJim Jagielski rValue <<= aHomMat;
923*b1cdbd2cSJim Jagielski break;
924*b1cdbd2cSJim Jagielski }
925*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_POLYPOLYGON3D:
926*b1cdbd2cSJim Jagielski {
927*b1cdbd2cSJim Jagielski const basegfx::B2DPolyPolygon& rPolyPoly = static_cast<E3dLatheObj*>(mpObj.get())->GetPolyPoly2D();
928*b1cdbd2cSJim Jagielski const basegfx::B3DPolyPolygon aB3DPolyPolygon(basegfx::tools::createB3DPolyPolygonFromB2DPolyPolygon(rPolyPoly));
929*b1cdbd2cSJim Jagielski
930*b1cdbd2cSJim Jagielski B3dPolyPolygon_to_PolyPolygonShape3D(aB3DPolyPolygon, rValue);
931*b1cdbd2cSJim Jagielski break;
932*b1cdbd2cSJim Jagielski }
933*b1cdbd2cSJim Jagielski default:
934*b1cdbd2cSJim Jagielski return SvxShape::getPropertyValueImpl( rName, pProperty, rValue );
935*b1cdbd2cSJim Jagielski }
936*b1cdbd2cSJim Jagielski
937*b1cdbd2cSJim Jagielski return true;
938*b1cdbd2cSJim Jagielski }
939*b1cdbd2cSJim Jagielski
940*b1cdbd2cSJim Jagielski // ::com::sun::star::lang::XServiceInfo
getSupportedServiceNames()941*b1cdbd2cSJim Jagielski uno::Sequence< OUString > SAL_CALL Svx3DLatheObject::getSupportedServiceNames()
942*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
943*b1cdbd2cSJim Jagielski {
944*b1cdbd2cSJim Jagielski uno::Sequence< OUString > aSeq( SvxShape::getSupportedServiceNames() );
945*b1cdbd2cSJim Jagielski comphelper::ServiceInfoHelper::addToSequence( aSeq, 2, "com.sun.star.drawing.Shape3D",
946*b1cdbd2cSJim Jagielski "com.sun.star.drawing.Shape3DLathe");
947*b1cdbd2cSJim Jagielski return aSeq;
948*b1cdbd2cSJim Jagielski }
949*b1cdbd2cSJim Jagielski
950*b1cdbd2cSJim Jagielski /***********************************************************************
951*b1cdbd2cSJim Jagielski * *
952*b1cdbd2cSJim Jagielski ***********************************************************************/
953*b1cdbd2cSJim Jagielski
Svx3DExtrudeObject(SdrObject * pObj)954*b1cdbd2cSJim Jagielski Svx3DExtrudeObject::Svx3DExtrudeObject( SdrObject* pObj ) throw()
955*b1cdbd2cSJim Jagielski : SvxShape( pObj, aSvxMapProvider.GetMap(SVXMAP_3DEXTRUDEOBJECT), aSvxMapProvider.GetPropertySet(SVXMAP_3DEXTRUDEOBJECT, SdrObject::GetGlobalDrawObjectItemPool()) )
956*b1cdbd2cSJim Jagielski {
957*b1cdbd2cSJim Jagielski }
958*b1cdbd2cSJim Jagielski
959*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
~Svx3DExtrudeObject()960*b1cdbd2cSJim Jagielski Svx3DExtrudeObject::~Svx3DExtrudeObject() throw()
961*b1cdbd2cSJim Jagielski {
962*b1cdbd2cSJim Jagielski }
963*b1cdbd2cSJim Jagielski
964*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
965*b1cdbd2cSJim Jagielski
setPropertyValueImpl(const::rtl::OUString & rName,const SfxItemPropertySimpleEntry * pProperty,const::com::sun::star::uno::Any & rValue)966*b1cdbd2cSJim Jagielski bool Svx3DExtrudeObject::setPropertyValueImpl( const ::rtl::OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
967*b1cdbd2cSJim Jagielski {
968*b1cdbd2cSJim Jagielski switch( pProperty->nWID )
969*b1cdbd2cSJim Jagielski {
970*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
971*b1cdbd2cSJim Jagielski {
972*b1cdbd2cSJim Jagielski // Transformationsmatrix in das Objekt packen
973*b1cdbd2cSJim Jagielski if( ConvertHomogenMatrixToObject( static_cast< E3dObject* >( mpObj.get() ), rValue ) )
974*b1cdbd2cSJim Jagielski return true;
975*b1cdbd2cSJim Jagielski break;
976*b1cdbd2cSJim Jagielski }
977*b1cdbd2cSJim Jagielski
978*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_POLYPOLYGON3D:
979*b1cdbd2cSJim Jagielski {
980*b1cdbd2cSJim Jagielski // Polygondefinition in das Objekt packen
981*b1cdbd2cSJim Jagielski basegfx::B3DPolyPolygon aNewB3DPolyPolygon;
982*b1cdbd2cSJim Jagielski
983*b1cdbd2cSJim Jagielski // #i101520# Probably imported
984*b1cdbd2cSJim Jagielski if( PolyPolygonShape3D_to_B3dPolyPolygon( rValue, aNewB3DPolyPolygon, true ) )
985*b1cdbd2cSJim Jagielski {
986*b1cdbd2cSJim Jagielski // Polygon setzen
987*b1cdbd2cSJim Jagielski const basegfx::B3DHomMatrix aIdentity;
988*b1cdbd2cSJim Jagielski const basegfx::B2DPolyPolygon aB2DPolyPolygon(basegfx::tools::createB2DPolyPolygonFromB3DPolyPolygon(aNewB3DPolyPolygon, aIdentity));
989*b1cdbd2cSJim Jagielski static_cast<E3dExtrudeObj*>(mpObj.get())->SetExtrudePolygon(aB2DPolyPolygon);
990*b1cdbd2cSJim Jagielski return true;
991*b1cdbd2cSJim Jagielski }
992*b1cdbd2cSJim Jagielski break;
993*b1cdbd2cSJim Jagielski }
994*b1cdbd2cSJim Jagielski default:
995*b1cdbd2cSJim Jagielski return SvxShape::setPropertyValueImpl( rName, pProperty, rValue );
996*b1cdbd2cSJim Jagielski }
997*b1cdbd2cSJim Jagielski
998*b1cdbd2cSJim Jagielski throw IllegalArgumentException();
999*b1cdbd2cSJim Jagielski }
1000*b1cdbd2cSJim Jagielski
1001*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
1002*b1cdbd2cSJim Jagielski
getPropertyValueImpl(const::rtl::OUString & rName,const SfxItemPropertySimpleEntry * pProperty,::com::sun::star::uno::Any & rValue)1003*b1cdbd2cSJim Jagielski bool Svx3DExtrudeObject::getPropertyValueImpl( const ::rtl::OUString& rName, const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
1004*b1cdbd2cSJim Jagielski {
1005*b1cdbd2cSJim Jagielski switch( pProperty->nWID )
1006*b1cdbd2cSJim Jagielski {
1007*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
1008*b1cdbd2cSJim Jagielski {
1009*b1cdbd2cSJim Jagielski // Transformation in eine homogene Matrix packen
1010*b1cdbd2cSJim Jagielski drawing::HomogenMatrix aHomMat;
1011*b1cdbd2cSJim Jagielski basegfx::B3DHomMatrix aMat = ((E3dObject*)mpObj.get())->GetTransform();
1012*b1cdbd2cSJim Jagielski
1013*b1cdbd2cSJim Jagielski // pack evtl. transformed matrix to output
1014*b1cdbd2cSJim Jagielski aHomMat.Line1.Column1 = aMat.get(0, 0);
1015*b1cdbd2cSJim Jagielski aHomMat.Line1.Column2 = aMat.get(0, 1);
1016*b1cdbd2cSJim Jagielski aHomMat.Line1.Column3 = aMat.get(0, 2);
1017*b1cdbd2cSJim Jagielski aHomMat.Line1.Column4 = aMat.get(0, 3);
1018*b1cdbd2cSJim Jagielski aHomMat.Line2.Column1 = aMat.get(1, 0);
1019*b1cdbd2cSJim Jagielski aHomMat.Line2.Column2 = aMat.get(1, 1);
1020*b1cdbd2cSJim Jagielski aHomMat.Line2.Column3 = aMat.get(1, 2);
1021*b1cdbd2cSJim Jagielski aHomMat.Line2.Column4 = aMat.get(1, 3);
1022*b1cdbd2cSJim Jagielski aHomMat.Line3.Column1 = aMat.get(2, 0);
1023*b1cdbd2cSJim Jagielski aHomMat.Line3.Column2 = aMat.get(2, 1);
1024*b1cdbd2cSJim Jagielski aHomMat.Line3.Column3 = aMat.get(2, 2);
1025*b1cdbd2cSJim Jagielski aHomMat.Line3.Column4 = aMat.get(2, 3);
1026*b1cdbd2cSJim Jagielski aHomMat.Line4.Column1 = aMat.get(3, 0);
1027*b1cdbd2cSJim Jagielski aHomMat.Line4.Column2 = aMat.get(3, 1);
1028*b1cdbd2cSJim Jagielski aHomMat.Line4.Column3 = aMat.get(3, 2);
1029*b1cdbd2cSJim Jagielski aHomMat.Line4.Column4 = aMat.get(3, 3);
1030*b1cdbd2cSJim Jagielski
1031*b1cdbd2cSJim Jagielski rValue <<= aHomMat;
1032*b1cdbd2cSJim Jagielski break;
1033*b1cdbd2cSJim Jagielski }
1034*b1cdbd2cSJim Jagielski
1035*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_POLYPOLYGON3D:
1036*b1cdbd2cSJim Jagielski {
1037*b1cdbd2cSJim Jagielski // Polygondefinition packen
1038*b1cdbd2cSJim Jagielski const basegfx::B2DPolyPolygon& rPolyPoly = static_cast<E3dExtrudeObj*>(mpObj.get())->GetExtrudePolygon();
1039*b1cdbd2cSJim Jagielski const basegfx::B3DPolyPolygon aB3DPolyPolygon(basegfx::tools::createB3DPolyPolygonFromB2DPolyPolygon(rPolyPoly));
1040*b1cdbd2cSJim Jagielski
1041*b1cdbd2cSJim Jagielski B3dPolyPolygon_to_PolyPolygonShape3D(aB3DPolyPolygon, rValue);
1042*b1cdbd2cSJim Jagielski break;
1043*b1cdbd2cSJim Jagielski }
1044*b1cdbd2cSJim Jagielski default:
1045*b1cdbd2cSJim Jagielski return SvxShape::getPropertyValueImpl( rName, pProperty, rValue );
1046*b1cdbd2cSJim Jagielski }
1047*b1cdbd2cSJim Jagielski
1048*b1cdbd2cSJim Jagielski return true;
1049*b1cdbd2cSJim Jagielski }
1050*b1cdbd2cSJim Jagielski
1051*b1cdbd2cSJim Jagielski // ::com::sun::star::lang::XServiceInfo
getSupportedServiceNames()1052*b1cdbd2cSJim Jagielski uno::Sequence< OUString > SAL_CALL Svx3DExtrudeObject::getSupportedServiceNames()
1053*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1054*b1cdbd2cSJim Jagielski {
1055*b1cdbd2cSJim Jagielski uno::Sequence< OUString > aSeq( SvxShape::getSupportedServiceNames() );
1056*b1cdbd2cSJim Jagielski comphelper::ServiceInfoHelper::addToSequence( aSeq, 2, "com.sun.star.drawing.Shape3D",
1057*b1cdbd2cSJim Jagielski "com.sun.star.drawing.Shape3DExtrude");
1058*b1cdbd2cSJim Jagielski return aSeq;
1059*b1cdbd2cSJim Jagielski }
1060*b1cdbd2cSJim Jagielski
1061*b1cdbd2cSJim Jagielski /***********************************************************************
1062*b1cdbd2cSJim Jagielski * *
1063*b1cdbd2cSJim Jagielski ***********************************************************************/
1064*b1cdbd2cSJim Jagielski
1065*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
Svx3DPolygonObject(SdrObject * pObj)1066*b1cdbd2cSJim Jagielski Svx3DPolygonObject::Svx3DPolygonObject( SdrObject* pObj ) throw()
1067*b1cdbd2cSJim Jagielski : SvxShape( pObj, aSvxMapProvider.GetMap(SVXMAP_3DPOLYGONOBJECT), aSvxMapProvider.GetPropertySet(SVXMAP_3DPOLYGONOBJECT, SdrObject::GetGlobalDrawObjectItemPool()) )
1068*b1cdbd2cSJim Jagielski {
1069*b1cdbd2cSJim Jagielski }
1070*b1cdbd2cSJim Jagielski
1071*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
~Svx3DPolygonObject()1072*b1cdbd2cSJim Jagielski Svx3DPolygonObject::~Svx3DPolygonObject() throw()
1073*b1cdbd2cSJim Jagielski {
1074*b1cdbd2cSJim Jagielski }
1075*b1cdbd2cSJim Jagielski
1076*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
setPropertyValueImpl(const::rtl::OUString & rName,const SfxItemPropertySimpleEntry * pProperty,const::com::sun::star::uno::Any & rValue)1077*b1cdbd2cSJim Jagielski bool Svx3DPolygonObject::setPropertyValueImpl( const ::rtl::OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
1078*b1cdbd2cSJim Jagielski {
1079*b1cdbd2cSJim Jagielski switch( pProperty->nWID )
1080*b1cdbd2cSJim Jagielski {
1081*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
1082*b1cdbd2cSJim Jagielski {
1083*b1cdbd2cSJim Jagielski // Transformationsmatrix in das Objekt packen
1084*b1cdbd2cSJim Jagielski if( ConvertHomogenMatrixToObject( static_cast< E3dObject* >( mpObj.get() ), rValue ) )
1085*b1cdbd2cSJim Jagielski return true;
1086*b1cdbd2cSJim Jagielski break;
1087*b1cdbd2cSJim Jagielski }
1088*b1cdbd2cSJim Jagielski
1089*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_POLYPOLYGON3D:
1090*b1cdbd2cSJim Jagielski {
1091*b1cdbd2cSJim Jagielski // Polygondefinition in das Objekt packen
1092*b1cdbd2cSJim Jagielski basegfx::B3DPolyPolygon aNewB3DPolyPolygon;
1093*b1cdbd2cSJim Jagielski
1094*b1cdbd2cSJim Jagielski // #i101520# Direct API data (e.g. from chart)
1095*b1cdbd2cSJim Jagielski if( PolyPolygonShape3D_to_B3dPolyPolygon( rValue, aNewB3DPolyPolygon, false ) )
1096*b1cdbd2cSJim Jagielski {
1097*b1cdbd2cSJim Jagielski // Polygon setzen
1098*b1cdbd2cSJim Jagielski static_cast<E3dPolygonObj*>(mpObj.get())->SetPolyPolygon3D(aNewB3DPolyPolygon);
1099*b1cdbd2cSJim Jagielski return true;
1100*b1cdbd2cSJim Jagielski }
1101*b1cdbd2cSJim Jagielski break;
1102*b1cdbd2cSJim Jagielski }
1103*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_NORMALSPOLYGON3D:
1104*b1cdbd2cSJim Jagielski {
1105*b1cdbd2cSJim Jagielski // Normalendefinition in das Objekt packen
1106*b1cdbd2cSJim Jagielski basegfx::B3DPolyPolygon aNewB3DPolyPolygon;
1107*b1cdbd2cSJim Jagielski
1108*b1cdbd2cSJim Jagielski // #i101520# Direct API data (e.g. from chart)
1109*b1cdbd2cSJim Jagielski if( PolyPolygonShape3D_to_B3dPolyPolygon( rValue, aNewB3DPolyPolygon, false ) )
1110*b1cdbd2cSJim Jagielski {
1111*b1cdbd2cSJim Jagielski // Polygon setzen
1112*b1cdbd2cSJim Jagielski static_cast<E3dPolygonObj*>(mpObj.get())->SetPolyNormals3D(aNewB3DPolyPolygon);
1113*b1cdbd2cSJim Jagielski return true;
1114*b1cdbd2cSJim Jagielski }
1115*b1cdbd2cSJim Jagielski break;
1116*b1cdbd2cSJim Jagielski }
1117*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_TEXTUREPOLYGON3D:
1118*b1cdbd2cSJim Jagielski {
1119*b1cdbd2cSJim Jagielski // Texturdefinition in das Objekt packen
1120*b1cdbd2cSJim Jagielski basegfx::B3DPolyPolygon aNewB3DPolyPolygon;
1121*b1cdbd2cSJim Jagielski
1122*b1cdbd2cSJim Jagielski // #i101520# Direct API data (e.g. from chart)
1123*b1cdbd2cSJim Jagielski if( PolyPolygonShape3D_to_B3dPolyPolygon( rValue, aNewB3DPolyPolygon, false ) )
1124*b1cdbd2cSJim Jagielski {
1125*b1cdbd2cSJim Jagielski // Polygon setzen
1126*b1cdbd2cSJim Jagielski const basegfx::B3DHomMatrix aIdentity;
1127*b1cdbd2cSJim Jagielski const basegfx::B2DPolyPolygon aB2DPolyPolygon(basegfx::tools::createB2DPolyPolygonFromB3DPolyPolygon(aNewB3DPolyPolygon, aIdentity));
1128*b1cdbd2cSJim Jagielski static_cast<E3dPolygonObj*>(mpObj.get())->SetPolyTexture2D(aB2DPolyPolygon);
1129*b1cdbd2cSJim Jagielski return true;
1130*b1cdbd2cSJim Jagielski }
1131*b1cdbd2cSJim Jagielski break;
1132*b1cdbd2cSJim Jagielski }
1133*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_LINEONLY:
1134*b1cdbd2cSJim Jagielski {
1135*b1cdbd2cSJim Jagielski sal_Bool bNew = sal_False;
1136*b1cdbd2cSJim Jagielski if( rValue >>= bNew )
1137*b1cdbd2cSJim Jagielski {
1138*b1cdbd2cSJim Jagielski static_cast<E3dPolygonObj*>(mpObj.get())->SetLineOnly(bNew);
1139*b1cdbd2cSJim Jagielski return true;
1140*b1cdbd2cSJim Jagielski }
1141*b1cdbd2cSJim Jagielski break;
1142*b1cdbd2cSJim Jagielski }
1143*b1cdbd2cSJim Jagielski default:
1144*b1cdbd2cSJim Jagielski return SvxShape::setPropertyValueImpl( rName, pProperty, rValue );
1145*b1cdbd2cSJim Jagielski }
1146*b1cdbd2cSJim Jagielski
1147*b1cdbd2cSJim Jagielski throw IllegalArgumentException();
1148*b1cdbd2cSJim Jagielski }
1149*b1cdbd2cSJim Jagielski
1150*b1cdbd2cSJim Jagielski //----------------------------------------------------------------------
getPropertyValueImpl(const::rtl::OUString & rName,const SfxItemPropertySimpleEntry * pProperty,::com::sun::star::uno::Any & rValue)1151*b1cdbd2cSJim Jagielski bool Svx3DPolygonObject::getPropertyValueImpl( const ::rtl::OUString& rName, const SfxItemPropertySimpleEntry* pProperty, ::com::sun::star::uno::Any& rValue ) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException)
1152*b1cdbd2cSJim Jagielski {
1153*b1cdbd2cSJim Jagielski switch( pProperty->nWID )
1154*b1cdbd2cSJim Jagielski {
1155*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX:
1156*b1cdbd2cSJim Jagielski {
1157*b1cdbd2cSJim Jagielski ConvertObjectToHomogenMatric( static_cast< E3dObject* >( mpObj.get() ), rValue );
1158*b1cdbd2cSJim Jagielski break;
1159*b1cdbd2cSJim Jagielski }
1160*b1cdbd2cSJim Jagielski
1161*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_POLYPOLYGON3D:
1162*b1cdbd2cSJim Jagielski {
1163*b1cdbd2cSJim Jagielski B3dPolyPolygon_to_PolyPolygonShape3D(static_cast<E3dPolygonObj*>(mpObj.get())->GetPolyPolygon3D(),rValue);
1164*b1cdbd2cSJim Jagielski break;
1165*b1cdbd2cSJim Jagielski }
1166*b1cdbd2cSJim Jagielski
1167*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_NORMALSPOLYGON3D:
1168*b1cdbd2cSJim Jagielski {
1169*b1cdbd2cSJim Jagielski B3dPolyPolygon_to_PolyPolygonShape3D(static_cast<E3dPolygonObj*>(mpObj.get())->GetPolyNormals3D(),rValue);
1170*b1cdbd2cSJim Jagielski break;
1171*b1cdbd2cSJim Jagielski }
1172*b1cdbd2cSJim Jagielski
1173*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_TEXTUREPOLYGON3D:
1174*b1cdbd2cSJim Jagielski {
1175*b1cdbd2cSJim Jagielski // Texturdefinition packen
1176*b1cdbd2cSJim Jagielski const basegfx::B2DPolyPolygon& rPolyPoly = static_cast<E3dPolygonObj*>(mpObj.get())->GetPolyTexture2D();
1177*b1cdbd2cSJim Jagielski const basegfx::B3DPolyPolygon aB3DPolyPolygon(basegfx::tools::createB3DPolyPolygonFromB2DPolyPolygon(rPolyPoly));
1178*b1cdbd2cSJim Jagielski
1179*b1cdbd2cSJim Jagielski B3dPolyPolygon_to_PolyPolygonShape3D(aB3DPolyPolygon,rValue);
1180*b1cdbd2cSJim Jagielski break;
1181*b1cdbd2cSJim Jagielski }
1182*b1cdbd2cSJim Jagielski
1183*b1cdbd2cSJim Jagielski case OWN_ATTR_3D_VALUE_LINEONLY:
1184*b1cdbd2cSJim Jagielski {
1185*b1cdbd2cSJim Jagielski rValue <<= (sal_Bool)static_cast<E3dPolygonObj*>(mpObj.get())->GetLineOnly();
1186*b1cdbd2cSJim Jagielski break;
1187*b1cdbd2cSJim Jagielski }
1188*b1cdbd2cSJim Jagielski
1189*b1cdbd2cSJim Jagielski default:
1190*b1cdbd2cSJim Jagielski return SvxShape::getPropertyValueImpl( rName, pProperty, rValue );
1191*b1cdbd2cSJim Jagielski }
1192*b1cdbd2cSJim Jagielski
1193*b1cdbd2cSJim Jagielski return true;
1194*b1cdbd2cSJim Jagielski }
1195*b1cdbd2cSJim Jagielski
1196*b1cdbd2cSJim Jagielski // ::com::sun::star::lang::XServiceInfo
getSupportedServiceNames()1197*b1cdbd2cSJim Jagielski uno::Sequence< OUString > SAL_CALL Svx3DPolygonObject::getSupportedServiceNames()
1198*b1cdbd2cSJim Jagielski throw(uno::RuntimeException)
1199*b1cdbd2cSJim Jagielski {
1200*b1cdbd2cSJim Jagielski Sequence< OUString > aSeq( SvxShape::getSupportedServiceNames() );
1201*b1cdbd2cSJim Jagielski comphelper::ServiceInfoHelper::addToSequence( aSeq, 2, "com.sun.star.drawing.Shape3D",
1202*b1cdbd2cSJim Jagielski "com.sun.star.drawing.Shape3DPolygon");
1203*b1cdbd2cSJim Jagielski return aSeq;
1204*b1cdbd2cSJim Jagielski }
1205*b1cdbd2cSJim Jagielski
1206*b1cdbd2cSJim Jagielski // eof
1207