INTRODUCTION
Overview
Download and Install
Quick Start
Documentation
Publications

NONFRAMEWORK CODE
Driver Interfaces
Drivers
Libraries
Utilities

FRAMEWORK CODE
Interfaces
Components
Libraries
Utilities

Full Software Listings

DEVELOPER
Tutorials
Examples
Dev Guide
Dashboard

PEOPLE
Contributors
Users

SourceForge.net Logo
Project
Download
Mailing lists

 

         

annotatedlines.h

00001 #ifndef HYDROLFEXTRACT_ANNOTATEDLINES_H
00002 #define HYDROLFEXTRACT_ANNOTATEDLINES_H
00003 
00004 #include <hydrolaserfeatureextract/lines.h>
00005 
00006 namespace hydrolfextract {
00007 
00008 enum EndpointVisibility {
00009     NotVisible,
00010     VisibleInternalLineJunction,
00011     VisibleExternalLineJunction,
00012     VisibleFreeStandingLine,
00013 };
00014 std::string toString( EndpointVisibility e );
00015 inline std::ostream &operator<<( std::ostream &s, const EndpointVisibility &e )
00016 { return s << toString(e); }
00017 inline bool isVisible( EndpointVisibility e )
00018 { return e != NotVisible; }
00019 
00020 class AnnotatedCluster {
00021 public:
00022 
00023     AnnotatedCluster( const Cluster &cluster );
00024 
00025     const Cluster &cluster() const { return cluster_; }
00026 
00027     const std::vector<Point> &points() const { return cluster_.points(); }
00028     unsigned int numLineSegments() const { return cluster_.numLineSegments(); }
00029     const std::vector<LineSegment> &lines() const { return cluster_.lines(); }
00030 
00031     const Point &firstPointInLine( int lineI ) const { return cluster_.firstPointInLine(lineI); }
00032     const Point &lastPointInLine( int lineI ) const { return cluster_.lastPointInLine(lineI); }
00033 
00034     double lineLength( int lineI ) const { return cluster_.lineLength(lineI); }
00035 
00036     EndpointVisibility startVisibility( int lineI ) const { return notes_[lineI].startVisibility; }
00037     EndpointVisibility endVisibility( int lineI ) const { return notes_[lineI].endVisibility; }
00038     double maxLineFitError( int lineI ) const { return notes_[lineI].maxLineFitError; }
00039     double lineFitRhoSd( int lineI ) const { return notes_[lineI].lineFitRhoSd; }
00040     double lineFitAlphaSd( int lineI ) const { return notes_[lineI].lineFitAlphaSd; }
00041 
00042     void setStartVisibility( int lineI, EndpointVisibility v ) { notes_[lineI].startVisibility = v; }
00043     void setEndVisibility( int lineI, EndpointVisibility v ) { notes_[lineI].endVisibility = v; }
00044     void setMaxLineFitError( int lineI, double maxLineFitError ) { notes_[lineI].maxLineFitError = maxLineFitError; }
00045     void setLineFitUncertainty( int lineI, double rhoSd, double alphaSd )
00046         { notes_[lineI].lineFitRhoSd = rhoSd; notes_[lineI].lineFitAlphaSd = alphaSd; }
00047 
00048 private:
00049 
00050     struct LineNotes {
00051         // The most distance by which any single point deviates from the best-fit line
00052         double maxLineFitError;
00053 
00054         // The uncertainty in the line estimate due to line-fitting issues
00055         double lineFitRhoSd;
00056         double lineFitAlphaSd;
00057 
00058         EndpointVisibility startVisibility;
00059         EndpointVisibility endVisibility;
00060     };
00061 
00062     Cluster cluster_;
00063     // One per line segment
00064     std::vector<LineNotes> notes_;
00065 };
00066 std::string toString( const AnnotatedCluster &a );
00067 inline std::ostream &operator<<( std::ostream &s, const AnnotatedCluster &a )
00068 { return s << toString(a); }
00069 
00070 class AnnotatedLines {
00071 public:
00072     AnnotatedLines( const Lines &lines );
00073 
00074     unsigned int numClusters() const { return annotatedClusters_.size(); }
00075     const std::vector<AnnotatedCluster> &clusters() const { return annotatedClusters_; }
00076     std::vector<AnnotatedCluster> &clusters() { return annotatedClusters_; }
00077     
00078 private:
00079 
00080     std::vector<AnnotatedCluster> annotatedClusters_;
00081 };
00082 std::string toString( const AnnotatedLines &a );
00083 inline std::ostream &operator<<( std::ostream &s, const AnnotatedLines &a )
00084 { return s << toString(a); }
00085 
00086 AnnotatedLines
00087 getAnnotatedLines( const Lines &lines,
00088                    const std::vector<float> &ranges,
00089                    double minLineLengthForVisibleEndpoints );
00090 
00091 }
00092 
00093 #endif
 

Webmaster: Tobias Kaupp (tobasco at users.sourceforge.net)


Generated for Orca Robotics by  doxygen 1.4.5