22 #include <svx/strings.hrc>
39 #include <com/sun/star/uno/Sequence.h>
48 return std::make_unique<sdr::properties::E3dProperties>(*this);
147 if(
nullptr == pScene)
155 basegfx::B2DPoint aScaleCenter2D(static_cast<double>(rRef.X()), static_cast<double>(rRef.Y()));
158 aInverseSceneTransform.
invert();
159 aScaleCenter2D = aInverseSceneTransform * aScaleCenter2D;
161 basegfx::B3DPoint aScaleCenter3D(aScaleCenter2D.getX(), aScaleCenter2D.getY(), 0.5);
162 basegfx::B3DHomMatrix aInverseViewToEye(aViewInfo3D.getDeviceToView() * aViewInfo3D.getProjection());
164 aInverseViewToEye.
invert();
165 aScaleCenter3D = aInverseViewToEye * aScaleCenter3D;
168 double fScaleX(xFact);
169 double fScaleY(yFact);
173 aInverseOrientation.
invert();
177 aTrans *= aViewInfo3D.getOrientation();
178 aTrans.
translate(-aScaleCenter3D.getX(), -aScaleCenter3D.getY(), -aScaleCenter3D.getZ());
179 aTrans.
scale(fScaleX, fScaleY, 1.0);
180 aTrans.
translate(aScaleCenter3D.getX(), aScaleCenter3D.getY(), aScaleCenter3D.getZ());
181 aTrans *= aInverseOrientation;
183 aTrans *= aFullTransform;
199 if(
nullptr == pScene)
209 if(
nullptr != pParent)
212 aInvDispTransform.
invert();
219 aEyeVol.
transform(aViewInfo3D.getOrientation());
226 static_cast<double>(rSize.
Width()) * aEyeVol.getWidth() /
static_cast<double>(aRect.
GetWidth()),
227 static_cast<double>(-rSize.
Height()) * aEyeVol.getHeight() /
static_cast<double>(aRect.
GetHeight()),
233 aInverseOrientation.
invert();
236 aMove = aCompleteTrans * aMove;
237 aPos = aCompleteTrans * aPos;
241 aTranslate.
translate(aMove.getX() - aPos.getX(), aMove.getY() - aPos.getY(), aMove.getZ() - aPos.getZ());
258 if(
nullptr != pParent)
275 if(
nullptr != pParent)
297 if(!xLocalSequence.empty())
299 const uno::Sequence< beans::PropertyValue > aEmptyParameters;
302 aRetval = xLocalSequence.getB3DRange(aLocalViewInformation3D);
341 if(
nullptr != pParent)
343 aNewFullTransformation = pParent->
GetFullTransform() * aNewFullTransformation;
387 if (!aName.isEmpty())
389 sName +=
" '" + aName +
"'";
397 return SvxResId(STR_ObjNamePluralObj3d);
402 return new E3dObject(rTargetModel, *
this);
407 return std::make_unique<E3DObjGeoData>();
439 aRotateZ.
rotate(0.0, 0.0, fAngleInRad);
451 return std::make_unique<sdr::properties::E3dCompoundProperties>(*this);
471 const uno::Sequence< beans::PropertyValue > aEmptyParameters;
495 const uno::Sequence< beans::PropertyValue > aEmptyParameters;
507 for(sal_uInt32
a(0);
a < 8;
a++)
539 if(aPolyPolygon.
count())
541 rHdlList.
AddHdl(std::make_unique<E3dVolumeMarker>(aPolyPolygon));
552 const uno::Sequence< beans::PropertyValue > aEmptyParameters;
569 if(xLocalSequence.empty())
580 aBoundVolume.getMinX(), aBoundVolume.getMinY(),
581 aBoundVolume.getMaxX(), aBoundVolume.getMaxY());
585 aSnapRange.transform(rVCScene.getObjectTransformation());
589 sal_Int32(floor(aSnapRange.getMinX())), sal_Int32(floor(aSnapRange.getMinY())),
590 sal_Int32(ceil(aSnapRange.getMaxX())), sal_Int32(ceil(aSnapRange.getMaxY())));
601 const uno::Sequence< beans::PropertyValue > aEmptyParameters;
611 aRetval.
transform(rVCScene.getObjectTransformation());
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact) override
virtual OUString TakeObjNameSingul() const override
virtual void RecalcSnapRect() override
Snap is not done on the BoundRect but if possible on logic coordinates (i.e.
virtual void SetTransformChanged()
virtual void StructureChanged() override
virtual void RestoreGeoData(const SdrObjGeoData &rGeo) override
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
basegfx::B2DPolyPolygon TransformToScreenCoor(const basegfx::B3DPolyPolygon &rCandidate) 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
constexpr tools::Long Width() const
basegfx::B3DHomMatrix maTransformation
virtual SdrInventor GetObjInventor() const override
virtual SdrObjKind GetObjIdentifier() const override
virtual SdrObjKind GetObjIdentifier() const override
virtual void StructureChanged()
virtual sal_uInt32 GetHdlCount() const override
Via GetHdlCount the number of Handles can be retrieved.
virtual bool IsBreakObjPossible()
OUString SvxResId(TranslateId aId)
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 SetBoundAndSnapRectsDirty(bool bNotMyself=false, bool bRecursive=true)
virtual void NbcRotate(const Point &rRef, Degree100 nAngle, double sn, double cs) override
virtual void NbcSetTransform(const basegfx::B3DHomMatrix &rMatrix)
E3dScene * getParentE3dSceneFromE3dObject() const
virtual E3dObject * CloneSdrObject(SdrModel &rTargetModel) const override
virtual void RestoreGeoData(const SdrObjGeoData &rGeo)
virtual void TakeObjInfo(SdrObjTransformInfoRec &rInfo) const override
void BroadcastObjectChange() const
virtual void SaveGeoData(SdrObjGeoData &rGeo) const
SdrObjUserCall * m_pUserCall
void transform(const basegfx::B2DHomMatrix &rMatrix)
const basegfx::B3DRange & GetBoundVolume() const
const basegfx::B3DHomMatrix & GetFullTransform() const
virtual basegfx::B3DRange RecalcBoundVolume() const
virtual std::unique_ptr< 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 std::unique_ptr< sdr::properties::BaseProperties > CreateObjectSpecificProperties() override
BASEGFX_DLLPUBLIC void transform(const B3DHomMatrix &rMatrix)
void translate(double fX, double fY, double fZ)
virtual void SetTransform(const basegfx::B3DHomMatrix &rMatrix)
virtual basegfx::B2DPolyPolygon TakeXorPoly() const override
The Xor-Polygon is required by the View to drag the object.
E3dObject(SdrModel &rSdrModel)
constexpr tools::Long Height() const
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 ...
Helper for 3d object changes affecting 2d geometry.
void rotate(double fAngleX, double fAngleY, double fAngleZ)
virtual std::unique_ptr< sdr::properties::BaseProperties > CreateObjectSpecificProperties() override
E3dCompoundObject(SdrModel &rSdrModel, E3dCompoundObject const &rSource)
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
const OUString & GetName() 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
bool m_bDetectedRangeSegmentation false
void NbcRotateGluePoints(const Point &rRef, Degree100 nAngle, double sn, double cs)
E3dScene * fillViewInformation3DForCompoundObject(drawinglayer::geometry::ViewInformation3D &o_rViewInformation3D, const E3dCompoundObject &rCandidate)
support for getting a ViewInformation3D for a given CompoudObject3D with correct ObjectTransformation...