[Liblas-commits] libpc: incremental swig work

liblas-commits at liblas.org liblas-commits at liblas.org
Fri Mar 4 15:39:42 EST 2011


details:   http://hg.liblas.orglibpc/rev/65f9efa09405
changeset: 172:65f9efa09405
user:      Michael P. Gerlek <mpg at flaxen.com>
date:      Fri Mar 04 11:18:25 2011 -0800
description:
incremental swig work
Subject: libpc: added set() for oper[]

details:   http://hg.liblas.orglibpc/rev/d5d136b4c5d7
changeset: 173:d5d136b4c5d7
user:      Michael P. Gerlek <mpg at flaxen.com>
date:      Fri Mar 04 11:39:06 2011 -0800
description:
added set() for oper[]
Subject: libpc: fix typedef

details:   http://hg.liblas.orglibpc/rev/3aaecbe458e8
changeset: 174:3aaecbe458e8
user:      Michael P. Gerlek <mpg at flaxen.com>
date:      Fri Mar 04 12:12:57 2011 -0800
description:
fix typedef
Subject: libpc: more incremental swig work

details:   http://hg.liblas.orglibpc/rev/0cffacc90c08
changeset: 175:0cffacc90c08
user:      Michael P. Gerlek <mpg at flaxen.com>
date:      Fri Mar 04 12:13:29 2011 -0800
description:
more incremental swig work
Subject: libpc: I can read a point in C# now

details:   http://hg.liblas.orglibpc/rev/d447af13ef2d
changeset: 176:d447af13ef2d
user:      Michael P. Gerlek <mpg at flaxen.com>
date:      Fri Mar 04 12:39:21 2011 -0800
description:
I can read a point in C# now
Subject: libpc: merge

details:   http://hg.liblas.orglibpc/rev/d0ca3d54fcdb
changeset: 177:d0ca3d54fcdb
user:      Michael P. Gerlek <mpg at flaxen.com>
date:      Fri Mar 04 12:39:35 2011 -0800
description:
merge

diffstat:

 csharp/libpc_swig_cpp/libpc.i                |  232 +++++++++++++++++++++++++-
 csharp/libpc_swig_cpp/libpc_swig_cpp.vcxproj |   12 +-
 csharp/libpc_swig_cs/libpc_swig_cs.csproj    |   30 ++-
 csharp/libpc_swig_test/TestLiblasReader.cs   |   56 +++++-
 include/libpc/Bounds.hpp                     |    2 +-
 include/libpc/Vector.hpp                     |   10 +
 src/chipper.cpp                              |   37 +++-
 test/unit/CMakeLists.txt                     |    1 +
 test/unit/ChipperTest.cpp                    |   96 +++++++++++
 test/unit/VectorTest.cpp                     |    3 +
 10 files changed, 429 insertions(+), 50 deletions(-)

diffs (truncated from 678 to 300 lines):

diff -r b90ead329da0 -r d0ca3d54fcdb csharp/libpc_swig_cpp/libpc.i
--- a/csharp/libpc_swig_cpp/libpc.i	Thu Mar 03 17:39:35 2011 -0800
+++ b/csharp/libpc_swig_cpp/libpc.i	Fri Mar 04 12:39:35 2011 -0800
@@ -41,13 +41,26 @@
 %module libpc_swig_cpp
 
 %{
+#include <iostream>
+
 #include "libpc/libpc_config.hpp"
+
+#include "libpc/Bounds.hpp"
+#include "libpc/Range.hpp"
+
 #include "libpc/Dimension.hpp"
+#include "libpc/DimensionLayout.hpp"
+#include "libpc/Schema.hpp"
+#include "libpc/SchemaLayout.hpp"
+#include "libpc/PointData.hpp"
+
 #include "libpc/Header.hpp"
-#include "libpc/Schema.hpp"
+#include "libpc/Stage.hpp"
+#include "libpc/Filter.hpp"
 #include "libpc/Reader.hpp"
+
+#include "libpc/../../src/drivers/liblas/header.hpp"
 #include "libpc/../../src/drivers/liblas/reader.hpp"
-#include "libpc/../../src/drivers/liblas/header.hpp"
 %}
 
 %include "typemaps.i"
@@ -57,9 +70,12 @@
 
 // C# support for std::vector<T>
 %include "std_vector.i"
-namespace std {
-   %template(VectorU8) vector<unsigned char>;
-   %template(VectorU32) vector<unsigned int>;
+namespace std
+{
+   %template(std_vector_u8) vector<unsigned char>;
+   %template(std_vector_double) vector<double>;
+   %template(std_vector_Dimension) vector<libpc::Dimension>;
+   %template(std_vector_Range_double) vector<libpc::Range<double> >;
 };
  
 
@@ -69,6 +85,8 @@
     typedef unsigned int size_t;
 };
 
+%include "std/std_iostream.i"
+
 namespace boost
 {
     typedef unsigned char uint8_t;
@@ -81,12 +99,96 @@
     typedef signed long long int64_t;
 };
 
-// BUG: how do I do a rename such that "SWIGTYPE_p_std__istream" can
-// become something like "IStreamHandle"?
 
 namespace libpc
 {
 
+template <typename T>
+class Range
+{
+public:
+    typedef T value_type;
+
+    Range();
+    Range(T minimum, T maximum);
+    T getMinimum() const;
+    void setMinimum(T value);
+    T getMaximum() const;
+    void setMaximum(T value);
+    bool equal(Range const& other) const;
+    bool overlaps(Range const& r) const;
+    bool contains(Range const& r) const;
+    bool contains(T v) const;
+    bool empty(void) const;
+    void clip(Range const& r);
+    void grow(T v);
+    void grow(Range const& r);
+    void grow(T lo, T hi);
+    T length() const;
+};
+
+%rename(Range_double) Range<double>;
+%template(Range_double) Range<double>;
+
+
+template <typename T>
+class Vector
+{
+public:
+    typedef T value_type;
+
+    Vector();
+    Vector(T v0);
+    Vector(T v0, T v1);
+    Vector(T v0, T v1, T v2);
+    Vector(std::vector<T> v);
+    T get(std::size_t index);
+    void set(std::size_t index, T v);
+    void set(std::vector<T> v);
+    bool equal(Vector const& other) const;
+    std::size_t size() const;
+};
+
+%rename(Vector_double) Vector<double>;
+%template(Vector_double) Vector<double>;
+
+
+template <typename T>
+class Bounds
+{
+public:
+    typedef typename std::vector< Range<T> > RangeVector;
+
+    Bounds( T minx,
+            T miny,
+            T minz,
+            T maxx,
+            T maxy,
+            T maxz);
+    Bounds(const Vector<T>& minimum, const Vector<T>& maximum);
+    T getMinimum(std::size_t const& index) const;
+    void setMinimum(std::size_t const& index, T v);
+    T getMaximum(std::size_t const& index) const;
+    void setMaximum(std::size_t const& index, T v);
+    Vector<T> getMinimum();
+    Vector<T> getMaximum();
+    RangeVector const& dimensions() const;
+    std::size_t size() const;
+    bool equal(Bounds<T> const& other) const;
+    bool overlaps(Bounds const& other) const;
+    bool contains(Vector<T> point) const;
+    bool contains(Bounds<T> const& other) const;
+    void clip(Bounds const& r);
+    void grow(Bounds const& r);
+    void grow(Vector<T> const& point);
+    T volume() const;
+    bool empty() const;
+};
+
+%rename(Bounds_double) Bounds<double>;
+%template(Bounds_double) Bounds<double>;
+
+
 class Dimension
 {
 public:
@@ -149,19 +251,110 @@
 
 public:
     Dimension(Field field, DataType type);
+
+    std::string const& getFieldName() const;
+    Field getField() const;
+    DataType getDataType() const;
     static std::string getDataTypeName(DataType);
+    static DataType getDataTypeFromString(const std::string&);
+    static std::size_t getDataTypeSize(DataType);
+    static bool getDataTypeIsNumeric(DataType);
+    static bool getDataTypeIsSigned(DataType);
+    static bool getDataTypeIsInteger(DataType);
+    static std::string const& getFieldName(Field);
+    std::size_t getByteSize() const;
+    inline std::string getDescription() const;
+    inline void setDescription(std::string const& v);
+    inline bool isNumeric() const;
+    inline bool isSigned() const;
+    inline bool isInteger() const;
+    inline double getMinimum() const;
+    inline void setMinimum(double min);
+    inline double getMaximum() const;
+    inline void setMaximum(double max);
+    inline double getNumericScale() const;
+    inline void setNumericScale(double v);
+    inline double getNumericOffset() const;
+    inline void setNumericOffset(double v);
+
+    template<class T>
+    double getNumericValue(T x) const;
+
+    inline bool isFinitePrecision() const;
+    inline void isFinitePrecision(bool v);
 };
 
+%extend Dimension
+{
+    %template(getNumericValueInt32) getNumericValue<boost::int32_t>;
+};
 
 
-class LiblasReader
+class DimensionLayout
 {
 public:
-    LiblasReader(std::istream&);
-    const libpc::LiblasHeader& getLiblasHeader() const;
-    boost::int8_t getPointFormatNumber() const;
+    DimensionLayout(const libpc::Dimension&);
+    const Dimension& getDimension() const;
+    inline std::size_t getByteOffset() const;
+    inline void setByteOffset(std::size_t v);
+    inline std::size_t getPosition() const;
+    inline void setPosition(std::size_t v);
 };
 
+class Schema
+{
+public:
+    Schema();
+    const Dimension& getDimension(std::size_t index) const;
+    const std::vector<Dimension>& getDimensions() const;
+    bool hasDimension(Dimension::Field field) const;
+    int getDimensionIndex(Dimension::Field field) const;
+};
+
+class SchemaLayout
+{
+public:
+    SchemaLayout(const Schema&);
+    const Schema& getSchema() const;
+    std::size_t getByteSize() const;
+    const DimensionLayout& getDimensionLayout(std::size_t index) const;
+};
+
+
+class PointData
+{
+public:
+    typedef std::vector<boost::uint8_t> valid_mask_type;
+    PointData(const SchemaLayout&, boost::uint32_t numPoints);
+    boost::uint32_t getNumPoints() const;
+    //boost::uint32_t getNumValidPoints();
+    const SchemaLayout& getSchemaLayout() const;
+    const Schema& getSchema() const;
+    bool allValid() const;
+    void setValid(valid_mask_type::size_type  pointIndex, bool value=true);
+    template<class T> T getField(std::size_t pointIndex, std::size_t fieldIndex) const;
+    template<class T> void setField(std::size_t pointIndex, std::size_t fieldIndex, T value);
+    void copyPointsFast(std::size_t destPointIndex, std::size_t srcPointIndex, const PointData& srcPointData, std::size_t numPoints);
+};
+
+%extend PointData
+{
+    %template(getFieldUint32) getField<boost::uint32_t>;
+    %template(getFieldInt32) getField<boost::int32_t>;
+};
+
+
+
+class Header
+{
+public:
+    Header();
+    const Schema& getSchema() const;
+    boost::uint64_t getNumPoints() const;
+    const Bounds<double>& getBounds() const;
+    //const SpatialReference& getSpatialReference() const;
+    //const Metadata::Array& getMetadata() const;
+};
 
 class Stage
 {
@@ -183,8 +376,7 @@
 class Reader : public Stage
 {
 public:
-    Reader();
-
+    Reader(int);
     virtual void readBegin(boost::uint32_t numPointsToRead);
 
     virtual void readEnd(boost::uint32_t numPointsRead);
@@ -195,13 +387,21 @@
 };
 
 
-class LiblasHeader : public Reader
+class LiblasHeader : public Header
 {
 public:
-    LiblasHeader();
 };
 
 
+%feature("notabstract") LiblasReader;
+class LiblasReader : public Reader
+{
+public:
+    LiblasReader(std::istream&);
+    ~LiblasReader();
+    const libpc::LiblasHeader& getLiblasHeader() const;


More information about the Liblas-commits mailing list