tdf#54857 elide more dynamic_cast

add a helper, following the same style as the ones in sw/

Change-Id: I13c673bba5ff47df6beef9d90c200e5801030cf0
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/142119
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
diff --git a/chart2/source/view/charttypes/BarChart.cxx b/chart2/source/view/charttypes/BarChart.cxx
index 8516fae..d265f9a 100644
--- a/chart2/source/view/charttypes/BarChart.cxx
+++ b/chart2/source/view/charttypes/BarChart.cxx
@@ -449,8 +449,7 @@ void BarChart::createShapes()

        for (rtl::Reference<SvxShape> const & rShape : aShapeSet)
        {
            E3dScene* pScene = dynamic_cast<E3dScene*>(rShape->GetSdrObject());
            if(nullptr != pScene)
            if(E3dScene* pScene = DynCastE3dScene(rShape->GetSdrObject()))
            {
                aSceneSet.insert(pScene->getRootE3dSceneFromE3dObject());
            }
@@ -690,10 +689,10 @@ void BarChart::doXSlot(
        aShapeSet.insert(xSeriesGroupShape_Shapes);
        aShapeSet.insert(xSeriesBackgroundShape_Shapes);
        // Suspend setting rects dirty for the duration of this call
        E3dScene* pScene = dynamic_cast<E3dScene*>(xSeriesGroupShape_Shapes->GetSdrObject());
        E3dScene* pScene = DynCastE3dScene(xSeriesGroupShape_Shapes->GetSdrObject());
        if (pScene)
            pScene->SuspendReportingDirtyRects();
        pScene = dynamic_cast<E3dScene*>(xSeriesBackgroundShape_Shapes->GetSdrObject());
        pScene = DynCastE3dScene(xSeriesBackgroundShape_Shapes->GetSdrObject());
        if (pScene)
            pScene->SuspendReportingDirtyRects();

diff --git a/chart2/source/view/diagram/VDiagram.cxx b/chart2/source/view/diagram/VDiagram.cxx
index 3ffb75b..bb52e96 100644
--- a/chart2/source/view/diagram/VDiagram.cxx
+++ b/chart2/source/view/diagram/VDiagram.cxx
@@ -183,7 +183,7 @@ void VDiagram::createShapes_2d()

static E3dScene* lcl_getE3dScene( const rtl::Reference<SvxShapeGroupAnyD>& xShape )
{
    return dynamic_cast< E3dScene* >(xShape->GetSdrObject());
    return DynCastE3dScene(xShape->GetSdrObject());
}

static void lcl_setLightSources(
diff --git a/include/svx/svdobj.hxx b/include/svx/svdobj.hxx
index 8ca06a3..0f53f15 100644
--- a/include/svx/svdobj.hxx
+++ b/include/svx/svdobj.hxx
@@ -41,6 +41,7 @@

class SfxBroadcaster;
class AutoTimer;
class E3dScene;
class OutlinerParaObject;
class Outliner;
class SdrOutliner;
@@ -996,6 +997,10 @@ private:
    SdrObject( const SdrObject& ) = delete;
};

SVXCORE_DLLPUBLIC E3dScene* DynCastE3dScene(SdrObject*);
inline const E3dScene* DynCastE3dScene(const SdrObject* p) { return DynCastE3dScene(const_cast<SdrObject*>(p)); }


struct SdrObjCreatorParams
{
    SdrInventor nInventor;
diff --git a/sd/source/ui/func/fudraw.cxx b/sd/source/ui/func/fudraw.cxx
index 8beb753..9b09a98 100644
--- a/sd/source/ui/func/fudraw.cxx
+++ b/sd/source/ui/func/fudraw.cxx
@@ -556,7 +556,7 @@ void FuDraw::ForcePointer(const MouseEvent* pMEvt)

                if (bDefPointer
                    && (dynamic_cast<const SdrObjGroup*>(pObj) != nullptr
                        || dynamic_cast<const E3dScene*>(pObj) != nullptr))
                        || DynCastE3dScene(pObj)))
                {
                    // take a glance into the group
                    pObj = mpView->PickObj(aPnt, mpView->getHitTolLog(), pPV,
@@ -698,7 +698,7 @@ bool FuDraw::RequestHelp(const HelpEvent& rHEvt)

            bReturn = SetHelpText(pObj, aPosPixel, aVEvt);

            if (!bReturn && (dynamic_cast< const SdrObjGroup *>( pObj ) != nullptr || dynamic_cast< const E3dScene* >(pObj) != nullptr))
            if (!bReturn && (dynamic_cast< const SdrObjGroup *>( pObj ) != nullptr || DynCastE3dScene(pObj)))
            {
                // take a glance into the group
                SdrPageView* pPV = nullptr;
diff --git a/sd/source/ui/func/fusel.cxx b/sd/source/ui/func/fusel.cxx
index ed7efc8..0a7bb5e 100644
--- a/sd/source/ui/func/fusel.cxx
+++ b/sd/source/ui/func/fusel.cxx
@@ -327,7 +327,7 @@ bool FuSelection::MouseButtonDown(const MouseEvent& rMEvt)

                    if (!bReturn
                        && (dynamic_cast<const SdrObjGroup*>(pObj) != nullptr
                            || dynamic_cast<const E3dScene*>(pObj) != nullptr))
                            || DynCastE3dScene(pObj)))
                    {
                        if (rMEvt.GetClicks() == 1)
                        {
diff --git a/sd/source/ui/view/drviewsj.cxx b/sd/source/ui/view/drviewsj.cxx
index a1a7d89..55103bf 100644
--- a/sd/source/ui/view/drviewsj.cxx
+++ b/sd/source/ui/view/drviewsj.cxx
@@ -136,7 +136,7 @@ void DrawViewShell::GetMenuStateSel( SfxItemSet &rSet )
            const auto* pSdrObjGroup = dynamic_cast<const SdrObjGroup*>(pObj);

            if( !( ( pSdrObjGroup != nullptr && nInv == SdrInventor::Default ) ||
                   ( dynamic_cast< const E3dScene* >(pObj) != nullptr ) ) )
                   DynCastE3dScene(pObj) ) )
            {
                rSet.DisableItem( SID_ENTER_GROUP );
            }
@@ -382,7 +382,7 @@ void DrawViewShell::GetMenuStateSel( SfxItemSet &rSet )
                }
                else if (nInv == SdrInventor::E3d)
                {
                    if(dynamic_cast< const E3dScene *>( pObj ) !=  nullptr)
                    if(DynCastE3dScene(pObj))
                        b3dObj = true;
                    else if(dynamic_cast< const E3dCompoundObject* >(pObj) !=  nullptr)
                        bE3dCompoundObject = true;
diff --git a/svx/source/engine3d/obj3d.cxx b/svx/source/engine3d/obj3d.cxx
index 4d8ad7a..1acf0b2a 100644
--- a/svx/source/engine3d/obj3d.cxx
+++ b/svx/source/engine3d/obj3d.cxx
@@ -264,10 +264,7 @@ void E3dObject::StructureChanged()

E3dScene* E3dObject::getParentE3dSceneFromE3dObject() const
{
    SdrObject* pParent = getParentSdrObjectFromSdrObject();
    if( pParent && pParent->GetObjIdentifier() == SdrObjKind::E3D_Scene )
        return static_cast<E3dScene* >(pParent);
    return nullptr;
    return DynCastE3dScene(getParentSdrObjectFromSdrObject());
}

// Determine the top-level scene object
diff --git a/svx/source/engine3d/scene3d.cxx b/svx/source/engine3d/scene3d.cxx
index cea87b3..f07fa7e 100644
--- a/svx/source/engine3d/scene3d.cxx
+++ b/svx/source/engine3d/scene3d.cxx
@@ -408,7 +408,7 @@ void E3dScene::removeAllNonSelectedObjects()
        {
            bool bRemoveObject(false);

            if(auto pScene = dynamic_cast<E3dScene*>(pObj))
            if(E3dScene* pScene = DynCastE3dScene(pObj))
            {
                // iterate over this sub-scene
                pScene->removeAllNonSelectedObjects();
diff --git a/svx/source/engine3d/view3d.cxx b/svx/source/engine3d/view3d.cxx
index 7b9e81b..a7bd239 100644
--- a/svx/source/engine3d/view3d.cxx
+++ b/svx/source/engine3d/view3d.cxx
@@ -403,7 +403,7 @@ std::unique_ptr<SdrModel> E3dView::CreateMarkedObjModel() const
            {
                const SdrObject* pSrcOb=pSrcPg->GetObj(nOb);

                if(auto p3dscene = dynamic_cast< const E3dScene* >( pSrcOb))
                if(const E3dScene* p3dscene = DynCastE3dScene( pSrcOb))
                {
                    pScene = const_cast<E3dScene*>(p3dscene);

@@ -441,7 +441,7 @@ bool E3dView::Paste(
        return false;

    // Get owner of the list
    E3dScene* pDstScene(dynamic_cast< E3dScene* >(pDstList->getSdrObjectFromSdrObjList()));
    E3dScene* pDstScene(DynCastE3dScene(pDstList->getSdrObjectFromSdrObjList()));

    if(nullptr != pDstScene)
    {
@@ -461,7 +461,7 @@ bool E3dView::Paste(
            for(size_t nOb = 0; nOb < nObjCount; ++nOb)
            {
                const SdrObject* pSrcOb = pSrcPg->GetObj(nOb);
                if(auto p3dscene = dynamic_cast< const E3dScene* >(pSrcOb))
                if(const E3dScene* p3dscene = DynCastE3dScene(pSrcOb))
                {
                    E3dScene* pSrcScene = const_cast<E3dScene*>(p3dscene);
                    ImpCloneAll3DObjectsToDestScene(pSrcScene, pDstScene, aDist);
@@ -1172,7 +1172,7 @@ bool E3dView::BegDragObj(const Point& rPnt, OutputDevice* pOut,
                SdrObject *pObj = GetMarkedObjectByIndex(nObjs);
                if(pObj)
                {
                    if( auto pScene = dynamic_cast< const E3dScene* >(pObj) )
                    if( const E3dScene* pScene = DynCastE3dScene(pObj) )
                        if( pScene->getRootE3dSceneFromE3dObject() == pObj )
                            bThereAreRootScenes = true;

@@ -1520,7 +1520,7 @@ void E3dView::Break3DObj()

void E3dView::BreakSingle3DObj(E3dObject* pObj)
{
    if(dynamic_cast< const E3dScene* >(pObj) !=  nullptr)
    if(DynCastE3dScene(pObj))
    {
        SdrObjList* pSubList = pObj->GetSubList();
        SdrObjListIter aIter(pSubList, SdrIterMode::Flat);
diff --git a/svx/source/engine3d/view3d1.cxx b/svx/source/engine3d/view3d1.cxx
index 46830af..e647fe1 100644
--- a/svx/source/engine3d/view3d1.cxx
+++ b/svx/source/engine3d/view3d1.cxx
@@ -42,7 +42,7 @@ void E3dView::ConvertMarkedToPolyObj()

        if (pObj)
        {
            auto pScene = dynamic_cast< const E3dScene* >(pObj);
            const E3dScene* pScene = DynCastE3dScene(pObj);
            if (pScene)
            {
                pNewObj = pScene->ConvertToPolyObj(false/*bBezier*/, false/*bLineToArea*/);
diff --git a/svx/source/svdraw/clonelist.cxx b/svx/source/svdraw/clonelist.cxx
index 12f395a..840ea335 100644
--- a/svx/source/svdraw/clonelist.cxx
+++ b/svx/source/svdraw/clonelist.cxx
@@ -34,10 +34,10 @@ void CloneList::AddPair(const SdrObject* pOriginal, SdrObject* pClone)
    bool bOriginalIsGroup(pOriginal->IsGroupObject());
    bool bCloneIsGroup(pClone->IsGroupObject());

    if(bOriginalIsGroup && dynamic_cast<const E3dObject* >(pOriginal) != nullptr && dynamic_cast<const E3dScene* >(pOriginal) == nullptr )
    if(bOriginalIsGroup && dynamic_cast<const E3dObject* >(pOriginal) != nullptr && DynCastE3dScene(pOriginal) == nullptr )
        bOriginalIsGroup = false;

    if(bCloneIsGroup && dynamic_cast<const E3dObject* >(pClone) != nullptr && dynamic_cast<const E3dScene* >(pClone) == nullptr)
    if(bCloneIsGroup && dynamic_cast<const E3dObject* >(pClone) != nullptr && DynCastE3dScene(pClone) == nullptr)
        bCloneIsGroup = false;

    if(!(bOriginalIsGroup && bCloneIsGroup))
diff --git a/svx/source/svdraw/svdcrtv.cxx b/svx/source/svdraw/svdcrtv.cxx
index 1aa9d1d..7e025cf 100644
--- a/svx/source/svdraw/svdcrtv.cxx
+++ b/svx/source/svdraw/svdcrtv.cxx
@@ -618,8 +618,8 @@ bool SdrCreateView::EndCreateObj(SdrCreateCmd eCmd)
                // recognize creation of a new 3D object inside a 3D scene
                bool bSceneIntoScene(false);

                E3dScene* pObjScene = dynamic_cast<E3dScene*>(pObjCreated);
                E3dScene* pCurrentScene = pObjScene ? dynamic_cast<E3dScene*>(mpCreatePV->GetCurrentGroup()) : nullptr;
                E3dScene* pObjScene = DynCastE3dScene(pObjCreated);
                E3dScene* pCurrentScene = pObjScene ? DynCastE3dScene(mpCreatePV->GetCurrentGroup()) : nullptr;
                if (pCurrentScene)
                {
                    bool bDidInsert = static_cast<E3dView*>(this)->ImpCloneAll3DObjectsToDestScene(
diff --git a/svx/source/svdraw/svdedtv.cxx b/svx/source/svdraw/svdedtv.cxx
index 8dbdaa8..68026d9 100644
--- a/svx/source/svdraw/svdedtv.cxx
+++ b/svx/source/svdraw/svdedtv.cxx
@@ -150,7 +150,7 @@ bool SdrEditView::ImpDelLayerCheck(SdrObjList const * pOL, SdrLayerID nDelID) co
        SdrObjList* pSubOL = pObj->GetSubList();

        // explicitly test for group objects and 3d scenes
        if(pSubOL && (dynamic_cast<const SdrObjGroup*>(pObj) != nullptr || dynamic_cast< const E3dScene* >(pObj) !=  nullptr))
        if(pSubOL && (dynamic_cast<const SdrObjGroup*>(pObj) != nullptr || DynCastE3dScene(pObj)))
        {
            if(!ImpDelLayerCheck(pSubOL, nDelID))
            {
@@ -185,7 +185,7 @@ void SdrEditView::ImpDelLayerDelObjs(SdrObjList* pOL, SdrLayerID nDelID)


        // explicitly test for group objects and 3d scenes
        if(pSubOL && (dynamic_cast<const SdrObjGroup*>( pObj) != nullptr || dynamic_cast<const E3dScene* >(pObj) !=  nullptr))
        if(pSubOL && (dynamic_cast<const SdrObjGroup*>( pObj) != nullptr || DynCastE3dScene(pObj)))
        {
            if(ImpDelLayerCheck(pSubOL, nDelID))
            {
@@ -249,7 +249,7 @@ void SdrEditView::DeleteLayer(const OUString& rName)
                SdrObjList* pSubOL = pObj->GetSubList();

                // explicitly test for group objects and 3d scenes
                if(pSubOL && (dynamic_cast<const SdrObjGroup*>(pObj) != nullptr || dynamic_cast<const E3dScene* >(pObj) !=  nullptr))
                if(pSubOL && (dynamic_cast<const SdrObjGroup*>(pObj) != nullptr || DynCastE3dScene(pObj)))
                {
                    if(ImpDelLayerCheck(pSubOL, nDelID))
                    {
diff --git a/svx/source/svdraw/svdmark.cxx b/svx/source/svdraw/svdmark.cxx
index e3c77bda..ff556ee 100644
--- a/svx/source/svdraw/svdmark.cxx
+++ b/svx/source/svdraw/svdmark.cxx
@@ -700,7 +700,7 @@ namespace sdr

        bool bIsGroup(pObj->IsGroupObject());

        if(bIsGroup && dynamic_cast< const E3dObject* >(pObj) != nullptr && dynamic_cast< const E3dScene* >(pObj) == nullptr)
        if(bIsGroup && dynamic_cast< const E3dObject* >(pObj) != nullptr && DynCastE3dScene(pObj) == nullptr)
        {
            bIsGroup = false;
        }
diff --git a/svx/source/svdraw/svdmrkv.cxx b/svx/source/svdraw/svdmrkv.cxx
index 3e4383c..90ebb72 100644
--- a/svx/source/svdraw/svdmrkv.cxx
+++ b/svx/source/svdraw/svdmrkv.cxx
@@ -2052,7 +2052,7 @@ bool SdrMarkView::MarkNextObj(const Point& rPnt, short nTol, bool bPrev)
        nullptr != dynamic_cast< const E3dCompoundObject* >(pObjHit);
    if (bRemap)
    {
        pScene = dynamic_cast< E3dScene* >(pObjHit->getParentSdrObjectFromSdrObject());
        pScene = DynCastE3dScene(pObjHit->getParentSdrObjectFromSdrObject());
        bRemap = nullptr != pScene;
    }

@@ -2381,41 +2381,37 @@ SdrObject* SdrMarkView::CheckSingleSdrObjectHit(const Point& rPnt, sal_uInt16 nT
{
    SdrObject* pRet=nullptr;
    rpRootObj=nullptr;
    if (pOL!=nullptr)
    if (!pOL)
        return nullptr;
    const E3dScene* pRemapScene = DynCastE3dScene(pOL->getSdrObjectFromSdrObjList());
    const size_t nObjCount(pOL->GetObjCount());
    size_t nObjNum(nObjCount);

    while (pRet==nullptr && nObjNum>0)
    {
        const bool bRemap(
            nullptr != pOL->getSdrObjectFromSdrObjList()
            && nullptr != dynamic_cast< const E3dScene* >(pOL->getSdrObjectFromSdrObjList()));
        const E3dScene* pRemapScene(bRemap ? static_cast< E3dScene* >(pOL->getSdrObjectFromSdrObjList()) : nullptr);
        const size_t nObjCount(pOL->GetObjCount());
        size_t nObjNum(nObjCount);
        nObjNum--;
        SdrObject* pObj;

        while (pRet==nullptr && nObjNum>0)
        if(pRemapScene)
        {
            nObjNum--;
            SdrObject* pObj;

            if(bRemap)
            pObj = pOL->GetObj(pRemapScene->RemapOrdNum(nObjNum));
        }
        else
        {
            pObj = pOL->GetObj(nObjNum);
        }
        if (nOptions & SdrSearchOptions::BEFOREMARK)
        {
            if (pMarkList!=nullptr)
            {
                pObj = pOL->GetObj(pRemapScene->RemapOrdNum(nObjNum));
            }
            else
            {
                pObj = pOL->GetObj(nObjNum);
            }
            if (nOptions & SdrSearchOptions::BEFOREMARK)
            {
                if (pMarkList!=nullptr)
                if ((*pMarkList).FindObject(pObj)!=SAL_MAX_SIZE)
                {
                    if ((*pMarkList).FindObject(pObj)!=SAL_MAX_SIZE)
                    {
                        return nullptr;
                    }
                    return nullptr;
                }
            }
            pRet=CheckSingleSdrObjectHit(rPnt,nTol,pObj,pPV,nOptions,pMVisLay);
            if (pRet!=nullptr) rpRootObj=pObj;
        }
        pRet=CheckSingleSdrObjectHit(rPnt,nTol,pObj,pPV,nOptions,pMVisLay);
        if (pRet!=nullptr) rpRootObj=pObj;
    }
    return pRet;
}
diff --git a/svx/source/svdraw/svdobj.cxx b/svx/source/svdraw/svdobj.cxx
index 2840854..cd59bbe 100644
--- a/svx/source/svdraw/svdobj.cxx
+++ b/svx/source/svdraw/svdobj.cxx
@@ -3094,7 +3094,7 @@ void SdrObject::MakeNameUnique()
{
    if (GetName().isEmpty())
    {
        if (const E3dScene* pE3dObj = dynamic_cast<const E3dScene*>(this))
        if (const E3dScene* pE3dObj = DynCastE3dScene(this))
        {
            SdrObjList* pObjList = pE3dObj->GetSubList();
            if (pObjList)
@@ -3195,6 +3195,13 @@ void SdrObject::moveOutRectangle(sal_Int32 nXDelta, sal_Int32 nYDelta)
    m_aOutRect.Move(nXDelta, nYDelta);
}

E3dScene* DynCastE3dScene(SdrObject* pObj)
{
    if( pObj && pObj->GetObjInventor() == SdrInventor::E3d && pObj->GetObjIdentifier() == SdrObjKind::E3D_Scene )
        return static_cast<E3dScene*>(pObj);
    return nullptr;
}

rtl::Reference<SdrObject> SdrObjFactory::CreateObjectFromFactory(SdrModel& rSdrModel, SdrInventor nInventor, SdrObjKind nObjIdentifier)
{
    SdrObjCreatorParams aParams { nInventor, nObjIdentifier, rSdrModel };
diff --git a/svx/source/svdraw/svdundo.cxx b/svx/source/svdraw/svdundo.cxx
index 7fe649e..0df375d 100644
--- a/svx/source/svdraw/svdundo.cxx
+++ b/svx/source/svdraw/svdundo.cxx
@@ -257,7 +257,7 @@ SdrUndoAttrObj::SdrUndoAttrObj(SdrObject& rNewObj, bool bStyleSheet1, bool bSave

    SdrObjList* pOL = rNewObj.GetSubList();
    bool bIsGroup(pOL!=nullptr && pOL->GetObjCount());
    bool bIs3DScene(bIsGroup && dynamic_cast< E3dScene* >(mxObj.get()) !=  nullptr);
    bool bIs3DScene(bIsGroup && DynCastE3dScene(mxObj.get()));

    if(bIsGroup)
    {
@@ -300,7 +300,7 @@ SdrUndoAttrObj::~SdrUndoAttrObj()
void SdrUndoAttrObj::Undo()
{
    E3DModifySceneSnapRectUpdater aUpdater(mxObj.get());
    bool bIs3DScene(dynamic_cast< E3dScene* >(mxObj.get()) !=  nullptr);
    bool bIs3DScene(DynCastE3dScene(mxObj.get()));

    // Trigger PageChangeCall
    ImpShowPageOfThisObject();
@@ -409,7 +409,7 @@ void SdrUndoAttrObj::Undo()
void SdrUndoAttrObj::Redo()
{
    E3DModifySceneSnapRectUpdater aUpdater(mxObj.get());
    bool bIs3DScene(dynamic_cast< E3dScene* >(mxObj.get()) !=  nullptr);
    bool bIs3DScene(DynCastE3dScene(mxObj.get()));

    if(!pUndoGroup || bIs3DScene)
    {
@@ -560,7 +560,7 @@ SdrUndoGeoObj::SdrUndoGeoObj(SdrObject& rNewObj)
     , mbSkipChangeLayout(false)
{
    SdrObjList* pOL=rNewObj.GetSubList();
    if (pOL!=nullptr && pOL->GetObjCount() && dynamic_cast<const E3dScene* >( &rNewObj) ==  nullptr)
    if (pOL!=nullptr && pOL->GetObjCount() && DynCastE3dScene(&rNewObj))
    {
        // this is a group object!
        // If this were 3D scene, we'd only add an Undo for the scene itself
diff --git a/svx/source/unodraw/unoshap3.cxx b/svx/source/unodraw/unoshap3.cxx
index 8176451..18f050d 100644
--- a/svx/source/unodraw/unoshap3.cxx
+++ b/svx/source/unodraw/unoshap3.cxx
@@ -191,7 +191,7 @@ sal_Int32 SAL_CALL Svx3DSceneObject::getCount()

    sal_Int32 nRetval = 0;

    if(HasSdrObject() && dynamic_cast<const E3dScene* >(GetSdrObject()) != nullptr && GetSdrObject()->GetSubList())
    if(HasSdrObject() && DynCastE3dScene(GetSdrObject()) && GetSdrObject()->GetSubList())
        nRetval = GetSdrObject()->GetSubList()->GetObjCount();
    return nRetval;
}
diff --git a/sw/source/core/unocore/unodraw.cxx b/sw/source/core/unocore/unodraw.cxx
index fe4c2d7..bb93566 100644
--- a/sw/source/core/unocore/unodraw.cxx
+++ b/sw/source/core/unocore/unodraw.cxx
@@ -367,7 +367,7 @@ uno::Reference< drawing::XShape > SwFmDrawPage::CreateShape( SdrObject *pObj ) c
            xShapeTunnel = nullptr;
            uno::Reference< uno::XInterface > xCreate(xRet, uno::UNO_QUERY);
            xRet = nullptr;
            if ( pObj->IsGroupObject() && (!pObj->Is3DObj() || (dynamic_cast<const E3dScene*>( pObj) !=  nullptr)) )
            if ( pObj->IsGroupObject() && (!pObj->Is3DObj() || DynCastE3dScene(pObj)) )
                pShape = new SwXGroupShape(xCreate, nullptr);
            else
                pShape = new SwXShape(xCreate, nullptr);