22 #include <svx/strings.hrc>
46 #include <svx/svxids.hrc>
73 #include <com/sun/star/uno/Sequence.h>
81 return std::make_unique<sdr::properties::E3dProperties>(*this);
163 if(
nullptr == pScene)
171 basegfx::B2DPoint aScaleCenter2D(static_cast<double>(rRef.
X()), static_cast<double>(rRef.
Y()));
174 aInverseSceneTransform.
invert();
175 aScaleCenter2D = aInverseSceneTransform * aScaleCenter2D;
177 basegfx::B3DPoint aScaleCenter3D(aScaleCenter2D.getX(), aScaleCenter2D.getY(), 0.5);
178 basegfx::B3DHomMatrix aInverseViewToEye(aViewInfo3D.getDeviceToView() * aViewInfo3D.getProjection());
180 aInverseViewToEye.
invert();
181 aScaleCenter3D = aInverseViewToEye * aScaleCenter3D;
184 double fScaleX(xFact);
185 double fScaleY(yFact);
189 aInverseOrientation.
invert();
193 aTrans *= aViewInfo3D.getOrientation();
194 aTrans.
translate(-aScaleCenter3D.getX(), -aScaleCenter3D.getY(), -aScaleCenter3D.getZ());
195 aTrans.
scale(fScaleX, fScaleY, 1.0);
196 aTrans.
translate(aScaleCenter3D.getX(), aScaleCenter3D.getY(), aScaleCenter3D.getZ());
197 aTrans *= aInverseOrientation;
199 aTrans *= aFullTransform;
215 if(
nullptr == pScene)
225 if(
nullptr != pParent)
228 aInvDispTransform.
invert();
235 aEyeVol.
transform(aViewInfo3D.getOrientation());
242 static_cast<double>(rSize.
Width()) * aEyeVol.getWidth() /
static_cast<double>(aRect.
GetWidth()),
243 static_cast<double>(-rSize.
Height()) * aEyeVol.getHeight() /
static_cast<double>(aRect.
GetHeight()),
249 aInverseOrientation.
invert();
252 aMove = aCompleteTrans * aMove;
253 aPos = aCompleteTrans * aPos;
257 aTranslate.
translate(aMove.getX() - aPos.getX(), aMove.getY() - aPos.getY(), aMove.getZ() - aPos.getZ());
274 if(
nullptr != pParent)
291 if(
nullptr != pParent)
310 if(!xLocalSequence.empty())
312 const uno::Sequence< beans::PropertyValue > aEmptyParameters;
315 aRetval = xLocalSequence.getB3DRange(aLocalViewInformation3D);
354 if(
nullptr != pParent)
356 aNewFullTransformation = pParent->
GetFullTransform() * aNewFullTransformation;
400 if (!aName.isEmpty())
407 return sName.makeStringAndClear();
413 return SvxResId(STR_ObjNamePluralObj3d);
418 return CloneHelper< E3dObject >(rTargetModel);
477 aRotateZ.
rotate(0.0, 0.0, fAngleInRad);
489 return std::make_unique<sdr::properties::E3dCompoundProperties>(*this);
504 const uno::Sequence< beans::PropertyValue > aEmptyParameters;
528 const uno::Sequence< beans::PropertyValue > aEmptyParameters;
540 for(sal_uInt32
a(0);
a < 8;
a++)
572 if(aPolyPolygon.
count())
574 rHdlList.
AddHdl(std::make_unique<E3dVolumeMarker>(aPolyPolygon));
585 const uno::Sequence< beans::PropertyValue > aEmptyParameters;
600 if(!xLocalSequence.empty())
610 aBoundVolume.getMinX(), aBoundVolume.getMinY(),
611 aBoundVolume.getMaxX(), aBoundVolume.getMaxY());
615 aSnapRange.transform(rVCScene.getObjectTransformation());
619 sal_Int32(floor(aSnapRange.getMinX())), sal_Int32(floor(aSnapRange.getMinY())),
620 sal_Int32(ceil(aSnapRange.getMaxX())), sal_Int32(ceil(aSnapRange.getMaxY())));
628 return CloneHelper< E3dCompoundObject >(rTargetModel);
642 const uno::Sequence< beans::PropertyValue > aEmptyParameters;
652 aRetval.
transform(rVCScene.getObjectTransformation());
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact) override
const sal_uInt16 E3D_COMPOUNDOBJ_ID
virtual OUString TakeObjNameSingul() const override
virtual void RecalcSnapRect() override
Snap is not done on the BoundRect but if possible on logic coordinates (i.e.
SdrObjUserCall * pUserCall
virtual void SetTransformChanged()
virtual void StructureChanged() override
virtual sal_uInt16 GetObjIdentifier() const override
const sal_uInt16 E3D_OBJECT_ID
virtual void SaveGeoData(SdrObjGeoData &rGeo) const override
void SetGlueReallyAbsolute(bool bOn)
basegfx::B3DRange maLocalBoundVol
B2DPolyPolygon createB2DPolyPolygonFromB3DPolyPolygon(const B3DPolyPolygon &rCandidate, const B3DHomMatrix &rMat)
const basegfx::B3DHomMatrix & GetTransform() const
virtual const tools::Rectangle & GetSnapRect() const override
B3DPolyPolygon createCubePolyPolygonFromB3DRange(const B3DRange &rRange)
All geometrical data of an arbitrary object for use in undo/redo.
void scale(double fX, double fY, double fZ)
sdr::contact::ViewContact & GetViewContact() const
virtual sal_uInt16 GetObjIdentifier() const override
E3dCompoundObject(SdrModel &rSdrModel)
basegfx::B3DHomMatrix maTransformation
virtual SdrInventor GetObjInventor() const override
OUString SvxResId(const char *pId)
virtual void StructureChanged()
virtual sal_uInt32 GetHdlCount() const override
Via GetHdlCount the number of Handles can be retrieved.
virtual bool IsBreakObjPossible()
SdrAttrObj & operator=(SdrAttrObj const &)=default
tools::Rectangle maSnapRect
virtual void AddToHdlList(SdrHdlList &rHdlList) const override
B2IRange fround(const B2DRange &rRange)
virtual void Changed(const SdrObject &rObj, SdrUserCallType eType, const tools::Rectangle &rOldBoundRect)
virtual void NbcRotate(const Point &rRef, long nAngle, double sn, double cs) override
virtual void NbcSetTransform(const basegfx::B3DHomMatrix &rMatrix)
basegfx::B2DPolyPolygon TransformToScreenCoor(const basegfx::B3DPolyPolygon &rCandidate)
E3dScene * getParentE3dSceneFromE3dObject() const
virtual E3dObject * CloneSdrObject(SdrModel &rTargetModel) const override
E3dCompoundObject & operator=(const E3dCompoundObject &rObj)
virtual void TakeObjInfo(SdrObjTransformInfoRec &rInfo) const override
void BroadcastObjectChange() const
virtual void SaveGeoData(SdrObjGeoData &rGeo) const
void transform(const basegfx::B2DHomMatrix &rMatrix)
constexpr double deg2rad(double v)
const basegfx::B3DRange & GetBoundVolume() const
const basegfx::B3DHomMatrix & GetFullTransform() const
virtual basegfx::B3DRange RecalcBoundVolume() const
void NbcRotateGluePoints(const Point &rRef, long nAngle, double sn, double cs)
virtual std::unique_ptr< sdr::properties::BaseProperties > CreateObjectSpecificProperties() override
virtual SdrObjGeoData * NewGeoData() const override
A derived class must override these 3 methods if it has own geometric data that must be saved for Und...
virtual void RestGeoData(const SdrObjGeoData &rGeo) override
BASEGFX_DLLPUBLIC void transform(const B3DHomMatrix &rMatrix)
void translate(double fX, double fY, double fZ)
virtual void SetTransform(const basegfx::B3DHomMatrix &rMatrix)
virtual void RestGeoData(const SdrObjGeoData &rGeo)
virtual basegfx::B2DPolyPolygon TakeXorPoly() const override
The Xor-Polygon is required by the View to drag the object.
E3dObject(SdrModel &rSdrModel)
E3dObject & operator=(const E3dObject &rObj)
SdrObject * getParentSdrObjectFromSdrObject() const
virtual ~E3dCompoundObject() override
virtual void NbcMove(const Size &rSize) override
The methods Move, Resize, Rotate, Mirror, Shear, SetSnapRect and SetLogicRect call the corresponding ...
virtual void SetRectsDirty(bool bNotMyself=false, bool bRecursive=true)
Helper for 3d object changes affecting 2d geometry.
basegfx::B2DHomMatrix maTransformation
void rotate(double fAngleX, double fAngleY, double fAngleZ)
virtual std::unique_ptr< sdr::properties::BaseProperties > CreateObjectSpecificProperties() override
virtual void SetSelected(bool bNew)
virtual E3dScene * getRootE3dSceneFromE3dObject() const
virtual std::unique_ptr< SdrAttrObj, SdrObjectFreeOp > GetBreakObj()
virtual void SetChanged()
virtual ~E3dObject() override
virtual E3dCompoundObject * CloneSdrObject(SdrModel &rTargetModel) const override
basegfx::B3DPolyPolygon CreateWireframe() const
virtual E3dScene * getRootE3dSceneFromE3dObject() const override
void InvalidateBoundVolume()
virtual void RecalcSnapRect() override
Snap is not done on the BoundRect but if possible on logic coordinates (i.e.
void AddHdl(std::unique_ptr< SdrHdl > pHdl)
virtual OUString TakeObjNamePlural() const override
basegfx::B3DHomMatrix maFullTransform
E3dScene * fillViewInformation3DForCompoundObject(drawinglayer::geometry::ViewInformation3D &o_rViewInformation3D, const E3dCompoundObject &rCandidate)
support for getting a ViewInformation3D for a given CompoudObject3D with correct ObjectTransformation...