VR-Forces 5.0.1 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtTextRenderer.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Copyright (c) 2021 MAK Technologies, Inc.
3  * All rights reserved.
4  *****************************************************************************/
5 
9 
10 #pragma once
11 
16 #include <vrvGraphics/DtFont.h>
17 
19 
20 #include <vrvUtil/DtUnicode.h>
21 
22 #include <matrix/vlMath.h>
23 
24 #include <utility>
25 #include <vector>
26 #include <limits>
27 
28 namespace makVrv
29 {
30 
31  class DtDe;
32  class Dt2DEffect;
33  class DtTextProxy;
34  class DtTextLayoutInterface;
35  class DtTexturedGlyphRenderer;
36  class DtOverlayResourceProvider;
37  class DtProjected2DTexturedEffect;
38  class DtTextProxyGroup;
39  typedef boost::weak_ptr<DtFont> DtFontWP;
40  typedef boost::shared_ptr<DtFont> DtFontSP;
41 
42  class DtBufferObject;
43 
46 
49 
51  template <>
52  inline const char* creatorTypeName<DtTextRenderer>(void) { return "DtTextRendererCreator"; }
53 
57  {
59 
60  public:
63  {
64  public:
66  : myBaseAltitude(std::numeric_limits<double>::min())
67  , myFont(0)
68  {
69  // intentional noop
70  }
71 
72  DtAltitudeBasedConfiguration(double altitude, DtFontSP font)
73  : myBaseAltitude(altitude)
74  , myFont(font)
75  {
76  // intentional noop
77  }
78 
80  {
81  // intentional noop
82  }
83 
85  const DtAltitudeBasedConfiguration &other) = default;
86 
88  const DtAltitudeBasedConfiguration &other) = default;
89 
91 
92  public:
93 
94  bool operator==(const DtAltitudeBasedConfiguration& config) const
95  {
96  return DtEq(myBaseAltitude, config.myBaseAltitude, DtEMilli)
97  && myFont == config.myFont;
98  }
99 
102  };
103 
105  typedef std::vector<DtAltitudeBasedConfiguration> DtAltitudeBasedConfigurationCollection;
106 
107  public:
108 
110  virtual ~DtTextRenderer();
111 
113  DtTextRenderer() = delete;
114 
117  const DtTextRenderer &other) = delete;
118 
120  DtTextRenderer &operator=(
121  const DtTextRenderer &other) = delete;
122 
123  public:
124 
126  virtual DtTextProxy* createProxy();
127 
129  virtual DtTextProxy* cloneProxy( const DtTextProxy* );
130 
132  virtual int numberOfPrimitives() const;
133 
135  virtual void releaseResources();
136 
138  virtual bool isRenderModeSupported( int mode );
139 
140  virtual bool forceTextShaping(void) const;
141 
143  virtual void render( bool geocentric, float geocentricAlpha,
144  const double location[3], double altitude
145  , const double positionMatrix[16]
146  , const double projectionMatrix[16] );
147 
149  virtual void addGroupRef( unsigned int );
150 
152  virtual void removeGroupRef( unsigned int );
153 
156  virtual void removeProxy( const DtTextProxy* );
157 
170  virtual void setAltitudeBasedConfigurationsForProxy(DtTextProxy*, const DtAltitudeBasedConfigurationCollection&);
171 
173  virtual bool getAltitudeBasedConfigurationsForProxy(const DtTextProxy*, DtAltitudeBasedConfigurationCollection&) const;
174 
176  virtual void clearAltitudeSpecificConfigurationsForProxy(DtTextProxy*);
177 
178  protected:
179 
182 
183  protected:
184 
185  std::map<const DtTextProxy*, DtTextProxyGroup*> myTextProxyToGroupMap;
186  std::map<const DtTextProxyGroup*, DtTexturedGlyphRenderer*> myGlyphRenderers;
187  std::vector<DtTextProxyGroup*> myTextProxyGroups;
189 
190  typedef std::vector<DtBufferObject*> BufferObjectList;
192  };
193 
194 
198  {
199  public:
200 
203  {
204  public:
206  : myBaseAltitude(altitude)
207  , myBoundingBox(box)
208  {
209  // intentional noop
210  }
211 
213  : myBaseAltitude(std::numeric_limits<double>::min())
214  , myBoundingBox()
215  {
216  myBoundingBox.invalidate();
217  }
218 
221  const DtAltitudeBasedBoundingBoxConfiguration &other) = default;
223  const DtAltitudeBasedBoundingBoxConfiguration &other) = default;
224 
227  };
228 
230  typedef std::vector<DtAltitudeBasedBoundingBoxConfiguration> DtAltitudeBasedBoundingBoxConfigurationCollection;
231 
232  public:
233 
235  DtTextProxy( DtTextRenderer* parent );
236 
238  DtTextProxy* clone( DtTextRenderer* parent ) const;
239 
241  ~DtTextProxy();
242 
243  public:
244 
246  void setAlignment( DtFont::TextAlignement alignment );
247 
249  DtFont::TextAlignement alignment() const { return myAlignment; };
250 
252  void setParent(DtTextRenderer*);
253 
255  void setPosition( float x, float y, float z, float w = 0 );
256 
258  const float* position() const;
259 
261  void setRotation( float angle );
262 
264  float rotation() const;
265 
267  void setColor( float r, float g, float b, float a );
268 
270  const float* color() const;
271 
274  void setString( const DtUnicode& str );
275 
277  const DtUnicode& string() const;
278 
280  void setFont(DtFontSP font);
281 
283  std::vector<double> fontConfigurationMinimumAltitudes() const;
284 
286  void setAltitudeSpecificFonts(const DtTextRenderer::DtAltitudeBasedConfigurationCollection&);
287 
290  void clearAltitudeSpecificFonts();
291 
303  void setIsForcedAltitudeBasedConfigurationEnabled(bool enabled);
304 
308  bool isForcedAltitudeBasedConfigurationEnabled() const;
309 
313  void setBaseAltitudeToUseForForcedAltitudeBasedConfigurations(double minimumAltitudeForUse);
314 
324  DtFontSP font(double altitude=std::numeric_limits<double>::min()) const;
325 
327  Dt2dPoint calculateGlyphSize(const DtPen& pen,
328  const DtUnicode& string, double minimumCameraAltitude=std::numeric_limits<double>::min(),
329  unsigned int pos = 0, int len = -1) const;
330 
332  DtBoundingBox calculateBoundingBox(const DtPen& pen,
333  const DtUnicode& string, double minimumCameraAltitude=std::numeric_limits<double>::min(),
334  unsigned int pos = 0, int len = -1) const;
335 
337  void setBounds( const DtBoundingBox& box );
338 
348  const DtBoundingBox& bounds(double cameraAltitude) const;
349 
352  void setBoundsByMinimumAltitude( const DtBoundingBox& box, double minimumAltitudeForUse );
353 
355  void setGroup( unsigned int group );
356 
360  void setLodOutAltitude( double lodOutAltitude );
361 
363  double lodOutAltitude() const;
364 
367  void setIsLodOutAltitudeEnabled(bool isLodOutAltitudeEnabled);
368 
370  bool isLodOutAltitudeEnabled() const;
371 
373  unsigned int group() const;
374 
376  void renderText(DtTexturedGlyphRenderer*, DtFontSP, double);
377 
378  protected:
379 
381 
382  float myRotation;
383  float myPosition[4];
384  float myColor[4];
385  unsigned int myGroup;
386 
390 
392 
395 
398 
399  void makeOrChangeTextLayout(const DtUnicode& str);
400  };
401 
405  {
406  friend class DtTextRenderer;
407 
408  public:
409  typedef std::vector<DtTextProxy*> TextProxyList;
410 
411  public:
414  ~DtTextProxyGroup();
415 
417  const DtTextProxyGroup &other) = delete;
418 
419  DtTextProxyGroup &operator=(
420  const DtTextProxyGroup &other) = delete;
421 
422  DtTextProxyGroup(DtTextProxyGroup &&) = delete;
423 
424  public:
428  void render(DtTexturedGlyphRenderer* renderer, double cameraAltitude);
429 
430  protected:
432 
434  };
435 
436 }
Generic base class for text layout renderers.
Definition: DtTextLayoutInterface.h:24
DtTextLayoutInterface * myTextLayout
Definition: DtTextRenderer.h:391
bool myIsLodOutAltitudeEnabled
Definition: DtTextRenderer.h:393
A unicode string. DtUnicode stores a UTF-16 encoded unicode string. Code Point, a Unicode character...
Definition: DtUnicode.h:33
DtAltitudeBasedBoundingBoxConfiguration(double altitude, const DtBoundingBox &box)
Definition: DtTextRenderer.h:205
bool operator==(const DtAltitudeBasedConfiguration &config) const
Definition: DtTextRenderer.h:94
DtProjected2DTexturedEffect * myEffect
Definition: DtTextRenderer.h:188
Contains the makVrv::DtBoundingBox class declaration.
bool myIsForcedAltitudeBasedConfigurationEnabled
Definition: DtTextRenderer.h:396
double myAltitudeToUseForForcedAltitudeBasedConfiguration
Definition: DtTextRenderer.h:397
A 2D point.
Definition: DtBoundingBox.h:19
double myBaseAltitude
Definition: DtTextRenderer.h:100
TextProxyList myProxies
Definition: DtTextRenderer.h:431
A class that defines an altitude-based configuration for a text proxy.
Definition: DtTextRenderer.h:62
A glyph renderer which renders the texture associated with a glyph.
Definition: DtTexturedGlyphRenderer.h:25
A class for controlling text owned by the TextRenderer.
Definition: DtTextRenderer.h:197
DtFont::TextAlignement myAlignment
Definition: DtTextRenderer.h:387
BufferObjectList myBufferObjectList
Definition: DtTextRenderer.h:191
A extended precision 2D quad rendering effect.
Definition: DtProjected2DTexturedEffect.h:19
DtTextRenderer * myParent
Definition: DtTextRenderer.h:380
TextAlignement
Definition: DtFont.h:33
double myBaseAltitude
Definition: DtTextRenderer.h:225
DtAltitudeBasedConfiguration()
Definition: DtTextRenderer.h:65
Variadic templated creator class for defining a DtVirtualBaseClass creator that is automatically regi...
Definition: DtVirtualBaseClassCreator.h:22
A class for rendering text object.
Definition: DtTextRenderer.h:56
The overlay resource provider class provies resources for overlay drawing classes.
Definition: DtOverlayResourceProvider.h:23
const char * creatorTypeName< DtTextRenderer >(void)
template specialization for the creator (pass the class being created to the creatorTypeName template...
Definition: DtTextRenderer.h:52
DtAltitudeBasedBoundingBoxConfiguration()
Definition: DtTextRenderer.h:212
#define DT_DLL_VRVGRAPHICS
Contains DLL export macros.
Definition: vrvGraphics.h:19
std::vector< DtTextProxyGroup * > myTextProxyGroups
Definition: DtTextRenderer.h:187
DT_DLL_vrfutil double angle(double vec1[3], double vec2[3])
DtAltitudeBasedBoundingBoxConfigurationCollection myAltitudeBasedBounds
Definition: DtTextRenderer.h:389
Abstract primitive rendering base class.
Definition: DtPrimitiveRenderer.h:19
A class for altitude-based bounding boxes.
Definition: DtTextRenderer.h:202
unsigned int myGroup
Definition: DtTextRenderer.h:385
DtBoundingBox myBoundingBox
Definition: DtTextRenderer.h:226
double myLodOutAltitude
Definition: DtTextRenderer.h:394
boost::weak_ptr< DtFont > DtFontWP
Definition: DtFontManager.h:23
std::vector< DtBufferObject * > BufferObjectList
Definition: DtTextRenderer.h:190
float myRotation
Definition: DtTextRenderer.h:382
DtFontSP myFont
Definition: DtTextRenderer.h:101
std::vector< DtAltitudeBasedConfiguration > DtAltitudeBasedConfigurationCollection
A collection of altitude-based configurations for a text proxy.
Definition: DtTextRenderer.h:105
DtTextRenderer::DtAltitudeBasedConfigurationCollection myAltitudeBasedConfigurations
Definition: DtTextRenderer.h:433
DtVirtualBaseClassCreator< DtTextRenderer, DtOverlayResourceProvider & > DtTextRendererCreator
creator
Definition: DtTextRenderer.h:45
DtAltitudeBasedConfiguration(double altitude, DtFontSP font)
Definition: DtTextRenderer.h:72
std::vector< DtTextProxy * > TextProxyList
Definition: DtTextRenderer.h:409
boost::shared_ptr< DtFont > DtFontSP
Definition: DtFontManager.h:20
~DtAltitudeBasedConfiguration()
Definition: DtTextRenderer.h:79
A pen object with parameters on how to draw text.
Definition: DtBoundingBox.h:80
DtUnicode myString
Definition: DtTextRenderer.h:388
const char int mode
Definition: ioapi.h:38
Contains makVrv::DtFont class.
std::map< const DtTextProxyGroup *, DtTexturedGlyphRenderer * > myGlyphRenderers
Definition: DtTextRenderer.h:186
Contains the makVrv::DtTextured2DRenderer class declaration.
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:70
friend DtTextRendererCreator
Definition: DtTextRenderer.h:58
std::vector< DtAltitudeBasedBoundingBoxConfiguration > DtAltitudeBasedBoundingBoxConfigurationCollection
A collection of altitude-based bounding boxes for a text proxy.
Definition: DtTextRenderer.h:230
std::map< const DtTextProxy *, DtTextProxyGroup * > myTextProxyToGroupMap
Definition: DtTextRenderer.h:185
A group of text proxies that share the same set of altitude-based configurations. Groups of text prox...
Definition: DtTextRenderer.h:404
DtFont::TextAlignement alignment() const
Returns alignment.
Definition: DtTextRenderer.h:249
A simple bounding box.
Definition: DtBoundingBox.h:101

Document ID: Generated on Mon Jun 20 00:38:30 EDT 2022 from SVN revision 244029
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)