43#include <com/sun/star/drawing/Position3D.hpp>
44#include <com/sun/star/drawing/Direction3D.hpp>
45#include <com/sun/star/drawing/NormalsKind.hpp>
46#include <com/sun/star/drawing/ShadeMode.hpp>
48#include <com/sun/star/drawing/EnhancedCustomShapeParameterPair.hpp>
49#include <com/sun/star/drawing/EnhancedCustomShapeMetalType.hpp>
50#include <com/sun/star/drawing/ProjectionMode.hpp>
70 css::drawing::EnhancedCustomShapeParameterPair aOriginParaPair;
72 if ( ! ( pAny && ( *pAny >>= aOriginParaPair ) && ( aOriginParaPair.First.Value >>= rOriginX ) && ( aOriginParaPair.Second.Value >>= rOriginY ) ) )
81 css::drawing::EnhancedCustomShapeParameterPair aRotateAngleParaPair;
83 if ( ! ( pAny && ( *pAny >>= aRotateAngleParaPair ) && ( aRotateAngleParaPair.First.Value >>= rAngleX ) && ( aRotateAngleParaPair.Second.Value >>= rAngleY ) ) )
94 css::drawing::EnhancedCustomShapeParameterPair aSkewParaPair;
96 if ( ! ( pAny && ( *pAny >>= aSkewParaPair ) && ( aSkewParaPair.First.Value >>= rSkewAmount ) && ( aSkewParaPair.Second.Value >>= rSkewAngle ) ) )
107void GetExtrusionDepth(
const SdrCustomShapeGeometryItem& rItem,
const double* pMap,
double& rBackwardDepth,
double& rForwardDepth )
109 css::drawing::EnhancedCustomShapeParameterPair aDepthParaPair;
110 double fDepth = 0, fFraction = 0;
112 if ( pAny && ( *pAny >>= aDepthParaPair ) && ( aDepthParaPair.First.Value >>= fDepth ) && ( aDepthParaPair.Second.Value >>= fFraction ) )
114 rForwardDepth = fDepth * fFraction;
115 rBackwardDepth = fDepth - rForwardDepth;
119 rBackwardDepth = 1270;
125 rBackwardDepth *= fMap;
126 rForwardDepth *= fMap;
132 double fRetValue = fDefault;
141 drawing::ShadeMode eRet( eDefault );
150 bool bRetValue = bDefault;
158 const drawing::Position3D& rDefault,
const double* pMap )
160 drawing::Position3D aRetValue( rDefault );
166 aRetValue.PositionX *= *pMap;
167 aRetValue.PositionY *= *pMap;
168 aRetValue.PositionZ *= *pMap;
173drawing::Direction3D GetDirection3D(
const SdrCustomShapeGeometryItem& rItem,
const OUString& rPropertyName,
const drawing::Direction3D& rDefault )
175 drawing::Direction3D aRetValue( rDefault );
184 sal_Int16 aRetValue(eDefault);
209 aRotateMat.
rotate(0.0, 0.0, M_PI_4);
210 if (rLight.
getX() == 0.0 && rLight.
getZ() == 0.0)
213 if (rLight.
getY() >= 0.0)
214 aRotateMat.
rotate(-M_PI_2, 0.0, 0.0);
216 aRotateMat.
rotate(M_PI_2, 0.0, 0.0);
221 double fAzimuth = atan2(rLight.
getX(), rLight.
getZ());
223 double fElevation = atan2(rLight.
getY(), std::hypot(rLight.
getX(), rLight.
getZ()));
224 aRotateMat.
rotate(-fElevation, fAzimuth, 0.0);
227 rSoftUp = aRotateMat * rSoftUp;
228 rSoftDown = aRotateMat * rSoftDown;
229 rSoftRight = aRotateMat * rSoftRight;
230 rSoftLeft = aRotateMat * rSoftLeft;
240 double fMap(1.0), *pMap =
nullptr;
250 if ( GetBool( rGeometryItem,
"Extrusion",
false ) )
252 bool bIsMirroredX(rSdrObjCustomShape.
IsMirroredX());
253 bool bIsMirroredY(rSdrObjCustomShape.
IsMirroredY());
256 if ( nObjectRotation )
258 double a =
toRadians(36000_deg100 - nObjectRotation);
304 if(SfxItemState::SET == aSet.
GetItemState(nWhich,
true, &pItem))
325 std::vector< E3dCompoundObject* > aPlaceholderObjectList;
327 double fExtrusionBackward, fExtrusionForward;
328 GetExtrusionDepth( rGeometryItem, pMap, fExtrusionBackward, fExtrusionForward );
329 double fDepth = fExtrusionBackward + fExtrusionForward;
333 drawing::ProjectionMode eProjectionMode( drawing::ProjectionMode_PARALLEL );
336 *pAny >>= eProjectionMode;
338 E3dDefaultAttributes a3DDefaultAttr;
339 a3DDefaultAttr.SetDefaultLatheCharacterMode(
true );
340 a3DDefaultAttr.SetDefaultExtrudeCharacterMode(
true );
344 bool bSceneHasObjects (
false );
345 bool bUseTwoFillStyles(
false );
347 drawing::ShadeMode eShadeMode( GetShadeMode( rGeometryItem, drawing::ShadeMode_FLAT ) );
348 bool bUseExtrusionColor = GetBool( rGeometryItem,
"Color",
false );
351 pScene->GetProperties().SetObjectItem( Svx3DShadeModeItem(
static_cast<sal_uInt16
>(eShadeMode)));
353 aSet.
Put( Svx3DTextureModeItem( 1 ) );
355 if (eShadeMode == drawing::ShadeMode_SMOOTH || eShadeMode == drawing::ShadeMode_PHONG)
356 aSet.
Put( Svx3DNormalsKindItem(
static_cast<sal_uInt16
>(drawing::NormalsKind_SPECIFIC)));
358 aSet.
Put( Svx3DNormalsKindItem(
static_cast<sal_uInt16
>(drawing::NormalsKind_FLAT)));
360 if ( eShadeMode == drawing::ShadeMode_DRAFT )
369 if ( eFillStyle == drawing::FillStyle_NONE )
371 else if ( ( eFillStyle == drawing::FillStyle_BITMAP ) || ( eFillStyle == drawing::FillStyle_GRADIENT ) || bUseExtrusionColor )
372 bUseTwoFillStyles =
true;
380 if(bUseTwoFillStyles || (bIsMirroredX && !bIsMirroredY) || (!bIsMirroredX && bIsMirroredY))
390 const bool bMultipleSubObjects(aIter.
Count() > 1);
400 drawing::FillStyle aLocalFillStyle(eFillStyle);
402 if (
auto pPathObj =
dynamic_cast<const SdrPathObj*
>(pNext) )
405 bool bNeedToConvertToContour(
false);
411 if(!bMultipleSubObjects)
415 if(drawing::FillStyle_NONE == eStyle)
422 if(!bNeedToConvertToContour && !aLine.
isDefault())
430 bNeedToConvertToContour =
true;
436 if (bNeedToConvertToContour && !bFuzzing)
448 if(eShadeMode == drawing::ShadeMode_DRAFT)
453 aLocalFillStyle = drawing::FillStyle_NONE;
463 aLocalFillStyle = drawing::FillStyle_SOLID;
476 aPolyPoly = pPathObj->GetPathPoly();
487 if( aPolyPoly.
count() )
496 aTotalPolyPoly.
append(aPolyPoly);
497 aBoundRect2d.
Union( aBoundRect );
504 bUseTwoFillStyles ? 0 : fDepth );
506 p3DObj->NbcSetLayer( pShape2d->
GetLayer() );
507 p3DObj->SetMergedItemSet( aLocalSet );
509 if ( bIsPlaceholderObject )
510 aPlaceholderObjectList.push_back( p3DObj.get() );
511 else if ( bUseTwoFillStyles )
537 if ( aSnapRect != aBoundRect && aSnapRect.
GetWidth() > 0 && aSnapRect.
GetHeight() > 0)
542 double fXScale =
static_cast<double>(aBoundRect.
GetWidth()) /
static_cast<double>(aSnapRect.
GetWidth());
543 double fYScale =
static_cast<double>(aBoundRect.
GetHeight()) /
static_cast<double>(aSnapRect.
GetHeight());
545 Point aPt(
static_cast<sal_Int32
>(
static_cast<double>( aBoundRect.
Left() - aSnapRect.
Left() )*
static_cast<double>(aBmpSize.
Width()) /
static_cast<double>(aSnapRect.
GetWidth()) ),
546 static_cast<sal_Int32
>(
static_cast<double>( aBoundRect.
Top() - aSnapRect.
Top() ) *
static_cast<double>(aBmpSize.
Height()) /
static_cast<double>(aSnapRect.
GetHeight()) ) );
547 Size aSize(
static_cast<sal_Int32
>( aBmpSize.
Width() * fXScale ),
548 static_cast<sal_Int32
>( aBmpSize.
Height() * fYScale ) );
550 aFillBmp.
Crop( aCropRect );
554 pScene->InsertObject( p3DObj.get() );
555 p3DObj =
new E3dExtrudeObj(
560 p3DObj->NbcSetLayer( pShape2d->
GetLayer() );
561 p3DObj->SetMergedItemSet( aLocalSet );
562 if ( bUseExtrusionColor )
564 p3DObj->SetMergedItem(
XFillStyleItem( drawing::FillStyle_SOLID ) );
565 p3DObj->SetMergedItem( Svx3DCloseFrontItem(
false ) );
566 p3DObj->SetMergedItem( Svx3DCloseBackItem(
false ) );
567 pScene->InsertObject( p3DObj.get() );
570 p3DObj =
new E3dExtrudeObj(
573 std::move(aPolyPoly),
576 p3DObj->NbcSetLayer( pShape2d->
GetLayer() );
577 p3DObj->SetMergedItemSet( aLocalSet );
580 aFrontTransform.
translate( 0.0, 0.0, fDepth );
581 p3DObj->NbcSetTransform( aFrontTransform );
583 if ( ( aLocalFillStyle == drawing::FillStyle_BITMAP ) && !aFillBmp.
IsEmpty() )
588 else if ( aLocalFillStyle == drawing::FillStyle_NONE )
593 p3DObj->SetMergedItem( Svx3DCloseFrontItem(
false ) );
594 p3DObj->SetMergedItem( Svx3DCloseBackItem(
false ) );
596 pScene->InsertObject( p3DObj.get() );
597 bSceneHasObjects =
true;
601 if ( bSceneHasObjects )
607 Camera3D rCamera = pScene->GetCamera();
608 pScene->NbcSetSnapRect( aSnapRect );
621 pScene->SetCamera( rCamera );
622 pScene->SetBoundAndSnapRectsDirty();
631 aNewTransform.
translate( -aCenter.
X(), aCenter.
Y(), -fExtrusionBackward);
632 aPolyPolyTransform.
translate(-aCenter.
X(), -aCenter.
Y());
635 if ( fZRotate != 0.0 )
637 aNewTransform.
rotate( 0.0, 0.0, fZRotate );
638 aPolyPolyTransform.
rotate(-fZRotate);
642 aNewTransform.
scale( -1.0, 1, 1 );
643 aPolyPolyTransform.
scale(-1.0, 1);
647 aNewTransform.
scale( 1, -1.0, 1 );
648 aPolyPolyTransform.
scale(1, -1.0);
650 aPolyPolyTransform.
translate(aCenter.
X(), aCenter.
Y());
651 aTotalPolyPoly.
transform(aPolyPolyTransform);
656 double fXRotate, fYRotate;
657 GetRotateAngle( rGeometryItem, fXRotate, fYRotate );
658 drawing::Direction3D aRotationCenterDefault( 0, 0, 0 );
659 drawing::Direction3D aRotationCenter( GetDirection3D( rGeometryItem,
"RotationCenter", aRotationCenterDefault ) );
664 aRotationCenter.DirectionZ *= *pMap;
666 aNewTransform.
translate( -aRotationCenter.DirectionX, aRotationCenter.DirectionY, -aRotationCenter.DirectionZ );
667 if( fYRotate != 0.0 )
668 aNewTransform.
rotate( 0.0, -fYRotate, 0.0 );
669 if( fXRotate != 0.0 )
670 aNewTransform.
rotate( -fXRotate, 0.0, 0.0 );
671 aNewTransform.
translate(aRotationCenter.DirectionX, -aRotationCenter.DirectionY, aRotationCenter.DirectionZ);
674 if (eProjectionMode == drawing::ProjectionMode_PARALLEL)
676 double fSkew, fAlpha;
677 GetSkew( rGeometryItem, fSkew, fAlpha );
680 double fInvTanBeta( fSkew / 100.0 );
684 fInvTanBeta * cos(fAlpha),
685 fInvTanBeta * sin(fAlpha));
690 pScene->NbcSetTransform( aNewTransform );
694 double fViewPointX = 0;
695 double fViewPointY = 0;
696 double fViewPointZ = 25000;
697 if (eProjectionMode == drawing::ProjectionMode_PERSPECTIVE)
699 double fOriginX, fOriginY;
704 aBoundAfter2DTransform.
SetTop(aTotalPolyPolyRange.
getMinY());
711 GetOrigin( rGeometryItem, fOriginX, fOriginY );
712 fOriginX *= aBoundAfter2DTransform.
GetWidth();
713 fOriginY *= aBoundAfter2DTransform.
GetHeight();
715 fOriginX += aBoundAfter2DTransform.
Center().
X();
716 fOriginY += aBoundAfter2DTransform.
Center().
Y();
717 fOriginY = - fOriginY;
720 fOriginX -= aCenter.
X();
721 fOriginY -= -aCenter.
Y();
725 drawing::Position3D aViewPointDefault( 3472, -3472, 25000 );
726 drawing::Position3D aViewPoint( GetPosition3D( rGeometryItem,
"ViewPoint", aViewPointDefault, pMap ) );
727 fViewPointX = aViewPoint.PositionX + fOriginX;
728 fViewPointY = - aViewPoint.PositionY + fOriginY;
729 fViewPointZ = aViewPoint.PositionZ;
733 if (eProjectionMode == drawing::ProjectionMode_PARALLEL)
738 pScene->SetCamera( rCamera );
745 pScene->SetCamera( rCamera );
755 for (sal_uInt16
i = 0;
i < 4;
i++ )
759 for (sal_uInt16
i = 0;
i < 4;
i++ )
763 aPolygonBoundVolume.
transform(aNewTransform);
767 for (sal_uInt16
i = 0;
i < 8;
i++ )
771 if (eProjectionMode == drawing::ProjectionMode_PARALLEL)
773 a2DProjectionResult[
i].setX(aPoint3D.
getX());
774 a2DProjectionResult[
i].setY(aPoint3D.
getY());
779 if (
double fDiv = aPoint3D.
getZ() - fViewPointZ; fDiv != 0.0)
781 double f = (- fViewPointZ) / fDiv;
782 double fX = (aPoint3D.
getX() - fViewPointX) * f + fViewPointX;
783 double fY = (aPoint3D.
getY() - fViewPointY) * f + fViewPointY;;
784 a2DProjectionResult[
i].setX(
static_cast<sal_Int32
>(fX));
785 a2DProjectionResult[
i].setY(
static_cast<sal_Int32
>(fY));
790 for (sal_uInt16
i = 0;
i < 8;
i++ )
792 a2DProjectionResult[
i].setY(- a2DProjectionResult[
i].
Y());
797 pScene->SetLogicRect(a2DProjectionResult.
GetBoundRect());
803 GetBool(rGeometryItem,
"LightFace",
true);
807 drawing::Direction3D aFirstLightDirectionDefault(50000.0, 0.0, 10000.0);
808 drawing::Direction3D aFirstLightDirection(GetDirection3D( rGeometryItem,
"FirstLightDirection", aFirstLightDirectionDefault));
809 if (aFirstLightDirection.DirectionX == 0.0 && aFirstLightDirection.DirectionY == 0.0
810 && aFirstLightDirection.DirectionZ == 0.0)
811 aFirstLightDirection.DirectionZ = 1.0;
812 basegfx::B3DVector aLight1Vector(aFirstLightDirection.DirectionX, -aFirstLightDirection.DirectionY, aFirstLightDirection.DirectionZ);
815 drawing::Direction3D aSecondLightDirectionDefault(-50000.0, 0.0, 10000.0);
816 drawing::Direction3D aSecondLightDirection(GetDirection3D( rGeometryItem,
"SecondLightDirection", aSecondLightDirectionDefault));
817 if (aSecondLightDirection.DirectionX == 0.0 && aSecondLightDirection.DirectionY == 0.0
818 && aSecondLightDirection.DirectionZ == 0.0)
819 aSecondLightDirection.DirectionZ = 1.0;
820 basegfx::B3DVector aLight2Vector(aSecondLightDirection.DirectionX, -aSecondLightDirection.DirectionY, aSecondLightDirection.DirectionZ);
832 double fLight1Intensity = GetDouble(rGeometryItem,
"FirstLightLevel", 66) / 100.0;
834 bool bFirstLightHarsh = GetBool(rGeometryItem,
"FirstLightHarsh",
true);
836 double fLight2Intensity = GetDouble(rGeometryItem,
"SecondLightLevel", 66) / 100.0;
838 bool bSecondLightHarsh = GetBool(rGeometryItem,
"SecondLightHarsh",
true);
841 double fAmbientIntensity = GetDouble(rGeometryItem,
"Brightness", 33) / 100.0;
843 double fLight1IntensityForSpecular(fLight1Intensity);
844 if (!bFirstLightHarsh || !bSecondLightHarsh)
846 bool bNeedSoftLights(
false);
853 Color aHoriSoftLightColor;
854 Color aVertSoftLightColor;
856 if (!bSecondLightHarsh && fLight2Intensity > 0.0
857 && (bFirstLightHarsh || fLight1Intensity == 0.0))
860 bNeedSoftLights =
true;
861 double fLight2SoftIntensity = fLight2Intensity * 0.40;
863 aVertSoftLightColor = aHoriSoftLightColor;
864 fLight2Intensity *= 0.2;
866 lcl_SoftLightsDirection(aLight2Vector, aLight5Vector, aLight6Vector,
867 aLight7Vector, aLight8Vector);
869 else if (!bFirstLightHarsh && fLight1Intensity > 0.0
870 && (bSecondLightHarsh || fLight2Intensity == 0.0))
872 bNeedSoftLights =
true;
873 double fLight1SoftIntensity = fLight1Intensity * 0.40;
875 aVertSoftLightColor = aHoriSoftLightColor;
876 fLight1Intensity *= 0.2;
878 lcl_SoftLightsDirection(aLight1Vector, aLight5Vector, aLight6Vector,
879 aLight7Vector, aLight8Vector);
881 else if (!bFirstLightHarsh && fLight1Intensity > 0.0 && !bSecondLightHarsh
882 && fLight2Intensity > 0.0)
884 bNeedSoftLights =
true;
887 double fLight1SoftIntensity = fLight1Intensity * 0.8;
888 fLight1Intensity *= 0.4;
891 lcl_SoftLightsDirection(aLight1Vector, aDummy1, aDummy2, aLight7Vector,
894 double fLight2SoftIntensity = fLight2Intensity * 0.8;
896 fLight2Intensity *= 0.4;
897 lcl_SoftLightsDirection(aLight2Vector, aLight5Vector, aLight6Vector, aDummy1,
903 pScene->GetProperties().SetObjectItem(
905 pScene->GetProperties().SetObjectItem(
908 pScene->GetProperties().SetObjectItem(
910 pScene->GetProperties().SetObjectItem(
913 pScene->GetProperties().SetObjectItem(
915 pScene->GetProperties().SetObjectItem(
918 pScene->GetProperties().SetObjectItem(
920 pScene->GetProperties().SetObjectItem(
927 if (fLight1Intensity > 1.0)
929 fAmbientIntensity += (fLight1Intensity - 1.0) / 2.0;
958 double fDiffusion = GetDouble(rGeometryItem,
"Diffusion", 0.0) / 100.0;
968 bool bMetal = GetBool(rGeometryItem,
"Metal",
false);
969 sal_Int16 eMetalType(
970 GetMetalType(rGeometryItem, drawing::EnhancedCustomShapeMetalType::MetalODF));
971 bool bMetalMSCompatible
972 = eMetalType == drawing::EnhancedCustomShapeMetalType::MetalMSCompatible;
975 double fSpecularity = GetDouble(rGeometryItem,
"Specularity", 0) / 100.0;
977 if (bMetal && !bMetalMSCompatible)
979 fSpecularity *= 200.0 / 255.0;
983 double fShadingFactor = fLight1IntensityForSpecular * fSpecularity;
990 double fShininess = GetDouble(rGeometryItem,
"Shininess", 50) / 10.0;
991 fShininess = std::clamp<double>(pow(2, fShininess), 0.0, 100.0);
992 sal_uInt16 nIntensity =
static_cast<sal_uInt16
>(
basegfx::fround(fShininess));
993 if (bMetal && !bMetalMSCompatible)
996 nIntensity = std::clamp<sal_uInt16>(nIntensity, 0, 100);
1000 while (aSceneIter.
IsMore())
1008 const Color& rMatColor
1010 Color aOldMatColor(rMatColor);
1016 sal_uInt16 nSaturation;
1017 sal_uInt16 nBrightness;
1018 rMatColor.
RGBtoHSB(nHue, nSaturation, nBrightness);
1020 =
static_cast<sal_uInt16
>(
static_cast<double>(nBrightness) * fDiffusion);
1021 nBrightness = std::clamp<sal_uInt16>(nBrightness, 0, 100);
1027 if (bMetal && bMetalMSCompatible)
1030 sal_uInt16 nSaturation;
1031 sal_uInt16 nBrightness;
1032 aOldMatColor.
RGBtoHSB(nHue, nSaturation, nBrightness);
1033 nBrightness =
static_cast<sal_uInt16
>(
static_cast<double>(nBrightness)
1035 nBrightness = std::clamp<sal_uInt16>(nBrightness, 0, 100);
1058 pScene->RemoveObject( pTemp->GetOrdNum() );
bool Crop(const tools::Rectangle &rRectPixel)
const Size & GetSizePixel() const
void SetAutoAdjustProjection(bool bAdjust)
void SetFocalLength(double fLen)
void SetPosAndLookAt(const basegfx::B3DPoint &rNewPos, const basegfx::B3DPoint &rNewLookAt)
void SetViewWindow(double fX, double fY, double fW, double fH)
void RGBtoHSB(sal_uInt16 &nHue, sal_uInt16 &nSaturation, sal_uInt16 &nBrightness) const
static Color HSBtoRGB(sal_uInt16 nHue, sal_uInt16 nSaturation, sal_uInt16 nBrightness)
static rtl::Reference< SdrObject > Create3DObject(const SdrObject *pShape2d, const SdrObjCustomShape &rSdrObjCustomShape)
const Graphic & GetGraphic() const
BitmapEx GetBitmapEx(const GraphicConversionParameters &rParameters=GraphicConversionParameters()) const
constexpr tools::Long Y() const
constexpr tools::Long X() const
virtual const tools::Rectangle & GetSnapRect() const override
css::uno::Any * GetPropertyValueByName(const OUString &rPropName)
MapUnit GetScaleUnit() const
double GetObjectRotation() const
const SfxPoolItem & GetMergedItem(const sal_uInt16 nWhich) const
virtual sdr::properties::BaseProperties & GetProperties() const
rtl::Reference< SdrObject > ConvertToPolyObj(bool bBezier, bool bLineToArea) const
SdrModel & getSdrModelFromSdrObject() const
rtl::Reference< SdrObject > ConvertToContourObj(SdrObject *pRet, bool bForceLineDash=false) const
const SfxItemSet & GetMergedItemSet() const
virtual SdrLayerID GetLayer() const
const basegfx::B2DPolyPolygon & GetPathPoly() const
virtual Degree100 GetRotateAngle() const override
virtual const tools::Rectangle & GetLogicRect() const override
void SetParent(const SfxItemSet *pNew)
const SfxItemSet * GetParent() const
sal_uInt16 ClearItem(sal_uInt16 nWhich=0)
SfxItemState GetItemState(sal_uInt16 nWhich, bool bSrchInParent=true, const SfxPoolItem **ppItem=nullptr) const
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
constexpr tools::Long Height() const
constexpr tools::Long Width() const
void SetProjection(ProjectionType ePrj)
const Color & GetColorValue() const
const GraphicObject & GetGraphicObject() const
void rotate(double fRadiant)
void translate(double fX, double fY)
void scale(double fX, double fY)
void append(const B2DPolygon &rPolygon, sal_uInt32 nCount=1)
void transform(const basegfx::B2DHomMatrix &rMatrix)
B2DRange getB2DRange() const
bool areControlPointsUsed() const
void shearXY(double fSx, double fSy)
void rotate(double fAngleX, double fAngleY, double fAngleZ)
void translate(double fX, double fY, double fZ)
void scale(double fX, double fY, double fZ)
void append(const B3DPoint &rPoint, sal_uInt32 nCount=1)
B3DPoint const & getB3DPoint(sal_uInt32 nIndex) const
void transform(const B3DHomMatrix &rMatrix)
double getFullDotDashLen() const
double getEndWidth() const
double getStartWidth() const
bool isStartActive() const
const SfxPoolItem & GetItem(const sal_uInt16 nWhich) const
virtual void SetObjectItem(const SfxPoolItem &rItem)=0
#define DBG_ASSERT(sCon, aError)
B2DPolygon adaptiveSubdivideByAngle(const B2DPolygon &rCandidate, double fAngleBound)
B2DRange getRange(const B2DPolygon &rCandidate)
B2IRange fround(const B2DRange &rRange)
constexpr double deg2rad(double v)
attribute::SdrLineAttribute createNewSdrLineAttribute(const SfxItemSet &rSet)
attribute::SdrLineStartEndAttribute createNewSdrLineStartEndAttribute(const SfxItemSet &rSet, double fWidth)
constexpr Point convert(const Point &rPoint, o3tl::Length eFrom, o3tl::Length eTo)
constexpr TypedWhichId< SdrCustomShapeGeometryItem > SDRATTR_CUSTOMSHAPE_GEOMETRY(SDRATTR_CUSTOMSHAPE_FIRST+2)
constexpr TypedWhichId< SvxWritingModeItem > SDRATTR_TEXTDIRECTION(SDRATTR_NOTPERSIST_FIRST+34)
void RotatePoint(Point &rPnt, const Point &rRef, double sn, double cs)
SvxB3DVectorItem makeSvx3DLightDirection6Item(const basegfx::B3DVector &rVec)
SfxBoolItem makeSvx3DLightOnOff2Item(bool bVal)
SvxColorItem makeSvx3DLightcolor1Item(const Color &rCol)
SfxBoolItem makeSvx3DTwoSidedLightingItem(bool bVal)
SfxUInt16Item makeSvx3DMaterialSpecularIntensityItem(sal_uInt16 nVal)
SvxColorItem makeSvx3DLightcolor8Item(const Color &rCol)
SfxBoolItem makeSvx3DLightOnOff5Item(bool bVal)
SfxUInt16Item makeSvx3DPercentDiagonalItem(sal_uInt16 nVal)
SvxColorItem makeSvx3DLightcolor2Item(const Color &rCol)
SfxBoolItem makeSvx3DDoubleSidedItem(bool bVal)
SvxColorItem makeSvx3DLightcolor6Item(const Color &rCol)
SvxB3DVectorItem makeSvx3DLightDirection5Item(const basegfx::B3DVector &rVec)
SvxB3DVectorItem makeSvx3DLightDirection8Item(const basegfx::B3DVector &rVec)
SvxColorItem makeSvx3DLightcolor5Item(const Color &rCol)
SvxColorItem makeSvx3DMaterialSpecularItem(const Color &rCol)
SvxColorItem makeSvx3DAmbientcolorItem(const Color &rCol)
SfxBoolItem makeSvx3DLightOnOff7Item(bool bVal)
SvxB3DVectorItem makeSvx3DLightDirection4Item(const basegfx::B3DVector &rVec)
SfxBoolItem makeSvx3DLightOnOff1Item(bool bVal)
SvxColorItem makeSvx3DLightcolor4Item(const Color &rCol)
SvxB3DVectorItem makeSvx3DLightDirection1Item(const basegfx::B3DVector &rVec)
SfxBoolItem makeSvx3DLightOnOff4Item(bool bVal)
SfxBoolItem makeSvx3DLightOnOff8Item(bool bVal)
SvxB3DVectorItem makeSvx3DLightDirection2Item(const basegfx::B3DVector &rVec)
SfxBoolItem makeSvx3DLightOnOff6Item(bool bVal)
SvxB3DVectorItem makeSvx3DLightDirection7Item(const basegfx::B3DVector &rVec)
SvxColorItem makeSvx3DLightcolor7Item(const Color &rCol)
constexpr TypedWhichId< XFillColorItem > XATTR_FILLCOLOR(XATTR_FILL_FIRST+1)
constexpr TypedWhichId< XSecondaryFillColorItem > XATTR_SECONDARYFILLCOLOR(XATTR_FILL_FIRST+12)
constexpr TypedWhichId< XLineColorItem > XATTR_LINECOLOR(XATTR_LINE_FIRST+3)
constexpr TypedWhichId< XFillBmpTileItem > XATTR_FILLBMP_TILE(XATTR_FILL_FIRST+7)
constexpr TypedWhichId< XFillBitmapItem > XATTR_FILLBITMAP(XATTR_FILL_FIRST+4)
constexpr TypedWhichId< XLineStyleItem > XATTR_LINESTYLE(XATTR_LINE_FIRST)
constexpr TypedWhichId< XFillStyleItem > XATTR_FILLSTYLE(XATTR_FILL_FIRST)
constexpr TypedWhichId< XLineTransparenceItem > XATTR_LINETRANSPARENCE(XATTR_LINE_FIRST+10)