22 #include <initializer_list>
23 #include <string_view>
25 #include <com/sun/star/drawing/HomogenMatrix.hpp>
26 #include <com/sun/star/drawing/Position3D.hpp>
27 #include <com/sun/star/drawing/Direction3D.hpp>
28 #include <com/sun/star/drawing/DoubleSequence.hpp>
29 #include <com/sun/star/drawing/CameraGeometry.hpp>
30 #include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
50 #include <com/sun/star/drawing/PolyPolygonShape3D.hpp>
55 using namespace ::
cppu;
61 #define QUERYINT( xint ) \
62 if( rType == cppu::UnoType<xint>::get() ) \
63 aAny <<= Reference< xint >(this)
89 else QUERYINT( container::XIndexAccess );
90 else QUERYINT( container::XElementAccess );
106 return css::uno::Sequence<sal_Int8>();
114 SvxShape* pShape = comphelper::getUnoTunnelImplementation<SvxShape>( xShape );
117 throw uno::RuntimeException();
120 if( dynamic_cast<const E3dObject* >(pSdrShape) !=
nullptr )
128 throw uno::RuntimeException();
143 throw uno::RuntimeException();
149 while( nObjNum < nObjCount )
151 if(rList.
GetObj( nObjNum ) == pSdrShape )
156 if( nObjNum < nObjCount )
163 SAL_WARN(
"svx",
"Fatality! SdrObject is not belonging to its SdrObjList! [CL]" );
172 sal_Int32 nRetval = 0;
185 throw uno::RuntimeException();
188 throw lang::IndexOutOfBoundsException();
191 if(pDestObj ==
nullptr)
192 throw lang::IndexOutOfBoundsException();
194 Reference< drawing::XShape > xShape( pDestObj->
getUnoShape(), uno::UNO_QUERY );
217 drawing::HomogenMatrix aMat;
218 if( rValue >>= aMat )
228 drawing::HomogenMatrix aHomMat;
236 struct ImpRememberTransAndRect
246 switch( pProperty->
nWID )
259 drawing::CameraGeometry aCamGeo;
261 if(rValue >>= aCamGeo)
263 basegfx::B3DPoint aVRP(aCamGeo.vrp.PositionX, aCamGeo.vrp.PositionY, aCamGeo.vrp.PositionZ);
264 basegfx::B3DVector aVPN(aCamGeo.vpn.DirectionX, aCamGeo.vpn.DirectionY, aCamGeo.vpn.DirectionZ);
265 basegfx::B3DVector aVUP(aCamGeo.vup.DirectionX, aCamGeo.vup.DirectionY, aCamGeo.vup.DirectionZ);
268 ImpRememberTransAndRect aSceneTAR;
274 std::vector<basegfx::B3DHomMatrix*> aObjTrans;
275 while(aIter.IsMore())
280 aObjTrans.push_back(pNew);
285 while(aIter.IsMore())
298 double fH = rVolume.getHeight();
306 aCam.SetAutoAdjustProjection(
false);
307 aCam.SetViewWindow(- fW / 2, - fH / 2, fW, fH);
310 aCam.SetPosAndLookAt(aCamPos, aLookAt);
311 aCam.SetFocalLength(fCamFocal / 100.0);
312 aCam.SetDeviceWindow(
tools::Rectangle(0, 0, static_cast<tools::Long>(fW), static_cast<tools::Long>(fH)));
322 if(bVRPUsed || bVPNUsed || bVUPUsed)
324 pScene->
GetCameraSet().SetViewportValues(aVRP, aVPN, aVUP);
330 while(aIter.IsMore())
350 throw IllegalArgumentException();
355 css::uno::Any& rValue)
357 switch( pProperty->
nWID )
369 drawing::CameraGeometry aCamGeo;
378 aCamGeo.vrp.PositionX = aVRP.getX();
379 aCamGeo.vrp.PositionY = aVRP.getY();
380 aCamGeo.vrp.PositionZ = aVRP.getZ();
381 aCamGeo.vpn.DirectionX = aVPN.getX();
382 aCamGeo.vpn.DirectionY = aVPN.getY();
383 aCamGeo.vpn.DirectionZ = aVPN.getZ();
384 aCamGeo.vup.DirectionX = aVUP.getX();
385 aCamGeo.vup.DirectionY = aVUP.getY();
386 aCamGeo.vup.DirectionZ = aVUP.getZ();
403 std::initializer_list<std::u16string_view>{
u"com.sun.star.drawing.Shape3DScene" });
419 switch( pProperty->
nWID )
431 drawing::Position3D aUnoPos;
432 if( rValue >>= aUnoPos )
444 if( rValue >>= aDirection )
446 basegfx::B3DVector aSize(aDirection.DirectionX, aDirection.DirectionY, aDirection.DirectionZ);
456 if( rValue >>= bNew )
467 throw IllegalArgumentException();
472 switch( pProperty->
nWID )
484 drawing::Position3D aPos;
486 aPos.PositionX = rPos.getX();
487 aPos.PositionY = rPos.getY();
488 aPos.PositionZ = rPos.getZ();
497 drawing::Direction3D aDir;
499 aDir.DirectionX = rSize.getX();
500 aDir.DirectionY = rSize.getY();
501 aDir.DirectionZ = rSize.getZ();
508 rValue <<= static_cast<E3dCubeObj*>(
GetSdrObject())->GetPosIsCenter();
523 std::initializer_list<std::u16string_view>{
u"com.sun.star.drawing.Shape3D",
524 u"com.sun.star.drawing.Shape3DCube" });
538 switch( pProperty->
nWID )
551 drawing::Position3D aUnoPos;
552 if( rValue >>= aUnoPos )
564 drawing::Direction3D aDir;
565 if( rValue >>= aDir )
577 throw IllegalArgumentException();
582 switch( pProperty->
nWID )
594 drawing::Position3D aPos;
596 aPos.PositionX = rPos.getX();
597 aPos.PositionY = rPos.getY();
598 aPos.PositionZ = rPos.getZ();
607 drawing::Direction3D aDir;
609 aDir.DirectionX = rSize.getX();
610 aDir.DirectionY = rSize.getY();
611 aDir.DirectionZ = rSize.getZ();
628 std::initializer_list<std::u16string_view>{
u"com.sun.star.drawing.Shape3D",
629 u"com.sun.star.drawing.Shape3DSphere" });
644 bool bCorrectPolygon)
646 drawing::PolyPolygonShape3D aSourcePolyPolygon;
647 if( !(rValue >>= aSourcePolyPolygon) )
650 sal_Int32 nOuterSequenceCount = aSourcePolyPolygon.SequenceX.getLength();
651 if(nOuterSequenceCount != aSourcePolyPolygon.SequenceY.getLength() || nOuterSequenceCount != aSourcePolyPolygon.SequenceZ.getLength())
654 drawing::DoubleSequence* pInnerSequenceX = aSourcePolyPolygon.SequenceX.getArray();
655 drawing::DoubleSequence* pInnerSequenceY = aSourcePolyPolygon.SequenceY.getArray();
656 drawing::DoubleSequence* pInnerSequenceZ = aSourcePolyPolygon.SequenceZ.getArray();
657 for(sal_Int32
a(0);
a<nOuterSequenceCount;
a++)
659 sal_Int32 nInnerSequenceCount = pInnerSequenceX->getLength();
660 if(nInnerSequenceCount != pInnerSequenceY->getLength() || nInnerSequenceCount != pInnerSequenceZ->getLength())
665 double* pArrayX = pInnerSequenceX->getArray();
666 double* pArrayY = pInnerSequenceY->getArray();
667 double* pArrayZ = pInnerSequenceZ->getArray();
668 for(sal_Int32 b(0);b<nInnerSequenceCount;b++)
683 rResultPolygon.
append(aNewPolygon);
690 drawing::PolyPolygonShape3D aRetval;
691 aRetval.SequenceX.realloc(rSourcePolyPolygon.
count());
692 aRetval.SequenceY.realloc(rSourcePolyPolygon.
count());
693 aRetval.SequenceZ.realloc(rSourcePolyPolygon.
count());
694 drawing::DoubleSequence* pOuterSequenceX = aRetval.SequenceX.getArray();
695 drawing::DoubleSequence* pOuterSequenceY = aRetval.SequenceY.getArray();
696 drawing::DoubleSequence* pOuterSequenceZ = aRetval.SequenceZ.getArray();
697 for(sal_uInt32
a(0);
a<rSourcePolyPolygon.
count();
a++)
700 sal_Int32 nPointCount(aPoly.count());
701 if(aPoly.isClosed()) nPointCount++;
702 pOuterSequenceX->realloc(nPointCount);
703 pOuterSequenceY->realloc(nPointCount);
704 pOuterSequenceZ->realloc(nPointCount);
705 double* pInnerSequenceX = pOuterSequenceX->getArray();
706 double* pInnerSequenceY = pOuterSequenceY->getArray();
707 double* pInnerSequenceZ = pOuterSequenceZ->getArray();
708 for(sal_uInt32 b(0);b<aPoly.count();b++)
711 *pInnerSequenceX++ = aPoint.getX();
712 *pInnerSequenceY++ = aPoint.getY();
713 *pInnerSequenceZ++ = aPoint.getZ();
718 *pInnerSequenceX++ = aPoint.getX();
719 *pInnerSequenceY++ = aPoint.getY();
720 *pInnerSequenceZ++ = aPoint.getZ();
731 switch( pProperty->
nWID )
751 const sal_uInt32 nPrevVerticalSegs(static_cast<E3dLatheObj*>(
GetSdrObject())->GetVerticalSegments());
757 const sal_uInt32 nPostVerticalSegs(static_cast<E3dLatheObj*>(
GetSdrObject())->GetVerticalSegments());
759 if(nPrevVerticalSegs != nPostVerticalSegs)
772 throw IllegalArgumentException();
777 switch( pProperty->
nWID )
782 drawing::HomogenMatrix aHomMat;
808 std::initializer_list<std::u16string_view>{
u"com.sun.star.drawing.Shape3D",
809 u"com.sun.star.drawing.Shape3DLathe" });
823 switch( pProperty->
nWID )
844 static_cast<E3dExtrudeObj*
>(
GetSdrObject())->SetExtrudePolygon(aB2DPolyPolygon);
853 throw IllegalArgumentException();
858 switch( pProperty->
nWID )
863 drawing::HomogenMatrix aHomMat;
891 std::initializer_list<std::u16string_view>{
u"com.sun.star.drawing.Shape3D",
892 u"com.sun.star.drawing.Shape3DExtrude" });
906 switch( pProperty->
nWID )
925 static_cast<E3dPolygonObj*
>(
GetSdrObject())->SetPolyPolygon3D(aNewB3DPolyPolygon);
939 static_cast<E3dPolygonObj*
>(
GetSdrObject())->SetPolyNormals3D(aNewB3DPolyPolygon);
955 static_cast<E3dPolygonObj*
>(
GetSdrObject())->SetPolyTexture2D(aB2DPolyPolygon);
963 if( rValue >>= bNew )
965 static_cast<E3dPolygonObj*
>(
GetSdrObject())->SetLineOnly(bNew);
974 throw IllegalArgumentException();
979 switch( pProperty->
nWID )
1011 rValue <<= static_cast<E3dPolygonObj*>(
GetSdrObject())->GetLineOnly();
1027 std::initializer_list<std::u16string_view>{
u"com.sun.star.drawing.Shape3D",
1028 u"com.sun.star.drawing.Shape3DPolygon" });
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
virtual void SAL_CALL remove(const css::uno::Reference< css::drawing::XShape > &xShape) override
#define OWN_ATTR_3D_VALUE_SIZE
virtual css::uno::Any SAL_CALL queryAggregation(const css::uno::Type &aType) override
#define OWN_ATTR_3D_VALUE_CAMERA_GEOMETRY
void append(const B3DPolygon &rPolygon, sal_uInt32 nCount=1)
Svx3DSphereObject(SdrObject *pObj)
virtual css::uno::Any SAL_CALL queryInterface(css::uno::Type const &rType) SAL_OVERRIDE
Svx3DExtrudeObject(SdrObject *pObj)
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
#define OWN_ATTR_3D_VALUE_TEXTUREPOLYGON3D
void B3DHomMatrixToUnoHomogenMatrix(const B3DHomMatrix &rMatrixIn, com::sun::star::drawing::HomogenMatrix &rMatrixOut)
virtual bool setPropertyValueImpl(const OUString &rName, const SfxItemPropertySimpleEntry *pProperty, const css::uno::Any &rValue) override
virtual ~Svx3DLatheObject() override
static SdrObject * getSdrObjectFromXShape(const css::uno::Reference< css::uno::XInterface > &xInt)
virtual void NbcInsertObject(SdrObject *pObj, size_t nPos=SAL_MAX_SIZE)
#define OWN_ATTR_3D_VALUE_LINEONLY
SdrObject * GetObj(size_t nNum) const
size_t GetObjCount() const
#define OWN_ATTR_3D_VALUE_POS_IS_CENTER
#define SVXMAP_3DSCENEOBJECT
virtual bool setPropertyValueImpl(const OUString &rName, const SfxItemPropertySimpleEntry *pProperty, const css::uno::Any &rValue) override
SfxUInt32Item makeSvx3DVerticalSegmentsItem(sal_uInt32 nVal)
B2DPolyPolygon createB2DPolyPolygonFromB3DPolyPolygon(const B3DPolyPolygon &rCandidate, const B3DHomMatrix &rMat)
const basegfx::B3DHomMatrix & GetTransform() const
static void Free(SdrObject *&_rpObject)
virtual SdrObjList * GetSubList() const override
virtual const tools::Rectangle & GetSnapRect() const override
EmbeddedObjectRef * pObject
virtual bool getPropertyValueImpl(const OUString &rName, const SfxItemPropertySimpleEntry *pProperty, css::uno::Any &rValue)
virtual SdrObjList * GetSubList() const
rtl::Reference< SvxDrawPage > mxPage
virtual bool setPropertyValueImpl(const OUString &rName, const SfxItemPropertySimpleEntry *pProperty, const css::uno::Any &rValue) override
virtual sal_Bool SAL_CALL hasElements() override
Svx3DCubeObject(SdrObject *pObj)
virtual bool setPropertyValueImpl(const OUString &rName, const SfxItemPropertySimpleEntry *pProperty, const css::uno::Any &rValue) override
virtual bool getPropertyValueImpl(const OUString &rName, const SfxItemPropertySimpleEntry *pProperty, css::uno::Any &rValue) override
static bool ConvertHomogenMatrixToObject(E3dObject *pObject, const Any &rValue)
virtual bool getPropertyValueImpl(const OUString &rName, const SfxItemPropertySimpleEntry *pProperty, css::uno::Any &rValue) override
constexpr TypedWhichId< SfxUInt32Item > SDRATTR_3DSCENE_DISTANCE(SDRATTR_3DSCENE_FIRST+1)
virtual css::uno::Reference< css::uno::XInterface > getUnoShape()
B3DPolyPolygon createB3DPolyPolygonFromB2DPolyPolygon(const B2DPolyPolygon &rCandidate, double fZCoordinate)
virtual ~Svx3DPolygonObject() override
virtual void Create(SdrObject *pNewOpj, SvxDrawPage *pNewPage)
virtual void NbcSetTransform(const basegfx::B3DHomMatrix &rMatrix) override
#define SVXMAP_3DEXTRUDEOBJECT
void SetCamera(const Camera3D &rNewCamera)
#define SVXMAP_3DCUBEOBJECT
virtual ~Svx3DSphereObject() override
#define SVXMAP_3DSPHEREOBJECT
virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type &rType) override
#define OWN_ATTR_3D_VALUE_NORMALSPOLYGON3D
void append(const B3DPoint &rPoint, sal_uInt32 nCount=1)
static void B3dPolyPolygon_to_PolyPolygonShape3D(const basegfx::B3DPolyPolygon &rSourcePolyPolygon, Any &rValue)
B3DHomMatrix UnoHomogenMatrixToB3DHomMatrix(const com::sun::star::drawing::HomogenMatrix &rMatrixIn)
virtual void SetChanged(bool bFlg=true)
bool HasSdrObject() const
virtual void NbcSetTransform(const basegfx::B3DHomMatrix &rMatrix)
SphereObject with diameter r3DSize.
virtual css::uno::Any SAL_CALL getByIndex(sal_Int32 Index) override
void checkClosed(B2DPolygon &rCandidate)
virtual ~Svx3DExtrudeObject() override
virtual bool setPropertyValueImpl(const OUString &rName, const SfxItemPropertySimpleEntry *pProperty, const css::uno::Any &rValue) override
css::drawing::Direction3D aDirection
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
#define SVXMAP_3DPOLYGONOBJECT
virtual void Create(SdrObject *pNewOpj, SvxDrawPage *pNewPage) override
constexpr std::enable_if_t< std::is_signed_v< T >, std::make_unsigned_t< T > > make_unsigned(T value)
SdrModel & getSdrModelFromSdrObject() const
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
const basegfx::B3DRange & GetBoundVolume() const
css::uno::Type const & get()
Svx3DLatheObject(SdrObject *pObj)
virtual SdrObject * NbcRemoveObject(size_t nObjNum)
remove from list without delete
css::uno::Sequence< T > concatSequences(const css::uno::Sequence< T > &rS1, const Ss &...rSn)
virtual css::uno::Type SAL_CALL getElementType() override
virtual void SAL_CALL add(const css::uno::Reference< css::drawing::XShape > &xShape) override
virtual sal_Int32 SAL_CALL getCount() override
virtual void SetTransform(const basegfx::B3DHomMatrix &rMatrix)
virtual bool getPropertyValueImpl(const OUString &rName, const SfxItemPropertySimpleEntry *pProperty, css::uno::Any &rValue) override
#define OWN_ATTR_3D_VALUE_POSITION
static bool PolyPolygonShape3D_to_B3dPolyPolygon(const Any &rValue, basegfx::B3DPolyPolygon &rResultPolygon, bool bCorrectPolygon)
#define OWN_ATTR_3D_VALUE_POLYPOLYGON3D
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
constexpr TypedWhichId< SfxUInt32Item > SDRATTR_3DSCENE_FOCAL_LENGTH(SDRATTR_3DSCENE_FIRST+2)
virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override
const SfxItemSet & GetMergedItemSet() const
SdrObject * GetSdrObject() const
virtual ~Svx3DCubeObject() override
#define SVXMAP_3DLATHEOBJECT
SdrObject * getParentSdrObjectFromSdrObject() const
virtual bool getPropertyValueImpl(const OUString &rName, const SfxItemPropertySimpleEntry *pProperty, css::uno::Any &rValue) override
virtual ~Svx3DSceneObject() override
virtual bool getPropertyValueImpl(const OUString &rName, const SfxItemPropertySimpleEntry *pProperty, css::uno::Any &rValue) override
static void ConvertObjectToHomogenMatric(E3dObject const *pObject, Any &rValue)
#define SAL_WARN(area, stream)
virtual bool getPropertyValueImpl(const OUString &rName, const SfxItemPropertySimpleEntry *pProperty, css::uno::Any &rValue) override
virtual bool setPropertyValueImpl(const OUString &rName, const SfxItemPropertySimpleEntry *pProperty, const css::uno::Any &rValue) override
#define OWN_ATTR_3D_VALUE_TRANSFORM_MATRIX
virtual bool setPropertyValueImpl(const OUString &rName, const SfxItemPropertySimpleEntry *pProperty, const css::uno::Any &rValue)
SdrObjList * getParentSdrObjListFromSdrObject() const
Svx3DSceneObject(SdrObject *pObj, SvxDrawPage *pDrawPage)
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
B3DPolygon const & getB3DPolygon(sal_uInt32 nIndex) const
SvxUnoPropertyMapProvider & getSvxMapProvider()
virtual css::uno::Any SAL_CALL queryAggregation(const css::uno::Type &rType) override
const Camera3D & GetCamera() const
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
Svx3DPolygonObject(SdrObject *pObj)
B3dCamera & GetCameraSet()
virtual void NbcSetSnapRect(const tools::Rectangle &rRect) override