Changeset 1573:6c8a83eaffdc


Ignore:
Timestamp:
02/12/10 12:32:32 (6 months ago)
Author:
Howard Butler <hobu.inc@…>
Branch:
default
Message:

implement WriterI

Files:
5 edited

Legend:

Unmodified
Added
Removed
  • include/liblas/detail/writer/header.hpp

    r1560 r1573  
    4747 
    4848#include <liblas/lasheader.hpp> 
    49 #include <liblas/detail/writer/writer.hpp> 
     49#include <liblas/detail/writer/base.hpp> 
    5050 
    5151// std 
     
    6161 
    6262    Header(std::ostream& ofs, liblas::uint32_t& count, LASHeader const& header ); 
    63      
    64     LASHeader GetHeader() const { return m_header; } 
     63 
     64    const LASHeader& GetHeader() const { return m_header; } 
    6565    void write(); 
    6666     
  • include/liblas/detail/writer/writer.hpp

    r1561 r1573  
    4444 
    4545#include <liblas/detail/fwd.hpp> 
     46#include <liblas/interfaces.hpp> 
    4647#include <liblas/detail/writer/point.hpp> 
     48#include <liblas/detail/writer/header.hpp> 
    4749 
    48 #ifndef HAVE_GDAL 
    49     typedef struct OGRCoordinateTransformationHS *OGRCoordinateTransformationH; 
    50     typedef struct OGRSpatialReferenceHS *OGRSpatialReferenceH; 
    51 #endif 
    52  
    53  
    54 // std 
    55 #include <iosfwd> 
    5650 
    5751namespace liblas { namespace detail {  
    5852 
    59 class WriterImpl  
     53class WriterImpl : public WriterI 
    6054{ 
    6155public: 
     
    6559    ~WriterImpl(); 
    6660    LASVersion GetVersion() const; 
    67     void WriteHeader(LASHeader& header); 
     61    LASHeader const& WriteHeader(LASHeader const& header); 
    6862    void UpdateHeader(LASHeader const& header); 
    69     void WritePointRecord(LASPoint const& record, const LASHeader& header); 
     63    void WritePoint(LASPoint const& record, const LASHeader& header); 
    7064 
    7165    std::ostream& GetStream() const; 
    7266 
    73     void SetSRS(const LASSpatialReference& srs, const LASHeader& header); 
    7467    void SetInputSRS(const LASSpatialReference& srs); 
    7568    void SetOutputSRS(const LASSpatialReference& srs, const LASHeader& header); 
     
    8679    OGRSpatialReferenceH m_out_ref; 
    8780     
    88     detail::writer::Point* m_point_writer; 
     81    writer::Point* m_point_writer; 
     82    writer::Header* m_header_writer; 
    8983     
    9084private: 
  • include/liblas/interfaces.hpp

    r1571 r1573  
    7474}; 
    7575 
     76class WriterI 
     77{ 
     78public: 
     79 
     80    virtual LASHeader const& WriteHeader(const LASHeader& header) = 0; 
     81    virtual void UpdateHeader(const LASHeader& header) = 0; 
     82    virtual void WritePoint(const LASPoint& point, const LASHeader& header) = 0; 
     83 
     84    virtual void SetInputSRS(const LASSpatialReference& srs) = 0; 
     85    virtual void SetOutputSRS(const LASSpatialReference& srs, const LASHeader& header) = 0; 
     86 
     87    virtual ~WriterI() {};     
     88    // virtual LASHeader const& ReadHeader() = 0; 
     89    // virtual LASPoint const& ReadNextPoint(const LASHeader& header) = 0; 
     90    // virtual LASPoint const& ReadPointAt(std::size_t n, const LASHeader& header) = 0; 
     91    //  
     92    // virtual void Reset(const LASHeader& header) = 0; 
     93    // virtual void SetInputSRS(const LASSpatialReference& srs) = 0; 
     94    // virtual void SetOutputSRS(const LASSpatialReference& srs, const LASHeader& header) = 0; 
     95    //  
     96    // virtual ~ReaderI() {};     
     97}; 
    7698} // namespace liblas 
    7799 
  • src/detail/writer/writer.cpp

    r1560 r1573  
    5757 
    5858WriterImpl::WriterImpl(std::ostream& ofs) : 
    59     m_ofs(ofs), m_transform(0),  m_in_ref(0), m_out_ref(0), m_point_writer(0), m_pointCount(0) 
    60 { 
    61 } 
    62  
    63  
    64 void WriterImpl::WriteHeader(LASHeader& header) 
    65 { 
    66     detail::writer::Header hwriter(m_ofs,m_pointCount, header ); 
    67     hwriter.write(); 
    68     header = hwriter.GetHeader(); 
    69      
     59    m_ofs(ofs),  
     60    m_transform(0),   
     61    m_in_ref(0),  
     62    m_out_ref(0),  
     63    m_point_writer(0),  
     64    m_header_writer(0),  
     65    m_pointCount(0) 
     66{ 
     67} 
     68 
     69 
     70LASHeader const&  WriterImpl::WriteHeader(LASHeader const& header) 
     71{ 
     72    m_header_writer = new detail::writer::Header(m_ofs,m_pointCount, header ); 
     73    m_header_writer->write(); 
     74    return m_header_writer->GetHeader(); 
    7075} 
    7176 
     
    8287} 
    8388 
    84 void WriterImpl::WritePointRecord(LASPoint const& point, const LASHeader& header) 
     89void WriterImpl::WritePoint(LASPoint const& point, const LASHeader& header) 
    8590{ 
    8691    if (m_point_writer == 0) { 
     
    97102WriterImpl::~WriterImpl() 
    98103{ 
    99     if (m_point_writer != 0) 
    100         delete m_point_writer; 
    101104         
    102105#ifdef HAVE_GDAL 
     
    111114    } 
    112115#endif 
     116 
     117    if (m_point_writer != 0) 
     118        delete m_point_writer; 
     119 
     120    if (m_header_writer != 0) 
     121        delete m_header_writer; 
     122 
    113123} 
    114124 
     
    132142} 
    133143 
    134 void WriterImpl::SetSRS(const LASSpatialReference& srs , const LASHeader& header) 
    135 { 
    136     SetOutputSRS(srs, header); 
    137 } 
    138144 
    139145void WriterImpl::SetInputSRS(const LASSpatialReference& srs ) 
  • src/laswriter.cpp

    r1560 r1573  
    7979    } 
    8080 
    81     m_pimpl->WritePointRecord(point, m_header); 
     81    m_pimpl->WritePoint(point, m_header); 
    8282 
    8383    return true; 
     
    9191void LASWriter::WriteHeader(LASHeader& header) 
    9292{ 
    93     m_pimpl->WriteHeader(header); 
    94     m_header = header; 
     93    // The writer may update our header as part of its  
     94    // writing process (change VLRs for SRS's, for instance). 
     95    m_header = m_pimpl->WriteHeader(header); 
    9596} 
    9697 
Note: See TracChangeset for help on using the changeset viewer.