xref: /aoo41x/main/svx/inc/svx/view3d.hxx (revision 3334a7e6)
1*3334a7e6SAndrew Rist /**************************************************************
2*3334a7e6SAndrew Rist  *
3*3334a7e6SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*3334a7e6SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*3334a7e6SAndrew Rist  * distributed with this work for additional information
6*3334a7e6SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*3334a7e6SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*3334a7e6SAndrew Rist  * "License"); you may not use this file except in compliance
9*3334a7e6SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*3334a7e6SAndrew Rist  *
11*3334a7e6SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*3334a7e6SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*3334a7e6SAndrew Rist  * software distributed under the License is distributed on an
15*3334a7e6SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*3334a7e6SAndrew Rist  * KIND, either express or implied.  See the License for the
17*3334a7e6SAndrew Rist  * specific language governing permissions and limitations
18*3334a7e6SAndrew Rist  * under the License.
19*3334a7e6SAndrew Rist  *
20*3334a7e6SAndrew Rist  *************************************************************/
21*3334a7e6SAndrew Rist 
22*3334a7e6SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifndef _E3D_VIEW3D_HXX
25cdf0e10cSrcweir #define _E3D_VIEW3D_HXX
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <svx/svdview.hxx>
28cdf0e10cSrcweir #include <svx/def3d.hxx>
29cdf0e10cSrcweir #include <svx/deflt3d.hxx>
30cdf0e10cSrcweir #include <basegfx/point/b2dpoint.hxx>
31cdf0e10cSrcweir #include "svx/svxdllapi.h"
32cdf0e10cSrcweir 
33cdf0e10cSrcweir //************************************************************
34cdf0e10cSrcweir //   Vorausdeklarationen
35cdf0e10cSrcweir //************************************************************
36cdf0e10cSrcweir 
37cdf0e10cSrcweir class E3dObject;
38cdf0e10cSrcweir class E3dScene;
39cdf0e10cSrcweir class SceneList;
40cdf0e10cSrcweir class Impl3DMirrorConstructOverlay;
41cdf0e10cSrcweir 
42cdf0e10cSrcweir /*************************************************************************
43cdf0e10cSrcweir |*
44cdf0e10cSrcweir |* Ableitung von SdrView zur Bearbeitung von 3D-Objekten
45cdf0e10cSrcweir |*
46cdf0e10cSrcweir \************************************************************************/
47cdf0e10cSrcweir 
48cdf0e10cSrcweir class SVX_DLLPUBLIC E3dView : public SdrView
49cdf0e10cSrcweir {
50cdf0e10cSrcweir protected:
51cdf0e10cSrcweir 	E3dDefaultAttributes		a3DDefaultAttr;
52cdf0e10cSrcweir 	MouseEvent					aMouseEvent;					// Die Parameter der letzten Events (Mouse, Keyboard)
53cdf0e10cSrcweir 	Color						aDefaultLightColor;             // dito mit den Farben
54cdf0e10cSrcweir 	Color						aDefaultAmbientColor;
55cdf0e10cSrcweir 
56cdf0e10cSrcweir 	double						fDefaultScaleX;                 // Verzerrungen
57cdf0e10cSrcweir 	double						fDefaultScaleY;
58cdf0e10cSrcweir 	double						fDefaultScaleZ;
59cdf0e10cSrcweir 	double						fDefaultRotateX;                // und Drehungen
60cdf0e10cSrcweir 	double						fDefaultRotateY;
61cdf0e10cSrcweir 	double						fDefaultRotateZ;
62cdf0e10cSrcweir 	double						fDefaultExtrusionDeepth;        // Extrusionstiefe
63cdf0e10cSrcweir 	double						fDefaultLightIntensity;         // Intensitaeten der beiden (notwendigen) Licht-
64cdf0e10cSrcweir 	double						fDefaultAmbientIntensity;       // quellen
65cdf0e10cSrcweir 	long						nHDefaultSegments;              // wieviele HSegmente braucht mein Lathe-Ojekt
66cdf0e10cSrcweir 	long						nVDefaultSegments;              // wieviele VSegmente braucht mein Lathe-Ojekt
67cdf0e10cSrcweir 
68cdf0e10cSrcweir 	E3dDragConstraint			eDragConstraint;
69cdf0e10cSrcweir 
70cdf0e10cSrcweir 	// Migrate selections
71cdf0e10cSrcweir 	Impl3DMirrorConstructOverlay*					mpMirrorOverlay;
72cdf0e10cSrcweir 
73cdf0e10cSrcweir 	sal_Bool						bDoubleSided;
74cdf0e10cSrcweir 
75cdf0e10cSrcweir 	void InitView();
76cdf0e10cSrcweir 
77cdf0e10cSrcweir 	void ImpCreate3DObject(E3dScene* pScene, SdrObject* pObj, sal_Bool bExtrude, double fDepth, basegfx::B2DHomMatrix& rLatheMat);
78cdf0e10cSrcweir 	void ImpCreateSingle3DObjectFlat(E3dScene* pScene, SdrObject* pObj, sal_Bool bExtrude, double fDepth, basegfx::B2DHomMatrix& rLatheMat);
79cdf0e10cSrcweir 	void ImpChangeSomeAttributesFor3DConversion(SdrObject* pObj);
80cdf0e10cSrcweir 	void ImpChangeSomeAttributesFor3DConversion2(SdrObject* pObj);
81cdf0e10cSrcweir 
82cdf0e10cSrcweir 	void InitScene(E3dScene* pScene, double fW, double fH, double fCamZ);
83cdf0e10cSrcweir 	void ImpIsConvertTo3DPossible(SdrObject* pObj, sal_Bool& rAny3D, sal_Bool& rGroupSelected) const;
84cdf0e10cSrcweir 	void BreakSingle3DObj(E3dObject* pObj);
85cdf0e10cSrcweir 
86cdf0e10cSrcweir public:
87cdf0e10cSrcweir 	TYPEINFO();
88cdf0e10cSrcweir 	E3dView(SdrModel* pModel, OutputDevice* pOut = 0L);
89cdf0e10cSrcweir 	virtual ~E3dView();
90cdf0e10cSrcweir 
91cdf0e10cSrcweir 	// Alle markierten Objekte auf dem angegebenen OutputDevice ausgeben.
92cdf0e10cSrcweir 	virtual void DrawMarkedObj(OutputDevice& rOut) const;
93cdf0e10cSrcweir 
94cdf0e10cSrcweir 	// Zugriff auf die Default-Attribute
Get3DDefaultAttributes()95cdf0e10cSrcweir 	E3dDefaultAttributes& Get3DDefaultAttributes() { return a3DDefaultAttr; }
96cdf0e10cSrcweir 	virtual sal_Bool BegDragObj(const Point& rPnt, OutputDevice* pOut = NULL, SdrHdl* pHdl = NULL, short nMinMov = -3, SdrDragMethod* pForcedMeth = NULL);
97cdf0e10cSrcweir 	virtual	void CheckPossibilities();
98cdf0e10cSrcweir 
99cdf0e10cSrcweir 	// Event setzen/rausruecken
SetMouseEvent(const MouseEvent & rNew)100cdf0e10cSrcweir 	void SetMouseEvent(const MouseEvent& rNew) { aMouseEvent = rNew; }
GetMouseEvent()101cdf0e10cSrcweir 	const MouseEvent& GetMouseEvent() { return aMouseEvent; }
102cdf0e10cSrcweir 
103cdf0e10cSrcweir 	// Model holen ueberladen, da bei einzelnen 3D Objekten noch eine Szene
104cdf0e10cSrcweir 	// untergeschoben werden muss
105cdf0e10cSrcweir 	virtual SdrModel* GetMarkedObjModel() const;
106cdf0e10cSrcweir 
107cdf0e10cSrcweir 	// Bei Paste muss - falls in eine Scene eingefuegt wird - die
108cdf0e10cSrcweir 	// Objekte der Szene eingefuegt werden, die Szene selbst aber nicht
109cdf0e10cSrcweir 	using SdrView::Paste;
110cdf0e10cSrcweir 	virtual sal_Bool Paste(const SdrModel& rMod, const Point& rPos, SdrObjList* pLst=NULL, sal_uInt32 nOptions=0);
111cdf0e10cSrcweir 
112cdf0e10cSrcweir 	// #83403# Service routine used from local Clone() and from SdrCreateView::EndCreateObj(...)
113cdf0e10cSrcweir 	sal_Bool ImpCloneAll3DObjectsToDestScene(E3dScene* pSrcScene, E3dScene* pDstScene, Point aOffset);
114cdf0e10cSrcweir 
115cdf0e10cSrcweir 	sal_Bool HasMarkedScene();
116cdf0e10cSrcweir 	E3dScene* GetMarkedScene();
117cdf0e10cSrcweir 
118cdf0e10cSrcweir 	sal_Bool IsConvertTo3DObjPossible() const;
119cdf0e10cSrcweir 	void ConvertMarkedObjTo3D(sal_Bool bExtrude=sal_True, basegfx::B2DPoint aPnt1 = basegfx::B2DPoint(0.0, 0.0), basegfx::B2DPoint aPnt2 = basegfx::B2DPoint(0.0, 1.0));
120cdf0e10cSrcweir 
121cdf0e10cSrcweir 	// Nachtraeglichhe Korrekturmoeglichkeit um alle Extrudes in einer
122cdf0e10cSrcweir 	// bestimmten Tiefensortierung anzulegen
123cdf0e10cSrcweir 	void DoDepthArrange(E3dScene* pScene, double fDepth);
124cdf0e10cSrcweir 	void ConvertMarkedToPolyObj(sal_Bool bLineToArea);
125cdf0e10cSrcweir 	E3dScene* SetCurrent3DObj(E3dObject* p3DObj);
126cdf0e10cSrcweir 	void Start3DCreation();
127cdf0e10cSrcweir 
128cdf0e10cSrcweir 	// migration of overlay
Is3DRotationCreationActive() const129cdf0e10cSrcweir 	sal_Bool Is3DRotationCreationActive() const { return (0L != mpMirrorOverlay); }
130cdf0e10cSrcweir 
131cdf0e10cSrcweir 	virtual void MovAction(const Point& rPnt);
132cdf0e10cSrcweir 	void End3DCreation(sal_Bool bUseDefaultValuesForMirrorAxes=sal_False);
133cdf0e10cSrcweir 	void ResetCreationActive();
134cdf0e10cSrcweir 
135cdf0e10cSrcweir 	double GetDefaultCamPosZ();
136cdf0e10cSrcweir 
DefaultScaleX()137cdf0e10cSrcweir 	double &DefaultScaleX ()
138cdf0e10cSrcweir 	{
139cdf0e10cSrcweir 		return fDefaultScaleX;
140cdf0e10cSrcweir 	}
141cdf0e10cSrcweir 
DefaultScaleX() const142cdf0e10cSrcweir 	double DefaultScaleX () const
143cdf0e10cSrcweir 	{
144cdf0e10cSrcweir 		return fDefaultScaleX;
145cdf0e10cSrcweir 	}
146cdf0e10cSrcweir 
DefaultScaleY()147cdf0e10cSrcweir 	double &DefaultScaleY ()
148cdf0e10cSrcweir 	{
149cdf0e10cSrcweir 		return fDefaultScaleY;
150cdf0e10cSrcweir 	}
151cdf0e10cSrcweir 
DefaultScaleY() const152cdf0e10cSrcweir 	double DefaultScaleY () const
153cdf0e10cSrcweir 	{
154cdf0e10cSrcweir 		return fDefaultScaleY;
155cdf0e10cSrcweir 	}
156cdf0e10cSrcweir 
DefaultScaleZ()157cdf0e10cSrcweir 	double &DefaultScaleZ ()
158cdf0e10cSrcweir 	{
159cdf0e10cSrcweir 		return fDefaultScaleZ;
160cdf0e10cSrcweir 	}
161cdf0e10cSrcweir 
DefaultScaleZ() const162cdf0e10cSrcweir 	double DefaultScaleZ () const
163cdf0e10cSrcweir 	{
164cdf0e10cSrcweir 		return fDefaultScaleZ;
165cdf0e10cSrcweir 	}
166cdf0e10cSrcweir 
DefaultRotateX()167cdf0e10cSrcweir 	double &DefaultRotateX ()
168cdf0e10cSrcweir 	{
169cdf0e10cSrcweir 		return fDefaultRotateX;
170cdf0e10cSrcweir 	}
171cdf0e10cSrcweir 
DefaultRotateX() const172cdf0e10cSrcweir 	double DefaultRotateX () const
173cdf0e10cSrcweir 	{
174cdf0e10cSrcweir 		return fDefaultRotateX;
175cdf0e10cSrcweir 	}
176cdf0e10cSrcweir 
DefaultRotateY()177cdf0e10cSrcweir 	double &DefaultRotateY ()
178cdf0e10cSrcweir 	{
179cdf0e10cSrcweir 		return fDefaultRotateY;
180cdf0e10cSrcweir 	}
181cdf0e10cSrcweir 
DefaultRotateY() const182cdf0e10cSrcweir 	double DefaultRotateY () const
183cdf0e10cSrcweir 	{
184cdf0e10cSrcweir 		return fDefaultRotateY;
185cdf0e10cSrcweir 	}
186cdf0e10cSrcweir 
DefaultRotateZ()187cdf0e10cSrcweir 	double &DefaultRotateZ ()
188cdf0e10cSrcweir 	{
189cdf0e10cSrcweir 		return fDefaultRotateZ;
190cdf0e10cSrcweir 	}
191cdf0e10cSrcweir 
DefaultRotateZ() const192cdf0e10cSrcweir 	double DefaultRotateZ () const
193cdf0e10cSrcweir 	{
194cdf0e10cSrcweir 		return fDefaultRotateZ;
195cdf0e10cSrcweir 	}
196cdf0e10cSrcweir 
DefaultExtrusionDeepth()197cdf0e10cSrcweir 	double &DefaultExtrusionDeepth ()
198cdf0e10cSrcweir 	{
199cdf0e10cSrcweir 		return fDefaultExtrusionDeepth;
200cdf0e10cSrcweir 	}
201cdf0e10cSrcweir 
DefaultExtrusionDeepth() const202cdf0e10cSrcweir 	double DefaultExtrusionDeepth () const
203cdf0e10cSrcweir 	{
204cdf0e10cSrcweir 		return fDefaultExtrusionDeepth;
205cdf0e10cSrcweir 	}
206cdf0e10cSrcweir 
207cdf0e10cSrcweir 	double GetDefaultCamFocal();
208cdf0e10cSrcweir 
DefaultLightIntensity()209cdf0e10cSrcweir 	double &DefaultLightIntensity ()
210cdf0e10cSrcweir 	{
211cdf0e10cSrcweir 		return fDefaultLightIntensity;
212cdf0e10cSrcweir 	}
213cdf0e10cSrcweir 
DefaultLightIntensity() const214cdf0e10cSrcweir 	double DefaultLightIntensity () const
215cdf0e10cSrcweir 	{
216cdf0e10cSrcweir 		return fDefaultLightIntensity;
217cdf0e10cSrcweir 	}
218cdf0e10cSrcweir 
DefaultAmbientIntensity()219cdf0e10cSrcweir 	double &DefaultAmbientIntensity ()
220cdf0e10cSrcweir 	{
221cdf0e10cSrcweir 		return fDefaultAmbientIntensity;
222cdf0e10cSrcweir 	}
223cdf0e10cSrcweir 
DefaultAmbientIntensity() const224cdf0e10cSrcweir 	double DefaultAmbientIntensity () const
225cdf0e10cSrcweir 	{
226cdf0e10cSrcweir 		return fDefaultAmbientIntensity;
227cdf0e10cSrcweir 	}
228cdf0e10cSrcweir 
DefaultLightColor() const229cdf0e10cSrcweir 	const Color &DefaultLightColor () const
230cdf0e10cSrcweir 	{
231cdf0e10cSrcweir 		return aDefaultLightColor;
232cdf0e10cSrcweir 	}
233cdf0e10cSrcweir 
DefaultLightColor()234cdf0e10cSrcweir 	Color DefaultLightColor ()
235cdf0e10cSrcweir 	{
236cdf0e10cSrcweir 		return aDefaultLightColor;
237cdf0e10cSrcweir 	}
238cdf0e10cSrcweir 
DefaultAmbientColor() const239cdf0e10cSrcweir 	const Color &DefaultAmbientColor () const
240cdf0e10cSrcweir 	{
241cdf0e10cSrcweir 		return aDefaultAmbientColor;
242cdf0e10cSrcweir 	}
243cdf0e10cSrcweir 
DefaultAmbientColor()244cdf0e10cSrcweir 	Color DefaultAmbientColor ()
245cdf0e10cSrcweir 	{
246cdf0e10cSrcweir 		return aDefaultAmbientColor;
247cdf0e10cSrcweir 	}
248cdf0e10cSrcweir 
GetHDefaultSegments() const249cdf0e10cSrcweir 	long GetHDefaultSegments() const { return nHDefaultSegments; }
SetHDefaultSegments(long nSegs)250cdf0e10cSrcweir 	void SetHDefaultSegments(long nSegs) { nHDefaultSegments = nSegs; }
251cdf0e10cSrcweir 
GetVDefaultSegments() const252cdf0e10cSrcweir 	long GetVDefaultSegments() const { return nVDefaultSegments; }
SetVDefaultSegments(long nSegs)253cdf0e10cSrcweir 	void SetVDefaultSegments(long nSegs) { nVDefaultSegments = nSegs; }
254cdf0e10cSrcweir 
255cdf0e10cSrcweir 	sal_Bool IsBreak3DObjPossible() const;
256cdf0e10cSrcweir 	void Break3DObj();
257cdf0e10cSrcweir 
DoubleSided() const258cdf0e10cSrcweir 	sal_Bool DoubleSided () const
259cdf0e10cSrcweir 	{
260cdf0e10cSrcweir 		return bDoubleSided;
261cdf0e10cSrcweir 	}
262cdf0e10cSrcweir 
DoubleSided()263cdf0e10cSrcweir 	sal_Bool &DoubleSided ()
264cdf0e10cSrcweir 	{
265cdf0e10cSrcweir 		return bDoubleSided;
266cdf0e10cSrcweir 	}
267cdf0e10cSrcweir 
268cdf0e10cSrcweir 	void MergeScenes();
269cdf0e10cSrcweir 	SfxItemSet Get3DAttributes(E3dScene* pInScene = NULL, sal_Bool bOnly3DAttr=sal_False) const;
270cdf0e10cSrcweir 	void Set3DAttributes(const SfxItemSet& rAttr, E3dScene* pInScene = NULL, sal_Bool bOnly3DAttr=sal_False);
271cdf0e10cSrcweir };
272cdf0e10cSrcweir 
273cdf0e10cSrcweir #endif			// _E3D_VIEW3D_HXX
274