29 #include <svx/strings.hrc>
45 meConstraint(eConstr),
55 for(
size_t nObjs = 0; nObjs < nCnt; ++nObjs)
70 for(
size_t nObjs = 0; nObjs < nCnt; ++nObjs)
101 maGrp.push_back(aNewUnit);
117 const sal_uInt32 nCnt(
maGrp.size());
120 for(sal_uInt32 nOb(0); nOb < nCnt; nOb++)
142 const sal_uInt32 nCnt(
maGrp.size());
158 for(nOb=0;nOb<nCnt;nOb++)
166 std::make_unique<E3dRotateUndoAction>(
185 const sal_uInt32 nCnt(
maGrp.size());
187 for(sal_uInt32 nOb(0); nOb < nCnt; nOb++)
217 const sal_uInt32 nCnt(
maGrp.size());
220 for(sal_uInt32 nOb(0); nOb < nCnt; nOb++)
228 const sal_uInt32 nPlyCnt(aCandidate.
count());
234 if(
nullptr != pScene)
238 const basegfx::B3DHomMatrix aWorldToView(aViewInfo3D.getDeviceToView() * aViewInfo3D.getProjection() * aViewInfo3D.getOrientation());
247 aResult.append(aPolyPolygon);
255 std::unique_ptr<sdr::overlay::OverlayPolyPolygonStripedAndFilled> pNew(
274 const sal_uInt32 nCnt(
maGrp.size());
278 const E3dScene* pScene(
maGrp[0].mr3DObj.getRootE3dSceneFromE3dObject());
280 if(
nullptr != pScene)
285 for(sal_uInt32 nOb(0); nOb < nCnt; nOb++)
291 aObjCenter = aTransform * aObjCenter;
306 aInverseObjectTransform.
invert();
307 aRotCenter2D = aInverseObjectTransform * aRotCenter2D;
311 basegfx::B3DHomMatrix aInverseViewToEye(aViewInfo3D.getDeviceToView() * aViewInfo3D.getProjection());
312 aInverseViewToEye.
invert();
313 aRotCenter3D = aInverseViewToEye * aRotCenter3D;
334 sal_uInt16 nModifier = 0;
342 const sal_uInt32 nCnt(
maGrp.size());
344 for(sal_uInt32 nOb(0); nOb < nCnt; nOb++)
347 double fWAngle, fHAngle;
362 fWAngle = 90.0 *
static_cast<double>(rPnt.
X() -
maLastPos.
X())
364 fHAngle = 90.0 *
static_cast<double>(rPnt.
Y() -
maLastPos.
Y())
374 fWAngle =
static_cast<double>((
static_cast<long>(fWAngle) + nSnap/2) / nSnap * nSnap);
375 fHAngle =
static_cast<double>((
static_cast<long>(fHAngle) + nSnap/2) / nSnap * nSnap);
387 aRotMat.
rotate(0.0, 0.0, fWAngle);
389 aRotMat.
rotate(0.0, fWAngle, 0.0);
394 aRotMat.
rotate(0.0, fWAngle, 0.0);
396 aRotMat.
rotate(0.0, 0.0, fWAngle);
400 aRotMat.
rotate(fHAngle, 0.0, 0.0);
405 if(
nullptr != pScene)
411 aInverseOrientation.
invert();
414 aTransMat *= aViewInfo3D.getOrientation();
416 aTransMat *= aRotMat;
418 aTransMat *= aInverseOrientation;
444 return PointerStyle::Rotate;
458 meWhatDragHdl(eDrgHdl)
512 const sal_uInt32 nCnt(
maGrp.size());
515 sal_uInt16 nModifier(0);
523 for(sal_uInt32 nOb(0); nOb < nCnt; nOb++)
528 if(
nullptr != pScene)
538 aInverseSceneTransform.
invert();
539 aGlobalMoveHead2D = aInverseSceneTransform * aGlobalMoveHead2D;
540 aGlobalMoveTail2D = aInverseSceneTransform * aGlobalMoveTail2D;
542 basegfx::B3DPoint aMoveHead3D(aGlobalMoveHead2D.getX(), aGlobalMoveHead2D.getY(), 0.5);
543 basegfx::B3DPoint aMoveTail3D(aGlobalMoveTail2D.getX(), aGlobalMoveTail2D.getY(), 0.5);
544 basegfx::B3DHomMatrix aInverseViewToEye(aViewInfo3D.getDeviceToView() * aViewInfo3D.getProjection());
545 aInverseViewToEye.
invert();
547 aMoveHead3D = aInverseViewToEye * aMoveHead3D;
548 aMoveTail3D = aInverseViewToEye * aMoveTail3D;
553 double fZwi = aMoveHead3D.
getY();
554 aMoveHead3D.setY(aMoveHead3D.getZ());
555 aMoveHead3D.setZ(fZwi);
557 fZwi = aMoveTail3D.getY();
558 aMoveTail3D.setY(aMoveTail3D.getZ());
559 aMoveTail3D.setZ(fZwi);
564 aInverseOrientation.
invert();
567 aMoveHead3D = aCompleteTrans * aMoveHead3D;
568 aMoveTail3D = aCompleteTrans* aMoveTail3D;
597 const sal_uInt32 nCnt(
maGrp.size());
599 for(sal_uInt32 nOb(0); nOb < nCnt; nOb++)
605 if(
nullptr != pScene)
611 basegfx::B2DPoint aGlobalScaleStart2D(static_cast<double>(aStartPos.
X()), static_cast<double>(aStartPos.
Y()));
612 basegfx::B2DPoint aGlobalScaleNext2D(static_cast<double>(rPnt.
X()), static_cast<double>(rPnt.
Y()));
616 aInverseSceneTransform.
invert();
617 aGlobalScaleStart2D = aInverseSceneTransform * aGlobalScaleStart2D;
618 aGlobalScaleNext2D = aInverseSceneTransform * aGlobalScaleNext2D;
619 aGlobalScaleFixPos2D = aInverseSceneTransform * aGlobalScaleFixPos2D;
621 basegfx::B3DPoint aGlobalScaleStart3D(aGlobalScaleStart2D.getX(), aGlobalScaleStart2D.getY(), aObjectCenter.getZ());
622 basegfx::B3DPoint aGlobalScaleNext3D(aGlobalScaleNext2D.getX(), aGlobalScaleNext2D.getY(), aObjectCenter.getZ());
623 basegfx::B3DPoint aGlobalScaleFixPos3D(aGlobalScaleFixPos2D.getX(), aGlobalScaleFixPos2D.getY(), aObjectCenter.getZ());
624 basegfx::B3DHomMatrix aInverseViewToEye(aViewInfo3D.getDeviceToView() * aViewInfo3D.getProjection());
626 aInverseViewToEye.
invert();
652 if(aScaleVec.
getX() != 0.0)
661 if(aScaleVec.
getY() != 0.0)
673 if(fabs(aScaleVec.
getX()) > fabs(aScaleVec.
getY()))
687 aInverseOrientation.
invert();
691 aNewTrans *= aViewInfo3D.getOrientation();
695 aNewTrans *= aInverseOrientation;
724 return PointerStyle::Move;
::std::vector< E3dDragMethodUnit > maGrp
size_t GetMarkCount() const
void transform(const basegfx::B3DHomMatrix &rMatrix)
basegfx::B3DPoint maGlobalCenter
const Point & GetStart() const
bool IsUndoEnabled() const
bool HasFillStyle() const
basegfx::B3DHomMatrix maDisplayTransform
E3dDragRotate(SdrDragView &rView, const SdrMarkList &rMark, E3dDragConstraint eConstr, bool bFull)
SdrMark * GetMark(size_t nNum) const
B2DPolyPolygon createB2DPolyPolygonFromB3DPolyPolygon(const B3DPolyPolygon &rCandidate, const B3DHomMatrix &rMat)
const basegfx::B3DHomMatrix & GetTransform() const
virtual const tools::Rectangle & GetSnapRect() const override
void scale(double fX, double fY, double fZ)
long NormAngle36000(long a)
Normalize angle to -180.00..179.99.
B3DPoint getCenter() const
OUString SvxResId(const char *pId)
E3dDragMethod(SdrDragView &rView, const SdrMarkList &rMark, E3dDragConstraint eConstr, bool bFull)
bool IsRotateAllowed(bool b90Deg=false) const
SdrObject * GetMarkedSdrObj() const
SdrDragView & getSdrDragView()
void AddUndo(std::unique_ptr< SdrUndoAction > pUndo)
E3dScene * getParentE3dSceneFromE3dObject() const
virtual PointerStyle GetSdrDragPointer() const override
void SetRef1(const Point &pt)
bool HasMarkedObjPageView() const
E3dDragMove(SdrDragView &rView, const SdrMarkList &rMark, SdrHdlKind eDrgHdl, E3dDragConstraint eConstr, bool bFull)
basegfx::B3DHomMatrix maInitTransform
basegfx::B3DPolyPolygon maWireframePoly
E3dDragConstraint const meConstraint
virtual bool EndSdrDrag(bool bCopy) override
void transform(const basegfx::B2DHomMatrix &rMatrix)
virtual bool BeginSdrDrag() override
void NextMove(const Point &rPnt)
constexpr double deg2rad(double v)
const basegfx::B3DRange & GetBoundVolume() const
const basegfx::B3DHomMatrix & GetFullTransform() const
sal_uInt16 GetModifier() const
basegfx::B3DHomMatrix maInvDisplayTransform
bool HasLineStyle() const
void translate(double fX, double fY, double fZ)
virtual void MoveSdrDrag(const Point &rPnt) override
virtual void SetTransform(const basegfx::B3DHomMatrix &rMatrix)
Derived class of SdrView to edit 3D objects.
virtual void CreateOverlayGeometry(sdr::overlay::OverlayManager &rOverlayManager, const sdr::contact::ObjectContact &rObjectContact) override
virtual void MoveSdrDrag(const Point &rPnt) override
virtual PointerStyle GetSdrDragPointer() const override
long GetAngle(const Point &rPnt)
The Y axis points down! The function negates the Y axis, when calculating the angle, such that GetAngle(Point(0,-1))=90 deg.
SdrPageView * GetSdrPageView() const
Helper for 3d object changes affecting 2d geometry.
void rotate(double fAngleX, double fAngleY, double fAngleZ)
virtual void MoveSdrDrag(const Point &rPnt) override
basegfx::B3DHomMatrix maTransform
virtual E3dScene * getRootE3dSceneFromE3dObject() const
virtual void CancelSdrDrag() override
basegfx::B3DPolyPolygon CreateWireframe() const
virtual OUString GetSdrDragComment() const override
void insertNewlyCreatedOverlayObjectForSdrDragMethod(std::unique_ptr< sdr::overlay::OverlayObject > pOverlayObject, const sdr::contact::ObjectContact &rObjectContact, sdr::overlay::OverlayManager &rOverlayManager)
tools::Rectangle maFullBound