You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by al...@apache.org on 2012/06/18 18:00:14 UTC
svn commit: r1351396 [1/2] - in /incubator/ooo/branches/alg/aw080/main:
sd/source/ui/func/ sd/source/ui/inc/ svx/inc/svx/
svx/inc/svx/sdr/properties/ svx/source/customshapes/ svx/source/engine3d/
svx/source/sdr/contact/ svx/source/sdr/properties/ svx/s...
Author: alg
Date: Mon Jun 18 16:00:11 2012
New Revision: 1351396
URL: http://svn.apache.org/viewvc?rev=1351396&view=rev
Log:
aw080: SdrModel changes secured, some objects stabilized
Modified:
incubator/ooo/branches/alg/aw080/main/sd/source/ui/func/fuformatpaintbrush.cxx
incubator/ooo/branches/alg/aw080/main/sd/source/ui/func/futext.cxx
incubator/ooo/branches/alg/aw080/main/sd/source/ui/inc/fuformatpaintbrush.hxx
incubator/ooo/branches/alg/aw080/main/svx/inc/svx/fontworkgallery.hxx
incubator/ooo/branches/alg/aw080/main/svx/inc/svx/globl3d.hxx
incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/attributeproperties.hxx
incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/captionproperties.hxx
incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/connectorproperties.hxx
incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/customshapeproperties.hxx
incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/defaultproperties.hxx
incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/e3dproperties.hxx
incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/e3dsceneproperties.hxx
incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/emptyproperties.hxx
incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/graphicproperties.hxx
incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/groupproperties.hxx
incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/measureproperties.hxx
incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/properties.hxx
incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/rectangleproperties.hxx
incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/textproperties.hxx
incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdedxv.hxx
incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdoashp.hxx
incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdotable.hxx
incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdotext.hxx
incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdtext.hxx
incubator/ooo/branches/alg/aw080/main/svx/source/customshapes/EnhancedCustomShape2d.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/customshapes/EnhancedCustomShape3d.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/customshapes/EnhancedCustomShape3d.hxx
incubator/ooo/branches/alg/aw080/main/svx/source/customshapes/EnhancedCustomShapeEngine.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/customshapes/EnhancedCustomShapeFontWork.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/engine3d/view3d.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/sdr/contact/viewcontactofsdrcaptionobj.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/sdr/contact/viewcontactofsdrobjcustomshape.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/sdr/properties/attributeproperties.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/sdr/properties/captionproperties.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/sdr/properties/connectorproperties.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/sdr/properties/customshapeproperties.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/sdr/properties/defaultproperties.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/sdr/properties/e3dproperties.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/sdr/properties/e3dsceneproperties.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/sdr/properties/emptyproperties.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/sdr/properties/graphicproperties.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/sdr/properties/groupproperties.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/sdr/properties/measureproperties.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/sdr/properties/rectangleproperties.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/sdr/properties/textproperties.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/svdraw/sdrtexthelpers.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/svdraw/svdcrtv.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/svdraw/svdedtv2.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/svdraw/svdedxv.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/svdraw/svdlegacy.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/svdraw/svdoashp.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/svdraw/svdograf.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/svdraw/svdomeas.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/svdraw/svdotext.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/svdraw/svdotxat.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/svdraw/svdotxtr.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/svdraw/svdpage.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/svdraw/svdtext.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/svdraw/svdxcgv.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/table/cell.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/table/svdotable.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/tbxctrls/fontworkgallery.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/toolbars/fontworkbar.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/unodraw/unopage.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/unodraw/unoshap2.cxx
incubator/ooo/branches/alg/aw080/main/svx/source/unodraw/unoshape.cxx
incubator/ooo/branches/alg/aw080/main/sw/source/ui/uiview/viewdraw.cxx
incubator/ooo/branches/alg/aw080/main/xmloff/inc/xexptran.hxx
incubator/ooo/branches/alg/aw080/main/xmloff/source/draw/XMLImageMapContext.cxx
incubator/ooo/branches/alg/aw080/main/xmloff/source/draw/XMLImageMapExport.cxx
incubator/ooo/branches/alg/aw080/main/xmloff/source/draw/shapeexport2.cxx
incubator/ooo/branches/alg/aw080/main/xmloff/source/draw/xexptran.cxx
incubator/ooo/branches/alg/aw080/main/xmloff/source/draw/ximpshap.cxx
incubator/ooo/branches/alg/aw080/main/xmloff/source/text/XMLTextFrameContext.cxx
incubator/ooo/branches/alg/aw080/main/xmloff/source/text/txtparae.cxx
Modified: incubator/ooo/branches/alg/aw080/main/sd/source/ui/func/fuformatpaintbrush.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/sd/source/ui/func/fuformatpaintbrush.cxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/sd/source/ui/func/fuformatpaintbrush.cxx (original)
+++ incubator/ooo/branches/alg/aw080/main/sd/source/ui/func/fuformatpaintbrush.cxx Mon Jun 18 16:00:11 2012
@@ -175,7 +175,7 @@ bool FuFormatPaintBrush::MouseMove(const
const basegfx::B2DPoint aPnt(mpWindow->GetInverseViewTransformation() * basegfx::B2DPoint(rMEvt.GetPosPixel().X(), rMEvt.GetPosPixel().Y()));
bool bOverMarkableObject = mpView->PickObj( aPnt, fHitLog, pObj, SDRSEARCH_PICKMARKABLE);
- if(bOverMarkableObject && HasContentForThisType(pObj->GetObjInventor(),pObj->GetObjIdentifier()) )
+ if(bOverMarkableObject && pObj && HasContentForThisType(*pObj) )
mpWindow->SetPointer(Pointer(POINTER_FILL));
else
mpWindow->SetPointer(Pointer(POINTER_ARROW));
@@ -242,11 +242,11 @@ void FuFormatPaintBrush::Deactivate()
}
}
-bool FuFormatPaintBrush::HasContentForThisType( sal_uInt32 nObjectInventor, sal_uInt16 nObjectIdentifier ) const
+bool FuFormatPaintBrush::HasContentForThisType( const SdrObject& rSdrObject ) const
{
if( mpItemSet.get() == 0 )
return false;
- if( !mpView || (!mpView->SupportsFormatPaintbrush( nObjectInventor, nObjectIdentifier) ) )
+ if( !mpView || (!mpView->SupportsFormatPaintbrush( rSdrObject ) ) )
return false;
return true;
}
@@ -282,7 +282,7 @@ void FuFormatPaintBrush::Paste( bool bNo
if( pSelected )
{
- if( rDrawViewShell.GetDrawView()->SupportsFormatPaintbrush(pSelected->GetObjInventor(), pSelected->GetObjIdentifier()) )
+ if( rDrawViewShell.GetDrawView()->SupportsFormatPaintbrush(*pSelected) )
return;
}
Modified: incubator/ooo/branches/alg/aw080/main/sd/source/ui/func/futext.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/sd/source/ui/func/futext.cxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/sd/source/ui/func/futext.cxx (original)
+++ incubator/ooo/branches/alg/aw080/main/sd/source/ui/func/futext.cxx Mon Jun 18 16:00:11 2012
@@ -817,11 +817,6 @@ bool FuText::MouseButtonUp(const MouseEv
mxTextObj.reset( dynamic_cast< SdrTextObj* >( mpView->GetCreateObj() ) );
- if(mxTextObj.is())
- {
- GetTextObj()->SetDisableAutoWidthOnDragging(true);
- }
-
if(!mpView->EndCreateObj(SDRCREATE_FORCEEND))
{
mxTextObj.reset(0);
Modified: incubator/ooo/branches/alg/aw080/main/sd/source/ui/inc/fuformatpaintbrush.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/sd/source/ui/inc/fuformatpaintbrush.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/sd/source/ui/inc/fuformatpaintbrush.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/sd/source/ui/inc/fuformatpaintbrush.hxx Mon Jun 18 16:00:11 2012
@@ -55,7 +55,7 @@ private:
void DoExecute( SfxRequest& rReq );
- bool HasContentForThisType( sal_uInt32 nObjectInventor, sal_uInt16 nObjectIdentifier ) const;
+ bool HasContentForThisType(const SdrObject& rSdrObject) const;
void Paste( bool, bool );
void implcancel();
Modified: incubator/ooo/branches/alg/aw080/main/svx/inc/svx/fontworkgallery.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/inc/svx/fontworkgallery.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/inc/svx/fontworkgallery.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/inc/svx/fontworkgallery.hxx Mon Jun 18 16:00:11 2012
@@ -99,13 +99,12 @@ class SVX_DLLPUBLIC FontWorkGalleryDialo
FmFormModel& mrModel;
String maStrClickToAddText;
+ SdrObject** mppSdrObject;
DECL_LINK( DoubleClickFavoriteHdl, void * );
DECL_LINK( ClickOKHdl, void * );
DECL_LINK( ClickTextDirectionHdl, ImageButton * );
- SdrObject** mppSdrObject;
- SdrModel* mpDestModel;
void initfavorites(sal_uInt16 nThemeId, std::vector< Bitmap * >& rFavorites);
void insertSelectedFontwork();
@@ -115,11 +114,11 @@ class SVX_DLLPUBLIC FontWorkGalleryDialo
std::vector< Bitmap * > maFavoritesHorizontal;
public:
- FontWorkGalleryDialog( SdrView& rView, Window* pParent, sal_uInt16 nSID );
+ // if ppSdrObject is given the object is not inserted to the current page of the given view, but
+ // set at that pointer for further usage (ownership change). The SDrObject is always created
+ // for the SdrModel of the given SDrView.
+ FontWorkGalleryDialog( SdrView& rView, Window* pParent, SdrObject** ppSdrObject = 0 );
~FontWorkGalleryDialog();
-
- // SJ: if the SdrObject** is set, the SdrObject is not inserted into the page when executing the dialog
- void SetSdrObjectRef( SdrObject**, SdrModel* pModel );
};
}
Modified: incubator/ooo/branches/alg/aw080/main/svx/inc/svx/globl3d.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/inc/svx/globl3d.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/inc/svx/globl3d.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/inc/svx/globl3d.hxx Mon Jun 18 16:00:11 2012
@@ -37,12 +37,10 @@ const sal_uInt32 E3dInventor = sal_uInt3
sal_uInt32('1')*0x01000000;
const sal_uInt16 E3D_SCENE_ID = 1;
-const sal_uInt16 E3D_OBJECT_ID = 2; // TTTT should not be used, it's only a helper class for E3DScene and E3DCompoundObject
-const sal_uInt16 E3D_CUBEOBJ_ID = 3;
-const sal_uInt16 E3D_SPHEREOBJ_ID = 4;
-const sal_uInt16 E3D_EXTRUDEOBJ_ID = 5;
-const sal_uInt16 E3D_LATHEOBJ_ID = 6;
-const sal_uInt16 E3D_COMPOUNDOBJ_ID = 7; // TTTT should not be used, is a base class only
-const sal_uInt16 E3D_POLYGONOBJ_ID = 8;
+const sal_uInt16 E3D_CUBEOBJ_ID = 2;
+const sal_uInt16 E3D_SPHEREOBJ_ID = 3;
+const sal_uInt16 E3D_EXTRUDEOBJ_ID = 4;
+const sal_uInt16 E3D_LATHEOBJ_ID = 5;
+const sal_uInt16 E3D_POLYGONOBJ_ID = 6;
#endif // _E3D_GLOBL3D_HXX
Modified: incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/attributeproperties.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/attributeproperties.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/attributeproperties.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/attributeproperties.hxx Mon Jun 18 16:00:11 2012
@@ -36,16 +36,20 @@ namespace sdr
{
class SVX_DLLPUBLIC AttributeProperties : public DefaultProperties, public SfxListener
{
+ private:
// add style sheet, do all the necessary handling
- void ImpAddStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr);
+ void ImpAddStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr);
// remove StyleSheet, do all the necessary handling
void ImpRemoveStyleSheet();
- protected:
+ // do needed changes when cloning to a new model
+ void ImpModelChange(SdrModel& rSourceModel, SdrModel& rTargetModel);
+
// the SytleSheet of this object
SfxStyleSheet* mpStyleSheet;
+ protected:
// create a new itemset
virtual SfxItemSet& CreateObjectSpecificItemSet(SfxItemPool& pPool);
@@ -69,7 +73,7 @@ namespace sdr
virtual ~AttributeProperties();
// set a new StyleSheet and broadcast
- virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr);
+ virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr);
// get the installed StyleSheet
virtual SfxStyleSheet* GetStyleSheet() const;
Modified: incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/captionproperties.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/captionproperties.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/captionproperties.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/captionproperties.hxx Mon Jun 18 16:00:11 2012
@@ -55,7 +55,7 @@ namespace sdr
virtual BaseProperties& Clone(SdrObject& rObj) const;
// set a new StyleSheet and broadcast
- virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr);
+ virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr);
// force default attributes for a specific object type, called from
// DefaultProperties::GetObjectItemSet() if a new ItemSet is created
Modified: incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/connectorproperties.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/connectorproperties.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/connectorproperties.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/connectorproperties.hxx Mon Jun 18 16:00:11 2012
@@ -55,7 +55,7 @@ namespace sdr
virtual BaseProperties& Clone(SdrObject& rObj) const;
// set a new StyleSheet and broadcast
- virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr);
+ virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr);
};
} // end of namespace properties
} // end of namespace sdr
Modified: incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/customshapeproperties.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/customshapeproperties.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/customshapeproperties.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/customshapeproperties.hxx Mon Jun 18 16:00:11 2012
@@ -59,7 +59,7 @@ namespace sdr
public:
// set a new StyleSheet and broadcast
- virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr);
+ virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr);
// force default attributes for a specific object type, called from
// DefaultProperties::GetObjectItemSet() if a new ItemSet is created
Modified: incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/defaultproperties.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/defaultproperties.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/defaultproperties.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/defaultproperties.hxx Mon Jun 18 16:00:11 2012
@@ -35,6 +35,7 @@ namespace sdr
{
class SVX_DLLPUBLIC DefaultProperties : public BaseProperties
{
+ private:
protected:
// the to be used ItemSet
SfxItemSet* mpItemSet;
@@ -87,7 +88,7 @@ namespace sdr
virtual void SetObjectItemSet(const SfxItemSet& rSet);
// set a new StyleSheet and broadcast
- virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr);
+ virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr);
// get the installed StyleSheet
virtual SfxStyleSheet* GetStyleSheet() const;
Modified: incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/e3dproperties.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/e3dproperties.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/e3dproperties.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/e3dproperties.hxx Mon Jun 18 16:00:11 2012
@@ -56,7 +56,7 @@ namespace sdr
virtual BaseProperties& Clone(SdrObject& rObj) const;
// set a new StyleSheet and broadcast
- virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr);
+ virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr);
};
} // end of namespace properties
} // end of namespace sdr
Modified: incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/e3dsceneproperties.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/e3dsceneproperties.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/e3dsceneproperties.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/e3dsceneproperties.hxx Mon Jun 18 16:00:11 2012
@@ -71,7 +71,7 @@ namespace sdr
virtual void ClearMergedItem(const sal_uInt16 nWhich = 0);
// set a new StyleSheet and broadcast
- virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr);
+ virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr);
// get the installed StyleSheet
virtual SfxStyleSheet* GetStyleSheet() const;
Modified: incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/emptyproperties.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/emptyproperties.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/emptyproperties.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/emptyproperties.hxx Mon Jun 18 16:00:11 2012
@@ -87,7 +87,7 @@ namespace sdr
virtual void SetObjectItemSet(const SfxItemSet& rSet);
// set a new StyleSheet and broadcast
- virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr);
+ virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr);
// get the installed StyleSheet
virtual SfxStyleSheet* GetStyleSheet() const;
Modified: incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/graphicproperties.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/graphicproperties.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/graphicproperties.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/graphicproperties.hxx Mon Jun 18 16:00:11 2012
@@ -55,7 +55,7 @@ namespace sdr
virtual BaseProperties& Clone(SdrObject& rObj) const;
// set a new StyleSheet and broadcast
- virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr);
+ virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr);
// force default attributes for a specific object type, called from
// DefaultProperties::GetObjectItemSet() if a new ItemSet is created
Modified: incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/groupproperties.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/groupproperties.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/groupproperties.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/groupproperties.hxx Mon Jun 18 16:00:11 2012
@@ -99,7 +99,7 @@ namespace sdr
virtual void SetObjectItemSet(const SfxItemSet& rSet);
// set a new StyleSheet
- virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr);
+ virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr);
// get the local StyleSheet
virtual SfxStyleSheet* GetStyleSheet() const;
Modified: incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/measureproperties.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/measureproperties.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/measureproperties.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/measureproperties.hxx Mon Jun 18 16:00:11 2012
@@ -55,7 +55,7 @@ namespace sdr
virtual BaseProperties& Clone(SdrObject& rObj) const;
// set a new StyleSheet and broadcast
- virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr);
+ virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr);
// force default attributes for a specific object type, called from
// DefaultProperties::GetObjectItemSet() if a new ItemSet is created
Modified: incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/properties.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/properties.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/properties.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/properties.hxx Mon Jun 18 16:00:11 2012
@@ -143,7 +143,7 @@ namespace sdr
// Set a new StyleSheet. Registers as listener at the StyleSheet to get knowledge
// of StyleSheet changes.
- virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr) = 0;
+ virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr) = 0;
// Get the installed StyleSheet.
virtual SfxStyleSheet* GetStyleSheet() const = 0;
Modified: incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/rectangleproperties.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/rectangleproperties.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/rectangleproperties.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/rectangleproperties.hxx Mon Jun 18 16:00:11 2012
@@ -53,7 +53,7 @@ namespace sdr
virtual BaseProperties& Clone(SdrObject& rObj) const;
// set a new StyleSheet and broadcast
- virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr);
+ virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr);
};
} // end of namespace properties
} // end of namespace sdr
Modified: incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/textproperties.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/textproperties.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/textproperties.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/inc/svx/sdr/properties/textproperties.hxx Mon Jun 18 16:00:11 2012
@@ -63,7 +63,7 @@ namespace sdr
virtual BaseProperties& Clone(SdrObject& rObj) const;
// set a new StyleSheet and broadcast
- virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, sal_Bool bDontRemoveHardAttr);
+ virtual void SetStyleSheet(SfxStyleSheet* pNewStyleSheet, bool bDontRemoveHardAttr);
// force default attributes for a specific object type, called from
// DefaultProperties::GetObjectItemSet() if a new ItemSet is created
Modified: incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdedxv.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdedxv.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdedxv.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdedxv.hxx Mon Jun 18 16:00:11 2012
@@ -76,6 +76,10 @@ protected:
basegfx::B2DPoint maMacroDownPos;
sal_uInt16 mnMacroTol;
+ /// prepared undos for text edit
+ SdrUndoAction* mpUndoGeoObject;
+ SdrUndoAction* mpUndoAttrObject;
+
/// bitfield
bool mbTextEditDontDelete : 1; // Outliner und View bei SdrEndTextEdit nicht deleten (f. Rechtschreibpruefung)
bool mbTextEditOnlyOneView : 1; // Nur eine OutlinerView (f. Rechtschreibpruefung)
@@ -247,8 +251,8 @@ public:
rtl::Reference< sdr::SelectionController > getSelectionController() const { return mxSelectionController; }
- /** returns true if the shape identified by its inventor and identifier supports format paint brush operation */
- virtual bool SupportsFormatPaintbrush( sal_uInt32 nObjectInventor, sal_uInt16 nObjectIdentifier ) const;
+ /** returns true if the shape supports format paint brush operation */
+ virtual bool SupportsFormatPaintbrush(const SdrObject& rSdrObject) const;
/** returns a format paint brush set from the current selection */
virtual bool TakeFormatPaintBrush( boost::shared_ptr< SfxItemSet >& rFormatSet );
Modified: incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdoashp.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdoashp.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdoashp.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdoashp.hxx Mon Jun 18 16:00:11 2012
@@ -182,7 +182,7 @@ public:
virtual bool MovCreate(SdrDragStat& rStat); // #i37448#
virtual bool EndCreate(SdrDragStat& rStat, SdrCreateCmd eCmd);
- virtual bool AdjustTextFrameWidthAndHeight(basegfx::B2DRange& o_rRange, bool bHgt = true, bool bWdt = true) const;
+ virtual basegfx::B2DRange AdjustTextFrameWidthAndHeight(const basegfx::B2DRange& rRange, bool bHgt = true, bool bWdt = true) const;
virtual bool AdjustTextFrameWidthAndHeight(bool bHgt = true, bool bWdt = true);
virtual bool IsAutoGrowHeight() const;
virtual bool IsAutoGrowWidth() const;
Modified: incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdotable.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdotable.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdotable.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdotable.hxx Mon Jun 18 16:00:11 2012
@@ -225,7 +225,7 @@ public:
virtual sal_uInt16 GetObjIdentifier() const;
virtual void SetChanged();
- virtual bool AdjustTextFrameWidthAndHeight(basegfx::B2DRange& o_rRange, bool bHgt = true, bool bWdt = true) const;
+ virtual basegfx::B2DRange AdjustTextFrameWidthAndHeight(const basegfx::B2DRange& rRange, bool bHgt = true, bool bWdt = true) const;
virtual bool AdjustTextFrameWidthAndHeight(bool bHgt = true, bool bWdt = true);
virtual void TakeObjNameSingul(String& rName) const;
virtual void TakeObjNamePlural(String& rName) const;
Modified: incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdotext.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdotext.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdotext.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdotext.hxx Mon Jun 18 16:00:11 2012
@@ -294,7 +294,7 @@ protected:
virtual void copyDataFromSdrObject(const SdrObject& rSource);
// helper for AdjustTextFrameWidthAndHeight which contains the common parts to avoid useless code copying
- bool ImpAdjustTextFrameWidthAndHeight(basegfx::B2DRange& o_rRange, bool bHgt, bool bWdt, bool bCheckAnimation) const;
+ basegfx::B2DRange ImpAdjustTextFrameWidthAndHeight(const basegfx::B2DRange& rRange, bool bHgt, bool bWdt, bool bCheckAnimation) const;
public:
/// create a copy, evtl. with a different target model (if given)
@@ -322,7 +322,7 @@ public:
bool ReloadLinkedText(bool bForceLoad=false);
bool LoadText(const String& rFileName, const String& rFilterName, rtl_TextEncoding eCharSet);
- virtual bool AdjustTextFrameWidthAndHeight(basegfx::B2DRange& o_rRange, bool bHgt = true, bool bWdt = true) const;
+ virtual basegfx::B2DRange AdjustTextFrameWidthAndHeight(const basegfx::B2DRange& rRange, bool bHgt = true, bool bWdt = true) const;
virtual bool AdjustTextFrameWidthAndHeight(bool bHgt = true, bool bWdt = true);
void ResizeTextAttributes(const Fraction& xFact, const Fraction& yFact);
bool IsTextFrame() const { return bTextFrame; }
Modified: incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdtext.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdtext.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdtext.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/inc/svx/svdtext.hxx Mon Jun 18 16:00:11 2012
@@ -64,6 +64,9 @@ public:
/** returns the current OutlinerParaObject and removes it from this instance */
OutlinerParaObject* RemoveOutlinerParaObject();
+ // support model change, e.g. when text object is cloned to a new SdrModel
+ void ImpModelChange(SdrModel& rSourceModel, SdrModel& rTargetModel);
+
protected:
virtual const SfxItemSet& GetObjectItemSet();
virtual void SetObjectItem(const SfxPoolItem& rItem);
Modified: incubator/ooo/branches/alg/aw080/main/svx/source/customshapes/EnhancedCustomShape2d.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/source/customshapes/EnhancedCustomShape2d.cxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/source/customshapes/EnhancedCustomShape2d.cxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/source/customshapes/EnhancedCustomShape2d.cxx Mon Jun 18 16:00:11 2012
@@ -1144,7 +1144,7 @@ basegfx::B2DRange EnhancedCustomShape2d:
// To keep tight to the original, ignore rotate and shear. If this
// is not wanted, just use getSdrObjectTransformation() instead
- aTransform.scale(pCustomShapeObj->getSdrObjectScale());
+ aTransform.scale(basegfx::absolute(pCustomShapeObj->getSdrObjectScale()));
aTransform.translate(pCustomShapeObj->getSdrObjectTranslate());
aRetval *= aTransform;
@@ -2072,7 +2072,7 @@ SdrObject* EnhancedCustomShape2d::Create
else
{
vTempList.push_back(pObj);
- }
+ }
}
vObjectList = vTempList;
Modified: incubator/ooo/branches/alg/aw080/main/svx/source/customshapes/EnhancedCustomShape3d.cxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/source/customshapes/EnhancedCustomShape3d.cxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/source/customshapes/EnhancedCustomShape3d.cxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/source/customshapes/EnhancedCustomShape3d.cxx Mon Jun 18 16:00:11 2012
@@ -19,8 +19,6 @@
*
*************************************************************/
-
-
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svx.hxx"
#include "EnhancedCustomShape3d.hxx"
@@ -58,6 +56,7 @@
#include <svx/svdlegacy.hxx>
#include <svx/svdtrans.hxx>
#include <svx/scene3d.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
#define ITEMVALUE(ItemSet,Id,Cast) ((const Cast&)(ItemSet).Get(Id)).GetValue()
using namespace com::sun::star;
@@ -104,7 +103,7 @@ void GetSkew( SdrCustomShapeGeometryItem
rSkewAngle *= F_PI180;
}
-void GetExtrusionDepth( SdrCustomShapeGeometryItem& rItem, const double* pMap, double& rBackwardDepth, double& rForwardDepth )
+void GetExtrusionDepth( SdrCustomShapeGeometryItem& rItem, const double fMap, double& rBackwardDepth, double& rForwardDepth )
{
::com::sun::star::drawing::EnhancedCustomShapeParameterPair aDepthParaPair;
double fDepth = 0, fFraction = 0;
@@ -120,22 +119,20 @@ void GetExtrusionDepth( SdrCustomShapeGe
rBackwardDepth = 1270;
rForwardDepth = 0;
}
- if ( pMap )
- {
- double fMap = *pMap;
- rBackwardDepth *= fMap;
- rForwardDepth *= fMap;
- }
+
+ rBackwardDepth *= fMap;
+ rForwardDepth *= fMap;
}
-double GetDouble( SdrCustomShapeGeometryItem& rItem, const rtl::OUString& rPropertyName, double fDefault, const double* pMap )
+double GetDouble( SdrCustomShapeGeometryItem& rItem, const rtl::OUString& rPropertyName, double fDefault, const double fMap )
{
double fRetValue = fDefault;
Any* pAny = rItem.GetPropertyValueByName( sExtrusion, rPropertyName );
if ( pAny )
*pAny >>= fRetValue;
- if ( pMap )
- fRetValue *= *pMap;
+
+ fRetValue *= fMap;
+
return fRetValue;
}
@@ -177,19 +174,18 @@ awt::Point GetPoint( SdrCustomShapeGeome
}
drawing::Position3D GetPosition3D( SdrCustomShapeGeometryItem& rItem, const rtl::OUString& rPropertyName,
- const drawing::Position3D& rDefault, const double* pMap )
+ const drawing::Position3D& rDefault, const double fMap )
{
drawing::Position3D aRetValue( rDefault );
const Any* pAny = rItem.GetPropertyValueByName( sExtrusion, rPropertyName );
if ( pAny )
*pAny >>= aRetValue;
- if ( pMap )
- {
- aRetValue.PositionX *= *pMap;
- aRetValue.PositionY *= *pMap;
- aRetValue.PositionZ *= *pMap;
- }
- return aRetValue;
+
+ aRetValue.PositionX *= fMap;
+ aRetValue.PositionY *= fMap;
+ aRetValue.PositionZ *= fMap;
+
+ return aRetValue;
}
drawing::Direction3D GetDirection3D( SdrCustomShapeGeometryItem& rItem, const rtl::OUString& rPropertyName, const drawing::Direction3D& rDefault )
@@ -201,198 +197,211 @@ drawing::Direction3D GetDirection3D( Sdr
return aRetValue;
}
-EnhancedCustomShape3d::Transformation2D::Transformation2D( const SdrObject* pCustomShape, const Rectangle& /*rBoundRect*/, const double *pM )
-: aCenter( sdr::legacy::GetSnapRect(*pCustomShape).Center() )
-, eProjectionMode( drawing::ProjectionMode_PARALLEL )
-, pMap( pM )
-{
- SdrCustomShapeGeometryItem& rGeometryItem = (SdrCustomShapeGeometryItem&)pCustomShape->GetMergedItem( SDRATTR_CUSTOMSHAPE_GEOMETRY );
- const rtl::OUString sProjectionMode( RTL_CONSTASCII_USTRINGPARAM ( "ProjectionMode" ) );
- Any* pAny = rGeometryItem.GetPropertyValueByName( sExtrusion, sProjectionMode );
- if ( pAny )
- *pAny >>= eProjectionMode;
-
- if ( eProjectionMode == drawing::ProjectionMode_PARALLEL )
- GetSkew( rGeometryItem, fSkew, fSkewAngle );
+EnhancedCustomShape3d::Transformation2D::Transformation2D(const SdrObjCustomShape& rCustomShape, const double fM)
+: maCenter()
+, meProjectionMode(drawing::ProjectionMode_PARALLEL)
+, mfMap(fM)
+{
+ SdrCustomShapeGeometryItem& rGeometryItem = (SdrCustomShapeGeometryItem&)rCustomShape.GetMergedItem(SDRATTR_CUSTOMSHAPE_GEOMETRY);
+ const rtl::OUString sProjectionMode(RTL_CONSTASCII_USTRINGPARAM("ProjectionMode"));
+ Any* pAny = rGeometryItem.GetPropertyValueByName(sExtrusion, sProjectionMode);
+ maCenter = rCustomShape.getSdrObjectTransformation() * basegfx::B2DPoint(0.5, 0.5);
+
+ if(pAny)
+ {
+ *pAny >>= meProjectionMode;
+ }
+
+ if(drawing::ProjectionMode_PARALLEL == meProjectionMode)
+ {
+ GetSkew(rGeometryItem, mfSkew, mfSkewAngle);
+ }
else
{
- fZScreen = 0.0;
- GetOrigin( rGeometryItem, fOriginX, fOriginY );
- const Rectangle aLogicRect(sdr::legacy::GetLogicRect(*pCustomShape));
- fOriginX = fOriginX * aLogicRect.GetWidth();
- fOriginY = fOriginY * aLogicRect.GetHeight();
-
- const rtl::OUString sViewPoint( RTL_CONSTASCII_USTRINGPARAM ( "ViewPoint" ) );
- drawing::Position3D aViewPointDefault( 3472, -3472, 25000 );
- drawing::Position3D aViewPoint( GetPosition3D( rGeometryItem, sViewPoint, aViewPointDefault, pMap ) );
- fViewPoint.setX(aViewPoint.PositionX);
- fViewPoint.setY(aViewPoint.PositionY);
- fViewPoint.setZ(-aViewPoint.PositionZ);
+ const basegfx::B2DVector& rScale = rCustomShape.getSdrObjectScale();
+ const rtl::OUString sViewPoint(RTL_CONSTASCII_USTRINGPARAM("ViewPoint"));
+
+ mfZScreen = 0.0;
+ GetOrigin(rGeometryItem, mfOriginX, mfOriginY);
+ mfOriginX *= fabs(rScale.getX());
+ mfOriginY *= fabs(rScale.getY());
+ drawing::Position3D aViewPointDefault(3472, -3472, 25000);
+ drawing::Position3D aViewPoint(GetPosition3D(rGeometryItem, sViewPoint, aViewPointDefault, mfMap));
+ mfViewPoint.setX(aViewPoint.PositionX);
+ mfViewPoint.setY(aViewPoint.PositionY);
+ mfViewPoint.setZ(-aViewPoint.PositionZ);
}
}
-basegfx::B3DPolygon EnhancedCustomShape3d::Transformation2D::ApplySkewSettings( const basegfx::B3DPolygon& rPoly3D ) const
+basegfx::B3DPolygon EnhancedCustomShape3d::Transformation2D::ApplySkewSettings(const basegfx::B3DPolygon& rPoly3D) const
{
basegfx::B3DPolygon aRetval;
-
sal_uInt32 j;
- for ( j = 0L; j < rPoly3D.count(); j++ )
+
+ for(j = 0; j < rPoly3D.count(); j++)
{
const basegfx::B3DPoint aPoint(rPoly3D.getB3DPoint(j));
- double fDepth(-( aPoint.getZ() * fSkew ) / 100.0);
- aRetval.append(basegfx::B3DPoint(
- aPoint.getX() + (fDepth * cos( fSkewAngle )),
- aPoint.getY() - (fDepth * sin( fSkewAngle )),
- aPoint.getZ()));
+ double fDepth(-(aPoint.getZ() * mfSkew) / 100.0);
+
+ aRetval.append(
+ basegfx::B3DPoint(
+ aPoint.getX() + (fDepth * cos(mfSkewAngle)),
+ aPoint.getY() - (fDepth * sin(mfSkewAngle)),
+ aPoint.getZ()));
}
return aRetval;
}
-Point EnhancedCustomShape3d::Transformation2D::Transform2D( const basegfx::B3DPoint& rPoint3D ) const
+basegfx::B2DPoint EnhancedCustomShape3d::Transformation2D::Transform2D(const basegfx::B3DPoint& rPoint3D) const
{
- Point aPoint2D;
- if ( eProjectionMode == drawing::ProjectionMode_PARALLEL )
+ basegfx::B2DPoint aPoint2D;
+
+ if(drawing::ProjectionMode_PARALLEL == meProjectionMode)
{
- aPoint2D.X() = (sal_Int32)rPoint3D.getX();
- aPoint2D.Y() = (sal_Int32)rPoint3D.getY();
+ aPoint2D.setX(rPoint3D.getX());
+ aPoint2D.setY(rPoint3D.getY());
}
else
{
- double fX = rPoint3D.getX() - fOriginX;
- double fY = rPoint3D.getY() - fOriginY;
- double f = ( fZScreen - fViewPoint.getZ() ) / ( rPoint3D.getZ() - fViewPoint.getZ() );
- aPoint2D.X() = (sal_Int32)(( fX - fViewPoint.getX() ) * f + fViewPoint.getX() + fOriginX );
- aPoint2D.Y() = (sal_Int32)(( fY - fViewPoint.getY() ) * f + fViewPoint.getY() + fOriginY );
+ const double fX(rPoint3D.getX() - mfOriginX);
+ const double fY(rPoint3D.getY() - mfOriginY);
+ const double f((mfZScreen - mfViewPoint.getZ()) / (rPoint3D.getZ() - mfViewPoint.getZ()));
+
+ aPoint2D.setX((fX - mfViewPoint.getX()) * f + mfViewPoint.getX() + mfOriginX);
+ aPoint2D.setY((fY - mfViewPoint.getY()) * f + mfViewPoint.getY() + mfOriginY);
}
- aPoint2D.Move( aCenter.X(), aCenter.Y() );
- return aPoint2D;
+
+ aPoint2D += maCenter;
+
+ return aPoint2D;
}
-sal_Bool EnhancedCustomShape3d::Transformation2D::IsParallel() const
+bool EnhancedCustomShape3d::Transformation2D::IsParallel() const
{
- return eProjectionMode == com::sun::star::drawing::ProjectionMode_PARALLEL;
+ return meProjectionMode == com::sun::star::drawing::ProjectionMode_PARALLEL;
}
-SdrObject* EnhancedCustomShape3d::Create3DObject( const SdrObject* pShape2d, const SdrObject* pCustomShape )
+SdrObject* EnhancedCustomShape3d::Create3DObject(const SdrObject& rShape2d, const SdrObjCustomShape& rCustomShape)
{
- SdrObject* pRet = NULL;
- SdrCustomShapeGeometryItem& rGeometryItem = (SdrCustomShapeGeometryItem&)pCustomShape->GetMergedItem( SDRATTR_CUSTOMSHAPE_GEOMETRY );
-
- double fMap = 1.0, *pMap = NULL;
- Fraction aFraction( pCustomShape->getSdrModelFromSdrObject().GetExchangeObjectScale() );
- if ( ( aFraction.GetNumerator() ) != 1 || ( aFraction.GetDenominator() != 1 ) )
- {
- fMap *= aFraction.GetNumerator();
- fMap /= aFraction.GetDenominator();
- pMap = &fMap;
- }
- if ( pCustomShape->getSdrModelFromSdrObject().GetExchangeObjectUnit() != MAP_100TH_MM )
- {
- DBG_ASSERT( pCustomShape->getSdrModelFromSdrObject().GetExchangeObjectUnit() == MAP_TWIP, "EnhancedCustomShape3d::Current MapMode is Unsupported" );
- fMap *= 1440.0 / 2540.0;
- pMap = &fMap;
- }
- if ( GetBool( rGeometryItem, sExtrusion, sal_False ) )
+ SdrObject* pRet = 0;
+ SdrCustomShapeGeometryItem& rGeometryItem = (SdrCustomShapeGeometryItem&)rCustomShape.GetMergedItem(SDRATTR_CUSTOMSHAPE_GEOMETRY);
+ double fMap(1.0);
+ const double fFraction(rCustomShape.getSdrModelFromSdrObject().GetExchangeObjectScale());
+
+ if(!basegfx::fTools::equal(fFraction, 1.0))
{
- sal_Bool bIsMirroredX = ((SdrObjCustomShape*)pCustomShape)->IsMirroredX();
- sal_Bool bIsMirroredY = ((SdrObjCustomShape*)pCustomShape)->IsMirroredY();
- Rectangle aSnapRect( sdr::legacy::GetLogicRect(*pCustomShape) );
- long nObjectRotation(sdr::legacy::GetRotateAngle(*pCustomShape));
- if ( nObjectRotation )
- {
- double a = ( 36000 - nObjectRotation ) * nPi180;
- long dx = aSnapRect.Right() - aSnapRect.Left();
- long dy = aSnapRect.Bottom()- aSnapRect.Top();
- Point aP( aSnapRect.TopLeft() );
- RotatePoint( aP, sdr::legacy::GetSnapRect(*pCustomShape).Center(), sin( a ), cos( a ) );
- aSnapRect.Left() = aP.X();
- aSnapRect.Top() = aP.Y();
- aSnapRect.Right() = aSnapRect.Left() + dx;
- aSnapRect.Bottom() = aSnapRect.Top() + dy;
- }
- Point aCenter( aSnapRect.Center() );
+ fMap *= fFraction;
+ }
+
+ if(MAP_100TH_MM != rCustomShape.getSdrModelFromSdrObject().GetExchangeObjectUnit())
+ {
+ DBG_ASSERT(MAP_TWIP == rCustomShape.getSdrModelFromSdrObject().GetExchangeObjectUnit(),
+ "EnhancedCustomShape3d::Current MapMode is Unsupported");
+ fMap *= 1440.0 / 2540.0;
+ }
- SfxItemSet aSet( pCustomShape->GetMergedItemSet() );
+ if(GetBool(rGeometryItem, sExtrusion, false))
+ {
+ const bool bIsMirroredX(rCustomShape.IsMirroredX());
+ const bool bIsMirroredY(rCustomShape.IsMirroredY());
+ basegfx::B2DRange aSnapRange(basegfx::B2DRange::getUnitB2DRange());
+ SfxItemSet aSet(rCustomShape.GetMergedItemSet());
+ std::vector< E3dCompoundObject* > aPlaceholderObjectList;
+ double fExtrusionBackward(0.0), fExtrusionForward(0.0);
+
+ // take transformation into account, including rotation and shear
+ aSnapRange.transform(rCustomShape.getSdrObjectTransformation());
//SJ: vertical writing is not required, by removing this item no outliner is created
- aSet.ClearItem( SDRATTR_TEXTDIRECTION );
+ aSet.ClearItem(SDRATTR_TEXTDIRECTION);
// #i105323# For 3D AutoShapes, the shadow attribute has to be applied to each
// created visualisation helper model shape individually. The shadow itself
// will then be rendered from the 3D renderer correctly for the whole 3D scene
// (and thus behind all objects of which the visualisation may be built). So,
- // dio NOT remove it from the ItemSet here.
+ // do NOT remove it from the ItemSet here.
// aSet.ClearItem(SDRATTR_SHADOW);
- std::vector< E3dCompoundObject* > aPlaceholderObjectList;
+ GetExtrusionDepth(rGeometryItem, fMap, fExtrusionBackward, fExtrusionForward);
+ double fDepth(fExtrusionBackward - fExtrusionForward);
- double fExtrusionBackward, fExtrusionForward;
- GetExtrusionDepth( rGeometryItem, pMap, fExtrusionBackward, fExtrusionForward );
- double fDepth = fExtrusionBackward - fExtrusionForward;
- if ( fDepth < 1.0 )
+ if(fDepth < 1.0)
+ {
fDepth = 1.0;
+ }
- drawing::ProjectionMode eProjectionMode( drawing::ProjectionMode_PARALLEL );
- const rtl::OUString sProjectionMode( RTL_CONSTASCII_USTRINGPARAM ( "ProjectionMode" ) );
- Any* pAny = rGeometryItem.GetPropertyValueByName( sExtrusion, sProjectionMode );
- if ( pAny )
+ drawing::ProjectionMode eProjectionMode(drawing::ProjectionMode_PARALLEL);
+ const rtl::OUString sProjectionMode(RTL_CONSTASCII_USTRINGPARAM("ProjectionMode"));
+ Any* pAny = rGeometryItem.GetPropertyValueByName(sExtrusion, sProjectionMode);
+
+ if(pAny)
+ {
*pAny >>= eProjectionMode;
- ProjectionType eProjectionType( eProjectionMode == drawing::ProjectionMode_PARALLEL ? PR_PARALLEL : PR_PERSPECTIVE );
-
- // pShape2d Umwandeln in Szene mit 3D Objekt
- E3dDefaultAttributes a3DDefaultAttr;
- a3DDefaultAttr.SetDefaultLatheCharacterMode( sal_True );
- a3DDefaultAttr.SetDefaultExtrudeCharacterMode( sal_True );
+ }
- E3dScene* pScene = new E3dScene( pCustomShape->getSdrModelFromSdrObject(), a3DDefaultAttr );
+ ProjectionType eProjectionType(drawing::ProjectionMode_PARALLEL == eProjectionMode ? PR_PARALLEL : PR_PERSPECTIVE);
- sal_Bool bSceneHasObjects ( sal_False );
- sal_Bool bUseTwoFillStyles( sal_False );
+ // rShape2d Umwandeln in Szene mit 3D Objekt
+ E3dDefaultAttributes a3DDefaultAttr;
+
+ a3DDefaultAttr.SetDefaultLatheCharacterMode(true);
+ a3DDefaultAttr.SetDefaultExtrudeCharacterMode(true);
- drawing::ShadeMode eShadeMode( GetShadeMode( rGeometryItem, drawing::ShadeMode_FLAT ) );
- const rtl::OUString sExtrusionColor( RTL_CONSTASCII_USTRINGPARAM ( "Color" ) );
- sal_Bool bUseExtrusionColor = GetBool( rGeometryItem, sExtrusionColor, sal_False );
+ E3dScene* pScene = new E3dScene(rCustomShape.getSdrModelFromSdrObject(), a3DDefaultAttr);
- XFillStyle eFillStyle( ITEMVALUE( aSet, XATTR_FILLSTYLE, XFillStyleItem ) );
- pScene->GetProperties().SetObjectItem( Svx3DShadeModeItem( 0 ) );
- aSet.Put( SfxUInt16Item(SDRATTR_3DOBJ_PERCENT_DIAGONAL, 0 ) );
- aSet.Put( Svx3DTextureModeItem( 1 ) );
- aSet.Put( Svx3DNormalsKindItem( 1 ) );
+ bool bSceneHasObjects(false);
+ bool bUseTwoFillStyles(false);
+ const drawing::ShadeMode eShadeMode(GetShadeMode(rGeometryItem, drawing::ShadeMode_FLAT));
+ const rtl::OUString sExtrusionColor(RTL_CONSTASCII_USTRINGPARAM("Color"));
+ const bool bUseExtrusionColor(GetBool(rGeometryItem, sExtrusionColor, false));
+ const XFillStyle eFillStyle(ITEMVALUE(aSet, XATTR_FILLSTYLE, XFillStyleItem));
+
+ pScene->GetProperties().SetObjectItem(Svx3DShadeModeItem(0));
+ aSet.Put(SfxUInt16Item(SDRATTR_3DOBJ_PERCENT_DIAGONAL, 0));
+ aSet.Put(Svx3DTextureModeItem(1));
+ aSet.Put(Svx3DNormalsKindItem(1));
- if ( eShadeMode == drawing::ShadeMode_DRAFT )
+ if(drawing::ShadeMode_DRAFT == eShadeMode)
{
- aSet.Put( XLineStyleItem( XLINE_SOLID ) );
- aSet.Put( XFillStyleItem ( XFILL_NONE ) );
- aSet.Put( SfxBoolItem(SDRATTR_3DOBJ_DOUBLE_SIDED, sal_True ) );
+ aSet.Put(XLineStyleItem(XLINE_SOLID));
+ aSet.Put(XFillStyleItem(XFILL_NONE));
+ aSet.Put(SfxBoolItem(SDRATTR_3DOBJ_DOUBLE_SIDED, true));
}
else
{
- aSet.Put( XLineStyleItem( XLINE_NONE ) );
- if ( eFillStyle == XFILL_NONE )
- aSet.Put( XFillStyleItem( XFILL_SOLID ) );
- else if ( ( eFillStyle == XFILL_BITMAP ) || ( eFillStyle == XFILL_GRADIENT ) || bUseExtrusionColor )
- bUseTwoFillStyles = sal_True;
+ aSet.Put(XLineStyleItem(XLINE_NONE));
+
+ if(XFILL_NONE == eFillStyle)
+ {
+ aSet.Put(XFillStyleItem(XFILL_SOLID));
+ }
+ else if(XFILL_BITMAP == eFillStyle || XFILL_GRADIENT == eFillStyle || bUseExtrusionColor)
+ {
+ bUseTwoFillStyles = true;
+ }
// #116336#
// If shapes are mirrored once (mirroring two times correct geometry again)
// double-sided at the object and two-sided-lighting at the scene need to be set.
if((bIsMirroredX && !bIsMirroredY) || (!bIsMirroredX && bIsMirroredY))
{
- aSet.Put( SfxBoolItem(SDRATTR_3DOBJ_DOUBLE_SIDED, sal_True ) );
- pScene->GetProperties().SetObjectItem( SfxBoolItem(SDRATTR_3DSCENE_TWO_SIDED_LIGHTING, sal_True ) );
+ aSet.Put(SfxBoolItem(SDRATTR_3DOBJ_DOUBLE_SIDED, true));
+
+ pScene->GetProperties().SetObjectItem(SfxBoolItem(SDRATTR_3DSCENE_TWO_SIDED_LIGHTING, true));
}
}
- Rectangle aBoundRect2d;
- SdrObjListIter aIter( *pShape2d, IM_DEEPWITHGROUPS );
- while( aIter.IsMore() )
+ basegfx::B2DRange aAllPolyPolygonRange;
+ SdrObjListIter aIter(rShape2d, IM_DEEPWITHGROUPS);
+
+ while(aIter.IsMore())
{
const SdrObject* pNext = aIter.Next();
basegfx::B2DPolyPolygon aPolyPoly;
const SdrPathObj* pSdrPathObj = dynamic_cast< const SdrPathObj* >(pNext);
- if ( pSdrPathObj )
+ if(pSdrPathObj)
{
aPolyPoly = pSdrPathObj->getB2DPolyPolygonInObjectCoordinates();
@@ -403,101 +412,145 @@ SdrObject* EnhancedCustomShape3d::Create
}
else
{
- SdrObject* pNewObj = pNext->ConvertToPolyObj( false, false);
+ SdrObject* pNewObj = pNext->ConvertToPolyObj(false, false);
SdrPathObj* pPath = dynamic_cast< SdrPathObj* >(pNewObj);
- if ( pPath )
+
+ if(pPath)
+ {
aPolyPoly = pPath->getB2DPolyPolygonInObjectCoordinates();
- deleteSdrObjectSafeAndClearPointer( pNewObj );
+ }
+
+ deleteSdrObjectSafeAndClearPointer(pNewObj);
}
if( aPolyPoly.count() )
{
- const basegfx::B2DRange aTempRange(basegfx::tools::getRange(aPolyPoly));
- const Rectangle aBoundRect(basegfx::fround(aTempRange.getMinX()), basegfx::fround(aTempRange.getMinY()), basegfx::fround(aTempRange.getMaxX()), basegfx::fround(aTempRange.getMaxY()));
- aBoundRect2d.Union( aBoundRect );
-
- E3dCompoundObject* p3DObj = new E3dExtrudeObj( pCustomShape->getSdrModelFromSdrObject(), a3DDefaultAttr, aPolyPoly, bUseTwoFillStyles ? 10 : fDepth );
- p3DObj->SetLayer( pShape2d->GetLayer() );
- p3DObj->SetMergedItemSet( aSet );
- const bool bIsPlaceholderObject((((XFillStyleItem&)pNext->GetMergedItem( XATTR_FILLSTYLE )).GetValue() == XFILL_NONE )
- && (((XLineStyleItem&)pNext->GetMergedItem( XATTR_LINESTYLE )).GetValue() == XLINE_NONE ));
- if ( bIsPlaceholderObject )
- aPlaceholderObjectList.push_back( p3DObj );
- else if ( bUseTwoFillStyles )
+ const basegfx::B2DRange aPolyPolygonRange(aPolyPoly.getB2DRange());
+
+ aAllPolyPolygonRange.expand(aPolyPolygonRange);
+
+ E3dCompoundObject* p3DObj = new E3dExtrudeObj(
+ rCustomShape.getSdrModelFromSdrObject(),
+ a3DDefaultAttr,
+ aPolyPoly,
+ bUseTwoFillStyles ? 10 : fDepth);
+
+ p3DObj->SetLayer(rShape2d.GetLayer());
+ p3DObj->SetMergedItemSet(aSet);
+
+ const bool bIsPlaceholderObject(XFILL_NONE == ((XFillStyleItem&)pNext->GetMergedItem( XATTR_FILLSTYLE )).GetValue()
+ && XLINE_NONE == ((XLineStyleItem&)pNext->GetMergedItem( XATTR_LINESTYLE )).GetValue());
+
+ if(bIsPlaceholderObject)
+ {
+ aPlaceholderObjectList.push_back(p3DObj);
+ }
+ else if(bUseTwoFillStyles)
{
BitmapEx aFillBmp;
- sal_Bool bFillBmpTile = ((XFillBmpTileItem&)p3DObj->GetMergedItem( XATTR_FILLBMP_TILE )).GetValue();
- if ( bFillBmpTile )
+ const bool bFillBmpTile(((XFillBmpTileItem&)p3DObj->GetMergedItem( XATTR_FILLBMP_TILE )).GetValue());
+
+ if(bFillBmpTile)
{
const XFillBitmapItem& rBmpItm = (XFillBitmapItem&)p3DObj->GetMergedItem(XATTR_FILLBITMAP);
- aFillBmp = rBmpItm.GetGraphicObject().GetGraphic().GetBitmapEx();
- Size aLogicalSize = aFillBmp.GetPrefSize();
- if ( aFillBmp.GetPrefMapMode() == MAP_PIXEL )
- aLogicalSize = Application::GetDefaultDevice()->PixelToLogic( aLogicalSize, MAP_100TH_MM );
+
+ aFillBmp = rBmpItm.GetGraphicObject().GetGraphic().GetBitmapEx();
+
+ Size aLogicalSize(aFillBmp.GetPrefSize());
+
+ if(MapMode(MAP_PIXEL) == aFillBmp.GetPrefMapMode())
+ {
+ aLogicalSize = Application::GetDefaultDevice()->PixelToLogic(aLogicalSize, MAP_100TH_MM);
+ }
else
- aLogicalSize = OutputDevice::LogicToLogic( aLogicalSize, aFillBmp.GetPrefMapMode(), MAP_100TH_MM );
- aLogicalSize.Width() *= 5; ;// :-( nice scaling, look at engine3d/obj3d.cxx
+ {
+ aLogicalSize = OutputDevice::LogicToLogic(aLogicalSize, aFillBmp.GetPrefMapMode(), MAP_100TH_MM);
+ }
+
+ aLogicalSize.Width() *= 5; // :-( nice scaling, look at engine3d/obj3d.cxx
aLogicalSize.Height() *= 5;
- aFillBmp.SetPrefSize( aLogicalSize );
- aFillBmp.SetPrefMapMode( MAP_100TH_MM );
+ aFillBmp.SetPrefSize(aLogicalSize);
+ aFillBmp.SetPrefMapMode(MAP_100TH_MM);
p3DObj->SetMergedItem(XFillBitmapItem(String(), Graphic(aFillBmp)));
}
else
{
- if ( aSnapRect != aBoundRect )
+ if(!aSnapRange.equal(aPolyPolygonRange))
{
const XFillBitmapItem& rBmpItm = (XFillBitmapItem&)p3DObj->GetMergedItem(XATTR_FILLBITMAP);
- aFillBmp = rBmpItm.GetGraphicObject().GetGraphic().GetBitmapEx();
- Size aBmpSize( aFillBmp.GetSizePixel() );
- double fXScale = (double)aBoundRect.GetWidth() / (double)aSnapRect.GetWidth();
- double fYScale = (double)aBoundRect.GetHeight() / (double)aSnapRect.GetHeight();
-
- Point aPt( (sal_Int32)( (double)( aBoundRect.Left() - aSnapRect.Left() )* (double)aBmpSize.Width() / (double)aSnapRect.GetWidth() ),
- (sal_Int32)( (double)( aBoundRect.Top() - aSnapRect.Top() ) * (double)aBmpSize.Height() / (double)aSnapRect.GetHeight() ) );
- Size aSize( (sal_Int32)( aBmpSize.Width() * fXScale ),
- (sal_Int32)( aBmpSize.Height() * fYScale ) );
- Rectangle aCropRect( aPt, aSize );
- aFillBmp.Crop( aCropRect );
+
+ aFillBmp = rBmpItm.GetGraphicObject().GetGraphic().GetBitmapEx();
+
+ const Size aBmpSize(aFillBmp.GetSizePixel());
+ const double fXScale(aPolyPolygonRange.getWidth() / aSnapRange.getWidth());
+ const double fYScale(aPolyPolygonRange.getHeight() / aSnapRange.getHeight());
+
+ const Point aPt(
+ basegfx::fround((aPolyPolygonRange.getMinX() - aSnapRange.getMinX()) * (double)aBmpSize.Width() / aSnapRange.getWidth()),
+ basegfx::fround((aPolyPolygonRange.getMinY() - aSnapRange.getMinY()) * (double)aBmpSize.Height() / aSnapRange.getHeight()));
+ const Size aSize(
+ basegfx::fround((double)aBmpSize.Width() * fXScale),
+ basegfx::fround((double)aBmpSize.Height() * fYScale));
+ const Rectangle aCropRect(aPt, aSize);
+
+ aFillBmp.Crop(aCropRect);
p3DObj->SetMergedItem(XFillBitmapItem(String(), Graphic(aFillBmp)));
}
}
+
+ pScene->Insert3DObj(*p3DObj);
+ p3DObj = new E3dExtrudeObj(
+ rCustomShape.getSdrModelFromSdrObject(),
+ a3DDefaultAttr,
+ aPolyPoly,
+ fDepth);
+ p3DObj->SetLayer(rShape2d.GetLayer());
+ p3DObj->SetMergedItemSet(aSet);
+
+ if(bUseExtrusionColor)
+ {
+ p3DObj->SetMergedItem(XFillColorItem(String(), ((XSecondaryFillColorItem&)rCustomShape.GetMergedItem(XATTR_SECONDARYFILLCOLOR)).GetColorValue()));
+ }
+
+ p3DObj->SetMergedItem(XFillStyleItem(XFILL_SOLID));
+ p3DObj->SetMergedItem(Svx3DCloseFrontItem(false));
+ p3DObj->SetMergedItem(Svx3DCloseBackItem(false));
pScene->Insert3DObj(*p3DObj);
- p3DObj = new E3dExtrudeObj( pCustomShape->getSdrModelFromSdrObject(), a3DDefaultAttr, aPolyPoly, fDepth );
- p3DObj->SetLayer( pShape2d->GetLayer() );
- p3DObj->SetMergedItemSet( aSet );
- if ( bUseExtrusionColor )
- p3DObj->SetMergedItem( XFillColorItem( String(), ((XSecondaryFillColorItem&)pCustomShape->GetMergedItem( XATTR_SECONDARYFILLCOLOR )).GetColorValue() ) );
- p3DObj->SetMergedItem( XFillStyleItem( XFILL_SOLID ) );
- p3DObj->SetMergedItem( Svx3DCloseFrontItem( sal_False ) );
- p3DObj->SetMergedItem( Svx3DCloseBackItem( sal_False ) );
- pScene->Insert3DObj(*p3DObj);
- p3DObj = new E3dExtrudeObj( pCustomShape->getSdrModelFromSdrObject(), a3DDefaultAttr, aPolyPoly, 10 );
- p3DObj->SetLayer( pShape2d->GetLayer() );
- p3DObj->SetMergedItemSet( aSet );
- basegfx::B3DHomMatrix aFrontTransform( p3DObj->GetB3DTransform() );
- aFrontTransform.translate( 0.0, 0.0, fDepth );
- p3DObj->SetB3DTransform( aFrontTransform );
+ p3DObj = new E3dExtrudeObj(
+ rCustomShape.getSdrModelFromSdrObject(),
+ a3DDefaultAttr,
+ aPolyPoly,
+ 10);
+ p3DObj->SetLayer(rShape2d.GetLayer());
+ p3DObj->SetMergedItemSet(aSet);
+
+ basegfx::B3DHomMatrix aFrontTransform(p3DObj->GetB3DTransform());
+
+ aFrontTransform.translate(0.0, 0.0, fDepth);
+ p3DObj->SetB3DTransform(aFrontTransform);
- if ( ( eFillStyle == XFILL_BITMAP ) && !aFillBmp.IsEmpty() )
+ if(XFILL_BITMAP == eFillStyle && !aFillBmp.IsEmpty())
{
p3DObj->SetMergedItem(XFillBitmapItem(String(), Graphic(aFillBmp)));
}
}
- else if ( eFillStyle == XFILL_NONE )
+ else if(XFILL_NONE == eFillStyle)
{
- XLineColorItem& rLineColor = (XLineColorItem&)p3DObj->GetMergedItem( XATTR_LINECOLOR );
- p3DObj->SetMergedItem( XFillColorItem( String(), rLineColor.GetColorValue() ) );
- p3DObj->SetMergedItem( SfxBoolItem(SDRATTR_3DOBJ_DOUBLE_SIDED, sal_True ) );
- p3DObj->SetMergedItem( Svx3DCloseFrontItem( sal_False ) );
- p3DObj->SetMergedItem( Svx3DCloseBackItem( sal_False ) );
+ const XLineColorItem& rLineColor = (XLineColorItem&)p3DObj->GetMergedItem(XATTR_LINECOLOR);
+
+ p3DObj->SetMergedItem(XFillColorItem(String(), rLineColor.GetColorValue()));
+ p3DObj->SetMergedItem(SfxBoolItem(SDRATTR_3DOBJ_DOUBLE_SIDED, true));
+ p3DObj->SetMergedItem(Svx3DCloseFrontItem(false));
+ p3DObj->SetMergedItem(Svx3DCloseBackItem(false));
}
- pScene->Insert3DObj(*p3DObj);
- bSceneHasObjects = sal_True;
+
+ pScene->Insert3DObj(*p3DObj);
+ bSceneHasObjects = true;
}
}
- if ( bSceneHasObjects ) // is the SdrObject properly converted
+ if(bSceneHasObjects) // is the SdrObject properly converted
{
// then we can change the return value
pRet = pScene;
@@ -505,173 +558,208 @@ SdrObject* EnhancedCustomShape3d::Create
// Kameraeinstellungen, Perspektive ...
Camera3D& rCamera = (Camera3D&)pScene->GetCamera();
const basegfx::B3DRange& rVolume = pScene->GetBoundVolume();
- sdr::legacy::SetSnapRect(*pScene, aSnapRect );
+ sdr::legacy::SetSnapRange(*pScene, aSnapRange);
// InitScene replacement
- double fW = rVolume.getWidth();
- double fH = rVolume.getHeight();
+ const double fW(rVolume.getWidth());
+ const double fH(rVolume.getHeight());
- rCamera.SetAutoAdjustProjection( sal_False );
- rCamera.SetViewWindow( -fW / 2, - fH / 2, fW, fH);
- basegfx::B3DPoint aLookAt( 0.0, 0.0, 0.0 );
- basegfx::B3DPoint aCamPos( 0.0, 0.0, 100.0 );
- rCamera.SetDefaults( basegfx::B3DPoint( 0.0, 0.0, 100.0 ), aLookAt, 100.0 );
- rCamera.SetPosAndLookAt( aCamPos, aLookAt );
- rCamera.SetFocalLength( 1.0 );
- rCamera.SetProjection( eProjectionType );
- pScene->SetCamera( rCamera );
+ rCamera.SetAutoAdjustProjection(false);
+ rCamera.SetViewWindow(-fW / 2, - fH / 2, fW, fH);
+ basegfx::B3DPoint aLookAt(0.0, 0.0, 0.0);
+ basegfx::B3DPoint aCamPos(0.0, 0.0, 100.0);
+ rCamera.SetDefaults(basegfx::B3DPoint(0.0, 0.0, 100.0), aLookAt, 100.0);
+ rCamera.SetPosAndLookAt(aCamPos, aLookAt);
+ rCamera.SetFocalLength(1.0);
+ rCamera.SetProjection(eProjectionType);
+ pScene->SetCamera(rCamera);
pScene->ActionChanged();
double fOriginX, fOriginY;
- GetOrigin( rGeometryItem, fOriginX, fOriginY );
- fOriginX = fOriginX * aSnapRect.GetWidth();
- fOriginY = fOriginY * aSnapRect.GetHeight();
- basegfx::B3DHomMatrix aNewTransform( pScene->GetB3DTransform() );
- aNewTransform.translate( -aCenter.X(), aCenter.Y(), -pScene->GetBoundVolume().getDepth() );
+ GetOrigin(rGeometryItem, fOriginX, fOriginY);
+ fOriginX = fOriginX * aSnapRange.getWidth();
+ fOriginY = fOriginY * aSnapRange.getHeight();
+
+ basegfx::B3DHomMatrix aNewTransform(pScene->GetB3DTransform());
+
+ aNewTransform.translate(-aSnapRange.getCenterX(), aSnapRange.getCenterY(), -pScene->GetBoundVolume().getDepth());
double fXRotate, fYRotate;
- GetRotateAngle( rGeometryItem, fXRotate, fYRotate );
- double fZRotate = ((SdrObjCustomShape*)pCustomShape)->GetObjectRotation() * F_PI180;
- if ( fZRotate != 0.0 )
- aNewTransform.rotate( 0.0, 0.0, fZRotate );
- if ( bIsMirroredX )
- aNewTransform.scale( -1.0, 1, 1 );
- if ( bIsMirroredY )
- aNewTransform.scale( 1, -1.0, 1 );
- if( fYRotate != 0.0 )
- aNewTransform.rotate( 0.0, -fYRotate, 0.0 );
- if( fXRotate != 0.0 )
- aNewTransform.rotate( -fXRotate, 0.0, 0.0 );
- if ( eProjectionType == PR_PARALLEL )
+
+ GetRotateAngle(rGeometryItem, fXRotate, fYRotate);
+
+ const double fZRotate(rCustomShape.GetObjectRotation() * F_PI180);
+
+ if(0.0 != fZRotate)
+ {
+ aNewTransform.rotate(0.0, 0.0, fZRotate);
+ }
+
+ if(bIsMirroredX)
+ {
+ aNewTransform.scale(-1.0, 1.0, 1.0);
+ }
+
+ if(bIsMirroredY)
+ {
+ aNewTransform.scale(1.0, -1.0, 1.0);
+ }
+
+ if(0.0 != fYRotate)
+ {
+ aNewTransform.rotate(0.0, -fYRotate, 0.0);
+ }
+
+ if(0.0 != fXRotate)
+ {
+ aNewTransform.rotate(-fXRotate, 0.0, 0.0 );
+ }
+
+ if(PR_PARALLEL == eProjectionType)
{
double fSkew, fAlpha;
- GetSkew( rGeometryItem, fSkew, fAlpha );
- if ( fSkew != 0.0 )
+
+ GetSkew(rGeometryItem, fSkew, fAlpha);
+
+ if(0.0 != fSkew)
{
- double fInvTanBeta( fSkew / 100.0 );
- if(fInvTanBeta)
+ const double fInvTanBeta(fSkew / 100.0);
+
+ if(fInvTanBeta)
{
aNewTransform.shearXY(
fInvTanBeta * cos(fAlpha),
fInvTanBeta * sin(fAlpha));
}
}
- basegfx::B3DPoint _aLookAt( 0.0, 0.0, 0.0 );
- basegfx::B3DPoint _aNewCamPos( 0.0, 0.0, 25000.0 );
- rCamera.SetPosAndLookAt( _aNewCamPos, _aLookAt );
- pScene->SetCamera( rCamera );
+
+ const basegfx::B3DPoint _aLookAt(0.0, 0.0, 0.0);
+ const basegfx::B3DPoint _aNewCamPos(0.0, 0.0, 25000.0);
+
+ rCamera.SetPosAndLookAt(_aNewCamPos, _aLookAt);
+ pScene->SetCamera(rCamera);
}
else
{
- aNewTransform.translate( -fOriginX, fOriginY, 0.0 );
- // now set correct camera position
- const rtl::OUString sViewPoint( RTL_CONSTASCII_USTRINGPARAM ( "ViewPoint" ) );
- drawing::Position3D aViewPointDefault( 3472, -3472, 25000 );
- drawing::Position3D aViewPoint( GetPosition3D( rGeometryItem, sViewPoint, aViewPointDefault, pMap ) );
- double fViewPointX = aViewPoint.PositionX;
- double fViewPointY = aViewPoint.PositionY;
- double fViewPointZ = aViewPoint.PositionZ;
- basegfx::B3DPoint _aLookAt( fViewPointX, -fViewPointY, 0.0 );
- basegfx::B3DPoint aNewCamPos( fViewPointX, -fViewPointY, fViewPointZ );
- rCamera.SetPosAndLookAt( aNewCamPos, _aLookAt );
- pScene->SetCamera( rCamera );
+ aNewTransform.translate(-fOriginX, fOriginY, 0.0);
+
+ // now set correct camera position
+ const rtl::OUString sViewPoint(RTL_CONSTASCII_USTRINGPARAM("ViewPoint"));
+ const drawing::Position3D aViewPointDefault(3472, -3472, 25000);
+ const drawing::Position3D aViewPoint(GetPosition3D(rGeometryItem, sViewPoint, aViewPointDefault, fMap));
+ const double fViewPointX(aViewPoint.PositionX);
+ const double fViewPointY(aViewPoint.PositionY);
+ const double fViewPointZ(aViewPoint.PositionZ);
+ const basegfx::B3DPoint _aLookAt(fViewPointX, -fViewPointY, 0.0);
+ const basegfx::B3DPoint aNewCamPos(fViewPointX, -fViewPointY, fViewPointZ);
+
+ rCamera.SetPosAndLookAt(aNewCamPos, _aLookAt);
+ pScene->SetCamera(rCamera);
}
- pScene->SetB3DTransform( aNewTransform );
+ pScene->SetB3DTransform(aNewTransform);
///////////
// light //
///////////
- const rtl::OUString sBrightness( RTL_CONSTASCII_USTRINGPARAM ( "Brightness" ) );
- double fAmbientIntensity = GetDouble( rGeometryItem, sBrightness, 22178.0 / 655.36, NULL ) / 100.0;
+ const rtl::OUString sBrightness(RTL_CONSTASCII_USTRINGPARAM("Brightness"));
+ const double fAmbientIntensity(GetDouble(rGeometryItem, sBrightness, 22178.0 / 655.36, NULL) / 100.0);
+ const rtl::OUString sFirstLightDirection(RTL_CONSTASCII_USTRINGPARAM("FirstLightDirection"));
+ const drawing::Direction3D aFirstLightDirectionDefault(50000, 0, 10000);
+ drawing::Direction3D aFirstLightDirection(GetDirection3D(rGeometryItem, sFirstLightDirection, aFirstLightDirectionDefault));
-
- const rtl::OUString sFirstLightDirection( RTL_CONSTASCII_USTRINGPARAM ( "FirstLightDirection" ) );
- drawing::Direction3D aFirstLightDirectionDefault( 50000, 0, 10000 );
- drawing::Direction3D aFirstLightDirection( GetDirection3D( rGeometryItem, sFirstLightDirection, aFirstLightDirectionDefault ) );
- if ( aFirstLightDirection.DirectionZ == 0.0 )
+ if(0.0 == aFirstLightDirection.DirectionZ)
+ {
aFirstLightDirection.DirectionZ = 1.0;
+ }
- const rtl::OUString sFirstLightLevel( RTL_CONSTASCII_USTRINGPARAM ( "FirstLightLevel" ) );
- double fLightIntensity = GetDouble( rGeometryItem, sFirstLightLevel, 43712.0 / 655.36, NULL ) / 100.0;
-
- const rtl::OUString sFirstLightHarsh( RTL_CONSTASCII_USTRINGPARAM ( "FirstLightHarsh" ) );
- /* sal_Bool bFirstLightHarsh = */ GetBool( rGeometryItem, sFirstLightHarsh, sal_False );
-
- const rtl::OUString sSecondLightDirection( RTL_CONSTASCII_USTRINGPARAM ( "SecondLightDirection" ) );
- drawing::Direction3D aSecondLightDirectionDefault( -50000, 0, 10000 );
- drawing::Direction3D aSecondLightDirection( GetDirection3D( rGeometryItem, sSecondLightDirection, aSecondLightDirectionDefault ) );
- if ( aSecondLightDirection.DirectionZ == 0.0 )
+ const rtl::OUString sFirstLightLevel(RTL_CONSTASCII_USTRINGPARAM("FirstLightLevel"));
+ const double fLightIntensity(GetDouble(rGeometryItem, sFirstLightLevel, 43712.0 / 655.36, NULL) / 100.0);
+ const rtl::OUString sFirstLightHarsh(RTL_CONSTASCII_USTRINGPARAM("FirstLightHarsh"));
+ /// const bool bFirstLightHarsh(GetBool(rGeometryItem, sFirstLightHarsh, false));
+ const rtl::OUString sSecondLightDirection(RTL_CONSTASCII_USTRINGPARAM("SecondLightDirection"));
+ const drawing::Direction3D aSecondLightDirectionDefault(-50000, 0, 10000);
+ drawing::Direction3D aSecondLightDirection(GetDirection3D(rGeometryItem, sSecondLightDirection, aSecondLightDirectionDefault));
+
+ if(0.0 == aSecondLightDirection.DirectionZ)
+ {
aSecondLightDirection.DirectionZ = -1;
+ }
- const rtl::OUString sSecondLightLevel( RTL_CONSTASCII_USTRINGPARAM ( "SecondLightLevel" ) );
- double fLight2Intensity = GetDouble( rGeometryItem, sSecondLightLevel, 43712.0 / 655.36, NULL ) / 100.0;
+ const rtl::OUString sSecondLightLevel(RTL_CONSTASCII_USTRINGPARAM("SecondLightLevel"));
+ const double fLight2Intensity(GetDouble(rGeometryItem, sSecondLightLevel, 43712.0 / 655.36, NULL) / 100.0);
+ const rtl::OUString sSecondLightHarsh(RTL_CONSTASCII_USTRINGPARAM("SecondLightHarsh"));
+ const rtl::OUString sLightFace(RTL_CONSTASCII_USTRINGPARAM("LightFace"));
+ // const bool bLight2Harsh(GetBool(rGeometryItem, sSecondLightHarsh, false));
+ // const bool bLightFace(GetBool(rGeometryItem, sLightFace, false));
+ const sal_uInt16 nAmbientColor(basegfx::fround(std::min(fAmbientIntensity * 255.0, 255.0)));
+ const Color aGlobalAmbientColor((sal_uInt8)nAmbientColor, (sal_uInt8)nAmbientColor, (sal_uInt8)nAmbientColor);
+
+ pScene->GetProperties().SetObjectItem(SvxColorItem(aGlobalAmbientColor, SDRATTR_3DSCENE_AMBIENTCOLOR));
+
+ const sal_uInt8 nSpotLight1((sal_uInt8)(fLightIntensity * 255.0));
+ basegfx::B3DVector aSpotLight1(aFirstLightDirection.DirectionX, -aFirstLightDirection.DirectionY, -aFirstLightDirection.DirectionZ);
+
+ aSpotLight1.normalize();
+
+ pScene->GetProperties().SetObjectItem(SfxBoolItem(SDRATTR_3DSCENE_LIGHTON_1, true));
+
+ const Color aAmbientSpot1Color(nSpotLight1, nSpotLight1, nSpotLight1);
- const rtl::OUString sSecondLightHarsh( RTL_CONSTASCII_USTRINGPARAM ( "SecondLightHarsh" ) );
- const rtl::OUString sLightFace( RTL_CONSTASCII_USTRINGPARAM ( "LightFace" ) );
- /* sal_Bool bLight2Harsh = */ GetBool( rGeometryItem, sSecondLightHarsh, sal_False );
- /* sal_Bool bLightFace = */ GetBool( rGeometryItem, sLightFace, sal_False );
-
- sal_uInt16 nAmbientColor = (sal_uInt16)( fAmbientIntensity * 255.0 );
- if ( nAmbientColor > 255 )
- nAmbientColor = 255;
- Color aGlobalAmbientColor( (sal_uInt8)nAmbientColor, (sal_uInt8)nAmbientColor, (sal_uInt8)nAmbientColor );
- pScene->GetProperties().SetObjectItem( SvxColorItem(aGlobalAmbientColor, SDRATTR_3DSCENE_AMBIENTCOLOR) );
-
- sal_uInt8 nSpotLight1 = (sal_uInt8)( fLightIntensity * 255.0 );
- basegfx::B3DVector aSpotLight1( aFirstLightDirection.DirectionX, - ( aFirstLightDirection.DirectionY ), -( aFirstLightDirection.DirectionZ ) );
- aSpotLight1.normalize();
- pScene->GetProperties().SetObjectItem( SfxBoolItem(SDRATTR_3DSCENE_LIGHTON_1, sal_True ) );
- Color aAmbientSpot1Color( nSpotLight1, nSpotLight1, nSpotLight1 );
- pScene->GetProperties().SetObjectItem( SvxColorItem(aAmbientSpot1Color, SDRATTR_3DSCENE_LIGHTCOLOR_1) );
- pScene->GetProperties().SetObjectItem( SvxB3DVectorItem(SDRATTR_3DSCENE_LIGHTDIRECTION_1, aSpotLight1 ) );
+ pScene->GetProperties().SetObjectItem(SvxColorItem(aAmbientSpot1Color, SDRATTR_3DSCENE_LIGHTCOLOR_1));
+ pScene->GetProperties().SetObjectItem(SvxB3DVectorItem(SDRATTR_3DSCENE_LIGHTDIRECTION_1, aSpotLight1));
- sal_uInt8 nSpotLight2 = (sal_uInt8)( fLight2Intensity * 255.0 );
- basegfx::B3DVector aSpotLight2( aSecondLightDirection.DirectionX, -aSecondLightDirection.DirectionY, -aSecondLightDirection.DirectionZ );
+ const sal_uInt8 nSpotLight2((sal_uInt8)(fLight2Intensity * 255.0));
+ basegfx::B3DVector aSpotLight2(aSecondLightDirection.DirectionX, -aSecondLightDirection.DirectionY, -aSecondLightDirection.DirectionZ);
aSpotLight2.normalize();
- pScene->GetProperties().SetObjectItem( SfxBoolItem(SDRATTR_3DSCENE_LIGHTON_2, sal_True ) );
- Color aAmbientSpot2Color( nSpotLight2, nSpotLight2, nSpotLight2 );
- pScene->GetProperties().SetObjectItem( SvxColorItem(aAmbientSpot2Color, SDRATTR_3DSCENE_LIGHTCOLOR_2) );
- pScene->GetProperties().SetObjectItem( SvxB3DVectorItem(SDRATTR_3DSCENE_LIGHTDIRECTION_2, aSpotLight2 ) );
-
- sal_uInt8 nSpotLight3 = 70;
- basegfx::B3DVector aSpotLight3( 0.0, 0.0, 1.0 );
- pScene->GetProperties().SetObjectItem( SfxBoolItem(SDRATTR_3DSCENE_LIGHTON_3, sal_True ) );
- Color aAmbientSpot3Color( nSpotLight3, nSpotLight3, nSpotLight3 );
- pScene->GetProperties().SetObjectItem( SvxColorItem(aAmbientSpot3Color, SDRATTR_3DSCENE_LIGHTCOLOR_3) );
- pScene->GetProperties().SetObjectItem( SvxB3DVectorItem(SDRATTR_3DSCENE_LIGHTDIRECTION_3, aSpotLight3 ) );
-
- const rtl::OUString sSpecularity( RTL_CONSTASCII_USTRINGPARAM ( "Specularity" ) );
- const rtl::OUString sDiffusion( RTL_CONSTASCII_USTRINGPARAM ( "Diffusion" ) );
- const rtl::OUString sShininess( RTL_CONSTASCII_USTRINGPARAM ( "Shininess" ) );
- const rtl::OUString sMetal( RTL_CONSTASCII_USTRINGPARAM ( "Metal" ) );
- double fSpecular = GetDouble( rGeometryItem, sSpecularity, 0, NULL ) / 100;
- sal_Bool bMetal = GetBool( rGeometryItem, sMetal, sal_False );
- Color aSpecularCol( 225,225,225 );
- if ( bMetal )
+ pScene->GetProperties().SetObjectItem(SfxBoolItem(SDRATTR_3DSCENE_LIGHTON_2, true));
+
+ const Color aAmbientSpot2Color(nSpotLight2, nSpotLight2, nSpotLight2);
+
+ pScene->GetProperties().SetObjectItem(SvxColorItem(aAmbientSpot2Color, SDRATTR_3DSCENE_LIGHTCOLOR_2));
+ pScene->GetProperties().SetObjectItem(SvxB3DVectorItem(SDRATTR_3DSCENE_LIGHTDIRECTION_2, aSpotLight2));
+
+ const sal_uInt8 nSpotLight3(70);
+ const basegfx::B3DVector aSpotLight3(0.0, 0.0, 1.0);
+
+ pScene->GetProperties().SetObjectItem(SfxBoolItem(SDRATTR_3DSCENE_LIGHTON_3, true));
+
+ const Color aAmbientSpot3Color(nSpotLight3, nSpotLight3, nSpotLight3);
+
+ pScene->GetProperties().SetObjectItem(SvxColorItem(aAmbientSpot3Color, SDRATTR_3DSCENE_LIGHTCOLOR_3));
+ pScene->GetProperties().SetObjectItem(SvxB3DVectorItem(SDRATTR_3DSCENE_LIGHTDIRECTION_3, aSpotLight3));
+
+ const rtl::OUString sSpecularity(RTL_CONSTASCII_USTRINGPARAM("Specularity"));
+ const rtl::OUString sDiffusion(RTL_CONSTASCII_USTRINGPARAM("Diffusion"));
+ const rtl::OUString sShininess(RTL_CONSTASCII_USTRINGPARAM("Shininess"));
+ const rtl::OUString sMetal(RTL_CONSTASCII_USTRINGPARAM("Metal"));
+ double fSpecular(GetDouble(rGeometryItem, sSpecularity, 0, NULL) / 100);
+ const bool bMetal(GetBool(rGeometryItem, sMetal, false));
+ Color aSpecularCol(225, 225, 225);
+
+ if(bMetal)
{
- aSpecularCol = Color( 200, 200, 200 );
+ aSpecularCol = Color(200, 200, 200);
fSpecular += 0.15;
}
- sal_Int32 nIntensity = (sal_Int32)fSpecular * 100;
- if ( nIntensity > 100 )
- nIntensity = 100;
- else if ( nIntensity < 0 )
- nIntensity = 0;
- nIntensity = 100 - nIntensity;
- pScene->GetProperties().SetObjectItem( SvxColorItem(aSpecularCol, SDRATTR_3DOBJ_MAT_SPECULAR) );
- pScene->GetProperties().SetObjectItem( SfxUInt16Item(SDRATTR_3DOBJ_MAT_SPECULAR_INTENSITY, (sal_uInt16)nIntensity ) );
- sdr::legacy::SetLogicRect(*pScene, CalculateNewSnapRect( pCustomShape, aSnapRect, aBoundRect2d, pMap ) );
+ const sal_Int32 nIntensity(basegfx::fround(100.0 - std::min(std::max(0.0, fSpecular * 100.0), 100.0)));
+
+ pScene->GetProperties().SetObjectItem(SvxColorItem(aSpecularCol, SDRATTR_3DOBJ_MAT_SPECULAR));
+ pScene->GetProperties().SetObjectItem(SfxUInt16Item(SDRATTR_3DOBJ_MAT_SPECULAR_INTENSITY, (sal_uInt16)nIntensity));
+
+ // set 2D transformation for scene
+ sdr::legacy::SetLogicRange(*pScene, CalculateNewSnapRect(rCustomShape, aSnapRange, aAllPolyPolygonRange, fMap));
// removing placeholder objects
- std::vector< E3dCompoundObject* >::iterator aObjectListIter( aPlaceholderObjectList.begin() );
- while ( aObjectListIter != aPlaceholderObjectList.end() )
+ std::vector< E3dCompoundObject* >::iterator aObjectListIter(aPlaceholderObjectList.begin());
+
+ while( aObjectListIter != aPlaceholderObjectList.end())
{
- pScene->Remove3DObj( **aObjectListIter );
+ pScene->Remove3DObj(**aObjectListIter);
deleteSdrObjectSafeAndClearPointer(*aObjectListIter++);
}
}
@@ -680,70 +768,87 @@ SdrObject* EnhancedCustomShape3d::Create
deleteSdrObjectSafeAndClearPointer(pScene);
}
}
- return pRet;
+
+ return pRet;
}
-Rectangle EnhancedCustomShape3d::CalculateNewSnapRect( const SdrObject* pCustomShape, const Rectangle& rSnapRect, const Rectangle& rBoundRect, const double* pMap )
+basegfx::B2DRange EnhancedCustomShape3d::CalculateNewSnapRect(
+ const SdrObjCustomShape& rCustomShape,
+ const basegfx::B2DRange& rSnapRect,
+ const basegfx::B2DRange& rBoundRect,
+ const double fMap)
{
- SdrCustomShapeGeometryItem& rGeometryItem = (SdrCustomShapeGeometryItem&)pCustomShape->GetMergedItem( SDRATTR_CUSTOMSHAPE_GEOMETRY );
- const Point aCenter( rSnapRect.Center() );
- double fExtrusionBackward, fExtrusionForward;
- GetExtrusionDepth( rGeometryItem, pMap, fExtrusionBackward, fExtrusionForward );
+ SdrCustomShapeGeometryItem& rGeometryItem = (SdrCustomShapeGeometryItem&)rCustomShape.GetMergedItem(SDRATTR_CUSTOMSHAPE_GEOMETRY);
+ double fExtrusionBackward(0.0), fExtrusionForward(0.0);
sal_uInt32 i;
+
+ GetExtrusionDepth(rGeometryItem, fMap, fExtrusionBackward, fExtrusionForward);
- // creating initial bound volume ( without rotation. skewing.and camera )
- basegfx::B3DPolygon aBoundVolume;
- const Polygon aPolygon( rBoundRect );
-
- for ( i = 0L; i < 4L; i++ )
- {
- aBoundVolume.append(basegfx::B3DPoint(aPolygon[ (sal_uInt16)i ].X() - aCenter.X(), aPolygon[ (sal_uInt16)i ].Y() - aCenter.Y(), fExtrusionForward));
- }
-
- for ( i = 0L; i < 4L; i++ )
- {
- aBoundVolume.append(basegfx::B3DPoint(aPolygon[ (sal_uInt16)i ].X() - aCenter.X(), aPolygon[ (sal_uInt16)i ].Y() - aCenter.Y(), fExtrusionBackward));
- }
-
- const rtl::OUString sRotationCenter( RTL_CONSTASCII_USTRINGPARAM ( "RotationCenter" ) );
- drawing::Direction3D aRotationCenterDefault( 0, 0, 0 ); // default seems to be wrong, a fractional size of shape has to be used!!
- drawing::Direction3D aRotationCenter( GetDirection3D( rGeometryItem, sRotationCenter, aRotationCenterDefault ) );
-
- // double XCenterInGUnits = rPropSet.GetPropertyValue( DFF_Prop_c3DRotationCenterX, 0 );
- // double YCenterInGUnits = rPropSet.GetPropertyValue( DFF_Prop_c3DRotationCenterY, 0 );
-
- // sal_Int32 nRotationXAxisInProz = rPropSet.GetPropertyValue( DFF_Prop_c3DRotationAxisX, 100 );
- // sal_Int32 nRotationYAxisInProz = rPropSet.GetPropertyValue( DFF_Prop_c3DRotationAxisY, 0 );
- // sal_Int32 nRotationZAxisInProz = rPropSet.GetPropertyValue( DFF_Prop_c3DRotationAxisZ, 0 );
-
+ // creating initial bound volume (without rotation, skewing and camera)
+ basegfx::B2DPolygon aPolygon(basegfx::tools::createPolygonFromRect(rBoundRect));
+ basegfx::B3DPolygon aBoundVolume;
+
+ aPolygon.transform(basegfx::tools::createTranslateB2DHomMatrix(-rSnapRect.getCenterX(), -rSnapRect.getCenterY()));
+ aBoundVolume.append(basegfx::tools::createB3DPolygonFromB2DPolygon(aPolygon, fExtrusionForward));
+ aBoundVolume.append(basegfx::tools::createB3DPolygonFromB2DPolygon(aPolygon, fExtrusionBackward));
+
+ const rtl::OUString sRotationCenter(RTL_CONSTASCII_USTRINGPARAM("RotationCenter"));
+ const drawing::Direction3D aRotationCenterDefault(0.0, 0.0, 0.0); // default seems to be wrong, a fractional size of shape has to be used!!
+ const drawing::Direction3D aRotationCenter(GetDirection3D(rGeometryItem, sRotationCenter, aRotationCenterDefault));
+ double fXRotate(0.0), fYRotate(0.0);
+
+ GetRotateAngle(rGeometryItem, fXRotate, fYRotate);
- double fXRotate, fYRotate;
- GetRotateAngle( rGeometryItem, fXRotate, fYRotate );
- double fZRotate = - ((SdrObjCustomShape*)pCustomShape)->GetObjectRotation() * F_PI180;
+ double fZRotate(-rCustomShape.GetObjectRotation() * F_PI180);
// rotating bound volume
basegfx::B3DHomMatrix aMatrix;
- aMatrix.translate(-aRotationCenter.DirectionX, -aRotationCenter.DirectionY, -aRotationCenter.DirectionZ);
- if ( fZRotate != 0.0 )
- aMatrix.rotate( 0.0, 0.0, fZRotate );
- if ( ((SdrObjCustomShape*)pCustomShape)->IsMirroredX() )
- aMatrix.scale( -1.0, 1, 1 );
- if ( ((SdrObjCustomShape*)pCustomShape)->IsMirroredY() )
- aMatrix.scale( 1, -1.0, 1 );
- if( fYRotate != 0.0 )
- aMatrix.rotate( 0.0, fYRotate, 0.0 );
- if( fXRotate != 0.0 )
- aMatrix.rotate( -fXRotate, 0.0, 0.0 );
+
+ aMatrix.translate(-aRotationCenter.DirectionX, -aRotationCenter.DirectionY, -aRotationCenter.DirectionZ);
+
+ if(0.0 != fZRotate)
+ {
+ aMatrix.rotate(0.0, 0.0, fZRotate);
+ }
+
+ if(rCustomShape.IsMirroredX())
+ {
+ aMatrix.scale(-1.0, 1.0, 1.0);
+ }
+
+ if(rCustomShape.IsMirroredY())
+ {
+ aMatrix.scale(1.0, -1.0, 1.0);
+ }
+
+ if(0.0 != fYRotate)
+ {
+ aMatrix.rotate(0.0, fYRotate, 0.0);
+ }
+
+ if(0.0 != fXRotate)
+ {
+ aMatrix.rotate(-fXRotate, 0.0, 0.0);
+ }
+
aMatrix.translate(aRotationCenter.DirectionX, aRotationCenter.DirectionY, aRotationCenter.DirectionZ);
aBoundVolume.transform(aMatrix);
- Transformation2D aTransformation2D( pCustomShape, rSnapRect, pMap );
- if ( aTransformation2D.IsParallel() )
- aBoundVolume = aTransformation2D.ApplySkewSettings( aBoundVolume );
-
- Polygon aTransformed( 8 );
- for ( i = 0L; i < 8L; i++ )
- aTransformed[ (sal_uInt16)i ] = aTransformation2D.Transform2D( aBoundVolume.getB3DPoint( i ) );
+ Transformation2D aTransformation2D(rCustomShape, fMap);
+
+ if(aTransformation2D.IsParallel())
+ {
+ aBoundVolume = aTransformation2D.ApplySkewSettings(aBoundVolume);
+ }
+
+ basegfx::B2DRange aRetval;
+
+ for(i = 0; i < aBoundVolume.count(); i++)
+ {
+ aRetval.expand(aTransformation2D.Transform2D(aBoundVolume.getB3DPoint(i)));
+ }
- return aTransformed.GetBoundRect();
+ return aRetval;
}
+
+// eof
Modified: incubator/ooo/branches/alg/aw080/main/svx/source/customshapes/EnhancedCustomShape3d.hxx
URL: http://svn.apache.org/viewvc/incubator/ooo/branches/alg/aw080/main/svx/source/customshapes/EnhancedCustomShape3d.hxx?rev=1351396&r1=1351395&r2=1351396&view=diff
==============================================================================
--- incubator/ooo/branches/alg/aw080/main/svx/source/customshapes/EnhancedCustomShape3d.hxx (original)
+++ incubator/ooo/branches/alg/aw080/main/svx/source/customshapes/EnhancedCustomShape3d.hxx Mon Jun 18 16:00:11 2012
@@ -19,8 +19,6 @@
*
*************************************************************/
-
-
#ifndef _ENHANCEDCUSTOMSHAPE3D_HXX
#define _ENHANCEDCUSTOMSHAPE3D_HXX
@@ -28,46 +26,54 @@
#include <com/sun/star/drawing/ProjectionMode.hpp>
#include <basegfx/point/b3dpoint.hxx>
#include <basegfx/polygon/b3dpolygon.hxx>
-
-#include <tools/gen.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/range/b2drange.hxx>
class SdrObject;
+class SdrObjCustomShape;
class EnhancedCustomShape3d
{
+private:
class Transformation2D
{
- Point aCenter;
- com::sun::star::drawing::ProjectionMode eProjectionMode;
+ private:
+ basegfx::B2DPoint maCenter;
+ com::sun::star::drawing::ProjectionMode meProjectionMode;
// parallel projection
- double fSkewAngle;
- double fSkew; // in percent
+ double mfSkewAngle;
+ double mfSkew; // in percent
// perspective projection
- double fZScreen;
- basegfx::B3DPoint fViewPoint;
- double fOriginX;
- double fOriginY;
-
- const double* pMap;
+ double mfZScreen;
+ basegfx::B3DPoint mfViewPoint;
+ double mfOriginX;
+ double mfOriginY;
- public :
+ const double mfMap;
- Transformation2D( const SdrObject* pCustomShape, const Rectangle& rBoundRect, const double* pMap );
+ public :
+ Transformation2D(const SdrObjCustomShape& rCustomShape, const double fMap);
- basegfx::B3DPolygon ApplySkewSettings( const basegfx::B3DPolygon& rPolygon3D ) const;
- Point Transform2D( const basegfx::B3DPoint& rPoint ) const;
- sal_Bool IsParallel() const;
+ basegfx::B3DPolygon ApplySkewSettings(const basegfx::B3DPolygon& rPolygon3D) const;
+ basegfx::B2DPoint Transform2D(const basegfx::B3DPoint& rPoint) const;
+ bool IsParallel() const;
};
friend class Transformation2D;
- protected :
- static Rectangle CalculateNewSnapRect( const SdrObject* pCustomShape, const Rectangle& rSnapRect, const Rectangle& rBoundRect, const double* pMap );
-
- public :
- static SdrObject* Create3DObject( const SdrObject* pShape2d, const SdrObject* pCustomShape );
+protected :
+ static basegfx::B2DRange CalculateNewSnapRect(
+ const SdrObjCustomShape& rCustomShape,
+ const basegfx::B2DRange& rSnapRect,
+ const basegfx::B2DRange& rBoundRect,
+ const double fMap);
+
+public :
+ static SdrObject* Create3DObject(
+ const SdrObject& rShape2d,
+ const SdrObjCustomShape& rCustomShape);
};
#endif