OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
ossimAnnotationMultiPolyLineObject Class Reference

#include <ossimAnnotationMultiPolyLineObject.h>

Inheritance diagram for ossimAnnotationMultiPolyLineObject:
ossimAnnotationObject ossimObject ossimReferenced

Public Member Functions

 ossimAnnotationMultiPolyLineObject ()
 
 ossimAnnotationMultiPolyLineObject (const vector< ossimPolyLine > &multiPoly, unsigned char r, unsigned char g, unsigned char b, long thickness)
 
 ossimAnnotationMultiPolyLineObject (const ossimAnnotationMultiPolyLineObject &rhs)
 
virtual ossimObjectdup () const
 
virtual void applyScale (double x, double y)
 
virtual void draw (ossimRgbImage &anImage) const
 
virtual bool intersects (const ossimDrect &rect) const
 
virtual ossimAnnotationObjectgetNewClippedObject (const ossimDrect &rect) const
 
virtual std::ostream & print (std::ostream &out) const
 Generic print method. More...
 
virtual void getBoundingRect (ossimDrect &rect) const
 
virtual void addPolyLine (const ossimPolyLine &poly)
 
virtual void addPoint (ossim_uint32 polygonIndex, const ossimDpt &pt)
 
virtual void setMultiPolyLine (const vector< ossimPolyLine > &multiPoly)
 
virtual void computeBoundingRect ()
 
virtual bool isPointWithin (const ossimDpt &imagePoint) const
 
const std::vector< ossimPolyLine > & getMultiPolyLine () const
 
std::vector< ossimPolyLine > & getMultiPolyLine ()
 
- Public Member Functions inherited from ossimAnnotationObject
virtual ~ossimAnnotationObject ()
 
 ossimAnnotationObject (ossim_uint8 r=255, ossim_uint8 g=255, ossim_uint8 b=255, ossim_uint8 thickness=1)
 
virtual void applyScale (const ossimDpt &scale)
 
virtual ossimDrect getBoundingRect () const
 
virtual void setColor (ossim_uint8 r, ossim_uint8 g, ossim_uint8 b)
 
void getColor (ossim_uint8 &r, ossim_uint8 &g, ossim_uint8 &b) const
 
ossim_uint8 getThickness () const
 
virtual void setThickness (ossim_uint8 thickness)
 
virtual bool saveState (ossimKeywordlist &kwl, const char *prefix=0) const
 Saves the current state of this object. More...
 
virtual bool loadState (const ossimKeywordlist &kwl, const char *prefix=0)
 Method to the load (recreate) the state of an object from a keyword list. More...
 
virtual ossimString getName () const
 
virtual void setName (const ossimString &name)
 
ossim_uint32 getId () const
 
virtual ossim_uint32 setId ()
 
- Public Member Functions inherited from ossimObject
 ossimObject ()
 
virtual ~ossimObject ()
 
virtual ossimString getShortName () const
 
virtual ossimString getLongName () const
 
virtual ossimString getDescription () const
 
virtual ossimString getClassName () const
 
virtual RTTItypeid getType () const
 
virtual bool canCastTo (ossimObject *obj) const
 
virtual bool canCastTo (const RTTItypeid &id) const
 
virtual bool canCastTo (const ossimString &parentClassName) const
 
virtual bool isEqualTo (const ossimObject &obj, ossimCompareType compareType=OSSIM_COMPARE_FULL) const
 
virtual void accept (ossimVisitor &visitor)
 
- Public Member Functions inherited from ossimReferenced
 ossimReferenced ()
 
 ossimReferenced (const ossimReferenced &)
 
ossimReferencedoperator= (const ossimReferenced &)
 
void ref () const
 increment the reference count by one, indicating that this object has another pointer which is referencing it. More...
 
void unref () const
 decrement the reference count by one, indicating that a pointer to this object is referencing it. More...
 
void unref_nodelete () const
 decrement the reference count by one, indicating that a pointer to this object is referencing it. More...
 
int referenceCount () const
 

Protected Member Functions

virtual ~ossimAnnotationMultiPolyLineObject ()
 
- Protected Member Functions inherited from ossimReferenced
virtual ~ossimReferenced ()
 

Protected Attributes

vector< ossimPolyLinetheMultiPolyLine
 
ossimDrect theBoundingRect
 
- Protected Attributes inherited from ossimAnnotationObject
ossim_uint8 theRed
 
ossim_uint8 theGreen
 
ossim_uint8 theBlue
 
ossim_uint8 theThickness
 
ossimString theName
 
ossim_uint32 theId
 

Additional Inherited Members

- Static Public Member Functions inherited from ossimAnnotationObject
static ossim_uint32 getNextId ()
 
static void restIdCounter ()
 
- Static Protected Attributes inherited from ossimAnnotationObject
static ossim_uint32 theIdCounter = 0
 

Detailed Description

Definition at line 17 of file ossimAnnotationMultiPolyLineObject.h.

Constructor & Destructor Documentation

◆ ossimAnnotationMultiPolyLineObject() [1/3]

ossimAnnotationMultiPolyLineObject::ossimAnnotationMultiPolyLineObject ( )

Definition at line 18 of file ossimAnnotationMultiPolyLineObject.cpp.

Referenced by dup().

20 {
22 }
ossimAnnotationObject(ossim_uint8 r=255, ossim_uint8 g=255, ossim_uint8 b=255, ossim_uint8 thickness=1)

◆ ossimAnnotationMultiPolyLineObject() [2/3]

ossimAnnotationMultiPolyLineObject::ossimAnnotationMultiPolyLineObject ( const vector< ossimPolyLine > &  multiPoly,
unsigned char  r,
unsigned char  g,
unsigned char  b,
long  thickness 
)

Definition at line 24 of file ossimAnnotationMultiPolyLineObject.cpp.

References computeBoundingRect(), and theMultiPolyLine.

29  :ossimAnnotationObject(r, g, b, thickness)
30 {
31  theMultiPolyLine = multiPoly;
33 }
ossimAnnotationObject(ossim_uint8 r=255, ossim_uint8 g=255, ossim_uint8 b=255, ossim_uint8 thickness=1)

◆ ossimAnnotationMultiPolyLineObject() [3/3]

ossimAnnotationMultiPolyLineObject::ossimAnnotationMultiPolyLineObject ( const ossimAnnotationMultiPolyLineObject rhs)

Definition at line 214 of file ossimAnnotationMultiPolyLineObject.cpp.

215  : ossimAnnotationObject(rhs),
218 {
219 }
ossimAnnotationObject(ossim_uint8 r=255, ossim_uint8 g=255, ossim_uint8 b=255, ossim_uint8 thickness=1)

◆ ~ossimAnnotationMultiPolyLineObject()

ossimAnnotationMultiPolyLineObject::~ossimAnnotationMultiPolyLineObject ( )
protectedvirtual

Definition at line 35 of file ossimAnnotationMultiPolyLineObject.cpp.

36 {
37 }

Member Function Documentation

◆ addPoint()

void ossimAnnotationMultiPolyLineObject::addPoint ( ossim_uint32  polygonIndex,
const ossimDpt pt 
)
virtual

Definition at line 231 of file ossimAnnotationMultiPolyLineObject.cpp.

References theMultiPolyLine.

233 {
234  if(polygonIndex < theMultiPolyLine.size())
235  {
236  theMultiPolyLine[polygonIndex].addPoint(pt);
237  }
238 }

◆ addPolyLine()

void ossimAnnotationMultiPolyLineObject::addPolyLine ( const ossimPolyLine poly)
virtual

Definition at line 226 of file ossimAnnotationMultiPolyLineObject.cpp.

References theMultiPolyLine.

227 {
228  theMultiPolyLine.push_back(poly);
229 }

◆ applyScale()

void ossimAnnotationMultiPolyLineObject::applyScale ( double  x,
double  y 
)
virtual

Implements ossimAnnotationObject.

Definition at line 39 of file ossimAnnotationMultiPolyLineObject.cpp.

References computeBoundingRect(), theMultiPolyLine, x, and y.

41 {
42  for(ossim_uint32 i =0; i<theMultiPolyLine.size(); ++i)
43  {
44  theMultiPolyLine[i] *= ossimDpt(x, y);
45  }
47  // theBoundingRect *= ossimDpt(x,y);
48 }
ossim_uint32 x
ossim_uint32 y
unsigned int ossim_uint32

◆ computeBoundingRect()

void ossimAnnotationMultiPolyLineObject::computeBoundingRect ( )
virtual

Implements ossimAnnotationObject.

Definition at line 162 of file ossimAnnotationMultiPolyLineObject.cpp.

References ossimDrect::combine(), ossimDrect::hasNans(), ossimDrect::height(), ossimDrect::makeNan(), theBoundingRect, theMultiPolyLine, ossimAnnotationObject::theThickness, ossimDrect::ul(), ossimDrect::width(), ossimIpt::x, and ossimIpt::y.

Referenced by applyScale(), ossimGeoAnnotationMultiPolyLineObject::computeBoundingRect(), ossimAnnotationMultiPolyLineObject(), and setMultiPolyLine().

163 {
164  if(theMultiPolyLine.size())
165  {
166  ossimDrect rect(theMultiPolyLine[0].getVertexList());
167 
168  for(ossim_uint32 i = 1; i < theMultiPolyLine.size(); ++i)
169  {
170  ossimDrect rect2(theMultiPolyLine[i].getVertexList());
171 
172  if(rect.hasNans())
173  {
174  rect = rect2;
175  }
176  else
177  {
178  if(!rect2.hasNans())
179  {
180  rect = rect.combine(rect2);
181  }
182  }
183  }
184 
185  theBoundingRect = rect;
186  }
187  else
188  {
190  }
191  if(!theBoundingRect.hasNans())
192  {
193  ossimIpt origin = theBoundingRect.ul();
195  origin.y - theThickness/2,
196  origin.x + (theBoundingRect.width()-1) + theThickness/2,
197  origin.y + (theBoundingRect.height()-1) + theThickness/2);
198  }
199 }
void makeNan()
Definition: ossimDrect.h:388
ossim_float64 width() const
Definition: ossimDrect.h:522
const ossimDpt & ul() const
Definition: ossimDrect.h:339
unsigned int ossim_uint32
bool hasNans() const
Definition: ossimDrect.h:396
ossim_float64 height() const
Definition: ossimDrect.h:517
ossim_int32 y
Definition: ossimIpt.h:142
ossim_int32 x
Definition: ossimIpt.h:141

◆ draw()

void ossimAnnotationMultiPolyLineObject::draw ( ossimRgbImage anImage) const
virtual

Implements ossimAnnotationObject.

Definition at line 82 of file ossimAnnotationMultiPolyLineObject.cpp.

References ossimRgbImage::drawLine(), ossimRgbImage::getImageData(), ossimImageData::getImageRectangle(), ossimPolyLine::getNumberOfVertices(), ossimDrect::hasNans(), ossimDrect::intersects(), ossimDrect::lr(), ossimRgbImage::setDrawColor(), ossimRgbImage::setThickness(), ossimAnnotationObject::theBlue, theBoundingRect, ossimAnnotationObject::theGreen, theMultiPolyLine, ossimAnnotationObject::theRed, ossimAnnotationObject::theThickness, ossimDrect::ul(), ossimDpt::x, and ossimDpt::y.

Referenced by ossimGeoAnnotationMultiPolyLineObject::draw().

83 {
84  if(theMultiPolyLine.size()<1) return;
85  if(theBoundingRect.hasNans()) return;
86 
87 
89  anImage.setThickness(theThickness);
90  ossimDrect imageRect = anImage.getImageData()->getImageRectangle();
91 
92  if(theBoundingRect.intersects(imageRect))
93  {
94  // we need to extend it by a couple of pixels since
95  // if a pixel lies on the edge and then another pixel is just off
96  // the edge we will get a stair step and so for several pixels
97  // the line might be inside the image rectangle but the clip
98  // algorithm will only draw 1 pixel since it thinks the first
99  // point is inside and the second point is outside and will
100  // execute the clip algorithm keeping only the first
101  // point.
102  ossimDrect clipRect(imageRect.ul().x - 10,
103  imageRect.ul().y - 10,
104  imageRect.lr().x + 10,
105  imageRect.lr().y + 10);
106 
107  int j = 0;
108  for(ossim_uint32 i = 0; i < theMultiPolyLine.size(); ++i)
109  {
110  const ossimPolyLine& poly = theMultiPolyLine[i];
111  int vertexCount = poly.getNumberOfVertices();
112 
113  if(vertexCount > 1)
114  {
115 
116  ossimDpt start, end;
117  start = poly[0];
118  end = poly[1];
119  j = 1;
120  do
121  {
122  if(clipRect.clip(start, end))
123  {
124  anImage.drawLine(ossimIpt(start),
125  ossimIpt(end));
126  }
127  ++j;
128  start = poly[j-1];
129  end = poly[j];
130  }while(j < vertexCount);
131  }
132  else if(vertexCount == 1)
133  {
134  anImage.drawLine(ossimIpt(poly[0]),
135  ossimIpt(poly[0]));
136  }
137  }
138  }
139 }
const ossimDpt & ul() const
Definition: ossimDrect.h:339
double y
Definition: ossimDpt.h:165
void setThickness(ossim_int32 thickness)
All the drawing algorithms have thickness.
ossim_uint32 getNumberOfVertices() const
Definition: ossimPolyLine.h:70
ossimRefPtr< ossimImageData > getImageData()
Will return the image data.
unsigned int ossim_uint32
virtual ossimIrect getImageRectangle() const
bool hasNans() const
Definition: ossimDrect.h:396
bool intersects(const ossimDrect &rect) const
Definition: ossimDrect.cpp:289
void drawLine(double x1, double y1, double x2, double y2)
About all the draw routines will call draw line.
void setDrawColor(ossim_uint8 r=255, ossim_uint8 g=255, ossim_uint8 b=255)
double x
Definition: ossimDpt.h:164
const ossimDpt & lr() const
Definition: ossimDrect.h:341

◆ dup()

ossimObject * ossimAnnotationMultiPolyLineObject::dup ( ) const
virtual

◆ getBoundingRect()

void ossimAnnotationMultiPolyLineObject::getBoundingRect ( ossimDrect rect) const
virtual

◆ getMultiPolyLine() [1/2]

const std::vector< ossimPolyLine > & ossimAnnotationMultiPolyLineObject::getMultiPolyLine ( ) const

◆ getMultiPolyLine() [2/2]

std::vector< ossimPolyLine > & ossimAnnotationMultiPolyLineObject::getMultiPolyLine ( )

Definition at line 251 of file ossimAnnotationMultiPolyLineObject.cpp.

References theMultiPolyLine.

252 {
253  return theMultiPolyLine;
254 }

◆ getNewClippedObject()

ossimAnnotationObject * ossimAnnotationMultiPolyLineObject::getNewClippedObject ( const ossimDrect rect) const
virtual

Will allocate a new object that is clipped to the passed. in rect. Look at derived classes to see if the object is actually clipped or not. A new object is returned if it clips to the rect else NULL should be returned it doesn't clip.

Implements ossimAnnotationObject.

Definition at line 71 of file ossimAnnotationMultiPolyLineObject.cpp.

References ossimObject::getClassName(), ossimNotify(), and ossimNotifyLevel_WARN.

73 {
75 
77  << "ossimAnnotationMultiPolyLineObject::getNewClippedObject\n"
78  << "Not implemented for " << getClassName() << endl;
79  return result;
80 }
virtual ossimString getClassName() const
Definition: ossimObject.cpp:64
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)

◆ intersects()

bool ossimAnnotationMultiPolyLineObject::intersects ( const ossimDrect rect) const
virtual

Implements ossimAnnotationObject.

Definition at line 50 of file ossimAnnotationMultiPolyLineObject.cpp.

References ossimDrect::hasNans(), ossimDrect::intersects(), theBoundingRect, and theMultiPolyLine.

51 {
52  // do the quick checks first
53  //
54  if(rect.hasNans()) return false;
55  if(!rect.intersects(theBoundingRect)) return false;
56  if(theMultiPolyLine.size()<1) return false;
57 
58  for(ossim_uint32 i =0; i < theMultiPolyLine.size(); ++i)
59  {
60  vector<ossimPolyLine> result;
61 
62  if(theMultiPolyLine[i].clipToRect(result, rect))
63  {
64  return true;
65  }
66  }
67 
68  return false;
69 }
unsigned int ossim_uint32
bool hasNans() const
Definition: ossimDrect.h:396
bool intersects(const ossimDrect &rect) const
Definition: ossimDrect.cpp:289

◆ isPointWithin()

bool ossimAnnotationMultiPolyLineObject::isPointWithin ( const ossimDpt imagePoint) const
virtual

This method allows you to pick an object. It will return true or false if the point falls somewhere on an object. Look at derived classes for further information.

Reimplemented from ossimAnnotationObject.

Definition at line 201 of file ossimAnnotationMultiPolyLineObject.cpp.

References ossimDrect::pointWithin(), and theBoundingRect.

Referenced by ossimGeoAnnotationMultiPolyLineObject::isPointWithin().

202 {
203 // for(ossim_uint32 i = 0; i < theMultiPolyLine.size(); ++i)
204 // {
205 // if(theMultiPolyLine[i].isPointWithin(imagePoint))
206 // {
207 // return true;
208 // }
209 // }
210 
211  return theBoundingRect.pointWithin(imagePoint);
212 }
bool pointWithin(const ossimDpt &pt, double epsilon=0.0) const
Definition: ossimDrect.h:781

◆ print()

std::ostream & ossimAnnotationMultiPolyLineObject::print ( std::ostream &  out) const
virtual

Generic print method.

Derived classes should re-implement as they see fit.

Returns
std::ostream&

Reimplemented from ossimAnnotationObject.

Definition at line 141 of file ossimAnnotationMultiPolyLineObject.cpp.

References ossimObject::getClassName(), ossimAnnotationObject::print(), and theMultiPolyLine.

142 {
144  out << endl;
145  out << setw(15)<<setiosflags(ios::left)<<"type:"<<getClassName() << endl
146  << setw(15)<<setiosflags(ios::left)<<"polylines:"<<theMultiPolyLine.size()<<endl;
147 
148  for(ossim_uint32 i = 0; i < theMultiPolyLine.size(); ++i)
149  {
150  out << "____________________________________________________"<<endl
151  << theMultiPolyLine[i] << endl;
152  }
153  out << "____________________________________________________"<<endl;
154  return out;
155 }
virtual ossimString getClassName() const
Definition: ossimObject.cpp:64
virtual std::ostream & print(std::ostream &out) const
Generic print method.
unsigned int ossim_uint32

◆ setMultiPolyLine()

void ossimAnnotationMultiPolyLineObject::setMultiPolyLine ( const vector< ossimPolyLine > &  multiPoly)
virtual

Member Data Documentation

◆ theBoundingRect

ossimDrect ossimAnnotationMultiPolyLineObject::theBoundingRect
protected

◆ theMultiPolyLine

vector<ossimPolyLine> ossimAnnotationMultiPolyLineObject::theMultiPolyLine
protected

The documentation for this class was generated from the following files: