OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimImageRenderer.h
Go to the documentation of this file.
1 //*******************************************************************
2 // Copyright (C) 2001 ImageLinks Inc.
3 //
4 // License: MIT
5 //
6 // See LICENSE.txt file in the top level directory for more details.
7 //
8 // Author: Garrett Potts
9 //
10 //*******************************************************************
11 // $Id: ossimImageRenderer.h 23548 2015-09-28 21:01:36Z dburken $
12 
13 #ifndef ossimImageRenderer_HEADER
14 #define ossimImageRenderer_HEADER
17 #include <ossim/base/ossimDrect.h>
21 
22 class ossimImageData;
25 
27  public ossimViewInterface
28 {
29 public:
32  ossimImageViewTransform* imageViewTrans = NULL);
33 
34  virtual ~ossimImageRenderer();
35 
36  virtual ossimString getLongName() const;
37  virtual ossimString getShortName() const;
38 
46  virtual ossimRefPtr<ossimImageData> getTile(const ossimIrect& origin,
47  ossim_uint32 resLevel=0);
48 
49  virtual void initialize();
50 
56  virtual ossimIrect getBoundingRect(ossim_uint32 resLevel=0)const;
57 
66  virtual void getBoundingRect(ossimIrect& rect,
67  ossim_uint32 resLevel=0) const;
68 
73  virtual bool saveState(ossimKeywordlist& kwl,
74  const char* prefix=0)const;
75 
80  virtual bool loadState(const ossimKeywordlist& kwl,
81  const char* prefix=0);
82 
83  void setImageViewTransform(ossimImageViewTransform* transform);
84  ossimImageViewTransform* getImageViewTransform() { return m_ImageViewTransform.get(); }
85 
89 
90  virtual bool setView(ossimObject* baseObject);
91  ossimFilterResampler* getResampler() { return m_Resampler; }
92  virtual ossimObject* getView();
93  virtual const ossimObject* getView()const;
94 
95  virtual void getDecimationFactor(ossim_uint32 resLevel, ossimDpt& result)const;
96  virtual void getDecimationFactors(vector<ossimDpt>& decimations)const;
98 
99  virtual void setAutoUpdateInputTransformFlag(bool flag){ m_AutoUpdateInputTransform = flag; }
100 
111  virtual void getValidImageVertices(vector<ossimIpt>& validVertices,
113  ossim_uint32 resLevel=0)const;
114 
115  void setMaxLevelsToCompute(ossim_uint32 maxLevels);
116  ossim_uint32 getMaxLevelsToCompute()const;
117 
120  void propertyEvent(ossimPropertyEvent& event);
121  virtual void refreshEvent(ossimRefreshEvent& event);
122 
123  virtual void setProperty(ossimRefPtr<ossimProperty> property);
124  virtual ossimRefPtr<ossimProperty> getProperty(const ossimString& name)const;
125  virtual void getPropertyNames(std::vector<ossimString>& propertyNames)const;
126 
133  virtual void enableSource();
134 
141  virtual void disableSource();
142 
151  virtual void setEnableFlag(bool flag);
152 
153 
154 protected:
155 private:
156 
158  {
159  enum SplitFlag{
160  SPLIT_NONE = 0,
161  UPPER_LEFT_SPLIT_FLAG = 1,
162  UPPER_RIGHT_SPLIT_FLAG = 2,
163  LOWER_RIGHT_SPLIT_FLAG = 4,
164  LOWER_LEFT_SPLIT_FLAG = 8,
165  SPLIT_ALL = UPPER_LEFT_SPLIT_FLAG|UPPER_RIGHT_SPLIT_FLAG|LOWER_RIGHT_SPLIT_FLAG|LOWER_LEFT_SPLIT_FLAG
166  };
167  public:
169  {
170  return out << "vul: " << rhs.m_Vul << endl
171  << "vur: " << rhs.m_Vur << endl
172  << "vlr: " << rhs.m_Vlr << endl
173  << "vll: " << rhs.m_Vll << endl
174  << "iul: " << rhs.m_Iul << endl
175  << "iur: " << rhs.m_Iur << endl
176  << "ilr: " << rhs.m_Ilr << endl
177  << "ill: " << rhs.m_Ill << endl
178  << "scale: " << rhs.m_ViewToImageScale << endl;
179 
180  }
181 
184  const ossimDpt& vul,
185  const ossimDpt& vur,
186  const ossimDpt& vlr,
187  const ossimDpt& vll);
188 
189  bool imageHasNans()const;
190  bool imageIsNan()const;
191  bool viewHasNans()const;
192  bool viewIsNan()const;
193 
194  void splitView(std::vector<ossimRendererSubRectInfo>& result)const;
195  //void splitView(ossimRendererSubRectInfo& ulRect,
196  // ossimRendererSubRectInfo& urRect,
197  // ossimRendererSubRectInfo& lrRect,
198  // ossimRendererSubRectInfo& llRect)const;
199 
200  void transformViewToImage();
201  void transformImageToView();
202  bool tooBig()const;
203  void roundToInteger();
204  void stretchImageOut(bool enableRound=false);
205  ossimDrect getViewRect()const;
206  ossimDrect getImageRect()const;
207  void roundImageToInteger();
208  void roundViewToInteger();
209  bool isViewEqual(const ossimRendererSubRectInfo& infoRect)const;
210  bool isViewEqual(const ossimDrect& viewRect)const;
211  ossimDpt computeViewToImageScale(const ossimDpt& viewPt, const ossimDpt& delta=ossimDpt(1.0,1.0))const;
212  ossimDpt getAbsValueViewToImageScales()const;
213  ossimDpt getAbsValueImageToViewScales()const;
214  ossimDpt computeRoundTripErrorViewPt(const ossimDpt& dpt)const;
215  bool isViewAPoint()const;
216  bool isIdentity()const;
217  bool canBilinearInterpolate(double error)const;
218 
219  ossimDpt getParametricCenter(const ossimDpt& ul, const ossimDpt& ur,
220  const ossimDpt& lr, const ossimDpt& ll)const;
221 
222  void getViewMids(ossimDpt& upperMid,
223  ossimDpt& rightMid,
224  ossimDpt& bottomMid,
225  ossimDpt& leftMid,
226  ossimDpt& center)const;
227 
228  void getImageMids(ossimDpt& upperMid,
229  ossimDpt& rightMid,
230  ossimDpt& bottomMid,
231  ossimDpt& leftMid,
232  ossimDpt& center)const;
233  ossim_uint16 getSplitFlags()const;
234 
239 
244 
247 
248 
253 
258 
261 
262  private:
263  void splitHorizontal(std::vector<ossimRendererSubRectInfo>& result)const;
264  void splitVertical(std::vector<ossimRendererSubRectInfo>& result)const;
265  void splitAll(std::vector<ossimRendererSubRectInfo>& result)const;
266  };
267 
268  void recursiveResample(ossimRefPtr<ossimImageData> outputData,
269  const ossimRendererSubRectInfo& rectInfo,
270  ossim_uint32 level);
271 
272 
273  void fillTile(ossimRefPtr<ossimImageData> outputData,
274  const ossimRendererSubRectInfo& rectInfo);
275 
276  ossimIrect getBoundingImageRect()const;
277 
278 
280  void checkIVT();
281 
286  void initializeBoundingRects();
287 
288  ossimRefPtr<ossimImageData> getTileAtResLevel(const ossimIrect& boundingRect,
289  ossim_uint32 resLevel);
290  template <class T>
291  void resampleTileToDecimation(T dummyVariable,
294  ossim_uint32 multiplier);
295 
296  long computeClosestResLevel(const std::vector<ossimDpt>& decimationFactors,
297  double scale)const;
298  void stretchQuadOut(const ossimDpt& amount,
299  ossimDpt& ul,
300  ossimDpt& ur,
301  ossimDpt& lr,
302  ossimDpt& ll);
303 
307  void allocate();
308 
312  void deallocate();
313 
318 
330 
334 
338 
341 
342 TYPE_DATA
343 };
344 
346 :m_transform(transform),
347 m_viewBounds(0)
348 {
349  m_Vul.makeNan();
350  m_Vur.makeNan();
351  m_Vlr.makeNan();
352  m_Vll.makeNan();
353  m_Iul.makeNan();
354  m_Iur.makeNan();
355  m_Ilr.makeNan();
356  m_Ill.makeNan();
359 }
360 
362  const ossimDpt& vul,
363  const ossimDpt& vur,
364  const ossimDpt& vlr,
365  const ossimDpt& vll)
366  :m_Vul(vul),
367  m_Vur(vur),
368  m_Vlr(vlr),
369  m_Vll(vll),
370  m_transform(transform),
371  m_viewBounds(0)
372 {
373  m_Iul.makeNan();
374  m_Iur.makeNan();
375  m_Ilr.makeNan();
376  m_Ill.makeNan();
379 }
380 
382 {
383  return ( m_Iul.hasNans()||
384  m_Iur.hasNans()||
385  m_Ilr.hasNans()||
386  m_Ill.hasNans());
387 }
388 
390 {
391  return ( m_Iul.hasNans()&&
392  m_Iur.hasNans()&&
393  m_Ilr.hasNans()&&
394  m_Ill.hasNans());
395 }
396 
398 {
399  return ( m_Vul.hasNans()||
400  m_Vur.hasNans()||
401  m_Vlr.hasNans()||
402  m_Vll.hasNans());
403 }
404 
406 {
407  return ( m_Vul.hasNans()&&
408  m_Vur.hasNans()&&
409  m_Vlr.hasNans()&&
410  m_Vll.hasNans());
411 }
412 
414 {
415  m_Iul = ossimIpt(m_Iul);
416  m_Iur = ossimIpt(m_Iur);
417  m_Ilr = ossimIpt(m_Ilr);
418  m_Ill = ossimIpt(m_Ill);
419 
420  m_Vul = ossimIpt(m_Vul);
421  m_Vur = ossimIpt(m_Vur);
422  m_Vlr = ossimIpt(m_Vlr);
423  m_Vll = ossimIpt(m_Vll);
424 }
425 
427 {
428  return ossimDrect(m_Vul,
429  m_Vur,
430  m_Vlr,
431  m_Vll);
432 }
433 
435 {
436  return ossimDrect(m_Iul,
437  m_Iur,
438  m_Ilr,
439  m_Ill);
440 }
441 
443 {
444  m_Iul = ossimIpt(m_Iul);
445  m_Iur = ossimIpt(m_Iur);
446  m_Ilr = ossimIpt(m_Ilr);
447  m_Ill = ossimIpt(m_Ill);
448 }
449 
451 {
452  m_Vul = ossimIpt(m_Vul);
453  m_Vur = ossimIpt(m_Vur);
454  m_Vlr = ossimIpt(m_Vlr);
455  m_Vll = ossimIpt(m_Vll);
456 }
457 
459 {
460  return ( (m_Vul == infoRect.m_Vul)&&
461  (m_Vur == infoRect.m_Vur)&&
462  (m_Vlr == infoRect.m_Vlr)&&
463  (m_Vll == infoRect.m_Vll));
464 }
465 
467 {
468  return ( (m_Vul == viewRect.ul())&&
469  (m_Vur == viewRect.ur())&&
470  (m_Vlr == viewRect.lr())&&
471  (m_Vll == viewRect.ll()));
472 }
473 
475 {
476  if(m_ViewToImageScale.hasNans())
477  {
478  return m_ImageToViewScale;
479  }
480  return ossimDpt(fabs(m_ViewToImageScale.x), fabs(m_ViewToImageScale.y));
481 }
482 
484 {
485  if(m_ImageToViewScale.hasNans())
486  {
487  return m_ImageToViewScale;
488  }
489 
490  return ossimDpt(fabs(m_ImageToViewScale.x), fabs(m_ImageToViewScale.y));
491 }
492 
494 {
495  return ((m_Vul == m_Vur)&&
496  (m_Vul == m_Vlr)&&
497  (m_Vul == m_Vll));
498 }
499 
500 #endif
bool isViewEqual(const ossimRendererSubRectInfo &infoRect) const
virtual ossimIrect getBoundingRect(ossim_uint32 resLevel=0) const
This will return the bounding rect of the source.
virtual void setProperty(ossimRefPtr< ossimProperty > property)
ossimRefPtr< ossimImageViewTransform > m_transform
void makeNan()
Definition: ossimIpt.h:56
ossimRendererSubRectInfo(ossimImageViewTransform *transform=0)
virtual void connectInputEvent(ossimConnectionEvent &event)
ossimRefPtr< ossimImageData > m_Tile
#define OSSIMDLLEXPORT
Represents serializable keyword/value map.
const ossimDpt & ul() const
Definition: ossimDrect.h:339
ossimPolyArea2d m_viewArea
virtual void disableSource()
Definition: ossimSource.cpp:89
ossim_uint32 m_StartingResLevel
This is going to allow us to chain multiple renderers together.
virtual ossim_uint32 getNumberOfDecimationLevels() const
Will return the number of resolution levels.
unsigned short ossim_uint16
virtual ossimString getShortName() const
Definition: ossimObject.cpp:48
virtual void disconnectInputEvent(ossimConnectionEvent &event)
ossimFilterResampler * m_Resampler
ostream & operator<<(ostream &out, const ossimAxes &axes)
Definition: ossimAxes.h:88
ossimRefPtr< ossimImageData > m_BlankTile
ossimRefPtr< ossimImageData > m_TemporaryBuffer
ossimVertexOrdering
virtual void getPropertyNames(std::vector< ossimString > &propertyNames) const
#define TYPE_DATA
Definition: ossimRtti.h:339
virtual void getValidImageVertices(std::vector< ossimIpt > &validVertices, ossimVertexOrdering ordering=OSSIM_CLOCKWISE_ORDER, ossim_uint32 resLevel=0) const
ordering specifies how the vertices should be arranged.
unsigned int ossim_uint32
virtual bool loadState(const ossimKeywordlist &kwl, const char *prefix=0)
Method to the load (recreate) the state of an object from a keyword list.
virtual ossimString getLongName() const
Definition: ossimObject.cpp:53
virtual void enableSource()
Definition: ossimSource.cpp:84
ossim_uint32 m_MaxLevelsToCompute
virtual ossimRefPtr< ossimImageGeometry > getImageGeometry()
Returns the image geometry object associated with this tile source or NULL if not defined...
virtual void setEnableFlag(bool flag)
Definition: ossimSource.cpp:99
ossimFilterResampler * getResampler()
virtual void propertyEvent(ossimPropertyEvent &event)
ossimImageViewTransform * getImageViewTransform()
virtual bool saveState(ossimKeywordlist &kwl, const char *prefix=0) const
Method to save the state of an object to a keyword list.
const ossimDpt & ur() const
Definition: ossimDrect.h:340
virtual bool setView(ossimObject *baseObject)=0
virtual ossimRefPtr< ossimProperty > getProperty(const ossimString &name) const
virtual void setAutoUpdateInputTransformFlag(bool flag)
const ossimDpt & ll() const
Definition: ossimDrect.h:342
virtual ossimObject * getView()=0
ossimRefPtr< ossimImageViewTransform > m_ImageViewTransform
virtual void refreshEvent(ossimRefreshEvent &event)
const ossimDpt & lr() const
Definition: ossimDrect.h:341
virtual void getDecimationFactor(ossim_uint32 resLevel, ossimDpt &result) const
Will return the decimation factor for the given resolution level.
void makeNan()
Definition: ossimDpt.h:65
std::basic_ostream< char > ostream
Base class for char output streams.
Definition: ossimIosFwd.h:23
ossim_uint32 m_MaxRecursionLevel
virtual void getDecimationFactors(std::vector< ossimDpt > &decimations) const
Will return an array of all decimations for each resolution level.
virtual ossimRefPtr< ossimImageData > getTile(const ossimIpt &origin, ossim_uint32 resLevel=0)