3#include "meta_data.hpp"
4#include "../data_type.hpp"
5#include "cube_range.hpp"
6#include "../_cexports/c_spectral.h"
9#include "linear_access_data.hpp"
16 inline HandleGuard<Spectral::Cube>::HandleGuard(
void * handle) noexcept
17 : HandleGuard<Spectral::Cube>(handle, [](
void* handle) { CVB_CALL_CAPI(ReleaseObject(handle)); })
69 return Internal::DoResCallObjectOut<Cube>([&](
void* & cubeOut)
71 return CVB_CALL_CAPI(CVSCreateContinuousCube(numSamples, numLines, numBands,
72 dataType.
NativeDescriptor(),
static_cast<CExports::CVSCubeEncoding
>(bufferLayout),
88 return Internal::DoResCallObjectOut<Cube>([&](
void* & cubeOut)
90 return CVB_CALL_CAPI(CVSCreateDuplicatedContinuousCube(handle_.Handle(),
109 for (
auto pImg : images)
110 imgArr.push_back(pImg->Handle());
111 return Internal::DoResCallObjectOut<Cube>([&](
void* & cubeOut)
113 return CVB_CALL_CAPI(CVSCreateStackedCube(imgArr.data(),
114 imgArr.size(),
static_cast<CExports::CVSCubeEncoding
>(bufferLayout),
128 CExports::CVSCubeType cType = Internal::DoResCallValueOut<CExports::CVSCubeType>([&](CExports::CVSCubeType& val)
130 return CVB_CALL_CAPI(CVSCubeGetType(handle_.Handle(), val));
132 return static_cast<CubeType>(cType);
147 CExports::cvbdatatype_t cType =
148 Internal::DoResCallValueOut<CExports::cvbdatatype_t>([&](CExports::cvbdatatype_t& val)
150 return CVB_CALL_CAPI(CVSCubeGetDatatype(handle_.Handle(), val));
175 return Internal::DoResCallObjectOut<Cube>([&](
void* & obj)
177 return CVB_CALL_CAPI(CVSCreateTransposedCube(handle_.Handle(),
178 static_cast<CExports::CVSCubeEncoding
>(targetView),
179 static_cast<CExports::cvbbool_t
>(mapTarget),
204 CExports::CVSCuboid cCuboid;
205 cCuboid.Samples = {
static_cast<CExports::cvbdim_t
>(spectralCubeoid.
Samples().
Min()),
static_cast<CExports::cvbdim_t
>(spectralCubeoid.
Samples().
Max()) };
206 cCuboid.Lines = {
static_cast<CExports::cvbdim_t
>(spectralCubeoid.
Lines().
Min()),
static_cast<CExports::cvbdim_t
>(spectralCubeoid.
Lines().
Max()) };
207 cCuboid.Bands = {
static_cast<CExports::cvbdim_t
>(spectralCubeoid.
Bands().
Min()),
static_cast<CExports::cvbdim_t
>(spectralCubeoid.
Bands().
Max()) };
208 return Internal::DoResCallObjectOut<Cube>([&](
void* & obj)
210 return CVB_CALL_CAPI(CVSCreateCroppedCube(handle_.Handle(),
212 static_cast<CExports::cvbbool_t
>(mapTarget),
232 return Internal::DoResCallObjectOut<Image>([&](
void* & obj)
234 return CVB_CALL_CAPI(CVSCubeGetBufferView(handle_.Handle(),
251 return Internal::DoResCallObjectOut<Spectral::MetaData>([&](
void* & obj)
253 return CVB_CALL_CAPI(CVSCubeGetMetaData(handle_.Handle(),
268 void* pBase =
nullptr;
269 intptr_t sampleInc = 0, lineInc = 0, bandInc = 0;
270 auto code = CExports::MakeErrorCode(CVB_CALL_CAPI(CVSCubeGetLinearAccess(handle_.Handle(), pBase, sampleInc, lineInc, bandInc)));
288 Utilities::SystemInfo::ThrowLastError(
static_cast<CExports::cvbres_t
>(CExports::CVC_E_ERROR));
319 return Internal::DoResCallObjectOut<Cube>([&](
void* & cubeOut)
321 return CVB_CALL_CAPI(CVSLoadEnviFileTyped(
322 EnviHeader.c_str(), EnviBinary.c_str(),
336 CVB_CALL_CAPI_CHECKED(CVSWriteEnviFileTyped(
338 EnviHeader.c_str(), EnviBinary.c_str()));
354 return Internal::DoResCallObjectOut<Cube>([&](
void* & cubeOut)
356 return CVB_CALL_CAPI(CVSCubeSwapSamplesAndLines(handle_.Handle(), cubeOut));
368 return handle_.Handle();
392 Cube(HandleGuard<Cube>&& guard) noexcept
393 : handle_(std::move(guard))
398 : handle_(std::move(other.handle_))
402 Cube & operator=(Cube && other) =
default;
417 CExports::IMG objH =
nullptr;
418 if (CExports::MakeErrorCode(CVB_CALL_CAPI(CVSCubeGetBufferView(handle_.Handle(), objH))) < 0)
433 CExports::CVSMETADATA objH =
nullptr;
434 if (CExports::MakeErrorCode(CVB_CALL_CAPI(CVSCubeGetMetaData(handle_.Handle(), objH))) < 0)
447 CVB_CALL_CAPI_CHECKED(CVSCubeGetSpectrumAsInteger(handle_.Handle(), sampleIndex, lineIndex,
448 reinterpret_cast<CExports::cvbval_t*
>(0), sz));
450 CVB_CALL_CAPI_CHECKED(CVSCubeGetSpectrumAsInteger(handle_.Handle(), sampleIndex, lineIndex,
451 tmpBuff.data(), sz));
454 for (
auto e : tmpBuff)
455 tmpSpecDens.push_back(
static_cast<int>(e));
456 specDens = tmpSpecDens;
462 CVB_CALL_CAPI_CHECKED(CVSCubeGetSpectrumAsDouble(handle_.Handle(), sampleIndex, lineIndex,
463 reinterpret_cast<double*
>(0), sz));
465 CVB_CALL_CAPI_CHECKED(CVSCubeGetSpectrumAsDouble(handle_.Handle(), sampleIndex, lineIndex,
466 tmpBuff.data(), sz));
472 HandleGuard<Cube> handle_;
477 using Spectral::Cube;
Data type description for an image plane.
Definition: data_type.hpp:28
int NativeDescriptor() const noexcept
Native data type descriptor.
Definition: data_type.hpp:322
static DataType FromNativeDescriptor(int dataTypeDescriptor) noexcept
Construct a data type descriptor from one of the native library's descriptor values.
Definition: data_type.hpp:37
static std::unique_ptr< Image > FromHandle(HandleGuard< Image > &&guard)
Creates an image from a classic API handle.
Definition: decl_image.hpp:153
Spectral Cube object.
Definition: cube.hpp:51
bool TryMetaData(MetaDataPtr &metaDataOut) const noexcept
Retrieves the meta data object of the cube without throwing an exception.
Definition: cube.hpp:431
std::vector< T > SpectralDensity(int sampleIndex, int lineIndex) const
Retrieves spectral density at given pixel.
Definition: cube.hpp:302
MetaDataPtr MetaData() const
Retrieves the meta data object of the cube.
Definition: cube.hpp:249
std::unique_ptr< Cube > SwapSamplesAndLines() const
Swaps the dimensions for samples and lines and returns a deep copy.
Definition: cube.hpp:352
std::unique_ptr< Cube > Map(CubeRange spectralCubeoid)
Creates a cropped cube.
Definition: cube.hpp:201
std::unique_ptr< Cube > Transpose(CubeEncoding targetView) const
Creates a transposed cube.
Definition: cube.hpp:172
LinearAccessData LinearAccess() const
Retrieve linear access of cube data.
Definition: cube.hpp:284
static std::unique_ptr< Cube > Create(int numSamples, int numLines, int numBands, DataType dataType, CubeEncoding bufferLayout=CubeEncoding::BandInterleavedByLine)
Creates a Continuous Cube object.
Definition: cube.hpp:66
std::unique_ptr< Cube > Clone()
Copies the memory to a new instance of a cube.
Definition: cube.hpp:86
bool TryLinearAccess(LinearAccessData &linearAccessOut) const noexcept
Retrieve linear access of cube data without throwing an exception.
Definition: cube.hpp:266
static std::unique_ptr< Cube > FromHandle(HandleGuard< Cube > &&guard)
Creates cube from a classic API handle.
Definition: cube.hpp:381
CubeType Type() const
Retrieves the type of this cube object.
Definition: cube.hpp:126
void Save(Cvb::String EnviHeader, Cvb::String EnviBinary) const
Writes this cube object to ENVI-format.
Definition: cube.hpp:334
bool TryBufferView(ImagePtr &bufferViewOut) const noexcept
Retrieves the buffer view of the cube without throwing an exception.
Definition: cube.hpp:415
static std::unique_ptr< Cube > FromImages(const std::vector< ImagePtr > &images, CubeEncoding bufferLayout)
Initializes a stacked cube using an array of images.
Definition: cube.hpp:106
static std::unique_ptr< Cube > Load(Cvb::String EnviHeader, Cvb::String EnviBinary)
Static function Loads a cube from ENVI.
Definition: cube.hpp:317
void * Handle() const noexcept
Returns C-API style handle to the Cube.
Definition: cube.hpp:366
Cvb::ImagePtr BufferView() const
Retrieves the buffer view of the cube.
Definition: cube.hpp:230
3D rectangle in the samples, lines and bands domain.
Definition: cube_range.hpp:24
ValueRange< int > Samples() const noexcept
Gets the range regarding the samples dimension.
Definition: cube_range.hpp:55
ValueRange< int > Bands() const noexcept
Gets the range regarding bands dimension.
Definition: cube_range.hpp:101
ValueRange< int > Lines() const noexcept
Gets the range regarding lines dimension.
Definition: cube_range.hpp:78
Linear access properties.
Definition: linear_access_data.hpp:21
T Min() const noexcept
Gets the minimum value.
Definition: value_range.hpp:50
T Max() const noexcept
Gets the maximum value.
Definition: value_range.hpp:72
CubeType
Defines the type of the cube.
Definition: spectral.hpp:225
@ StackedCube
Stacked Cube with potentially non-linear buffer.
CubeEncoding
View Perspective: Defines how the mapping between a typical x-y image and samples-lines-bands is done...
Definition: spectral.hpp:211
Root namespace for the Image Manager interface.
Definition: c_barcode.h:24