summaryrefslogtreecommitdiff
path: root/binfilter/bf_svx/source/engine3d/svx_sphere3d.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'binfilter/bf_svx/source/engine3d/svx_sphere3d.cxx')
-rw-r--r--binfilter/bf_svx/source/engine3d/svx_sphere3d.cxx703
1 files changed, 703 insertions, 0 deletions
diff --git a/binfilter/bf_svx/source/engine3d/svx_sphere3d.cxx b/binfilter/bf_svx/source/engine3d/svx_sphere3d.cxx
new file mode 100644
index 000000000000..25b261692555
--- /dev/null
+++ b/binfilter/bf_svx/source/engine3d/svx_sphere3d.cxx
@@ -0,0 +1,703 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "svdstr.hrc"
+
+#include "svdio.hxx"
+
+#include "svditer.hxx"
+
+#include "svdmodel.hxx"
+
+
+
+#include "polyob3d.hxx"
+
+#include "sphere3d.hxx"
+
+
+#include "svxids.hrc"
+
+namespace binfilter {
+
+/*N*/ TYPEINIT1(E3dSphereObj, E3dCompoundObject);
+
+/*************************************************************************
+|*
+|* Kugel erzeugen ohne die Polygone darin zu erzeugen
+|*
+\************************************************************************/
+
+// FG: Dieser Aufruf erfolgt von der 3D-Object Factory (objfac3d.cxx) und zwar ausschliesslich beim
+// laden von Dokumenten. Hier braucht man keinen CreateSphere-Aufruf, denn die wirkliche
+// Anzahl Segmente ist ja noch nicht bekannt. Dies war bis zum 10.2.97 ein (kleines)
+// Speicherleck.
+/*N*/ E3dSphereObj::E3dSphereObj(int dummy) // den Parameter braucht es um unterscheiden zu koennen, welcher
+/*N*/ { // der beiden Konstruktoren gemeint ist. Der obige halt per Default
+/*N*/ // Defaults setzen
+/*N*/ E3dDefaultAttributes aDefault;
+/*N*/ SetDefaultAttributes(aDefault);
+/*N*/ }
+
+/*N*/ void E3dSphereObj::SetDefaultAttributes(E3dDefaultAttributes& rDefault)
+/*N*/ {
+/*N*/ // Defaults setzen
+/*N*/ aCenter = rDefault.GetDefaultSphereCenter();
+/*N*/ aSize = rDefault.GetDefaultSphereSize();
+/*N*/ }
+
+/*************************************************************************
+|*
+|* Give out simple line geometry
+|*
+\************************************************************************/
+
+/*N*/ void E3dSphereObj::GetLineGeometry(PolyPolygon3D& rLinePolyPolygon) const
+/*N*/ {
+/*N*/ // add geometry describing polygons to rLinePolyPolygon
+/*N*/ sal_uInt16 nCntHor = (sal_uInt16)GetHorizontalSegments();
+/*N*/ sal_uInt16 nCntVer = (sal_uInt16)GetVerticalSegments();
+/*N*/ const Vector3D aRadius = aSize / 2;
+/*N*/ const double fHInc = (double)DEG2RAD(360) / nCntHor;
+/*N*/ const double fVInc = (double)DEG2RAD(180) / nCntVer;
+/*N*/ sal_uInt16 nCntHorPoly = nCntVer - 1;
+/*N*/ sal_uInt16 nIndHorPoly = rLinePolyPolygon.Count();
+/*N*/ sal_uInt16 a;
+/*N*/ double fHAng = 0.0;
+/*N*/
+/*N*/ for(a = 0; a < nCntHorPoly; a++)
+/*N*/ {
+/*N*/ Polygon3D aNewHor(nCntHor + 1);
+/*N*/ //aNewHor.SetClosed(TRUE);
+/*N*/ rLinePolyPolygon.Insert(aNewHor);
+/*N*/ }
+/*N*/
+/*N*/ for(sal_uInt16 nH(0); nH < nCntHor; nH++)
+/*N*/ {
+/*N*/ double fHSin = sin(fHAng);
+/*N*/ double fHCos = cos(fHAng);
+/*N*/ fHAng += fHInc;
+/*N*/ double fVAng = DEG2RAD(90);
+/*N*/ Polygon3D aNewVer(nCntVer + 1);
+/*N*/
+/*N*/ for(sal_uInt16 nV(0); nV <= nCntVer; nV++)
+/*N*/ {
+/*N*/ double fVSin = sin(fVAng);
+/*N*/ double fVCos = cos(fVAng);
+/*N*/ fVAng -= fVInc;
+/*N*/
+/*N*/ Vector3D aPos = aCenter;
+/*N*/ double fRx = aRadius.X() * fVCos;
+/*N*/ double fRz = aRadius.Z() * fVCos;
+/*N*/ aPos.X() += fRx * fHCos;
+/*N*/ aPos.Y() += aRadius.Y() * fVSin;
+/*N*/ aPos.Z() += fRz * fHSin;
+/*N*/
+/*N*/ if(nV == 0)
+/*N*/ {
+/*N*/ // top position, only interesting for vertical line
+/*N*/ aNewVer[0] = aPos;
+/*N*/ }
+/*N*/ else if(nV == nCntVer)
+/*N*/ {
+/*N*/ // bottom position, only interesting for vertical line
+/*N*/ aNewVer[nCntVer] = aPos;
+/*N*/ }
+/*N*/ else
+/*N*/ {
+/*N*/ // normal position, insert vertical
+/*N*/ aNewVer[nV] = aPos;
+/*N*/
+/*N*/ // insert horizontal
+/*N*/ rLinePolyPolygon[nIndHorPoly + (nV - 1)][nH] = aPos;
+/*N*/ if(!nH)
+/*N*/ rLinePolyPolygon[nIndHorPoly + (nV - 1)][nCntHor] = aPos;
+/*N*/ }
+/*N*/ }
+/*N*/
+/*N*/ /// insert new vertical poly
+/*N*/ rLinePolyPolygon.Insert(aNewVer);
+/*N*/ }
+/*N*/
+/*N*/ // don't call parent
+/*N*/ // E3dCompoundObject::GetLineGeometry(rLinePolyPolygon);
+/*N*/ }
+
+/*************************************************************************
+|*
+|* Geometrieerzeugung
+|*
+\************************************************************************/
+
+/*N*/ void E3dSphereObj::CreateGeometry()
+/*N*/ {
+/*N*/ Polygon3D aRect3D(4);
+/*N*/ Polygon3D aNormal3D(4);
+/*N*/ Polygon3D aTexture3D(4);
+/*N*/
+/*N*/ if ( GetHorizontalSegments() < 3 )
+/*N*/ mpObjectItemSet->Put(Svx3DHorizontalSegmentsItem(3));
+/*N*/
+/*N*/ if ( GetHorizontalSegments() > 100 )
+/*N*/ mpObjectItemSet->Put(Svx3DHorizontalSegmentsItem(100));
+/*N*/
+/*N*/ if ( GetVerticalSegments() < 2 )
+/*N*/ mpObjectItemSet->Put(Svx3DVerticalSegmentsItem(2));
+/*N*/
+/*N*/ if ( GetVerticalSegments() > 100 )
+/*N*/ mpObjectItemSet->Put(Svx3DVerticalSegmentsItem(100));
+/*N*/
+/*N*/ // Start der Geometrieerzeugung ankuendigen
+/*N*/ StartCreateGeometry();
+/*N*/
+/*N*/ Vector3D aRadius = aSize / 2;
+/*N*/ double fHSin1, fHSin2, fHCos1, fHCos2;
+/*N*/ double fHAng = 0;
+/*N*/ double fHInc = DEG2RAD(360) / GetHorizontalSegments();
+/*N*/ double fVInc = DEG2RAD(180) / GetVerticalSegments();
+/*N*/
+/*N*/ fHSin2 = 0.0; // sin(0)
+/*N*/ fHCos2 = 1.0; // cos(0)
+/*N*/ sal_uInt16 nUpperBound = (sal_uInt16)GetHorizontalSegments();
+/*N*/
+/*N*/ for (USHORT nH = 0; nH < nUpperBound; nH++)
+/*N*/ {
+/*N*/ fHAng += fHInc;
+/*N*/ fHSin1 = fHSin2;
+/*N*/ fHSin2 = sin(fHAng);
+/*N*/ fHCos1 = fHCos2;
+/*N*/ fHCos2 = cos(fHAng);
+/*N*/
+/*N*/ double fRx, fRz;
+/*N*/ double fVAng = DEG2RAD(90);
+/*N*/ double fVSin1, fVSin2, fVCos1, fVCos2;
+/*N*/ fVSin2 = 1.0; // sin(90)
+/*N*/ fVCos2 = 0.0; // cos(90)
+/*N*/ sal_uInt16 nUpperVert = (sal_uInt16)GetVerticalSegments();
+/*N*/
+/*N*/ for (USHORT nV = 0; nV < nUpperVert; nV++)
+/*N*/ {
+/*N*/ Vector3D aPos;
+/*N*/
+/*N*/ fVAng -= fVInc;
+/*N*/ fVSin1 = fVSin2;
+/*N*/ fVSin2 = sin(fVAng);
+/*N*/ fVCos1 = fVCos2;
+/*N*/ fVCos2 = cos(fVAng);
+/*N*/
+/*N*/ aPos = aCenter;
+/*N*/ fRx = aRadius.X() * fVCos1;
+/*N*/ fRz = aRadius.Z() * fVCos1;
+/*N*/ aPos.X() += fRx * fHCos1;
+/*N*/ aPos.Y() += aRadius.Y() * fVSin1;
+/*N*/ aPos.Z() += fRz * fHSin1;
+/*N*/ aRect3D[1] = aPos;
+/*N*/
+/*N*/ aPos.X() = aCenter.X() + fRx * fHCos2;
+/*N*/ aPos.Z() = aCenter.Z() + fRz * fHSin2;
+/*N*/ aRect3D[2] = aPos;
+/*N*/
+/*N*/ aPos = aCenter;
+/*N*/ fRx = aRadius.X() * fVCos2;
+/*N*/ fRz = aRadius.Z() * fVCos2;
+/*N*/ aPos.X() += fRx * fHCos1;
+/*N*/ aPos.Y() += aRadius.Y() * fVSin2;
+/*N*/ aPos.Z() += fRz * fHSin1;
+/*N*/ aRect3D[0] = aPos;
+/*N*/
+/*N*/ aPos.X() = aCenter.X() + fRx * fHCos2;
+/*N*/ aPos.Z() = aCenter.Z() + fRz * fHSin2;
+/*N*/ aRect3D[3] = aPos;
+/*N*/
+/*N*/ if(GetCreateTexture())
+/*N*/ {
+/*N*/ aTexture3D[1].X() =
+/*N*/ (double)(nUpperBound - (nH + 1)) / (double)nUpperBound;
+/*N*/ aTexture3D[1].Y() =
+/*N*/ (double)nV / (double)nUpperVert;
+/*N*/
+/*N*/ aTexture3D[2].X() =
+/*N*/ (double)((nUpperBound - (nH + 1)) - 1) / (double)nUpperBound;
+/*N*/ aTexture3D[2].Y() = aTexture3D[1].Y();
+/*N*/
+/*N*/ aTexture3D[3].X() = aTexture3D[2].X();
+/*N*/ aTexture3D[3].Y() =
+/*N*/ (double)(nV+1) / (double)nUpperVert;
+/*N*/
+/*N*/ aTexture3D[0].X() = aTexture3D[1].X();
+/*N*/ aTexture3D[0].Y() = aTexture3D[3].Y();
+/*N*/ }
+/*N*/
+/*N*/ if(GetCreateNormals())
+/*N*/ {
+/*N*/ aNormal3D = aRect3D;
+/*N*/ aNormal3D[0].Normalize();
+/*N*/ aNormal3D[1].Normalize();
+/*N*/ aNormal3D[2].Normalize();
+/*N*/ aNormal3D[3].Normalize();
+/*N*/
+/*N*/ if(GetCreateTexture())
+/*N*/ AddGeometry(aRect3D, aNormal3D, aTexture3D, FALSE);
+/*N*/ else
+/*N*/ AddGeometry(aRect3D, aNormal3D, FALSE);
+/*N*/ }
+/*N*/ else
+/*N*/ {
+/*N*/ AddGeometry(aRect3D, FALSE);
+/*N*/ }
+/*N*/ }
+/*N*/ }
+/*N*/
+/*N*/ // call parent
+/*N*/ E3dCompoundObject::CreateGeometry();
+/*N*/ }
+
+/*************************************************************************
+|*
+|* Identifier zurueckgeben
+|*
+\************************************************************************/
+
+
+/*************************************************************************
+|*
+|* Wireframe erzeugen
+|*
+\************************************************************************/
+
+
+/*************************************************************************
+|*
+|* Wandle das Objekt in ein Gruppenobjekt bestehend aus n Polygonen
+|*
+\************************************************************************/
+
+/*N*/ SdrObject *E3dSphereObj::DoConvertToPolyObj(BOOL bBezier) const
+/*N*/ {
+/*N*/ return NULL;
+/*N*/ }
+
+/*************************************************************************
+|*
+|* Objektdaten in Stream speichern
+|*
+\************************************************************************/
+
+/*N*/ void E3dSphereObj::WriteData(SvStream& rOut) const
+/*N*/ {
+/*N*/ #ifndef SVX_LIGHT
+/*N*/ long nVersion = rOut.GetVersion(); // Build_Nr * 10 z.B. 3810
+/*N*/ if(nVersion < 3800)
+/*N*/ {
+/*N*/ // Alte Geometrie erzeugen, um die E3dPolyObj's zu haben
+/*N*/ ((E3dCompoundObject*)this)->ReCreateGeometry(TRUE);
+/*N*/ }
+/*N*/
+/*N*/ // call parent
+/*N*/ SdrAttrObj::WriteData(rOut);
+/*N*/
+/*N*/ // Fuer Abwaertskompatibilitaet (Lesen neuer Daten mit altem Code)
+/*N*/ SdrDownCompat aCompat(rOut, STREAM_WRITE);
+/*N*/ #ifdef DBG_UTIL
+/*N*/ aCompat.SetID("E3dSphereObj");
+/*N*/ #endif
+/*N*/
+/*N*/ if (rOut.GetVersion() < 3560) // FG: kleiner als die Final Beta der Version 4.0
+/*N*/ {
+/*N*/ pSub->Save(rOut);
+/*N*/ }
+/*N*/ else
+/*N*/ {
+/*N*/ // [FG] Jetzt wird die Kindliste abgeklapptert, allerdings weiss ich im Gegensatz zu
+/*N*/ // Joe dass es nur E3dPolyObj - Kindobjekte sein koennen.
+/*N*/ // Jedes dieser Objekte frage ich ob es eigene Attribute enthaelt. Falls OwnStyle ()
+/*N*/ // true liefert, werde ich das Polygon nicht wegspeichern.
+/*N*/
+/*N*/ SdrObjListIter aIter(*pSub,IM_FLAT);
+/*N*/ while (aIter.IsMore()) {
+/*N*/ E3dPolyObj* pObj=(E3dPolyObj *) aIter.Next();
+/*N*/ if ((!pObj->IsNotPersistent()) && (pObj->OwnAttrs() || pObj->OwnStyle()))
+/*N*/ {
+/*N*/ rOut<<*pObj;
+/*N*/ }
+/*N*/ if (pSub->GetModel()!=NULL) pSub->GetModel()->IncProgress();
+/*N*/ }
+/*N*/ SdrIOHeader(rOut,STREAM_WRITE,SdrIOEndeID); // Endemarke
+/*N*/ }
+/*N*/
+/*N*/ // Daß hier gehört zum E3dObject (ohne Basisklassen);
+/*N*/ if (rOut.GetVersion() < 3560)
+/*N*/ {
+/*N*/ rOut << aLocalBoundVol;
+/*N*/
+/*N*/ Old_Matrix3D aMat3D;
+/*N*/ aMat3D = aTfMatrix;
+/*N*/ rOut << aMat3D;
+/*N*/
+/*N*/ rOut << nLogicalGroup;
+/*N*/ rOut << nObjTreeLevel;
+/*N*/ rOut << nPartOfParent;
+/*N*/ rOut << UINT16(eDragDetail);
+/*N*/ }
+/*N*/ else
+/*N*/ {
+/*N*/ E3dObject::WriteOnlyOwnMembers(rOut);
+/*N*/ }
+/*N*/ // Das gehört zu E3dSphere
+/*N*/ rOut << GetHorizontalSegments();
+/*N*/
+/*N*/ rOut << GetVerticalSegments();
+/*N*/
+/*N*/ rOut << aCenter;
+/*N*/ rOut << aSize;
+/*N*/
+/*N*/ // Das hier ist ein Merkmal eines Compound-Objektes
+/*N*/ rOut << GetDoubleSided();
+/*N*/
+/*N*/ // Ab Version 395 (8.6.98): Parameter aus dem Objekt
+/*N*/ // E3dCompoundObject. Da irgendwann mal jemand die Ableitungs-
+/*N*/ // hierarchie beim FileFormat unterbrochen hat, wurden diese Attribute
+/*N*/ // bisher NOCH NIE gespeichert (Grrr). Diese Stelle muss nun natuerlich
+/*N*/ // auch IMMER MITGEPFLEGT werden, wenn sich Parameter in
+/*N*/ // E3dCompoundObject oder E3dObject aendern.
+/*N*/ rOut << GetDoubleSided();
+/*N*/
+/*N*/ rOut << BOOL(bCreateNormals);
+/*N*/ rOut << BOOL(bCreateTexture);
+/*N*/
+/*N*/ sal_uInt16 nVal = GetNormalsKind();
+/*N*/ rOut << BOOL(nVal > 0);
+/*N*/ rOut << BOOL(nVal > 1);
+/*N*/
+/*N*/ nVal = GetTextureProjectionX();
+/*N*/ rOut << BOOL(nVal > 0);
+/*N*/ rOut << BOOL(nVal > 1);
+/*N*/
+/*N*/ nVal = GetTextureProjectionY();
+/*N*/ rOut << BOOL(nVal > 0);
+/*N*/ rOut << BOOL(nVal > 1);
+/*N*/
+/*N*/ rOut << BOOL(GetShadow3D());
+/*N*/
+/*N*/ rOut << GetMaterialAmbientColor();
+/*N*/ rOut << GetMaterialColor();
+/*N*/ rOut << GetMaterialSpecular();
+/*N*/ rOut << GetMaterialEmission();
+/*N*/ rOut << GetMaterialSpecularIntensity();
+/*N*/
+/*N*/ aBackMaterial.WriteData(rOut);
+/*N*/
+/*N*/ rOut << (UINT16)GetTextureKind();
+/*N*/
+/*N*/ rOut << (UINT16)GetTextureMode();
+/*N*/
+/*N*/ rOut << BOOL(GetNormalsInvert());
+/*N*/
+/*N*/ // neu ab 534: (hat noch gefehlt)
+/*N*/ rOut << BOOL(GetTextureFilter());
+/*N*/
+/*N*/ if(nVersion < 3800)
+/*N*/ {
+/*N*/ // Geometrie neu erzeugen, um E3dPolyObj's wieder loszuwerden
+/*N*/ ((E3dCompoundObject*)this)->ReCreateGeometry();
+/*N*/ }
+/*N*/ #endif
+/*N*/ }
+
+/*************************************************************************
+|*
+|* Objektdaten aus Stream laden
+|*
+\************************************************************************/
+
+/*N*/ void E3dSphereObj::ReadData31(const SdrObjIOHeader& rHead, SvStream& rIn)
+/*N*/ {
+/*N*/ SdrDownCompat aCompat(rIn, STREAM_READ);
+/*N*/ #ifdef DBG_UTIL
+/*N*/ aCompat.SetID("E3dSphereObj");
+/*N*/ #endif
+/*N*/ // dann die Member
+/*N*/ UINT16 nTmp16;
+/*N*/ sal_Int32 nTmp32;
+/*N*/
+/*N*/ pSub->Load(rIn, *pPage);
+/*N*/ // FG: Die Daten des 3D-Objektes
+/*N*/ rIn >> aLocalBoundVol;
+/*N*/
+/*N*/ Old_Matrix3D aMat3D;
+/*N*/ rIn >> aMat3D;
+/*N*/ aTfMatrix = Matrix4D(aMat3D);
+/*N*/
+/*N*/ rIn >> nLogicalGroup;
+/*N*/ rIn >> nObjTreeLevel;
+/*N*/ rIn >> nPartOfParent;
+/*N*/ rIn >> nTmp16; eDragDetail = E3dDragDetail(nTmp16);
+/*N*/ // FG: Die Daten der Kugel
+/*N*/
+/*N*/ rIn >> nTmp32;
+/*N*/ mpObjectItemSet->Put(Svx3DHorizontalSegmentsItem(nTmp32));
+/*N*/
+/*N*/ rIn >> nTmp32;
+/*N*/ mpObjectItemSet->Put(Svx3DVerticalSegmentsItem(nTmp32));
+/*N*/
+/*N*/ rIn >> aCenter;
+/*N*/ rIn >> aSize;
+/*N*/
+/*N*/ bBoundVolValid = FALSE;
+/*N*/
+/*N*/ // Geometrie neu erzeugen
+/*N*/ ReCreateGeometry();
+/*N*/ }
+
+/*************************************************************************
+|*
+|* Objektdaten aus Stream laden
+|*
+\************************************************************************/
+
+/*N*/ void E3dSphereObj::ReadData(const SdrObjIOHeader& rHead, SvStream& rIn)
+/*N*/ {
+/*N*/ // FG (10.2.97) Der Pointer ist ein Kunstgriff er wird in der ReadData-Routine erzeugt dort werden
+/*N*/ // die abgespeicherten attributierten Flaechen abgelegt. Danach wird eine Kugel mit Default-Paramtern
+/*N*/ // erzeugt und dann werden die per Default erzeugten einfach, falls noetig mit denen aus dieser Liste
+/*N*/ // ausgetauscht. Am Ende von ReadData wird die Liste wieder zerstoert.
+/*N*/ E3dObjList *pLoadedE3dPolyObjs;
+/*N*/
+/*N*/ if (ImpCheckSubRecords (rHead, rIn))
+/*N*/ {
+/*N*/ // leider kann das E3dLatheObj nicht auf E3dObject abgestuetzt werden,
+/*N*/ // da neue Member hinzugekommen sind und die Kompatibilitaet erhalten
+/*N*/ // bleiben muss.
+/*N*/ SdrAttrObj::ReadData(rHead, rIn);
+/*N*/ if ((rIn.GetVersion() < 3560) || (rHead.GetVersion() <= 12))
+/*N*/ {
+/*N*/ ReadData31(rHead, rIn);
+/*N*/ return;
+/*N*/ }
+/*N*/
+/*N*/
+/*N*/ // Fuer Abwaertskompatibilitaet (Lesen neuer Daten mit altem Code)
+/*N*/ SdrDownCompat aCompat(rIn, STREAM_READ);
+/*N*/ #ifdef DBG_UTIL
+/*N*/ aCompat.SetID("E3dSphereObj");
+/*N*/ #endif
+/*N*/ // dann die Member
+/*N*/ BOOL bMyDoubleSided;
+/*N*/
+/*N*/ // [FG]: Es wird erstmal gelesen was da ist, ob es vollstaendig ist zeigt sich bei
+/*N*/ // dem Aufruf von CreateSphere, dort werden die fehlenden Flaechen einfach
+/*N*/ // erzeugt.
+/*N*/ pLoadedE3dPolyObjs = new E3dObjList(NULL, NULL);
+/*N*/ pLoadedE3dPolyObjs->SetOwnerObj(this);
+/*N*/ pLoadedE3dPolyObjs->SetListKind(SDROBJLIST_GROUPOBJ);
+/*N*/ pLoadedE3dPolyObjs->Load(rIn, *pPage);
+/*N*/ E3dObject::ReadOnlyOwnMembers(rHead, rIn);
+/*N*/
+/*N*/ if (aCompat.GetBytesLeft ())
+/*N*/ {
+/*N*/ // neue Member
+/*N*/ sal_Int32 nTmp32;
+/*N*/
+/*N*/ rIn >> nTmp32;
+/*N*/ mpObjectItemSet->Put(Svx3DHorizontalSegmentsItem(nTmp32));
+/*N*/
+/*N*/ rIn >> nTmp32;
+/*N*/ mpObjectItemSet->Put(Svx3DVerticalSegmentsItem(nTmp32));
+/*N*/
+/*N*/ rIn >> aCenter;
+/*N*/ rIn >> aSize;
+/*N*/ if (aCompat.GetBytesLeft ())
+/*N*/ {
+/*N*/ rIn >> bMyDoubleSided;
+/*N*/ mpObjectItemSet->Put(Svx3DDoubleSidedItem(bMyDoubleSided));
+/*N*/ }
+/*N*/
+/*N*/ if (aCompat.GetBytesLeft())
+/*N*/ {
+/*N*/ // Ab Version 395 (8.6.98): Parameter aus dem Objekt
+/*N*/ // E3dCompoundObject. Da irgendwann mal jemand die Ableitungs-
+/*N*/ // hierarchie beim FileFormat unterbrochen hat, wurden diese Attribute
+/*N*/ // bisher NOCH NIE gespeichert (Grrr). Diese Stelle muss nun natuerlich
+/*N*/ // auch IMMER MITGEPFLEGT werden, wenn sich Parameter in
+/*N*/ // E3dCompoundObject oder E3dObject aendern.
+/*N*/ BOOL bTmp, bTmp2;
+/*N*/ sal_uInt16 nTmp;
+/*N*/
+/*N*/ rIn >> bTmp;
+/*N*/ mpObjectItemSet->Put(Svx3DDoubleSidedItem(bTmp));
+/*N*/
+/*N*/ rIn >> bTmp; bCreateNormals = bTmp;
+/*N*/ rIn >> bTmp; bCreateTexture = bTmp;
+/*N*/
+/*N*/ rIn >> bTmp;
+/*N*/ rIn >> bTmp2;
+/*N*/ if(bTmp == FALSE && bTmp2 == FALSE)
+/*N*/ nTmp = 0;
+/*N*/ else if(bTmp == TRUE && bTmp2 == FALSE)
+/*N*/ nTmp = 1;
+/*N*/ else
+/*N*/ nTmp = 2;
+/*N*/ mpObjectItemSet->Put(Svx3DNormalsKindItem(nTmp));
+/*N*/
+/*N*/ rIn >> bTmp;
+/*N*/ rIn >> bTmp2;
+/*N*/ if(bTmp == FALSE && bTmp2 == FALSE)
+/*N*/ nTmp = 0;
+/*N*/ else if(bTmp == TRUE && bTmp2 == FALSE)
+/*N*/ nTmp = 1;
+/*N*/ else
+/*N*/ nTmp = 2;
+/*N*/ mpObjectItemSet->Put(Svx3DTextureProjectionXItem(nTmp));
+/*N*/
+/*N*/ rIn >> bTmp;
+/*N*/ rIn >> bTmp2;
+/*N*/ if(bTmp == FALSE && bTmp2 == FALSE)
+/*N*/ nTmp = 0;
+/*N*/ else if(bTmp == TRUE && bTmp2 == FALSE)
+/*N*/ nTmp = 1;
+/*N*/ else
+/*N*/ nTmp = 2;
+/*N*/ mpObjectItemSet->Put(Svx3DTextureProjectionYItem(nTmp));
+/*N*/
+/*N*/ rIn >> bTmp;
+/*N*/ mpObjectItemSet->Put(Svx3DShadow3DItem(bTmp));
+/*N*/
+/*N*/ Color aCol;
+/*N*/
+/*N*/ rIn >> aCol;
+/*N*/ SetMaterialAmbientColor(aCol);
+/*N*/
+/*N*/ rIn >> aCol;
+/*N*/ // do NOT use, this is the old 3D-Color(!)
+/*N*/ // SetItem(XFillColorItem(String(), aCol));
+/*N*/
+/*N*/ rIn >> aCol;
+/*N*/ mpObjectItemSet->Put(Svx3DMaterialSpecularItem(aCol));
+/*N*/
+/*N*/ rIn >> aCol;
+/*N*/ mpObjectItemSet->Put(Svx3DMaterialEmissionItem(aCol));
+/*N*/
+/*N*/ rIn >> nTmp;
+/*N*/ mpObjectItemSet->Put(Svx3DMaterialSpecularIntensityItem(nTmp));
+/*N*/
+/*N*/ aBackMaterial.ReadData(rIn);
+/*N*/
+/*N*/ rIn >> nTmp;
+/*N*/ mpObjectItemSet->Put(Svx3DTextureKindItem(nTmp));
+/*N*/
+/*N*/ rIn >> nTmp;
+/*N*/ mpObjectItemSet->Put(Svx3DTextureModeItem(nTmp));
+/*N*/
+/*N*/ rIn >> bTmp;
+/*N*/ mpObjectItemSet->Put(Svx3DNormalsInvertItem(bTmp));
+/*N*/
+/*N*/ }
+/*N*/
+/*N*/ // neu ab 534: (hat noch gefehlt)
+/*N*/ if (aCompat.GetBytesLeft () >= sizeof (BOOL))
+/*N*/ {
+/*N*/ BOOL bTmp;
+/*N*/ rIn >> bTmp;
+/*N*/ mpObjectItemSet->Put(Svx3DTextureFilterItem(bTmp));
+/*N*/ }
+/*N*/ }
+/*N*/ else
+/*N*/ {
+/*N*/ DBG_ERROR("AW: Kugel laden: nicht vorgesehener Fall");
+/*N*/ }
+/*N*/ pLoadedE3dPolyObjs->Clear();
+/*N*/ delete pLoadedE3dPolyObjs;
+/*N*/ }
+/*N*/
+/*N*/ // Geometrie neu erzeugen
+/*N*/ ReCreateGeometry();
+/*N*/ }
+
+/*************************************************************************
+|*
+|* Zuweisungsoperator
+|*
+\************************************************************************/
+
+
+/*************************************************************************
+|*
+|* Lokale Parameter setzen mit Geometrieneuerzeugung
+|*
+\************************************************************************/
+
+/*N*/ void E3dSphereObj::SetCenter(const Vector3D& rNew)
+/*N*/ {DBG_BF_ASSERT(0, "STRIP"); //STRIP001
+/*N*/ }
+
+/*N*/ void E3dSphereObj::SetSize(const Vector3D& rNew)
+/*N*/ {DBG_BF_ASSERT(0, "STRIP"); //STRIP001
+/*N*/ }
+
+//////////////////////////////////////////////////////////////////////////////
+// private support routines for ItemSet access
+
+/*N*/ void E3dSphereObj::PostItemChange(const sal_uInt16 nWhich)
+/*N*/ {
+/*N*/ // call parent
+/*N*/ E3dCompoundObject::PostItemChange(nWhich);
+/*N*/
+/*N*/ // local changes
+/*N*/ switch(nWhich)
+/*N*/ {
+/*N*/ case SDRATTR_3DOBJ_HORZ_SEGS:
+/*N*/ {
+/*N*/ bGeometryValid = FALSE;
+/*N*/ break;
+/*N*/ }
+/*N*/ case SDRATTR_3DOBJ_VERT_SEGS:
+/*N*/ {
+/*N*/ bGeometryValid = FALSE;
+/*N*/ break;
+/*N*/ }
+/*N*/ }
+/*N*/ }
+
+/*************************************************************************
+|*
+|* Get the name of the object (singular)
+|*
+\************************************************************************/
+
+
+/*************************************************************************
+|*
+|* Get the name of the object (plural)
+|*
+\************************************************************************/
+
+
+// EOF
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */