Update ooo320-m1
[ooovba.git] / binfilter / inc / bf_goodies / base3d.hxx
blobc64405f881fbab9278b14cac551d9ca7cd868b6e
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: base3d.hxx,v $
10 * $Revision: 1.4 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #ifndef _B3D_BASE3D_HXX
32 #define _B3D_BASE3D_HXX
34 //#ifndef _B3D_B3DLIGHT_HXX
35 //#include "b3dlight.hxx"
36 //#endif
38 #ifndef _B3D_HMATRIX_HXX
39 #include "hmatrix.hxx"
40 #endif
42 //#ifndef _B3D_B3DENTITY_HXX
43 //#include "b3dentty.hxx"
44 //#endif
46 //#ifndef _B3D_B3DCOMPO_HXX
47 //#include "b3dcompo.hxx"
48 //#endif
50 #ifndef _INC_FLOAT
51 #include <float.h>
52 #endif
54 // MUSS-Aenderung
55 //#ifndef _SV_OUTDEV3D_HXX
56 //#include <vcl/outdev3d.hxx>
57 //#endif
59 #ifndef _SV_TIMER_HXX
60 #include <vcl/timer.hxx>
61 #endif
63 #ifndef _VOS_MUTEX_HXX_
64 #include <vos/mutex.hxx>
65 #endif
67 // Vorausdeklarationen
68 //class B3dTexture;
69 //class OutputDevice;
70 //class Bitmap;
71 //class BitmapEx;
72 //class TextureAttributes;
73 //class B3dTransformationSet;
75 namespace binfilter {
77 /*************************************************************************
79 |* Texturenverwaltung
81 \************************************************************************/
83 //SV_DECL_PTRARR_DEL(B3dTextureStore, B3dTexture*, 0, 4);
85 /*************************************************************************
87 |* Globale Daten fuer Base3D
89 \************************************************************************/
91 //class B3dGlobalData
92 //{
93 //private:
94 // // Texturverwaltung
95 // Container maTextureStore;
96 // AutoTimer maTimer;
97 // vos::OMutex maMutex;
99 // // link for timer
100 // DECL_LINK(TimerHdl, AutoTimer*);
102 //public:
103 // B3dGlobalData();
104 // virtual ~B3dGlobalData();
106 // B3dTexture* ObtainTexture(TextureAttributes& rAtt);
107 // void InsertTexture(B3dTexture* pNew);
108 // void DeleteTexture(B3dTexture* pOld);
109 // void DeleteAllTextures();
110 //};
112 /*************************************************************************
114 |* Bisher vorhandene Renderer
116 \************************************************************************/
118 //#define BASE3D_TYPE_DEFAULT 0x0000
119 //#define BASE3D_TYPE_OPENGL 0x0001
120 //#define BASE3D_TYPE_PRINTER 0x0002
122 /*************************************************************************
124 |* Moegliche Objekttypen fuer Primitive
126 \************************************************************************/
128 enum Base3DObjectMode
131 // die folgenden Primitive muessen von jedem abgeleiteten Renderer
132 // ausgefuehrt werden koennen
134 Base3DPoints = 0,
135 Base3DLines,
136 Base3DLineLoop,
137 Base3DLineStrip,
138 Base3DTriangles,
139 Base3DTriangleStrip,
140 Base3DTriangleFan,
141 Base3DQuads,
142 Base3DQuadStrip,
143 Base3DPolygon,
145 // ab hier beginnen hoehere Primitive, die mit speziellen Methoden
146 // innerhalb von Base3D auf die obenstehenden Primitive
147 // abgebildet werden. Diese Methoden tun dies alles im object
148 // coordinate system.
150 // PolyPolygon ohne Selbstueberschneidungen und ohne
151 // Ueberschneidungen der evtl. vorhandenen Teilpolygone
152 Base3DComplexPolygon,
154 // Beliebiges PolyPolygon mit Selbstueberschneidungen und
155 // Ueberschneidungen der weiteren Teilpolygone
156 Base3DComplexPolygonCut
159 /*************************************************************************
161 |* Moegliche Darstellungsarten fuer Primitive
163 \************************************************************************/
165 enum Base3DRenderMode
167 Base3DRenderNone = 0,
168 Base3DRenderPoint,
169 Base3DRenderLine,
170 Base3DRenderFill
173 /*************************************************************************
175 |* Moegliche CullingModes fuer Polygone
177 \************************************************************************/
179 enum Base3DCullMode
181 Base3DCullNone = 0,
182 Base3DCullFront,
183 Base3DCullBack
186 /*************************************************************************
188 |* Moegliche ShadeModels fuer Polygone
190 \************************************************************************/
192 enum Base3DShadeModel
194 Base3DSmooth = 0,
195 Base3DFlat,
196 Base3DPhong
199 /*************************************************************************
201 |* Unterstuetzung PolygonOffset
203 \************************************************************************/
205 enum Base3DPolygonOffset
207 Base3DPolygonOffsetFill = 1,
208 Base3DPolygonOffsetLine,
209 Base3DPolygonOffsetPoint
212 /*************************************************************************
214 |* Genauigkeit der Berechnungen; im Zweifelsfall wird dieser
215 |* Wert benutzt, um mit 0.0 zu vergleichen oder Abstaende von
216 |* Randvereichen von Wertebereichen zu testen
218 \************************************************************************/
220 #define SMALL_DVALUE (0.0000001)
222 /*************************************************************************
224 |* Die Basisklasse fuer alle 3D Ausgaben
226 \************************************************************************/
228 //class Base3D : public OutDev3D
230 //private:
231 // // das OutputDevice, das Ziel dieser Base3D Engine ist. Wird bereits
232 // // im Konstruktor uebergeben und kann nicht veraendert werden.
233 // OutputDevice* pDevice;
235 // // ObjectCreationMode
236 // Base3DObjectMode eObjectMode;
238 // // current color and alpha blending
239 // Color aCurrentColor;
241 // // Komplexe Polygone
242 // B3dComplexPolygon aComplexPolygon;
244 // // RenderMode
245 // Base3DRenderMode eRenderModeFront;
246 // Base3DRenderMode eRenderModeBack;
248 // // ShadeMode fuer Polygone
249 // Base3DShadeModel eShadeModel;
251 // // CullingMode
252 // Base3DCullMode eCullMode;
254 // // PointSize, LineWidth
255 // double fPointSize;
256 // double fLineWidth;
258 // // Scissor Region
259 // Rectangle aScissorRectangle;
261 // // Texture store
262 // B3dTexture* pActiveTexture;
264 // // Aktuelles TransformationSet
265 // B3dTransformationSet* pTransformationSet;
267 // // Aktuelle Beleuchtung
268 // B3dLightGroup* pLightGroup;
270 // // Materialien
271 // B3dMaterial aMaterialFront;
272 // B3dMaterial aMaterialBack;
274 // // Darstellungsqualitaet (0..255)
275 // UINT8 nDisplayQuality;
277 // // EdgeFlag
278 // unsigned bEdgeFlag : 1;
280 // // Gueltigkeit des Kontextes, wird in
281 // // den Konstruktoren gesetzt
282 // unsigned bContextIsValid : 1;
284 // // Variablen fuer PolygonOffset
285 // unsigned bPolyOffsetFill : 1;
286 // unsigned bPolyOffsetLine : 1;
287 // unsigned bPolyOffsetPoint : 1;
289 // // Scissor-Region gesetzt?
290 // unsigned bScissorRegionActive : 1;
292 // // Dithern?
293 // unsigned bDitherActive : 1;
295 // // Hint auf transparente Anteile in der Szene
296 // unsigned bTransparentParts : 1;
298 // // FlatMode force switch
299 // unsigned bForceFlat : 1;
301 //protected:
302 // // Konstruktor, Destruktor
303 // Base3D(OutputDevice* pOutDev);
304 // virtual ~Base3D();
306 // // setze das ContextIsValid - Flag
307 // void SetContextIsValid(BOOL bNew=TRUE)
308 // { bContextIsValid=bNew; }
310 // static Base3D* CreateScreenRenderer(OutputDevice* pDev);
312 //public:
313 // // Typbestimmung
314 // virtual UINT16 GetBase3DType()=0;
316 // // Zugriff auf das zu verwendende OutputDevice
317 // OutputDevice* GetOutputDevice()
318 // { return pDevice; }
320 // // Hint auf transparente Anteile in der Szene setzen/lesen
321 // void SetTransparentPartsContainedHint(BOOL bNew) { bTransparentParts = bNew; }
322 // BOOL GetTransparentPartsContainedHint() { return bTransparentParts; }
324 // // Zugriff auf globale Daten von allen Base3D's
325 //private:
326 // B3dGlobalData& GetGlobalData();
327 //public:
329 // // Erzeugen bzw. Zerstoeren eines Base3D Kontextes
330 // static Base3D* Create(OutputDevice* pOutDev, BOOL bForcePrinter=FALSE);
331 // virtual void Destroy(OutputDevice *pOutDev);
333 // // Gueltigkeit des Kontextes nach der Inkarnation
334 // // ueberpruefen
335 // BOOL IsContextValid()
336 // { return bContextIsValid; }
337 //#ifdef DBG_UTIL
338 // void SetContextValid(BOOL bNew=TRUE) { bContextIsValid = bNew; }
339 //#endif
341 // // TransformationSet setzen/lesen
342 // virtual void SetTransformationSet(B3dTransformationSet* pSet);
343 // B3dTransformationSet* GetTransformationSet() { return pTransformationSet; }
345 // // Beleuchtung setzen/lesen
346 // virtual void SetLightGroup(B3dLightGroup* pSet, BOOL bSetGlobal=TRUE);
347 // B3dLightGroup* GetLightGroup() { return pLightGroup; }
349 // // Szenenverwaltung
350 // virtual void StartScene() = 0;
351 // virtual void EndScene() = 0;
353 // // Scissoring
354 // virtual void SetScissorRegionPixel(const Rectangle& rRect, BOOL bActivate=TRUE);
355 // void SetScissorRegion(const Rectangle& rRect, BOOL bActivate=TRUE);
356 // virtual void ActivateScissorRegion(BOOL bNew);
357 // BOOL IsScissorRegionActive() { return bScissorRegionActive; }
358 // const Rectangle& GetScissorRegionPixel() { return aScissorRectangle; }
360 // // Dithering aktiv?
361 // BOOL GetDither() { return bDitherActive; }
362 // virtual void SetDither(BOOL bNew);
364 // // Dithering aktiv?
365 // BOOL GetForceFlat() { return bForceFlat; }
366 // void SetForceFlat(BOOL bNew) { bForceFlat = bNew; }
368 // // Attribute Color (und Alpha)
369 // virtual void SetColor(Color aNew);
370 // virtual Color GetColor();
372 // // Materials
373 // virtual void SetMaterial(Color aNew,
374 // Base3DMaterialValue=Base3DMaterialAmbient,
375 // Base3DMaterialMode=Base3DMaterialFrontAndBack);
376 // Color GetMaterial(Base3DMaterialValue=Base3DMaterialAmbient,
377 // Base3DMaterialMode=Base3DMaterialFrontAndBack);
378 // virtual void SetShininess(UINT16 nExponent,
379 // Base3DMaterialMode=Base3DMaterialFrontAndBack);
380 // UINT16 GetShininess(Base3DMaterialMode=Base3DMaterialFrontAndBack);
381 // void ResetMaterial(Base3DMaterialMode=Base3DMaterialFrontAndBack);
383 // // Texturen
384 // B3dTexture* ObtainTexture(TextureAttributes& rAtt);
385 // B3dTexture* ObtainTexture(TextureAttributes& rAtt, BitmapEx& rBitmapEx);
386 // void DeleteTexture(TextureAttributes& rAtt);
387 // void DeleteAllTextures();
388 //private:
389 // virtual B3dTexture* CreateTexture(TextureAttributes& rAtt, BitmapEx& rBitmapEx);
390 //protected:
391 // virtual void DestroyTexture(B3dTexture*);
392 //public:
393 // virtual void SetActiveTexture(B3dTexture* pTex=NULL);
394 // B3dTexture* GetActiveTexture() { return pActiveTexture; }
395 // BOOL IsTextureActive() { return (pActiveTexture != NULL) ? TRUE : FALSE; }
397 // // Darstellungsqualitaet
398 // virtual void SetDisplayQuality(UINT8 nNew);
399 // UINT8 GetDisplayQuality();
401 // // PolygonOffset
402 // virtual void SetPolygonOffset(
403 // Base3DPolygonOffset eNew=Base3DPolygonOffsetLine, BOOL bNew=FALSE);
404 // BOOL GetPolygonOffset(Base3DPolygonOffset eNew=Base3DPolygonOffsetLine);
406 // // RenderMode
407 // virtual void SetRenderMode(Base3DRenderMode eNew,
408 // Base3DMaterialMode=Base3DMaterialFrontAndBack);
409 // Base3DRenderMode GetRenderMode(
410 // Base3DMaterialMode=Base3DMaterialFrontAndBack);
412 // // ShadeModel
413 // virtual void SetShadeModel(Base3DShadeModel eNew);
414 // Base3DShadeModel GetShadeModel();
416 // // CullingMode
417 // virtual void SetCullMode(Base3DCullMode eNew);
418 // Base3DCullMode GetCullMode();
420 // // EdgeFlagMode
421 // BOOL GetEdgeFlag();
422 // virtual void SetEdgeFlag(BOOL bNew=TRUE);
424 // // PointSize, LineWidth
425 // double GetPointSize();
426 // virtual void SetPointSize(double fNew=1.0);
427 // double GetLineWidth();
428 // virtual void SetLineWidth(double fNew=1.0);
430 // // geometrische Objekte hinzufuegen
431 // // Modus setzen
432 // virtual Base3DObjectMode GetObjectMode();
434 // // geometrische Daten
435 // void AddVertex(Vector3D& rVertex);
436 // void AddVertex(Vector3D& rVertex,
437 // Vector3D& rNormal);
438 // void AddVertex(Vector3D& rVertex,
439 // Vector3D& rNormal, Vector3D& rTexPos);
440 // void AddVertex(B3dEntity& rEnt);
441 // void PostAddVertex(B3dEntity& rEnt);
443 // // Geometrische Daten uebergeben
444 // virtual B3dEntity& GetFreeEntity();
446 // // Primitiv beginnen/abschliessen
447 // void StartPrimitive(Base3DObjectMode eMode);
448 // void EndPrimitive();
450 // // Ein Objekt in Form einer B3dGeometry direkt ausgeben
451 // virtual void DrawPolygonGeometry(B3dGeometry& rGeometry, BOOL bOutline=FALSE);
453 //#ifdef DBG_UTIL
454 // // Testfunktion um gezielte 3D-Ausgaben zu testen
455 // void Test(const Rectangle& rBound, const Rectangle& rVisible);
456 //#endif
458 //protected:
459 // // geometrische Daten uebergeben
460 // virtual void ImplPostAddVertex(B3dEntity& rEnt) = 0;
462 // // Direkter Zugriff auf B3dMaterial
463 // // fuer abgeleitete Klassen
464 // B3dMaterial& GetMaterialObject(Base3DMaterialMode=Base3DMaterialFront);
466 // // Primitiv beginnen/abschliessen
467 // virtual void ImplStartPrimitive() = 0;
468 // virtual void ImplEndPrimitive() = 0;
470 // // Geometrische Daten uebergeben
471 // virtual B3dEntity& ImplGetFreeEntity() = 0;
473 // // Funktionen, um mit hoeheren Primitiven umzugehen
474 // void HandleComplexPolygon();
475 //};
477 }//end of namespace binfilter
479 #endif // _B3D_BASE3D_HXX