1
/******************************************************************************
4
* Project: libLAS - http://liblas.org - A BSD library for LAS format data.
5
* Purpose: C API for libLAS
6
* Author: Howard Butler, hobu.inc@gmail.com, but I'm not proud of it.
7
* I also swiped a lot of it from GDAL.
9
******************************************************************************
10
* Copyright (c) 2008, Mateusz Loskot
11
* Copyright (c) 2008, Howard Butler
13
* All rights reserved.
15
* Redistribution and use in source and binary forms, with or without
16
* modification, are permitted provided that the following
19
* * Redistributions of source code must retain the above copyright
20
* notice, this list of conditions and the following disclaimer.
21
* * Redistributions in binary form must reproduce the above copyright
22
* notice, this list of conditions and the following disclaimer in
23
* the documentation and/or other materials provided
24
* with the distribution.
25
* * Neither the name of the Martin Isenburg or Iowa Department
26
* of Natural Resources nor the names of its contributors may be
27
* used to endorse or promote products derived from this software
28
* without specific prior written permission.
30
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
31
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
32
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
33
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
34
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
35
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
36
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
37
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
38
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
39
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
40
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
42
****************************************************************************/
44
#include <liblas/liblas.hpp>
45
#include <liblas/lasreader.hpp>
46
#include <liblas/laserror.hpp>
47
#include <liblas/laswriter.hpp>
48
#include <liblas/lasfile.hpp>
49
#include <liblas/exception.hpp>
50
#include <liblas/lasvariablerecord.hpp>
51
#include <liblas/guid.hpp>
52
#include <liblas/lasspatialreference.hpp>
53
#include <liblas/capi/las_config.h>
54
#include <liblas/capi/las_version.h>
56
typedef struct LASWriterHS *LASWriterH;
57
typedef struct LASReaderHS *LASReaderH;
58
typedef struct LASPointHS *LASPointH;
59
typedef struct LASHeaderHS *LASHeaderH;
60
typedef struct LASGuidHS *LASGuidH;
61
typedef struct LASVLRHS *LASVLRH;
62
typedef struct LASColorHS *LASColorH;
63
typedef struct LASSRSHS *LASSRSH;
70
#include <sstream> // std::stringstream
77
using namespace liblas;
86
#define compare_no_case(a,b,n) _strnicmp( (a), (b), (n) )
88
#define compare_no_case(a,b,n) strncasecmp( (a), (b), (n) )
104
static std::stack<LASError > errors;
107
# pragma warning(disable: 4127) // warning C4127: conditional expression is constant
110
#define VALIDATE_LAS_POINTER0(ptr, func) \
111
do { if( NULL == ptr ) { \
112
LASErrorEnum const ret = LE_Failure; \
113
std::ostringstream msg; \
114
msg << "Pointer \'" << #ptr << "\' is NULL in \'" << (func) <<"\'."; \
115
std::string message(msg.str()); \
116
LASError_PushError( ret, message.c_str(), (func)); \
120
#define VALIDATE_LAS_POINTER1(ptr, func, rc) \
121
do { if( NULL == ptr ) { \
122
LASErrorEnum const ret = LE_Failure; \
123
std::ostringstream msg; \
124
msg << "Pointer \'" << #ptr << "\' is NULL in \'" << (func) <<"\'."; \
125
std::string message(msg.str()); \
126
LASError_PushError( ret, message.c_str(), (func)); \
130
LAS_DLL int LAS_IsGDALEnabled(void) {
131
return IsGDALEnabled();
134
LAS_DLL int LAS_IsLibGeoTIFFEnabled(void) {
135
return IsLibGeoTIFFEnabled();
138
LAS_DLL void LASError_Reset(void) {
139
if (errors.empty()) return;
140
for (std::size_t i=0;i<errors.size();i++) errors.pop();
143
LAS_DLL void LASError_Pop(void) {
144
if (errors.empty()) return;
148
LAS_DLL int LASError_GetLastErrorNum(void){
152
LASError err = errors.top();
153
return err.GetCode();
157
LAS_DLL char* LASError_GetLastErrorMsg(void){
161
LASError err = errors.top();
162
return strdup(err.GetMessage().c_str());
166
LAS_DLL char* LASError_GetLastErrorMethod(void){
170
LASError err = errors.top();
171
return strdup(err.GetMethod().c_str());
175
LAS_DLL void LASError_PushError(int code, const char *message, const char *method) {
176
LASError err = LASError(code, std::string(message), std::string(method));
180
LAS_DLL int LASError_GetErrorCount(void) {
181
return static_cast<int>(errors.size());
184
LAS_DLL LASReaderH LASReader_Create(const char* filename)
187
VALIDATE_LAS_POINTER1(filename, "LASReader_Create", NULL);
190
std::ios::openmode const mode = std::ios::in | std::ios::binary;
192
if (compare_no_case(filename,"STDIN",5) == 0)
198
istrm = new std::ifstream(filename, mode);
204
throw std::runtime_error("Reading stream was not able to be created");
206
return (LASReaderH) new LASReader(*istrm);
209
} catch (std::exception const& e)
211
LASError_PushError(LE_Failure, e.what(), "LASReader_Create");
218
LAS_DLL void LASReader_Destroy(LASReaderH hReader)
220
VALIDATE_LAS_POINTER0(hReader, "LASReader_Destroy");
223
LASReader* reader = (LASReader*)hReader;
224
std::istream* istrm = &(reader->GetStream());
229
if (static_cast<std::ifstream&>(*istrm))
230
static_cast<std::ifstream&>(*istrm).close();
234
} catch (std::runtime_error const& e/* e */)
236
LASError_PushError(LE_Failure, e.what(), "LASReader_Destroy");
246
LAS_DLL const LASPointH LASReader_GetNextPoint(const LASReaderH hReader)
248
VALIDATE_LAS_POINTER1(hReader, "LASReader_GetNextPoint", NULL);
251
LASReader *reader = ((LASReader*) hReader);
252
if (reader->ReadNextPoint())
253
// return (LASPointH) new LASPoint(reader->GetPoint());
254
return (LASPointH) &(reader->GetPoint());
257
} catch (invalid_point_data const& e /*e */) {
258
LASError_PushError(LE_Failure, e.what(), "LASReader_GetNextPoint Invalid Point");
259
} catch (std::exception const& e)
261
LASError_PushError(LE_Failure, e.what(), "LASReader_GetNextPoint");
267
LAS_DLL const LASPointH LASReader_GetPointAt(const LASReaderH hReader, liblas::uint32_t position)
269
VALIDATE_LAS_POINTER1(hReader, "LASReader_GetPointAt", NULL);
272
LASReader *reader = ((LASReader*) hReader);
273
if (reader->ReadPointAt((std::size_t) position))
274
// return (LASPointH) new LASPoint(reader->GetPoint());
275
return (LASPointH) &(reader->GetPoint());
278
} catch (invalid_point_data const& e /*e */) {
279
LASError_PushError(LE_Failure, e.what(), "LASReader_GetPointAt Invalid Point");
280
} catch (std::exception const& e)
282
LASError_PushError(LE_Failure, e.what(), "LASReader_GetPointAt");
288
LAS_DLL LASHeaderH LASReader_GetHeader(const LASReaderH hReader)
290
VALIDATE_LAS_POINTER1(hReader, "LASReader_GetHeader", NULL);
292
LASHeader header = ((LASReader*) hReader)->GetHeader();
293
return (LASHeaderH) new LASHeader( header );
296
LAS_DLL LASErrorEnum LASReader_SetSRS(LASHeaderH hReader, const LASSRSH hSRS) {
298
VALIDATE_LAS_POINTER1(hReader, "LASReader_SetSRS", LE_Failure);
299
VALIDATE_LAS_POINTER1(hSRS, "LASReader_SetSRS", LE_Failure);
302
((LASReader*) hReader)->SetSRS(*((LASSpatialReference*)hSRS));
304
catch (std::exception const& e) {
305
LASError_PushError(LE_Failure, e.what(), "LASReader_SetSRS");
312
LAS_DLL LASHeaderH LASHeader_Create(void) {
313
return (LASHeaderH) new LASHeader();
316
LAS_DLL LASPointH LASPoint_Create(void) {
317
return (LASPointH) new LASPoint();
320
LAS_DLL LASPointH LASPoint_Copy(const LASPointH hPoint) {
321
return (LASPointH) new LASPoint(*((LASPoint*) hPoint));
324
LAS_DLL void LASPoint_Destroy(LASPointH hPoint) {
325
VALIDATE_LAS_POINTER0(hPoint, "LASPoint_Destroy");
326
delete (LASPoint*) hPoint;
330
LAS_DLL double LASPoint_GetX(const LASPointH hPoint) {
332
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_GetX", 0.0);
334
double value = ((LASPoint*) hPoint)->GetX();
338
LAS_DLL LASErrorEnum LASPoint_SetX(LASPointH hPoint, double value) {
340
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_SetX", LE_Failure);
343
((LASPoint*) hPoint)->SetX(value);
344
} catch (std::exception const& e)
346
LASError_PushError(LE_Failure, e.what(), "LASPoint_SetX");
354
LAS_DLL double LASPoint_GetY(const LASPointH hPoint) {
356
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_GetY", 0.0);
358
double value = ((LASPoint*) hPoint)->GetY();
362
LAS_DLL LASErrorEnum LASPoint_SetY(LASPointH hPoint, double value) {
364
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_SetY", LE_Failure);
367
((LASPoint*) hPoint)->SetY(value);
368
} catch (std::exception const& e)
370
LASError_PushError(LE_Failure, e.what(), "LASPoint_SetY");
378
LAS_DLL double LASPoint_GetZ(const LASPointH hPoint) {
380
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_GetZ", 0.0);
382
double value = ((LASPoint*) hPoint)->GetZ();
386
LAS_DLL LASErrorEnum LASPoint_SetZ(LASPointH hPoint, double value) {
388
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_SetZ", LE_Failure);
391
((LASPoint*) hPoint)->SetZ(value);
392
} catch (std::exception const& e)
394
LASError_PushError(LE_Failure, e.what(), "LASPoint_SetZ");
402
LAS_DLL liblas::uint16_t LASPoint_GetIntensity(const LASPointH hPoint) {
404
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_GetIntensity", 0);
406
liblas::uint16_t value = ((LASPoint*) hPoint)->GetIntensity();
410
LAS_DLL LASErrorEnum LASPoint_SetIntensity(LASPointH hPoint, liblas::uint16_t value) {
412
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_SetIntensity", LE_Failure);
415
((LASPoint*) hPoint)->SetIntensity(value);
416
} catch (std::exception const& e)
418
LASError_PushError(LE_Failure, e.what(), "LASPoint_SetIntensity");
426
LAS_DLL liblas::uint16_t LASPoint_GetReturnNumber(const LASPointH hPoint) {
428
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_GetReturnNumber", 0);
430
liblas::uint16_t value = ((LASPoint*) hPoint)->GetReturnNumber();
434
LAS_DLL LASErrorEnum LASPoint_SetReturnNumber(LASPointH hPoint, liblas::uint16_t value) {
436
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_SetReturnNumber", LE_Failure);
439
((LASPoint*) hPoint)->SetReturnNumber(value);
440
} catch (std::exception const& e)
442
LASError_PushError(LE_Failure, e.what(), "LASPoint_SetReturnNumber");
450
LAS_DLL liblas::uint16_t LASPoint_GetNumberOfReturns(const LASPointH hPoint) {
452
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_GetNumberOfReturns", 0);
454
liblas::uint16_t value = ((LASPoint*) hPoint)->GetNumberOfReturns();
458
LAS_DLL LASErrorEnum LASPoint_SetNumberOfReturns(LASPointH hPoint, liblas::uint16_t value) {
460
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_SetNumberOfReturns", LE_Failure);
463
((LASPoint*) hPoint)->SetNumberOfReturns(value);
464
} catch (std::exception const& e)
466
LASError_PushError(LE_Failure, e.what(), "LASPoint_SetNumberOfReturns");
474
LAS_DLL liblas::uint16_t LASPoint_GetScanDirection(const LASPointH hPoint) {
476
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_GetScanDirection", 0);
478
liblas::uint16_t value = ((LASPoint*) hPoint)->GetScanDirection();
482
LAS_DLL LASErrorEnum LASPoint_SetScanDirection(LASPointH hPoint, liblas::uint16_t value) {
484
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_SetScanDirection", LE_Failure);
487
((LASPoint*) hPoint)->SetScanDirection(value);
488
} catch (std::exception const& e)
490
LASError_PushError(LE_Failure, e.what(), "LASPoint_SetScanDirection");
498
LAS_DLL liblas::uint16_t LASPoint_GetFlightLineEdge(const LASPointH hPoint) {
500
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_GetFlightLineEdge", 0);
502
liblas::uint16_t value = ((LASPoint*) hPoint)->GetFlightLineEdge();
506
LAS_DLL LASErrorEnum LASPoint_SetFlightLineEdge(LASPointH hPoint, liblas::uint16_t value) {
508
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_SetFlightLineEdge", LE_Failure);
511
((LASPoint*) hPoint)->SetFlightLineEdge(value);
512
} catch (std::exception const& e)
514
LASError_PushError(LE_Failure, e.what(), "LASPoint_SetFlightLineEdge");
522
LAS_DLL liblas::uint8_t LASPoint_GetScanFlags(const LASPointH hPoint) {
524
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_GetScanFlags", 0);
526
liblas::uint8_t value = ((LASPoint*) hPoint)->GetScanFlags();
530
LAS_DLL LASErrorEnum LASPoint_SetScanFlags(LASPointH hPoint, liblas::uint8_t value) {
532
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_SetScanFlags", LE_Failure);
535
((LASPoint*) hPoint)->SetScanFlags(value);
536
} catch (std::exception const& e)
538
LASError_PushError(LE_Failure, e.what(), "LASPoint_SetScanFlags");
546
LAS_DLL liblas::uint8_t LASPoint_GetClassification(const LASPointH hPoint) {
548
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_GetClassification", 0);
550
liblas::uint8_t value = ((LASPoint*) hPoint)->GetClassification();
554
LAS_DLL LASErrorEnum LASPoint_SetClassification(LASPointH hPoint, liblas::uint8_t value) {
556
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_SetClassification", LE_Failure);
559
((LASPoint*) hPoint)->SetClassification(value);
560
} catch (std::exception const& e)
562
LASError_PushError(LE_Failure, e.what(), "LASPoint_SetClassification");
570
LAS_DLL LASErrorEnum LASPoint_SetTime(LASPointH hPoint, double value) {
572
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_SetTime", LE_Failure);
575
((LASPoint*) hPoint)->SetTime(value);
576
} catch (std::exception const& e)
578
LASError_PushError(LE_Failure, e.what(), "LASPoint_SetTime");
586
LAS_DLL double LASPoint_GetTime(const LASPointH hPoint) {
588
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_GetTime", 0.0);
590
double value = ((LASPoint*) hPoint)->GetTime();
594
LAS_DLL liblas::int8_t LASPoint_GetScanAngleRank(const LASPointH hPoint) {
596
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_GetScanAngleRank", 0);
598
liblas::int8_t value = ((LASPoint*) hPoint)->GetScanAngleRank();
602
LAS_DLL LASErrorEnum LASPoint_SetScanAngleRank(LASPointH hPoint, liblas::int8_t value) {
604
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_SetScanAngleRank", LE_Failure);
607
((LASPoint*) hPoint)->SetScanAngleRank(value);
608
} catch (std::exception const& e)
610
LASError_PushError(LE_Failure, e.what(), "LASPoint_SetScanAngleRank");
618
LAS_DLL liblas::uint16_t LASPoint_GetPointSourceId(const LASPointH hPoint) {
620
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_GetPointSourceId", 0);
622
liblas::uint16_t value = ((LASPoint*) hPoint)->GetPointSourceID();
626
LAS_DLL LASErrorEnum LASPoint_SetPointSourceId(LASPointH hPoint, liblas::uint16_t value) {
628
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_SetPointSourceId", LE_Failure);
631
((LASPoint*) hPoint)->SetPointSourceID(value);
632
} catch (std::exception const& e)
634
LASError_PushError(LE_Failure, e.what(), "LASPoint_SetPointSourceId");
643
LAS_DLL liblas::uint8_t LASPoint_GetUserData(const LASPointH hPoint) {
645
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_GetUserData", 0);
647
liblas::uint8_t value = ((LASPoint*) hPoint)->GetUserData();
651
LAS_DLL LASErrorEnum LASPoint_SetUserData(LASPointH hPoint, liblas::uint8_t value) {
653
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_SetUserData", LE_Failure);
656
((LASPoint*) hPoint)->SetUserData(value);
657
} catch (std::exception const& e)
659
LASError_PushError(LE_Failure, e.what(), "LASPoint_SetUserData");
667
LAS_DLL int LASPoint_Equal(const LASPointH hPoint1, const LASPointH hPoint2) {
668
VALIDATE_LAS_POINTER1(hPoint1, "LASPoint_Equal", 0);
669
VALIDATE_LAS_POINTER1(hPoint2, "LASPoint_Equal", 0);
671
LASPoint* point1 = ((LASPoint*) hPoint1);
672
LASPoint* point2 = ((LASPoint*) hPoint2);
674
return (point1 == point2);
678
LAS_DLL int LASPoint_Validate(LASPointH hPoint) {
680
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_Validate", LE_Failure);
683
((LASPoint*) hPoint)->Validate();
684
} catch (invalid_point_data const& e /*e */) {
686
} catch (std::exception const& e)
688
LASError_PushError(LE_Failure, e.what(), "LASPoint_Validate");
695
LAS_DLL int LASPoint_IsValid(LASPointH hPoint) {
697
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_IsValid", LE_Failure);
698
return ((LASPoint*) hPoint)->IsValid();
701
LAS_DLL char* LASHeader_GetFileSignature(const LASHeaderH hHeader) {
703
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetFileSignature", NULL);
705
std::string signature = ((LASHeader*) hHeader)->GetFileSignature();
706
return strdup(signature.c_str());
709
LAS_DLL liblas::uint16_t LASHeader_GetFileSourceId(const LASHeaderH hHeader) {
710
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetFileSourceId", 0);
712
unsigned short value = ((LASHeader*) hHeader)->GetFileSourceId();
716
LAS_DLL LASErrorEnum LASHeader_SetFileSourceId(LASHeaderH hHeader, liblas::uint16_t value) {
717
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_SetFileSourceId", LE_Failure);
718
((LASHeader*) hHeader)->SetFileSourceId(value);
723
LAS_DLL liblas::uint16_t LASHeader_GetReserved(const LASHeaderH hHeader) {
724
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetReserved", 0);
726
unsigned short value = ((LASHeader*) hHeader)->GetReserved();
730
LAS_DLL LASErrorEnum LASHeader_SetReserved(LASHeaderH hHeader, liblas::uint16_t value) {
731
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_SetReserved", LE_Failure);
732
((LASHeader*) hHeader)->SetReserved(value);
736
LAS_DLL char* LASHeader_GetProjectId(const LASHeaderH hHeader) {
737
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetProjectId", 0);
739
liblas::guid id = ((LASHeader*) hHeader)->GetProjectId();
740
return strdup(id.to_string().c_str());
743
LAS_DLL LASErrorEnum LASHeader_SetProjectId(LASHeaderH hHeader, const char* value) {
744
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_SetProjectId", LE_Failure);
748
id = liblas::guid::guid(value);
749
((LASHeader*) hHeader)->SetProjectId(id);
750
} catch (std::exception const& e)
752
LASError_PushError(LE_Failure, e.what(), "LASHeader_SetGUID");
759
LAS_DLL liblas::uint8_t LASHeader_GetVersionMajor(const LASHeaderH hHeader) {
760
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetVersionMajor", 0);
762
long value = ((LASHeader*) hHeader)->GetVersionMajor();
763
return liblas::uint8_t(value);
766
LAS_DLL LASErrorEnum LASHeader_SetVersionMajor(LASHeaderH hHeader, liblas::uint8_t value) {
767
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_SetVersionMajor", LE_Failure);
770
((LASHeader*) hHeader)->SetVersionMajor(value);
771
} catch (std::exception const& e)
773
LASError_PushError(LE_Failure, e.what(), "LASHeader_SetVersionMajor");
780
LAS_DLL liblas::uint8_t LASHeader_GetVersionMinor(const LASHeaderH hHeader) {
781
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetVersionMinor", 0);
783
long value = ((LASHeader*) hHeader)->GetVersionMinor();
784
return liblas::uint8_t(value);
787
LAS_DLL LASErrorEnum LASHeader_SetVersionMinor(LASHeaderH hHeader, liblas::uint8_t value) {
788
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_SetVersionMinor", LE_Failure);
790
// TODO: Maybe this should be a fatal error -- hobu
792
((LASHeader*) hHeader)->SetVersionMinor(value);
793
} catch (std::exception const& e)
795
LASError_PushError(LE_Failure, e.what(), "LASHeader_SetVersionMinor");
802
LAS_DLL char* LASHeader_GetSystemId(const LASHeaderH hHeader) {
803
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetSystemId", NULL);
806
std::string sysid = ((LASHeader*) hHeader)->GetSystemId();
807
return strdup(sysid.c_str());
810
LAS_DLL LASErrorEnum LASHeader_SetSystemId(LASHeaderH hHeader, const char* value) {
811
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_SetSystemId", LE_Failure);
814
((LASHeader*) hHeader)->SetSystemId(value);
815
} catch (std::exception const& e)
817
LASError_PushError(LE_Failure, e.what(), "LASHeader_SetSystemId");
824
LAS_DLL char* LASHeader_GetSoftwareId(const LASHeaderH hHeader) {
825
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetSoftwareId", NULL);
828
std::string softid = ((LASHeader*) hHeader)->GetSoftwareId();
829
return strdup(softid.c_str());
832
LAS_DLL LASErrorEnum LASHeader_SetSoftwareId(LASHeaderH hHeader, const char* value) {
833
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_SetSoftwareId", LE_Failure);
836
((LASHeader*) hHeader)->SetSoftwareId(value);
837
} catch (std::exception const& e)
839
LASError_PushError(LE_Failure, e.what(), "LASHeader_SetSoftwareId");
846
LAS_DLL liblas::uint16_t LASHeader_GetCreationDOY(const LASHeaderH hHeader) {
847
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetCreationDOY", 0);
849
unsigned short value = ((LASHeader*) hHeader)->GetCreationDOY();
853
LAS_DLL LASErrorEnum LASHeader_SetCreationDOY(LASHeaderH hHeader, liblas::uint16_t value) {
854
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_SetCreationDOY", LE_Failure);
855
((LASHeader*) hHeader)->SetCreationDOY(value);
859
LAS_DLL liblas::uint16_t LASHeader_GetCreationYear(const LASHeaderH hHeader) {
860
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetCreationYear", 0);
862
unsigned short value = ((LASHeader*) hHeader)->GetCreationYear();
866
LAS_DLL LASErrorEnum LASHeader_SetCreationYear(LASHeaderH hHeader, liblas::uint16_t value) {
867
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_SetCreationYear", LE_Failure);
868
((LASHeader*) hHeader)->SetCreationYear(value);
872
LAS_DLL liblas::uint16_t LASHeader_GetHeaderSize(const LASHeaderH hHeader) {
873
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetHeaderSize", 0);
875
unsigned short value = ((LASHeader*) hHeader)->GetHeaderSize();
879
LAS_DLL liblas::uint32_t LASHeader_GetDataOffset(const LASHeaderH hHeader) {
880
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetDataOffset", 0);
882
unsigned long value = ((LASHeader*) hHeader)->GetDataOffset();
886
LAS_DLL LASErrorEnum LASHeader_SetDataOffset(const LASHeaderH hHeader, liblas::uint32_t value) {
887
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_SetDataOffset", LE_Failure);
890
((LASHeader*) hHeader)->SetDataOffset(value);
891
} catch (std::exception const& e)
893
LASError_PushError(LE_Failure, e.what(), "LASHeader_SetDataOffset");
901
LAS_DLL liblas::uint32_t LASHeader_GetRecordsCount(const LASHeaderH hHeader) {
902
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetRecordsCount", 0);
904
unsigned long value = ((LASHeader*) hHeader)->GetRecordsCount();
908
LAS_DLL liblas::uint8_t LASHeader_GetDataFormatId(const LASHeaderH hHeader) {
909
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetDataFormatId", 0);
911
LASHeader::PointFormat id = ((LASHeader*) hHeader)->GetDataFormatId();
912
return static_cast<liblas::uint8_t>(id);
915
LAS_DLL LASErrorEnum LASHeader_SetDataFormatId(LASHeaderH hHeader, liblas::uint8_t value) {
916
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_SetDataFormatId", LE_Failure);
919
((LASHeader*) hHeader)->SetDataFormatId((liblas::LASHeader::PointFormat)value);
920
} catch (std::exception const& e)
922
LASError_PushError(LE_Failure, e.what(), "LASHeader_SetDataFormatId");
929
LAS_DLL liblas::uint16_t LASHeader_GetDataRecordLength(const LASHeaderH hHeader) {
930
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetDataRecordLength", 0);
932
unsigned short value = ((LASHeader*) hHeader)->GetDataRecordLength();
937
LAS_DLL liblas::uint32_t LASHeader_GetPointRecordsByReturnCount(const LASHeaderH hHeader, int index) {
938
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetPointRecordsByReturnCount", 0);
940
std::vector<liblas::uint32_t> counts = ((LASHeader*) hHeader)->GetPointRecordsByReturnCount();
941
if ( (index < 5) && (index >= 0)) {
942
return counts[index];
949
LAS_DLL LASErrorEnum LASHeader_SetPointRecordsByReturnCount(const LASHeaderH hHeader, int index, liblas::uint32_t value) {
950
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_SetPointRecordsByReturnCount", LE_Failure);
953
((LASHeader*) hHeader)->SetPointRecordsByReturnCount(index, value);
954
} catch (std::exception const& e)
956
LASError_PushError(LE_Failure, e.what(), "LASHeader_SetPointRecordsByReturnCount");
964
LAS_DLL liblas::uint32_t LASHeader_GetPointRecordsCount(const LASHeaderH hHeader) {
965
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetPointRecordsCount", 0);
967
unsigned long value = ((LASHeader*) hHeader)->GetPointRecordsCount();
971
LAS_DLL LASErrorEnum LASHeader_SetPointRecordsCount(const LASHeaderH hHeader, liblas::uint32_t value) {
972
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_SetPointRecordsCount", LE_Failure);
975
((LASHeader*) hHeader)->SetPointRecordsCount(value);
976
} catch (std::exception const& e)
978
LASError_PushError(LE_Failure, e.what(), "LASHeader_SetPointRecordsCount");
985
LAS_DLL double LASHeader_GetScaleX(const LASHeaderH hHeader) {
986
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetScaleX", 0.0);
988
double value = ((LASHeader*) hHeader)->GetScaleX();
992
LAS_DLL double LASHeader_GetScaleY(const LASHeaderH hHeader) {
993
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetScaleY", 0.0);
995
double value = ((LASHeader*) hHeader)->GetScaleY();
999
LAS_DLL double LASHeader_GetScaleZ(const LASHeaderH hHeader) {
1000
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetScaleZ", 0.0);
1002
double value = ((LASHeader*) hHeader)->GetScaleZ();
1006
LAS_DLL LASErrorEnum LASHeader_SetScale(LASHeaderH hHeader, double x, double y, double z) {
1007
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_SetScale", LE_Failure);
1010
((LASHeader*) hHeader)->SetScale(x,y,z);
1011
} catch (std::exception const& e)
1013
LASError_PushError(LE_Failure, e.what(), "LASHeader_SetScale");
1020
LAS_DLL double LASHeader_GetOffsetX(const LASHeaderH hHeader) {
1021
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetOffsetX", 0.0);
1023
double value = ((LASHeader*) hHeader)->GetOffsetX();
1027
LAS_DLL double LASHeader_GetOffsetY(const LASHeaderH hHeader) {
1028
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetOffsetY", 0.0);
1030
double value = ((LASHeader*) hHeader)->GetOffsetY();
1034
LAS_DLL double LASHeader_GetOffsetZ(const LASHeaderH hHeader) {
1035
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetOffsetZ", 0.0);
1037
double value = ((LASHeader*) hHeader)->GetOffsetZ();
1041
LAS_DLL LASErrorEnum LASHeader_SetOffset(LASHeaderH hHeader, double x, double y, double z) {
1042
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_SetOffset", LE_Failure);
1045
((LASHeader*) hHeader)->SetOffset(x,y,z);
1046
} catch (std::exception const& e)
1048
LASError_PushError(LE_Failure, e.what(), "LASHeader_SetOffset");
1055
LAS_DLL double LASHeader_GetMinX(const LASHeaderH hHeader) {
1056
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetMinX", 0.0);
1058
double value = ((LASHeader*) hHeader)->GetMinX();
1062
LAS_DLL double LASHeader_GetMinY(const LASHeaderH hHeader) {
1063
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetMinY", 0.0);
1065
double value = ((LASHeader*) hHeader)->GetMinY();
1069
LAS_DLL double LASHeader_GetMinZ(const LASHeaderH hHeader) {
1070
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetMinZ", 0.0);
1072
double value = ((LASHeader*) hHeader)->GetMinZ();
1076
LAS_DLL LASErrorEnum LASHeader_SetMin(LASHeaderH hHeader, double x, double y, double z) {
1077
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_SetMin", LE_Failure);
1080
((LASHeader*) hHeader)->SetMin(x,y,z);
1081
} catch (std::exception const& e)
1083
LASError_PushError(LE_Failure, e.what(), "LASHeader_SetMin");
1090
LAS_DLL double LASHeader_GetMaxX(const LASHeaderH hHeader) {
1091
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetMaxX", 0.0);
1093
double value = ((LASHeader*) hHeader)->GetMaxX();
1097
LAS_DLL double LASHeader_GetMaxY(const LASHeaderH hHeader) {
1098
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetMaxY", 0.0);
1100
double value = ((LASHeader*) hHeader)->GetMaxY();
1104
LAS_DLL double LASHeader_GetMaxZ(const LASHeaderH hHeader) {
1105
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetMaxZ", 0.0);
1107
double value = ((LASHeader*) hHeader)->GetMaxZ();
1111
LAS_DLL LASErrorEnum LASHeader_SetMax(LASHeaderH hHeader, double x, double y, double z) {
1112
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_SetMax", LE_Failure);
1115
((LASHeader*) hHeader)->SetMax(x,y,z);
1116
} catch (std::exception const& e)
1118
LASError_PushError(LE_Failure, e.what(), "LASHeader_SetMax");
1125
LAS_DLL void LASHeader_Destroy(LASHeaderH hHeader)
1127
VALIDATE_LAS_POINTER0(hHeader, "LASHeader_Destroy");
1128
delete ((LASHeader*) hHeader);
1132
LAS_DLL LASHeaderH LASHeader_Copy(const LASHeaderH hHeader) {
1133
return (LASHeaderH) new LASHeader(*((LASHeader*) hHeader));
1136
LAS_DLL int LASHeader_Equal(const LASHeaderH hHeader1, const LASHeaderH hHeader2) {
1137
VALIDATE_LAS_POINTER1(hHeader1, "LASHeader_Equal", 0);
1138
VALIDATE_LAS_POINTER1(hHeader2, "LASHeader_Equal", 0);
1140
LASHeader* header1 = ((LASHeader*) hHeader1);
1141
LASHeader* header2 = ((LASHeader*) hHeader2);
1143
return (header1 == header2);
1146
LAS_DLL LASGuidH LASHeader_GetGUID(const LASHeaderH hHeader) {
1147
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetGUID", 0);
1149
liblas::guid id = ((LASHeader*) hHeader)->GetProjectId();
1150
return (LASGuidH) new liblas::guid(id);
1154
LAS_DLL LASErrorEnum LASHeader_SetGUID(LASHeaderH hHeader, LASGuidH hId) {
1155
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_SetGUID", LE_Failure);
1158
liblas::guid* id = (liblas::guid*) hId;
1160
((LASHeader*) hHeader)->SetProjectId(*id);
1161
} catch (std::exception const& e)
1163
LASError_PushError(LE_Failure, e.what(), "LASHeader_SetGUID");
1170
LAS_DLL LASVLRH LASHeader_GetVLR(const LASHeaderH hHeader, liblas::uint32_t i) {
1171
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetVLR", 0);
1173
LASVariableRecord vlr = ((LASHeader*) hHeader)->GetVLR(i);
1174
return (LASVLRH) new LASVariableRecord(vlr);
1177
LAS_DLL LASErrorEnum LASHeader_DeleteVLR(LASHeaderH hHeader, liblas::uint32_t index) {
1179
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_DeleteVLR", LE_Failure);
1182
((LASHeader*) hHeader)->DeleteVLR(index);
1184
catch (std::exception const& e) {
1185
LASError_PushError(LE_Failure, e.what(), "LASHeader_DeleteVLR");
1193
LAS_DLL LASErrorEnum LASHeader_AddVLR(LASHeaderH hHeader, const LASVLRH hVLR) {
1195
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_AddVLR", LE_Failure);
1196
VALIDATE_LAS_POINTER1(hVLR, "LASHeader_AddVLR", LE_Failure);
1199
((LASHeader*) hHeader)->AddVLR(*((LASVariableRecord*)hVLR));
1201
catch (std::exception const& e) {
1202
LASError_PushError(LE_Failure, e.what(), "LASHeader_AddVLR");
1213
LAS_DLL LASWriterH LASWriter_Create(const char* filename, const LASHeaderH hHeader, int mode) {
1214
VALIDATE_LAS_POINTER1(hHeader, "LASWriter_Create", NULL);
1216
if (filename == NULL) {
1217
LASError_PushError(LE_Failure, "Input filename was null", "LASWriter_Create");
1221
std::ios::openmode m;
1222
if ( (mode > 2) || (mode < 1)) {
1223
throw std::runtime_error("File mode must be eWrite or eAppend");
1226
std::ostream* ostrm;
1230
m = std::ios::out | std::ios::in | std::ios::binary | std::ios::ate;
1234
m = std::ios::out | std::ios::binary | std::ios::ate;
1237
if (compare_no_case(filename,"STOUT",5) == 0)
1243
ostrm = new std::ofstream(filename, m);
1250
throw std::runtime_error("Writing stream was not able to be created");
1253
LASHeader* header = ((LASHeader*) hHeader);
1254
LASWriter* writer = new LASWriter(*ostrm, *header);
1255
return (LASWriterH) writer;
1257
} catch (std::exception const& e)
1259
LASError_PushError(LE_Failure, e.what(), "LASWriter_Create");
1265
LAS_DLL LASErrorEnum LASWriter_WritePoint(const LASWriterH hWriter, const LASPointH hPoint) {
1267
VALIDATE_LAS_POINTER1(hPoint, "LASWriter_WritePoint", LE_Failure);
1271
ret = ((LASWriter*) hWriter)->WritePoint(*((LASPoint*) hPoint));
1273
LASError_PushError( LE_Warning,
1274
"Failed to write point because it was invalid",
1275
"LASWriter_WritePoint");
1278
} catch (std::exception const& e)
1280
LASError_PushError(LE_Failure, e.what(), "LASWriter_WritePoint");
1287
LAS_DLL LASErrorEnum LASWriter_WriteHeader(const LASWriterH hWriter, const LASHeaderH hHeader) {
1289
VALIDATE_LAS_POINTER1(hHeader, "LASWriter_WriteHeader", LE_Failure);
1290
VALIDATE_LAS_POINTER1(hWriter, "LASWriter_WriteHeader", LE_Failure);
1293
((LASWriter*) hWriter)->WriteHeader(*((LASHeader*) hHeader));
1294
} catch (std::exception const& e)
1296
LASError_PushError(LE_Failure, e.what(), "LASWriter_WriteHeader");
1303
LAS_DLL void LASWriter_Destroy(LASWriterH hWriter)
1305
VALIDATE_LAS_POINTER0(hWriter, "LASWriter_Destroy");
1313
LASWriter* writer = (LASWriter*)hWriter;
1314
std::ostream* ostrm = &(writer->GetStream());
1319
if (static_cast<std::ofstream&>(*ostrm))
1320
static_cast<std::ofstream&>(*ostrm).close();
1324
} catch (std::runtime_error const& e/* e */)
1326
LASError_PushError(LE_Failure, e.what(), "LASWriter_Destroy");
1332
LAS_DLL LASErrorEnum LASWriter_SetSRS(LASWriterH hWriter, const LASSRSH hSRS) {
1334
VALIDATE_LAS_POINTER1(hWriter, "LASWriter_SetSRS", LE_Failure);
1335
VALIDATE_LAS_POINTER1(hSRS, "LASWriter_SetSRS", LE_Failure);
1338
((LASWriter*) hWriter)->SetSRS(*((LASSpatialReference*)hSRS));
1340
catch (std::exception const& e) {
1341
LASError_PushError(LE_Failure, e.what(), "LASWriter_SetSRS");
1348
LAS_DLL void LASError_Print(const char* message) {
1351
char* errmethod = NULL;
1352
errmsg = LASError_GetLastErrorMsg();
1353
errmethod = LASError_GetLastErrorMethod();
1354
if (LASError_GetErrorCount()) {
1356
"%s: %s (%d) from method %s\n",
1359
LASError_GetLastErrorNum(),
1362
if (errmsg) free(errmsg);
1363
if (errmethod) free(errmethod);
1366
"You have encountered an error. '%s'\n",
1373
LAS_DLL char * LAS_GetVersion() {
1375
/* XXX - mloskot: I'd suggest to define PACKAGE_VERSION as static object
1376
and return safe const pointer, instead of newly allocated string. */
1378
/* FIXME - mloskot: Termporarily, I defined PACKAGE_VERSION
1379
in las_config.h to solve Visual C++ compilation (Ticket #23) */
1381
std::ostringstream output;
1383
// output << LIBLAS_VERSION_MAJOR;
1384
// output << "." << LIBLAS_VERSION_MINOR;
1385
// output << "." << LIBLAS_VERSION_REV;
1386
// output << "." << LIBLAS_VERSION_BUILD;
1387
output << LIBLAS_RELEASE_NAME;
1388
std::string out(output.str());
1389
return strdup(out.c_str());
1394
LAS_DLL LASVLRH LASVLR_Create(void) {
1395
return (LASVLRH) new LASVariableRecord();
1398
LAS_DLL void LASVLR_Destroy(LASVLRH hVLR){
1399
VALIDATE_LAS_POINTER0(hVLR, "LASVLR_Destroy");
1400
delete (LASVariableRecord*)hVLR;
1405
LAS_DLL char* LASVLR_GetUserId(const LASVLRH hVLR) {
1406
VALIDATE_LAS_POINTER1(hVLR, "LASVLR_GetUserId", 0);
1407
LASVariableRecord* vlr = (LASVariableRecord*)hVLR;
1408
return strdup(vlr->GetUserId(true).c_str());
1411
LAS_DLL LASErrorEnum LASVLR_SetUserId(LASVLRH hVLR, const char* value) {
1412
VALIDATE_LAS_POINTER1(hVLR, "LASVLR_SetUserId", LE_Failure);
1415
((LASVariableRecord*) hVLR)->SetUserId(value);
1416
} catch (std::exception const& e)
1418
LASError_PushError(LE_Failure, e.what(), "LASVLR_SetUserId");
1425
LAS_DLL char* LASVLR_GetDescription(const LASVLRH hVLR) {
1426
VALIDATE_LAS_POINTER1(hVLR, "LASVLR_GetDescription", 0);
1427
LASVariableRecord* vlr = (LASVariableRecord*)hVLR;
1428
return strdup(vlr->GetDescription(true).c_str());
1431
LAS_DLL LASErrorEnum LASVLR_SetDescription(LASVLRH hVLR, const char* value) {
1432
VALIDATE_LAS_POINTER1(hVLR, "LASVLR_SetDescription", LE_Failure);
1435
((LASVariableRecord*) hVLR)->SetDescription(value);
1436
} catch (std::exception const& e)
1438
LASError_PushError(LE_Failure, e.what(), "LASVLR_SetDescription");
1445
LAS_DLL liblas::uint16_t LASVLR_GetRecordLength(const LASVLRH hVLR) {
1447
VALIDATE_LAS_POINTER1(hVLR, "LASVLR_GetRecordLength", 0);
1449
liblas::uint16_t value = ((LASVariableRecord*) hVLR)->GetRecordLength();
1452
LAS_DLL LASErrorEnum LASVLR_SetRecordLength(LASVLRH hVLR, liblas::uint16_t value) {
1453
VALIDATE_LAS_POINTER1(hVLR, "LASVLR_SetRecordLength", LE_Failure);
1454
((LASVariableRecord*) hVLR)->SetRecordLength(value);
1458
LAS_DLL liblas::uint16_t LASVLR_GetRecordId(const LASVLRH hVLR) {
1460
VALIDATE_LAS_POINTER1(hVLR, "LASVLR_GetRecordId", 0);
1462
liblas::uint16_t value = ((LASVariableRecord*) hVLR)->GetRecordId();
1465
LAS_DLL LASErrorEnum LASVLR_SetRecordId(LASVLRH hVLR, liblas::uint16_t value) {
1466
VALIDATE_LAS_POINTER1(hVLR, "LASVLR_SetRecordId", LE_Failure);
1467
((LASVariableRecord*) hVLR)->SetRecordId(value);
1472
LAS_DLL LASErrorEnum LASVLR_SetReserved(LASVLRH hVLR, liblas::uint16_t value) {
1473
VALIDATE_LAS_POINTER1(hVLR, "LASVLR_SetReserved", LE_Failure);
1474
((LASVariableRecord*) hVLR)->SetReserved(value);
1478
LAS_DLL liblas::uint16_t LASVLR_GetReserved(const LASVLRH hVLR) {
1480
VALIDATE_LAS_POINTER1(hVLR, "LASVLR_GetReserved", 0);
1482
liblas::uint16_t value = ((LASVariableRecord*) hVLR)->GetReserved();
1486
LAS_DLL LASErrorEnum LASVLR_GetData(const LASVLRH hVLR, liblas::uint8_t* data) {
1488
VALIDATE_LAS_POINTER1(hVLR, "LASVLR_GetData", LE_Failure);
1491
LASVariableRecord* vlr = ((LASVariableRecord*) hVLR);
1492
std::vector<liblas::uint8_t> d = vlr->GetData();
1493
liblas::uint16_t length = vlr->GetRecordLength();
1494
for (liblas::uint16_t i=0; i < length; i++) {
1498
catch (std::exception const& e) {
1499
LASError_PushError(LE_Failure, e.what(), "LASVLR_GetData");
1507
LAS_DLL LASErrorEnum LASVLR_SetData(const LASVLRH hVLR, liblas::uint8_t* data, liblas::uint16_t length) {
1509
VALIDATE_LAS_POINTER1(hVLR, "LASVLR_SetData", LE_Failure);
1512
LASVariableRecord* vlr = ((LASVariableRecord*) hVLR);
1513
std::vector<liblas::uint8_t> d;
1515
for (liblas::uint16_t i=0; i < length; i++) {
1520
catch (std::exception const& e) {
1521
LASError_PushError(LE_Failure, e.what(), "LASVLR_GetData");
1529
LAS_DLL LASGuidH LASGuid_Create() {
1530
liblas::guid random;
1532
random = liblas::guid::create();
1533
return (LASGuidH) new liblas::guid(random);
1535
catch (std::exception const& e) {
1536
LASError_PushError(LE_Failure, e.what(), "LASGuid_Create");
1541
LAS_DLL LASGuidH LASGuid_CreateFromString(const char* string) {
1542
VALIDATE_LAS_POINTER1(string, "LASGuid_CreateFromString", NULL);
1545
id = liblas::guid::guid(string);
1546
return (LASGuidH) new liblas::guid(id);
1548
catch (std::exception const& e) {
1549
LASError_PushError(LE_Failure, e.what(), "LASGuid_CreateFromString");
1554
LAS_DLL void LASGuid_Destroy(LASGuidH hId) {
1555
VALIDATE_LAS_POINTER0(hId, "LASGuid_Destroy");
1556
delete (liblas::guid*) hId;
1560
LAS_DLL int LASGuid_Equals(LASGuidH hId1, LASGuidH hId2) {
1561
VALIDATE_LAS_POINTER1(hId1, "LASGuid_Equals", LE_Failure);
1562
VALIDATE_LAS_POINTER1(hId2, "LASGuid_Equals", LE_Failure);
1564
liblas::guid* id1 = (liblas::guid*)hId1;
1565
liblas::guid* id2 = (liblas::guid*)hId2;
1568
return( *id1 == *id2);
1570
catch (std::exception const& e) {
1571
LASError_PushError(LE_Failure, e.what(), "LASGuid_Equals");
1576
LAS_DLL char* LASGuid_AsString(LASGuidH hId) {
1577
VALIDATE_LAS_POINTER1(hId, "LASGuid_AsString", 0);
1578
liblas::guid* id= (liblas::guid*)hId;
1579
return strdup(id->to_string().c_str());
1584
LAS_DLL LASColorH LASColor_Create(void) {
1585
return (LASColorH) new LASColor();
1588
LAS_DLL void LASColor_Destroy(LASColorH hColor){
1589
VALIDATE_LAS_POINTER0(hColor, "LASColor_Destroy");
1590
delete (LASColor*)hColor;
1594
LAS_DLL LASErrorEnum LASColor_SetRed(LASColorH hColor, liblas::uint16_t value) {
1596
VALIDATE_LAS_POINTER1(hColor, "LASColor_SetRed", LE_Failure);
1599
LASColor* color = ((LASColor*) hColor);
1600
color->SetRed(value);
1602
catch (std::exception const& e) {
1603
LASError_PushError(LE_Failure, e.what(), "LASColor_SetRed");
1610
LAS_DLL liblas::uint16_t LASColor_GetRed(LASColorH hColor) {
1612
VALIDATE_LAS_POINTER1(hColor, "LASColor_GetRed", 0);
1614
liblas::uint16_t value = ((LASColor*) hColor)->GetRed();
1618
LAS_DLL LASErrorEnum LASColor_SetBlue(LASColorH hColor, liblas::uint16_t value) {
1620
VALIDATE_LAS_POINTER1(hColor, "LASColor_SetBlue", LE_Failure);
1623
LASColor* color = ((LASColor*) hColor);
1624
color->SetBlue(value);
1626
catch (std::exception const& e) {
1627
LASError_PushError(LE_Failure, e.what(), "LASColor_SetBlue");
1634
LAS_DLL liblas::uint16_t LASColor_GetBlue(LASColorH hColor) {
1636
VALIDATE_LAS_POINTER1(hColor, "LASColor_GetBlue", 0);
1638
liblas::uint16_t value = ((LASColor*) hColor)->GetBlue();
1642
LAS_DLL LASErrorEnum LASColor_SetGreen(LASColorH hColor, liblas::uint16_t value) {
1644
VALIDATE_LAS_POINTER1(hColor, "LASColor_SetGreen", LE_Failure);
1647
LASColor* color = ((LASColor*) hColor);
1648
color->SetGreen(value);
1650
catch (std::exception const& e) {
1651
LASError_PushError(LE_Failure, e.what(), "LASColor_SetGreen");
1658
LAS_DLL liblas::uint16_t LASColor_GetGreen(LASColorH hColor) {
1660
VALIDATE_LAS_POINTER1(hColor, "LASColor_GetGreen", 0);
1662
liblas::uint16_t value = ((LASColor*) hColor)->GetGreen();
1666
LAS_DLL LASColorH LASPoint_GetColor(const LASPointH hPoint) {
1667
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_GetColor", 0);
1669
LASColor color = ((LASPoint*) hPoint)->GetColor();
1670
return (LASColorH) new LASColor(color);
1673
LAS_DLL LASErrorEnum LASPoint_SetColor(LASPointH hPoint, const LASColorH hColor) {
1675
VALIDATE_LAS_POINTER1(hPoint, "LASPoint_SetColor", LE_Failure);
1676
VALIDATE_LAS_POINTER1(hColor, "LASPoint_SetColor", LE_Failure);
1679
((LASPoint*) hPoint)->SetColor(*((LASColor*)hColor));
1681
catch (std::exception const& e) {
1682
LASError_PushError(LE_Failure, e.what(), "LASPoint_SetColor");
1689
LAS_DLL LASSRSH LASSRS_Create(void) {
1690
return (LASSRSH) new LASSpatialReference();
1693
LAS_DLL void LASSRS_Destroy(LASSRSH hSRS){
1694
VALIDATE_LAS_POINTER0(hSRS, "LASSRS_Destroy");
1695
delete (LASSpatialReference*)hSRS;
1699
LAS_DLL const GTIF* LASSRS_GetGTIF(LASSRSH hSRS) {
1700
VALIDATE_LAS_POINTER1(hSRS, "LASSRS_GetGTIF", 0);
1703
return ((LASSpatialReference*) hSRS)->GetGTIF();
1705
catch (std::exception const& e) {
1706
LASError_PushError(LE_Failure, e.what(), "LASSRS_GetGTIF");
1711
LAS_DLL LASErrorEnum LASSRS_SetGTIF(LASSRSH hSRS, const GTIF* gtiff, const ST_TIFF* tiff)
1713
VALIDATE_LAS_POINTER1(hSRS, "LASSRS_SetGTIF", LE_Failure);
1714
VALIDATE_LAS_POINTER1(gtiff, "LASSRS_SetGTIF", LE_Failure);
1715
VALIDATE_LAS_POINTER1(tiff, "LASSRS_SetGTIF", LE_Failure);
1717
((LASSpatialReference*) hSRS)->SetGTIF(gtiff, tiff);
1719
catch (std::exception const& e) {
1720
LASError_PushError(LE_Failure, e.what(), "LASSRS_SetGTIF");
1726
LAS_DLL char* LASSRS_GetProj4(LASSRSH hSRS)
1728
VALIDATE_LAS_POINTER1(hSRS, "LASSRS_GetProj4", NULL);
1729
LASSpatialReference* srs = (LASSpatialReference*)hSRS;
1731
return strdup((srs)->GetProj4().c_str());
1735
LAS_DLL LASErrorEnum LASSRS_SetProj4(LASSRSH hSRS, const char* value)
1737
VALIDATE_LAS_POINTER1(hSRS, "LASSRS_SetProj4", LE_Failure);
1738
VALIDATE_LAS_POINTER1(value, "LASSRS_SetProj4", LE_Failure);
1741
((LASSpatialReference*) hSRS)->SetProj4(value);
1743
catch (std::exception const& e) {
1744
LASError_PushError(LE_Failure, e.what(), "LASSRS_SetProj4");
1751
LAS_DLL char* LASSRS_GetWKT(LASSRSH hSRS)
1753
VALIDATE_LAS_POINTER1(hSRS, "LASSRS_GetWKT", NULL);
1754
LASSpatialReference* srs = (LASSpatialReference*)hSRS;
1756
return strdup((srs)->GetWKT().c_str());
1760
LAS_DLL LASErrorEnum LASSRS_SetWKT(LASSRSH hSRS, const char* value)
1762
VALIDATE_LAS_POINTER1(hSRS, "LASSRS_SetWKT", LE_Failure);
1763
VALIDATE_LAS_POINTER1(value, "LASSRS_SetWKT", LE_Failure);
1766
((LASSpatialReference*) hSRS)->SetWKT(value);
1768
catch (std::exception const& e) {
1769
LASError_PushError(LE_Failure, e.what(), "LASSRS_SetWKT");
1776
LAS_DLL LASErrorEnum LASSRS_AddVLR(LASSRSH hSRS, const LASVLRH hVLR) {
1778
VALIDATE_LAS_POINTER1(hSRS, "LASSRS_AddVLR", LE_Failure);
1779
VALIDATE_LAS_POINTER1(hVLR, "LASSRS_AddVLR", LE_Failure);
1782
((LASSpatialReference*) hSRS)->AddVLR(*((LASVariableRecord*)hVLR));
1784
catch (std::exception const& e) {
1785
LASError_PushError(LE_Failure, e.what(), "LASSRS_AddVLR");
1793
LAS_DLL LASVLRH LASSRS_GetVLR(const LASSRSH hSRS, liblas::uint32_t i) {
1794
VALIDATE_LAS_POINTER1(hSRS, "LASSRS_GetVLR", 0);
1796
LASVariableRecord vlr = ((LASSpatialReference*) hSRS)->GetVLRs()[i];
1797
return (LASVLRH) new LASVariableRecord(vlr);
1800
LAS_DLL liblas::uint32_t LASSRS_GetVLRCount(const LASSRSH hSRS) {
1801
VALIDATE_LAS_POINTER1(hSRS, "LASSRS_GetVLR", 0);
1803
liblas::uint32_t size = ((LASSpatialReference*) hSRS)->GetVLRs().size();
1807
LAS_DLL LASErrorEnum LASHeader_SetSRS(LASHeaderH hHeader, const LASSRSH hSRS) {
1809
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_SetSRS", LE_Failure);
1810
VALIDATE_LAS_POINTER1(hSRS, "LASHeader_SetSRS", LE_Failure);
1813
((LASHeader*) hHeader)->SetSRS(*((LASSpatialReference*)hSRS));
1815
catch (std::exception const& e) {
1816
LASError_PushError(LE_Failure, e.what(), "LASHeader_SetSRS");
1824
LAS_DLL LASSRSH LASHeader_GetSRS(const LASHeaderH hHeader) {
1825
VALIDATE_LAS_POINTER1(hHeader, "LASHeader_GetSRS", 0);
1827
LASSpatialReference srs = ((LASHeader*) hHeader)->GetSRS();
1828
return (LASSRSH) new LASSpatialReference(srs);
1832
LAS_DLL void LASString_Free(char* string) {
1840
# pragma warning(default: 4127) // enable warning C4127: conditional expression is constant