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_PRIMITIVE3D_TEXTUREPRIMITIVE3D_HXX
25 #define INCLUDED_DRAWINGLAYER_PRIMITIVE3D_TEXTUREPRIMITIVE3D_HXX
26 
27 #include <drawinglayer/drawinglayerdllapi.h>
28 #include <drawinglayer/primitive3d/groupprimitive3d.hxx>
29 #include <drawinglayer/attribute/fillgraphicattribute.hxx>
30 #include <basegfx/matrix/b2dhommatrix.hxx>
31 #include <basegfx/vector/b2dvector.hxx>
32 #include <drawinglayer/attribute/fillgradientattribute.hxx>
33 
34 //////////////////////////////////////////////////////////////////////////////
35 
36 namespace drawinglayer
37 {
38 	namespace primitive3d
39 	{
40         /** TexturePrimitive3D class
41 
42             This 3D grouping primitive is used to define a texture for
43             3d geometry by embedding it. It is used as bae class for
44             extended texture definitions
45          */
46 		class DRAWINGLAYER_DLLPUBLIC TexturePrimitive3D : public GroupPrimitive3D
47 		{
48 		private:
49             /// texture geometry definition
50 			basegfx::B2DVector							maTextureSize;
51 
52 			/// bitfield
53 			/// flag if texture shall be modulated with white interpolated color
54 			unsigned									mbModulate : 1;
55 
56 			/// flag if texture shall be filtered
57 			unsigned									mbFilter : 1;
58 
59 		public:
60             /// constructor
61 			TexturePrimitive3D(
62 				const Primitive3DSequence& rChildren,
63 				const basegfx::B2DVector& rTextureSize,
64 				bool bModulate,
65 				bool bFilter);
66 
67 			/// data read access
getTextureSize() const68 			const basegfx::B2DVector& getTextureSize() const { return maTextureSize; }
getModulate() const69 			bool getModulate() const { return mbModulate; }
getFilter() const70 			bool getFilter() const { return mbFilter; }
71 
72 			/// compare operator
73 			virtual bool operator==(const BasePrimitive3D& rPrimitive) const;
74 		};
75 	} // end of namespace primitive3d
76 } // end of namespace drawinglayer
77 
78 //////////////////////////////////////////////////////////////////////////////
79 
80 namespace drawinglayer
81 {
82 	namespace primitive3d
83 	{
84         /** UnifiedTransparenceTexturePrimitive3D class
85 
86             This 3D primitive expands TexturePrimitive3D to a unified
87             transparence texture definition. All 3D primitives
88             embedded here will be shown with the given transparency.
89          */
90 		class DRAWINGLAYER_DLLPUBLIC UnifiedTransparenceTexturePrimitive3D : public TexturePrimitive3D
91 		{
92 		private:
93             /// transparency definition
94 			double										mfTransparence;
95 
96 		public:
97             /// constructor
98 			UnifiedTransparenceTexturePrimitive3D(
99 				double fTransparence,
100 				const Primitive3DSequence& rChildren);
101 
102 			/// data read access
getTransparence() const103 			double getTransparence() const { return mfTransparence; }
104 
105 			/// compare operator
106 			virtual bool operator==(const BasePrimitive3D& rPrimitive) const;
107 
108 			/// own getB3DRange implementation to include transparent geometries to BoundRect calculations
109 			virtual basegfx::B3DRange getB3DRange(const geometry::ViewInformation3D& rViewInformation) const;
110 
111             /// local decomposition.
112 			virtual Primitive3DSequence get3DDecomposition(const geometry::ViewInformation3D& rViewInformation) const;
113 
114 			/// provide unique ID
115 			DeclPrimitrive3DIDBlock()
116 		};
117 	} // end of namespace primitive3d
118 } // end of namespace drawinglayer
119 
120 //////////////////////////////////////////////////////////////////////////////
121 
122 namespace drawinglayer
123 {
124 	namespace primitive3d
125 	{
126         /** GradientTexturePrimitive3D class
127 
128             This 3D primitive expands TexturePrimitive3D to a gradient texture
129             definition. All 3D primitives embedded here will be shown with the
130             defined gradient.
131          */
132 		class DRAWINGLAYER_DLLPUBLIC GradientTexturePrimitive3D : public TexturePrimitive3D
133 		{
134 		private:
135             /// the gradient definition
136 			attribute::FillGradientAttribute		maGradient;
137 
138 		public:
139             /// constructor
140 			GradientTexturePrimitive3D(
141 				const attribute::FillGradientAttribute& rGradient,
142 				const Primitive3DSequence& rChildren,
143 				const basegfx::B2DVector& rTextureSize,
144 				bool bModulate,
145 				bool bFilter);
146 
147 			/// data read access
getGradient() const148 			const attribute::FillGradientAttribute& getGradient() const { return maGradient; }
149 
150 			/// compare operator
151 			virtual bool operator==(const BasePrimitive3D& rPrimitive) const;
152 
153 			/// provide unique ID
154 			DeclPrimitrive3DIDBlock()
155 		};
156 	} // end of namespace primitive3d
157 } // end of namespace drawinglayer
158 
159 //////////////////////////////////////////////////////////////////////////////
160 
161 namespace drawinglayer
162 {
163 	namespace primitive3d
164 	{
165         /** BitmapTexturePrimitive3D class
166 
167             This 3D primitive expands TexturePrimitive3D to a bitmap texture
168             definition. All 3D primitives embedded here will be shown with the
169             defined bitmap (maybe tiled if defined).
170          */
171 		class DRAWINGLAYER_DLLPUBLIC BitmapTexturePrimitive3D : public TexturePrimitive3D
172 		{
173 		private:
174             /// bitmap fill attribute
175 			attribute::FillGraphicAttribute     maFillGraphicAttribute;
176 
177 		public:
178             /// constructor
179 			BitmapTexturePrimitive3D(
180 				const attribute::FillGraphicAttribute& rFillGraphicAttribute,
181 				const Primitive3DSequence& rChildren,
182 				const basegfx::B2DVector& rTextureSize,
183 				bool bModulate,
184 				bool bFilter);
185 
186 			/// data read access
getFillGraphicAttribute() const187 			const attribute::FillGraphicAttribute& getFillGraphicAttribute() const { return maFillGraphicAttribute; }
188 
189 			/// compare operator
190 			virtual bool operator==(const BasePrimitive3D& rPrimitive) const;
191 
192 			/// provide unique ID
193 			DeclPrimitrive3DIDBlock()
194 		};
195 	} // end of namespace primitive3d
196 } // end of namespace drawinglayer
197 
198 //////////////////////////////////////////////////////////////////////////////
199 
200 namespace drawinglayer
201 {
202 	namespace primitive3d
203 	{
204         /** TransparenceTexturePrimitive3D class
205 
206             This 3D primitive expands TexturePrimitive3D to a transparence texture
207             definition. For transparence definition, a gradient is used. The values in
208             that gradient will be interpreted as luminance Transparence-Values. All 3D
209             primitives embedded here will be shown with the defined transparence.
210          */
211 		class DRAWINGLAYER_DLLPUBLIC TransparenceTexturePrimitive3D : public GradientTexturePrimitive3D
212 		{
213 		public:
214             /// constructor
215 			TransparenceTexturePrimitive3D(
216 				const attribute::FillGradientAttribute& rGradient,
217 				const Primitive3DSequence& rChildren,
218 				const basegfx::B2DVector& rTextureSize);
219 
220 			/// compare operator
221 			virtual bool operator==(const BasePrimitive3D& rPrimitive) const;
222 
223 			/// provide unique ID
224 			DeclPrimitrive3DIDBlock()
225 		};
226 	} // end of namespace primitive3d
227 } // end of namespace drawinglayer
228 
229 //////////////////////////////////////////////////////////////////////////////
230 
231 #endif //INCLUDED_DRAWINGLAYER_PRIMITIVE3D_TEXTUREPRIMITIVE3D_HXX
232 
233 //////////////////////////////////////////////////////////////////////////////
234 // eof
235