LibreOffice Module drawinglayer (master) 1
defaultprocessor3d.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
22#include <texture/texture.hxx>
23#include <texture/texture3d.hxx>
31#include <com/sun/star/drawing/ShadeMode.hpp>
34#include <vcl/bitmapex.hxx>
37#include <vcl/graph.hxx>
39
40
41using namespace com::sun::star;
42
43
45{
47 {
48 const primitive3d::Primitive3DContainer& rSubSequence = rPrimitive.getChildren();
49
50 if(rSubSequence.empty())
51 return;
52
53 // rescue values
54 const bool bOldModulate(getModulate()); mbModulate = rPrimitive.getModulate();
55 const bool bOldFilter(getFilter()); mbFilter = rPrimitive.getFilter();
56 const bool bOldSimpleTextureActive(getSimpleTextureActive());
57 std::shared_ptr< texture::GeoTexSvx > pOldTex = bTransparence ? mpTransparenceGeoTexSvx : mpGeoTexSvx;
58
59 // create texture
60 const attribute::FillGradientAttribute& rFillGradient = rPrimitive.getGradient();
61 const basegfx::B2DRange aOutlineRange(0.0, 0.0, rPrimitive.getTextureSize().getX(), rPrimitive.getTextureSize().getY());
62 const css::awt::GradientStyle aGradientStyle(rFillGradient.getStyle());
63 std::shared_ptr< texture::GeoTexSvx > pNewTex;
64 basegfx::BColor aSingleColor;
65
66 if (!rFillGradient.getColorStops().isSingleColor(aSingleColor))
67 {
68 switch(aGradientStyle)
69 {
70 default: // GradientStyle_MAKE_FIXED_SIZE
71 case css::awt::GradientStyle_LINEAR:
72 {
73 pNewTex = std::make_shared<texture::GeoTexSvxGradientLinear>(
74 aOutlineRange,
75 aOutlineRange,
76 rFillGradient.getSteps(),
77 rFillGradient.getColorStops(),
78 rFillGradient.getBorder(),
79 rFillGradient.getAngle());
80 break;
81 }
82 case css::awt::GradientStyle_AXIAL:
83 {
84 pNewTex = std::make_shared<texture::GeoTexSvxGradientAxial>(
85 aOutlineRange,
86 aOutlineRange,
87 rFillGradient.getSteps(),
88 rFillGradient.getColorStops(),
89 rFillGradient.getBorder(),
90 rFillGradient.getAngle());
91 break;
92 }
93 case css::awt::GradientStyle_RADIAL:
94 {
95 pNewTex =
96 std::make_shared<texture::GeoTexSvxGradientRadial>(
97 aOutlineRange,
98 rFillGradient.getSteps(),
99 rFillGradient.getColorStops(),
100 rFillGradient.getBorder(),
101 rFillGradient.getOffsetX(),
102 rFillGradient.getOffsetY());
103 break;
104 }
105 case css::awt::GradientStyle_ELLIPTICAL:
106 {
107 pNewTex =
108 std::make_shared<texture::GeoTexSvxGradientElliptical>(
109 aOutlineRange,
110 rFillGradient.getSteps(),
111 rFillGradient.getColorStops(),
112 rFillGradient.getBorder(),
113 rFillGradient.getOffsetX(),
114 rFillGradient.getOffsetY(),
115 rFillGradient.getAngle());
116 break;
117 }
118 case css::awt::GradientStyle_SQUARE:
119 {
120 pNewTex =
121 std::make_shared<texture::GeoTexSvxGradientSquare>(
122 aOutlineRange,
123 rFillGradient.getSteps(),
124 rFillGradient.getColorStops(),
125 rFillGradient.getBorder(),
126 rFillGradient.getOffsetX(),
127 rFillGradient.getOffsetY(),
128 rFillGradient.getAngle());
129 break;
130 }
131 case css::awt::GradientStyle_RECT:
132 {
133 pNewTex =
134 std::make_shared<texture::GeoTexSvxGradientRect>(
135 aOutlineRange,
136 rFillGradient.getSteps(),
137 rFillGradient.getColorStops(),
138 rFillGradient.getBorder(),
139 rFillGradient.getOffsetX(),
140 rFillGradient.getOffsetY(),
141 rFillGradient.getAngle());
142 break;
143 }
144 }
145
146 mbSimpleTextureActive = false;
147 }
148 else
149 {
150 // only one color, so no real gradient -> use simple texture
151 pNewTex = std::make_shared<texture::GeoTexSvxMono>(aSingleColor, 1.0 - aSingleColor.luminance());
153 }
154
155 // set created texture
156 if(bTransparence)
157 {
158 mpTransparenceGeoTexSvx = pNewTex;
159 }
160 else
161 {
162 mpGeoTexSvx = pNewTex;
163 }
164
165 // process sub-list
166 process(rSubSequence);
167
168 // restore values
169 mbModulate = bOldModulate;
170 mbFilter = bOldFilter;
171 mbSimpleTextureActive = bOldSimpleTextureActive;
172
173 if(bTransparence)
174 {
175 mpTransparenceGeoTexSvx = pOldTex;
176 }
177 else
178 {
179 mpGeoTexSvx = pOldTex;
180 }
181 }
182
184 {
185 const primitive3d::Primitive3DContainer& rSubSequence = rPrimitive.getChildren();
186
187 if(rSubSequence.empty())
188 return;
189
190 // rescue values
191 const bool bOldModulate(getModulate()); mbModulate = rPrimitive.getModulate();
192 const bool bOldFilter(getFilter()); mbFilter = rPrimitive.getFilter();
193 std::shared_ptr< texture::GeoTexSvx > pOldTex = mpGeoTexSvx;
194
195 // calculate logic pixel size in object coordinates. Create transformation view
196 // to object by inverting ObjectToView
197 basegfx::B3DHomMatrix aInvObjectToView(getViewInformation3D().getObjectToView());
198 aInvObjectToView.invert();
199
200 // back-project discrete coordinates to object coordinates and extract
201 // maximum distance
202 const basegfx::B3DPoint aZero(aInvObjectToView * basegfx::B3DPoint(0.0, 0.0, 0.0));
203 const basegfx::B3DPoint aOne(aInvObjectToView * basegfx::B3DPoint(1.0, 1.0, 1.0));
204 const basegfx::B3DVector aLogicPixel(aOne - aZero);
205 double fLogicPixelSizeWorld(std::max(std::max(fabs(aLogicPixel.getX()), fabs(aLogicPixel.getY())), fabs(aLogicPixel.getZ())));
206
207 // calculate logic pixel size in texture coordinates
208 const double fLogicTexSizeX(fLogicPixelSizeWorld / rPrimitive.getTextureSize().getX());
209 const double fLogicTexSizeY(fLogicPixelSizeWorld / rPrimitive.getTextureSize().getY());
210 const double fLogicTexSize(std::max(fLogicTexSizeX, fLogicTexSizeY));
211
212 // create texture and set
213 mpGeoTexSvx = std::make_shared<texture::GeoTexSvxMultiHatch>(rPrimitive, fLogicTexSize);
214
215 // process sub-list
216 process(rSubSequence);
217
218 // restore values
219 mbModulate = bOldModulate;
220 mbFilter = bOldFilter;
221 mpGeoTexSvx = pOldTex;
222 }
223
225 {
226 const primitive3d::Primitive3DContainer& rSubSequence = rPrimitive.getChildren();
227
228 if(rSubSequence.empty())
229 return;
230
231 // rescue values
232 const bool bOldModulate(getModulate()); mbModulate = rPrimitive.getModulate();
233 const bool bOldFilter(getFilter()); mbFilter = rPrimitive.getFilter();
234 std::shared_ptr< texture::GeoTexSvx > pOldTex = mpGeoTexSvx;
235
236 // create texture
237 const attribute::FillGraphicAttribute& rFillGraphicAttribute = rPrimitive.getFillGraphicAttribute();
238
239 // #121194# For 3D texture we will use the BitmapRex representation
240 const BitmapEx aBitmapEx(rFillGraphicAttribute.getGraphic().GetBitmapEx());
241
242 // create range scaled by texture size
243 basegfx::B2DRange aGraphicRange(rFillGraphicAttribute.getGraphicRange());
244
245 aGraphicRange.transform(
247 rPrimitive.getTextureSize()));
248
249 if(rFillGraphicAttribute.getTiling())
250 {
252 std::make_shared<texture::GeoTexSvxBitmapExTiled>(
253 aBitmapEx,
254 aGraphicRange,
255 rFillGraphicAttribute.getOffsetX(),
256 rFillGraphicAttribute.getOffsetY());
257 }
258 else
259 {
261 std::make_shared<texture::GeoTexSvxBitmapEx>(
262 aBitmapEx,
263 aGraphicRange);
264 }
265
266 // process sub-list
267 process(rSubSequence);
268
269 // restore values
270 mbModulate = bOldModulate;
271 mbFilter = bOldFilter;
272 mpGeoTexSvx = pOldTex;
273 }
274
276 {
277 const primitive3d::Primitive3DContainer& rSubSequence = rModifiedCandidate.getChildren();
278
279 if(!rSubSequence.empty())
280 {
281 // put modifier on stack
282 maBColorModifierStack.push(rModifiedCandidate.getColorModifier());
283
284 // process sub-list
285 process(rModifiedCandidate.getChildren());
286
287 // remove modifier from stack
289 }
290 }
291
293 {
294 basegfx::B3DPolygon aHairline(rPrimitive.getB3DPolygon());
295
296 if(!aHairline.count())
297 return;
298
299 // hairlines need no extra data, clear it
300 aHairline.clearTextureCoordinates();
301 aHairline.clearNormals();
302 aHairline.clearBColors();
303
304 // transform to device coordinates (-1.0 .. 1.0) and check for visibility
305 aHairline.transform(getViewInformation3D().getObjectToView());
306 const basegfx::B3DRange a3DRange(basegfx::utils::getRange(aHairline));
307 const basegfx::B2DRange a2DRange(a3DRange.getMinX(), a3DRange.getMinY(), a3DRange.getMaxX(), a3DRange.getMaxY());
308
309 if(a2DRange.overlaps(maRasterRange))
310 {
312
313 rasterconvertB3DPolygon(aMaterial, aHairline);
314 }
315 }
316
318 {
319 basegfx::B3DPolyPolygon aFill(rPrimitive.getB3DPolyPolygon());
320 basegfx::BColor aObjectColor(rPrimitive.getMaterial().getColor());
321 bool bPaintIt(aFill.count());
322
323 // #i98295# get ShadeMode. Correct early when only flat is possible due to missing normals
324 const css::drawing::ShadeMode aShadeMode(
325 aFill.areNormalsUsed() ?
326 getSdrSceneAttribute().getShadeMode() : css::drawing::ShadeMode_FLAT);
327
328 if(bPaintIt)
329 {
330 // get rid of texture coordinates if there is no texture
332 {
334 }
335
336 // #i98295# get rid of normals and color early when not needed
337 if(css::drawing::ShadeMode_FLAT == aShadeMode)
338 {
339 aFill.clearNormals();
340 aFill.clearBColors();
341 }
342
343 // transform to device coordinates (-1.0 .. 1.0) and check for visibility
344 aFill.transform(getViewInformation3D().getObjectToView());
345 const basegfx::B3DRange a3DRange(basegfx::utils::getRange(aFill));
346 const basegfx::B2DRange a2DRange(a3DRange.getMinX(), a3DRange.getMinY(), a3DRange.getMaxX(), a3DRange.getMaxY());
347
348 bPaintIt = a2DRange.overlaps(maRasterRange);
349 }
350
351 // check if it shall be painted regarding hiding of normals (backface culling)
352 if(bPaintIt && !rPrimitive.getDoubleSided())
353 {
354 // get plane normal of polygon in view coordinates (with ZBuffer values),
355 // left-handed coordinate system
356 const basegfx::B3DVector aPlaneNormal(aFill.getB3DPolygon(0).getNormal());
357
358 if(aPlaneNormal.getZ() > 0.0)
359 {
360 bPaintIt = false;
361 }
362 }
363
364 if(!bPaintIt)
365 return;
366
367 // prepare ObjectToEye in NormalTransform
368 basegfx::B3DHomMatrix aNormalTransform(getViewInformation3D().getOrientation() * getViewInformation3D().getObjectTransformation());
369
370 if(getSdrSceneAttribute().getTwoSidedLighting())
371 {
372 // get plane normal of polygon in view coordinates (with ZBuffer values),
373 // left-handed coordinate system
374 const basegfx::B3DVector aPlaneNormal(aFill.getB3DPolygon(0).getNormal());
375
376 if(aPlaneNormal.getZ() > 0.0)
377 {
378 // mirror normals
379 aNormalTransform.scale(-1.0, -1.0, -1.0);
380 }
381 }
382
383 switch(aShadeMode)
384 {
385 case css::drawing::ShadeMode_PHONG:
386 {
387 // phong shading. Transform normals to eye coor
388 aFill.transformNormals(aNormalTransform);
389 break;
390 }
391 case css::drawing::ShadeMode_SMOOTH:
392 {
393 // gouraud shading. Transform normals to eye coor
394 aFill.transformNormals(aNormalTransform);
395
396 // prepare color model parameters, evtl. use blend color
397 const basegfx::BColor aColor(getModulate() ? basegfx::BColor(1.0, 1.0, 1.0) : rPrimitive.getMaterial().getColor());
398 const basegfx::BColor& rSpecular(rPrimitive.getMaterial().getSpecular());
399 const basegfx::BColor& rEmission(rPrimitive.getMaterial().getEmission());
400 const sal_uInt16 nSpecularIntensity(rPrimitive.getMaterial().getSpecularIntensity());
401
402 // solve color model for each normal vector, set colors at points. Clear normals.
403 for(sal_uInt32 a(0); a < aFill.count(); a++)
404 {
405 basegfx::B3DPolygon aPartFill(aFill.getB3DPolygon(a));
406
407 for(sal_uInt32 b(0); b < aPartFill.count(); b++)
408 {
409 // solve color model. Transform normal to eye coor
410 const basegfx::B3DVector aNormal(aPartFill.getNormal(b));
411 const basegfx::BColor aSolvedColor(getSdrLightingAttribute().solveColorModel(aNormal, aColor, rSpecular, rEmission, nSpecularIntensity));
412 aPartFill.setBColor(b, aSolvedColor);
413 }
414
415 // clear normals on this part polygon and write it back
416 aPartFill.clearNormals();
417 aFill.setB3DPolygon(a, aPartFill);
418 }
419 break;
420 }
421 case css::drawing::ShadeMode_FLAT:
422 {
423 // flat shading. Get plane vector in eye coordinates
424 const basegfx::B3DVector aPlaneEyeNormal(aNormalTransform * rPrimitive.getB3DPolyPolygon().getB3DPolygon(0).getNormal());
425
426 // prepare color model parameters, evtl. use blend color
427 const basegfx::BColor aColor(getModulate() ? basegfx::BColor(1.0, 1.0, 1.0) : rPrimitive.getMaterial().getColor());
428 const basegfx::BColor& rSpecular(rPrimitive.getMaterial().getSpecular());
429 const basegfx::BColor& rEmission(rPrimitive.getMaterial().getEmission());
430 const sal_uInt16 nSpecularIntensity(rPrimitive.getMaterial().getSpecularIntensity());
431
432 // solve color model for plane vector and use that color for whole plane
433 aObjectColor = getSdrLightingAttribute().solveColorModel(aPlaneEyeNormal, aColor, rSpecular, rEmission, nSpecularIntensity);
434 break;
435 }
436 default: // case css::drawing::ShadeMode_DRAFT:
437 {
438 // draft, just use object color which is already set. Delete all other infos
439 aFill.clearNormals();
440 aFill.clearBColors();
441 break;
442 }
443 }
444
445 // draw it to ZBuffer
446 const attribute::MaterialAttribute3D aMaterial(
448 rPrimitive.getMaterial().getSpecular(),
449 rPrimitive.getMaterial().getEmission(),
450 rPrimitive.getMaterial().getSpecularIntensity());
451
452 rasterconvertB3DPolyPolygon(aMaterial, aFill);
453 }
454
456 {
457 // transform group. Remember current transformations
458 const geometry::ViewInformation3D aLastViewInformation3D(getViewInformation3D());
459
460 // create new transformation; add new object transform from right side
461 const geometry::ViewInformation3D aNewViewInformation3D(
462 aLastViewInformation3D.getObjectTransformation() * rTransformCandidate.getTransformation(),
463 aLastViewInformation3D.getOrientation(),
464 aLastViewInformation3D.getProjection(),
465 aLastViewInformation3D.getDeviceToView(),
466 aLastViewInformation3D.getViewTime(),
467 aLastViewInformation3D.getExtendedInformationSequence());
468 updateViewInformation(aNewViewInformation3D);
469
470 // let break down recursively
471 process(rTransformCandidate.getChildren());
472
473 // restore transformations
474 updateViewInformation(aLastViewInformation3D);
475 }
476
478 {
479 // it is a BasePrimitive3D implementation, use getPrimitive3DID() call for switch
480 switch(rBasePrimitive.getPrimitive3DID())
481 {
483 {
484 // GradientTexturePrimitive3D
485 const primitive3d::GradientTexturePrimitive3D& rPrimitive = static_cast< const primitive3d::GradientTexturePrimitive3D& >(rBasePrimitive);
486 impRenderGradientTexturePrimitive3D(rPrimitive, false);
487 break;
488 }
490 {
491 // hatchTexturePrimitive3D
492 const primitive3d::HatchTexturePrimitive3D& rPrimitive = static_cast< const primitive3d::HatchTexturePrimitive3D& >(rBasePrimitive);
494 break;
495 }
497 {
498 // BitmapTexturePrimitive3D
499 const primitive3d::BitmapTexturePrimitive3D& rPrimitive = static_cast< const primitive3d::BitmapTexturePrimitive3D& >(rBasePrimitive);
501 break;
502 }
504 {
505 // TransparenceTexturePrimitive3D
506 const primitive3d::TransparenceTexturePrimitive3D& rPrimitive = static_cast< const primitive3d::TransparenceTexturePrimitive3D& >(rBasePrimitive);
508 impRenderGradientTexturePrimitive3D(rPrimitive, true);
510 break;
511 }
513 {
514 // ModifiedColorPrimitive3D
515 // Force output to unified color.
516 const primitive3d::ModifiedColorPrimitive3D& rPrimitive = static_cast< const primitive3d::ModifiedColorPrimitive3D& >(rBasePrimitive);
518 break;
519 }
521 {
522 // directdraw of PolygonHairlinePrimitive3D
523 const primitive3d::PolygonHairlinePrimitive3D& rPrimitive = static_cast< const primitive3d::PolygonHairlinePrimitive3D& >(rBasePrimitive);
525 break;
526 }
528 {
529 // directdraw of PolyPolygonMaterialPrimitive3D
530 const primitive3d::PolyPolygonMaterialPrimitive3D& rPrimitive = static_cast< const primitive3d::PolyPolygonMaterialPrimitive3D& >(rBasePrimitive);
532 break;
533 }
535 {
536 // transform group (TransformPrimitive3D)
537 impRenderTransformPrimitive3D(static_cast< const primitive3d::TransformPrimitive3D& >(rBasePrimitive));
538 break;
539 }
540 default:
541 {
542 // process recursively
544 break;
545 }
546 }
547 }
548
550 const geometry::ViewInformation3D& rViewInformation,
551 const attribute::SdrSceneAttribute& rSdrSceneAttribute,
552 const attribute::SdrLightingAttribute& rSdrLightingAttribute)
553 : BaseProcessor3D(rViewInformation),
554 mrSdrSceneAttribute(rSdrSceneAttribute),
555 mrSdrLightingAttribute(rSdrLightingAttribute),
556 maBColorModifierStack(),
557 mnTransparenceCounter(0),
558 mbModulate(false),
559 mbFilter(false),
560 mbSimpleTextureActive(false)
561 {
562 // a derivation has to set maRasterRange which is used in the basic render methods.
563 // Setting to default here ([0.0 .. 1.0] in X,Y) to avoid problems
566 }
567
569 {
570 }
571
572} // end of namespace
573
574/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
BitmapEx GetBitmapEx(const GraphicConversionParameters &rParameters=GraphicConversionParameters()) const
BASEGFX_DLLPUBLIC void transform(const B2DHomMatrix &rMatrix)
void scale(double fX, double fY, double fZ)
void transformNormals(const B3DHomMatrix &rMatrix)
bool areTextureCoordinatesUsed() const
sal_uInt32 count() const
void setB3DPolygon(sal_uInt32 nIndex, const B3DPolygon &rPolygon)
void transform(const basegfx::B3DHomMatrix &rMatrix)
bool areNormalsUsed() const
B3DPolygon const & getB3DPolygon(sal_uInt32 nIndex) const
sal_uInt32 count() const
B3DVector const & getNormal() const
void clearTextureCoordinates()
void transform(const B3DHomMatrix &rMatrix)
void setBColor(sal_uInt32 nIndex, const BColor &rValue)
double getMinX() const
double getMinY() const
double getMaxX() const
double getMaxY() const
void push(const BColorModifierSharedPtr &rNew)
::basegfx::BColor getModifiedColor(const ::basegfx::BColor &rSource) const
bool isSingleColor(BColor &rSingleColor) const
double luminance() const
void expand(const Tuple2D< TYPE > &rTuple)
bool overlaps(const Range2D &rRange) const
TYPE getX() const
TYPE getY() const
TYPE getX() const
TYPE getZ() const
TYPE getY() const
const basegfx::BColorStops & getColorStops() const
const basegfx::B2DRange & getGraphicRange() const
basegfx::BColor solveColorModel(const basegfx::B3DVector &rNormalInEyeCoordinates, const basegfx::BColor &rColor, const basegfx::BColor &rSpecular, const basegfx::BColor &rEmission, sal_uInt16 nSpecularIntensity) const
const css::uno::Sequence< css::beans::PropertyValue > & getExtendedInformationSequence() const
Get the uno::Sequence< beans::PropertyValue > which contains only ViewInformation not offered directl...
const basegfx::B3DHomMatrix & getDeviceToView() const
const basegfx::B3DHomMatrix & getObjectTransformation() const
data access
const basegfx::B3DHomMatrix & getProjection() const
const basegfx::B3DHomMatrix & getOrientation() const
virtual Primitive3DContainer get3DDecomposition(const geometry::ViewInformation3D &rViewInformation) const
The default implementation returns an empty sequence.
virtual sal_uInt32 getPrimitive3DID() const =0
provide unique ID for fast identifying of known primitive implementations in renderers.
const attribute::FillGraphicAttribute & getFillGraphicAttribute() const
data read access
const attribute::FillGradientAttribute & getGradient() const
data read access
const Primitive3DContainer & getChildren() const
data read access
const basegfx::BColorModifierSharedPtr & getColorModifier() const
data read access
const attribute::MaterialAttribute3D & getMaterial() const
const basegfx::B3DPolyPolygon & getB3DPolyPolygon() const
data read access
const basegfx::B3DPolygon & getB3DPolygon() const
data read access
const basegfx::B2DVector & getTextureSize() const
data read access
const basegfx::B3DHomMatrix & getTransformation() const
data read access
void process(const primitive3d::Primitive3DContainer &rSource)
const geometry::ViewInformation3D & getViewInformation3D() const
void updateViewInformation(const geometry::ViewInformation3D &rViewInformation3D)
std::shared_ptr< texture::GeoTexSvx > mpTransparenceGeoTexSvx
the current active transparence texture
void impRenderGradientTexturePrimitive3D(const primitive3d::GradientTexturePrimitive3D &rPrimitive, bool bTransparence)
const attribute::SdrLightingAttribute & getSdrLightingAttribute() const
DefaultProcessor3D(const geometry::ViewInformation3D &rViewInformation, const attribute::SdrSceneAttribute &rSdrSceneAttribute, const attribute::SdrLightingAttribute &rSdrLightingAttribute)
std::shared_ptr< texture::GeoTexSvx > mpGeoTexSvx
the current active texture
const attribute::SdrSceneAttribute & getSdrSceneAttribute() const
data read access
virtual void rasterconvertB3DPolyPolygon(const attribute::MaterialAttribute3D &rMaterial, const basegfx::B3DPolyPolygon &rFill) const =0
const std::shared_ptr< texture::GeoTexSvx > & getGeoTexSvx() const
void impRenderPolygonHairlinePrimitive3D(const primitive3d::PolygonHairlinePrimitive3D &rPrimitive) const
basegfx::B2DRange maRasterRange
renderer range.
void impRenderTransformPrimitive3D(const primitive3d::TransformPrimitive3D &rTransformCandidate)
virtual void rasterconvertB3DPolygon(const attribute::MaterialAttribute3D &rMaterial, const basegfx::B3DPolygon &rHairline) const =0
basegfx::BColorModifierStack maBColorModifierStack
the modifiedColorPrimitive stack
void impRenderHatchTexturePrimitive3D(const primitive3d::HatchTexturePrimitive3D &rPrimitive)
void impRenderBitmapTexturePrimitive3D(const primitive3d::BitmapTexturePrimitive3D &rPrimitive)
sal_uInt32 mnTransparenceCounter
counter for entered transparence textures
const std::shared_ptr< texture::GeoTexSvx > & getTransparenceGeoTexSvx() const
void impRenderModifiedColorPrimitive3D(const primitive3d::ModifiedColorPrimitive3D &rModifiedCandidate)
virtual void processBasePrimitive3D(const primitive3d::BasePrimitive3D &rBasePrimitive) override
void impRenderPolyPolygonMaterialPrimitive3D(const primitive3d::PolyPolygonMaterialPrimitive3D &rPrimitive) const
#define PRIMITIVE3D_ID_TRANSFORMPRIMITIVE3D
#define PRIMITIVE3D_ID_POLYGONHAIRLINEPRIMITIVE3D
#define PRIMITIVE3D_ID_POLYPOLYGONMATERIALPRIMITIVE3D
#define PRIMITIVE3D_ID_MODIFIEDCOLORPRIMITIVE3D
#define PRIMITIVE3D_ID_GRADIENTTEXTUREPRIMITIVE3D
#define PRIMITIVE3D_ID_TRANSPARENCETEXTUREPRIMITIVE3D
#define PRIMITIVE3D_ID_HATCHTEXTUREPRIMITIVE3D
#define PRIMITIVE3D_ID_BITMAPTEXTUREPRIMITIVE3D
uno_Any a
B2VectorOrientation getOrientation(const B2DPolygon &rCandidate)
B2DHomMatrix createScaleB2DHomMatrix(double fScaleX, double fScaleY)
B2DRange getRange(const B2DPolygon &rCandidate)