[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