xref: /AOO41X/main/drawinglayer/inc/drawinglayer/processor3d/defaultprocessor3d.hxx (revision 47148b3bc50811ceb41802e4cc50a5db21535900)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef INCLUDED_DRAWINGLAYER_PROCESSOR3D_DEFAULTPROCESSOR3D_HXX
25 #define INCLUDED_DRAWINGLAYER_PROCESSOR3D_DEFAULTPROCESSOR3D_HXX
26 
27 #include <drawinglayer/drawinglayerdllapi.h>
28 #include <drawinglayer/processor3d/baseprocessor3d.hxx>
29 #include <basegfx/matrix/b3dhommatrix.hxx>
30 #include <basegfx/range/b2drange.hxx>
31 #include <basegfx/color/bcolormodifier.hxx>
32 #include <svtools/optionsdrawinglayer.hxx>
33 #include <boost/shared_ptr.hpp>
34 
35 //////////////////////////////////////////////////////////////////////////////
36 // predefines
37 
38 namespace basegfx {
39     class BZPixelRaster;
40     class B3DPolygon;
41     class B3DPolyPolygon;
42 }
43 
44 namespace drawinglayer { namespace attribute {
45     class SdrSceneAttribute;
46     class SdrLightingAttribute;
47     class MaterialAttribute3D;
48 }}
49 
50 namespace drawinglayer { namespace primitive3d {
51     class PolygonHairlinePrimitive3D;
52     class PolyPolygonMaterialPrimitive3D;
53     class GradientTexturePrimitive3D;
54     class HatchTexturePrimitive3D;
55     class BitmapTexturePrimitive3D;
56     class TransformPrimitive3D;
57     class ModifiedColorPrimitive3D;
58 }}
59 
60 namespace drawinglayer { namespace texture {
61     class GeoTexSvx;
62 }}
63 
64 //////////////////////////////////////////////////////////////////////////////
65 
66 namespace drawinglayer
67 {
68     namespace processor3d
69     {
70         /** DefaultProcessor3D class
71 
72             This processor renders all feeded primitives to a 2D raster where for all
73             primitives the two basic methods rasterconvertB3DPolygon for hairlines and
74             rasterconvertB3DPolyPolygon for filled geometry is called. It is a beseclass to
75             e.g. base a Z-Buffer supported renderer on the 3D primitive processing.
76          */
77         class DefaultProcessor3D : public BaseProcessor3D
78         {
79         protected:
80             /// read-only scene infos (normal handling, etc...)
81             const attribute::SdrSceneAttribute&                 mrSdrSceneAttribute;
82 
83             /// read-only light infos (lights, etc...)
84             const attribute::SdrLightingAttribute&              mrSdrLightingAttribute;
85 
86             /// renderer range. Need to be correctly set by the derived implementations
87             /// normally the (0, 0, W, H) range from mpBZPixelRaster
88             basegfx::B2DRange                                   maRasterRange;
89 
90             /// the modifiedColorPrimitive stack
91             basegfx::BColorModifierStack                        maBColorModifierStack;
92 
93             /// the current active texture
94             boost::shared_ptr< texture::GeoTexSvx >             mpGeoTexSvx;
95 
96             /// the current active transparence texture
97             boost::shared_ptr< texture::GeoTexSvx >             mpTransparenceGeoTexSvx;
98 
99             /// SvtOptionsDrawinglayer incarnation to react on diverse settings
100             const SvtOptionsDrawinglayer                        maDrawinglayerOpt;
101 
102             /// counter for entered transparence textures
103             sal_uInt32                                          mnTransparenceCounter;
104 
105             /// bitfield
106             unsigned                                            mbModulate : 1;
107             unsigned                                            mbFilter : 1;
108             unsigned                                            mbSimpleTextureActive : 1;
109 
110             //////////////////////////////////////////////////////////////////////////////
111             // rendering support
112 
113             void impRenderGradientTexturePrimitive3D(const primitive3d::GradientTexturePrimitive3D& rPrimitive, bool bTransparence);
114             void impRenderHatchTexturePrimitive3D(const primitive3d::HatchTexturePrimitive3D& rPrimitive);
115             void impRenderBitmapTexturePrimitive3D(const primitive3d::BitmapTexturePrimitive3D& rPrimitive);
116             void impRenderModifiedColorPrimitive3D(const primitive3d::ModifiedColorPrimitive3D& rModifiedCandidate);
117             void impRenderPolygonHairlinePrimitive3D(const primitive3d::PolygonHairlinePrimitive3D& rPrimitive);
118             void impRenderPolyPolygonMaterialPrimitive3D(const primitive3d::PolyPolygonMaterialPrimitive3D& rPrimitive);
119             void impRenderTransformPrimitive3D(const primitive3d::TransformPrimitive3D& rTransformCandidate);
120 
121             //////////////////////////////////////////////////////////////////////////////
122             // rasterconversions for filled and non-filled polygons. These NEED to be
123             // implemented from derivations
124 
125             virtual void rasterconvertB3DPolygon(const attribute::MaterialAttribute3D& rMaterial, const basegfx::B3DPolygon& rHairline) const = 0;
126             virtual void rasterconvertB3DPolyPolygon(const attribute::MaterialAttribute3D& rMaterial, const basegfx::B3DPolyPolygon& rFill) const = 0;
127 
128             // the processing method for a single, known primitive
129             virtual void processBasePrimitive3D(const primitive3d::BasePrimitive3D& rBasePrimitive);
130 
131         public:
132             DefaultProcessor3D(
133                 const geometry::ViewInformation3D& rViewInformation,
134                 const attribute::SdrSceneAttribute& rSdrSceneAttribute,
135                 const attribute::SdrLightingAttribute& rSdrLightingAttribute);
136             virtual ~DefaultProcessor3D();
137 
138             /// data read access
getSdrSceneAttribute() const139             const attribute::SdrSceneAttribute& getSdrSceneAttribute() const { return mrSdrSceneAttribute; }
getSdrLightingAttribute() const140             const attribute::SdrLightingAttribute& getSdrLightingAttribute() const { return mrSdrLightingAttribute; }
141 
142             /// data read access renderer stuff
getBColorModifierStack() const143             const basegfx::BColorModifierStack& getBColorModifierStack() const { return maBColorModifierStack; }
getGeoTexSvx() const144             const boost::shared_ptr< texture::GeoTexSvx >& getGeoTexSvx() const { return mpGeoTexSvx; }
getTransparenceGeoTexSvx() const145             const boost::shared_ptr< texture::GeoTexSvx >& getTransparenceGeoTexSvx() const { return mpTransparenceGeoTexSvx; }
getTransparenceCounter() const146             sal_uInt32 getTransparenceCounter() const { return mnTransparenceCounter; }
getModulate() const147             bool getModulate() const { return mbModulate; }
getFilter() const148             bool getFilter() const { return mbFilter; }
getSimpleTextureActive() const149             bool getSimpleTextureActive() const { return mbSimpleTextureActive; }
150 
151             /// access to Drawinglayer configuration options
getOptionsDrawinglayer() const152             const SvtOptionsDrawinglayer& getOptionsDrawinglayer() const { return maDrawinglayerOpt; }
153         };
154     } // end of namespace processor3d
155 } // end of namespace drawinglayer
156 
157 //////////////////////////////////////////////////////////////////////////////
158 
159 #endif // INCLUDED_DRAWINGLAYER_PROCESSOR3D_DEFAULTPROCESSOR3D_HXX
160 
161 // eof
162