Open VDS issueshttps://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/issues2022-11-01T11:40:00Zhttps://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/issues/1513.0.4 fmt related build failure in IOManagerAzureSdkForCpp2022-11-01T11:40:00ZAlena Chaikouskaya3.0.4 fmt related build failure in IOManagerAzureSdkForCppHi,
We have a problem with building 3.0.4 with new azure sdk.
We are running
```
RUN cmake -S . \
-B build \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_JAVA=OFF \
-DBUILD_PYTHON=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_TE...Hi,
We have a problem with building 3.0.4 with new azure sdk.
We are running
```
RUN cmake -S . \
-B build \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_JAVA=OFF \
-DBUILD_PYTHON=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_TESTS=OFF \
-DBUILD_DOCS=OFF \
-DDISABLE_AWS_IOMANAGER=ON \
-DDISABLE_AZURESDKFORCPP_IOMANAGER=OFF \
-DDISABLE_GCP_IOMANAGER=ON \
-DDISABLE_DMS_IOMANAGER=OFF \
-DDISABLE_STRICT_WARNINGS=OFF
```
Unfortunately on all checked OS (alpine, etc) that fails with
```
In file included from /open-vds/3rdparty/fmt-9.1.0/include/fmt/format.h:48,
from /open-vds/src/OpenVDS/IO/IOManagerAzureSdkForCpp.h:33,
from /open-vds/src/OpenVDS/IO/IOManager.cpp:32:
/open-vds/3rdparty/fmt-9.1.0/include/fmt/core.h:1334:47: error: there are no arguments to 'format_as' that depend on a template parameter, so a declaration of 'format_as' must be available [-fpermissive]
```
If in the build script we exchange 9.1.0 with 7.1.3, build is run fine.
But then on usage new errors appear:
```
libazure-core.so, needed by /open-vds/Dist/OpenVDS/lib/libopenvds.so, not found (try using -rpath or -rpath-link)
libazure-storage-blobs.so, needed by /open-vds/Dist/OpenVDS/lib/libopenvds.so, not found (try using -rpath or -rpath-link)
libazure-storage-common.so, needed by /open-vds/Dist/OpenVDS/lib/libopenvds.so, not found (try using -rpath or -rpath-link)
```
That makes sense as only some azure libraries are copied:
```
Installing: /open-vds/Dist/OpenVDS/lib/libazurestorage.so.7.5
Installing: /open-vds/Dist/OpenVDS/lib/libazurestorage.so.7
```
when before (code based on version 2.3.3) `libazure-core.so`, `libazure-storage-blobs.so` and `libazure-storage-common.so` were installed as well.
```
Installing: /open-vds/Dist/OpenVDS/lib/libazurestorage.so.7.5
Installing: /open-vds/Dist/OpenVDS/lib/libazurestorage.so.7
Installing: /open-vds/Dist/OpenVDS/lib/libazurestorage.so
Installing: /open-vds/Dist/OpenVDS/lib/libazure-core.so
Installing: /open-vds/Dist/OpenVDS/lib/libazure-storage-common.so
Installing: /open-vds/Dist/OpenVDS/lib/libazure-template.so
Installing: /open-vds/Dist/OpenVDS/lib/libazure-identity.so
Installing: /open-vds/Dist/OpenVDS/lib/libazure-security-keyvault-common.so
Installing: /open-vds/Dist/OpenVDS/lib/libazure-security-keyvault-keys.so
Installing: /open-vds/Dist/OpenVDS/lib/libazure-storage-blobs.so
Installing: /open-vds/Dist/OpenVDS/lib/libazure-storage-files-datalake.so
Installing: /open-vds/Dist/OpenVDS/lib/libazure-storage-files-shares.so
```
Now to work around this we have to manually copy `azure-sdk-for-cpp_12.3.0_install` artifacts to installation directory.
Can this be fixed?https://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/issues/1053D visualization demo using Python FastAPI, Three.js. Error when include lib ...2022-01-05T09:58:53ZTrung Dang3D visualization demo using Python FastAPI, Three.js. Error when include lib in C++.I've worked on a simple demo to retrieve slices data and plot 3 type of slices using Three.js which is available [here](https://github.com/trungdang97/openvds-threejs).
![image](/uploads/2d890c3fe67ef220995bbadff3923cf8/image.png)
I do...I've worked on a simple demo to retrieve slices data and plot 3 type of slices using Three.js which is available [here](https://github.com/trungdang97/openvds-threejs).
![image](/uploads/2d890c3fe67ef220995bbadff3923cf8/image.png)
I don't have access to any cloud S3 (I've tried Minio Playground but it's terribly slow) so I used VDS file instead for the demo - which is imported from Kerry3D data. It works fine but the response time is slow (between 2-3 seconds for a slice) so the transition is not smooth.
I'm trying to create a REST service using C++ but I'm not familiar with the language. I copied these 2 folder (OpenVDS, SEGYUtils) from OpenVDS+2.1.8 distribution into my include folder and proceed copy the C++ example. But there was an issue with undefined error from the variable "volumeDataAccessManagerInterface" at line 944 in OpenVDS.h.
`
g++ -std=c++11 -fdiagnostics-color=always -g W:\VDS\vds-3d-plot\cpp\api.cpp -o W:\VDS\vds-3d-plot\cpp\api.exe -I W:\VDS\vds-3d-plot\cpp\include
`
`C:\Users\Trung\AppData\Local\Temp\ccGYBsSs.o: In function 'main':
W:/VDS/vds-3d-plot/cpp/api.cpp:22: undefined reference to '__imp__ZN7OpenVDS4OpenENS_13StringWrapperES0_RNS_5ErrorE'
`
`C:\Users\Trung\AppData\Local\Temp\ccGYBsSs.o: In function
'GetAccessManager':
W:/VDS/vds-3d-plot/cpp/include/OpenVDS/OpenVDS.h:944: undefined reference to '__imp__ZN7OpenVDS25GetAccessManagerInterfaceEPNS_3VDSE
'`
`
collect2.exe: error: ld returned 1 exit status
`
Can someone help me with the error? I know this is not Stack Overflow but if someone can show me a minimal working example using OpenVDS in C++ so I can figure out how it works and continue doing experiments on decreasing the service response time. Thank you in advance.https://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/issues/167Abort trap 6 on OpenVDS::Open2023-08-29T14:42:46ZErlend HårstadAbort trap 6 on OpenVDS::OpenPassing `OpenVDS::Open` a sas token where the Signed Resource Type (`srt`) parameter contains 'Container' (`c`) and _not_ object (`o`) cause an Abort trap 6. As far as I can tell, this happen for any combination of `srt` options as long ...Passing `OpenVDS::Open` a sas token where the Signed Resource Type (`srt`) parameter contains 'Container' (`c`) and _not_ object (`o`) cause an Abort trap 6. As far as I can tell, this happen for any combination of `srt` options as long as it contains `c` and not `o`. Although this particular combination doesn't make a whole lot of sense when working with VDS, it's still a completely valid sas.
I've only tested this on 3.0.3https://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/issues/17Add a benchmarking tool2020-03-10T10:28:09ZMorten OfstadAdd a benchmarking toolThe VDSBenchmark should have options to read the whole dataset as slices (along any axis) and tiles, control how many requests are in the queue and size of tiles. It should report detailed timings and MB/s rate.The VDSBenchmark should have options to read the whole dataset as slices (along any axis) and tiles, control how many requests are in the queue and size of tiles. It should report detailed timings and MB/s rate.Jørgen Lindjorgen.lind@3lc.aiJørgen Lindjorgen.lind@3lc.aihttps://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/issues/204Add a mechanism to use an external application to get credentials2023-09-08T08:27:25ZMorten OfstadAdd a mechanism to use an external application to get credentialsIn order to get credentials that require a user to log in, it will be useful to run a separate executable. This is e.g. how git works (global config sets credential.helper to point to an executable, can be configured per URL prefix, see ...In order to get credentials that require a user to log in, it will be useful to run a separate executable. This is e.g. how git works (global config sets credential.helper to point to an executable, can be configured per URL prefix, see Git - gitcredentials Documentation (git-scm.com)). Integrating this directly in OpenVDS makes it easy for other applications to take advantage of.
The suggested implementation will add new global keys (valid for all cloud providers) credential_helper and credential_helper_args to the connection string format. If the credential_helper key is present, the executable pointed to will be run with the args from credential_helper_args and the URL as arguments, and the output will be parsed as a connection string and added to the remaining keys after removing the credential_helper and credential_helper_args keys. This allows other arguments like tolerance etc. to be passed on from the original connection string after using the credentials helper.https://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/issues/71Add command-line parameters to SEGYImport tool for overriding specific header...2021-03-03T15:41:36ZMorten OfstadAdd command-line parameters to SEGYImport tool for overriding specific header fieldsWhen SEGYImport is being called from a script/in a container it can be inconvenient to create a header format JSON file, so we should provide the option to override header fields directly on the command line.When SEGYImport is being called from a script/in a container it can be inconvenient to create a header format JSON file, so we should provide the option to override header fields directly on the command line.Version 2.0https://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/issues/220Add CRS database lookup to SEGYImport tool2023-11-16T12:21:10ZMorten OfstadAdd CRS database lookup to SEGYImport toolIt would be so much easier if it was possible to specify CRS by using the EPSG ID or UTM zone to look up the CRSWkt automatically, e.g. like this: --crs EPSG:23031 or --crs UTM-31N to get the WKT
```
PROJCS["ED50 / UTM zone 31N",GEOGCS["...It would be so much easier if it was possible to specify CRS by using the EPSG ID or UTM zone to look up the CRSWkt automatically, e.g. like this: --crs EPSG:23031 or --crs UTM-31N to get the WKT
```
PROJCS["ED50 / UTM zone 31N",GEOGCS["ED50",DATUM["European_Datum_1950",SPHEROID["International 1924",6378388,297],TOWGS84[-87,-98,-121,0,0,0,0]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4230"]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["Easting",EAST],AXIS["Northing",NORTH],AUTHORITY["EPSG","23031"]]
```
I looked up this at [https://epsg.io/23031](https://epsg.io/23031)https://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/issues/68Add exception translation to the Java API2022-07-21T13:12:49ZMorten OfstadAdd exception translation to the Java APIThe native VolumeDataAccessManager will throw exceptions for bad parameters etc., these should be translated to standard Java exceptions.The native VolumeDataAccessManager will throw exceptions for bad parameters etc., these should be translated to standard Java exceptions.https://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/issues/209Adding CRS to a VDS generated by Openvds+2023-11-16T12:21:10ZJuliana Fernandesjuliana.fernandes@iesbrazil.com.brAdding CRS to a VDS generated by Openvds+Hello,
I was taking a look into the doccumentation in order to add CRS to the VDS I'm generating with Openvds+.
In the doccumentation I saw the command "–crs-wkt <string>". The WKT is a Well-known Text and seems to be a geographical c...Hello,
I was taking a look into the doccumentation in order to add CRS to the VDS I'm generating with Openvds+.
In the doccumentation I saw the command "–crs-wkt <string>". The WKT is a Well-known Text and seems to be a geographical coordinate. There is a way to add a UTM coordinate to the data?
Regards,
Julianahttps://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/issues/14Add IOManagerCurl2021-03-11T12:41:38ZJørgen Lindjorgen.lind@3lc.aiAdd IOManagerCurlTo maintain a predictable performance between IOManagers there should exist a IOManager utilising curl on both Windows and Linux that communicates with a server without any authentication. This can then be referenced as a benchmark for p...To maintain a predictable performance between IOManagers there should exist a IOManager utilising curl on both Windows and Linux that communicates with a server without any authentication. This can then be referenced as a benchmark for performance characteristics the other IOManagers should achieve. The IOManager should be written in such a way that it should be "trivial" for other IOManagers to utilise the http transfer code and add its own signing headers etc.Version 2.0Jørgen Lindjorgen.lind@3lc.aiJørgen Lindjorgen.lind@3lc.aihttps://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/issues/174Addition of valid input for SEGYImport2023-02-23T13:23:58ZAlexander JaustAddition of valid input for SEGYImportI wonder what would be the correct the conversion of SEG-Y files to VDS using `SEGYImport` when the provided options by `SEGYImport` are not rich enough.
Example: I have an attribute map in a SEG-Y file. However, none of the allowed na...I wonder what would be the correct the conversion of SEG-Y files to VDS using `SEGYImport` when the provided options by `SEGYImport` are not rich enough.
Example: I have an attribute map in a SEG-Y file. However, none of the allowed names for the `Attribute` property (`--attribute-name`: Amplitude (default), Attribute, Depth, Probability, Time, Vavg, Vint, or Vrms) are fitting my needs. The attribute name `Attribute` would be too vague for my use case and the other allowed names do not fit either.
- Should I import the SEG-Y file to VDS and afterwards change the name? I am not sure if that is possible, cf. #173.
- Could I provide a patch that extends SEGYImport by the units, names etc. that I would need?
- Should I fork and create my own SEGYImport? I would really like to avoid this.https://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/issues/41Add library path instructions to readme2021-06-16T22:19:43ZJørgen Lindjorgen.lind@3lc.aiAdd library path instructions to readmehttps://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/issues/64Add options for adaptive streaming2021-03-05T10:41:04ZMorten OfstadAdd options for adaptive streamingAll the code to do the adaptive requests and decompression is there, we need to add the options to actually use it...All the code to do the adaptive requests and decompression is there, we need to add the options to actually use it...Version 2.0Morten OfstadMorten Ofstadhttps://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/issues/190Add OSDU manifest generation capability2023-06-02T14:03:18ZMorten OfstadAdd OSDU manifest generation capabilityVDSInfo (or maybe a new vds utility) should be able to generate OSDU compliant JSON manifest for ingesting VDS. This was suggested by Juliana Fernandes (@fernandes_jfa) and would make life a lot easier when interacting with the OSDU inge...VDSInfo (or maybe a new vds utility) should be able to generate OSDU compliant JSON manifest for ingesting VDS. This was suggested by Juliana Fernandes (@fernandes_jfa) and would make life a lot easier when interacting with the OSDU ingestion service.https://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/issues/84Add possibility to configure HTTP version using Env vars.2021-06-21T11:27:02ZYan Sushchynski (EPAM)Add possibility to configure HTTP version using Env vars.As Google API doesn't work with HTTP2, it will be useful to configure HTTP version in CURL requests using Environmental variables. At the current moment during SEGYImport command with the destination in SeismicDMS we get the following er...As Google API doesn't work with HTTP2, it will be useful to configure HTTP version in CURL requests using Environmental variables. At the current moment during SEGYImport command with the destination in SeismicDMS we get the following error:
```
[0] (ERROR) HTTPRequest::Send, performing request, detailed error: HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1) The error occurred while executing an HTTP request. error code: 92, error message: 'Stream error in the HTTP/2 framing layer']
Retrying http_request for POST request with https://storage.googleapis.com/upload/storage/v1/b/<bucket>/o?uploadType=multipart - retry number: 1
```
The same request with HTTP/1.1 works well.
https://curl.se/libcurl/c/CURLOPT_HTTP_VERSION.htmlhttps://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/issues/66Add start time/depth determination and override to SEGYImport2021-01-21T13:41:52ZMorten OfstadAdd start time/depth determination and override to SEGYImportWe need to read the start time trace header field to create the axis descriptor for the time/depth axis and we need to provide a command-line parameter with an override if the information in the trace header is wrong.We need to read the start time trace header field to create the axis descriptor for the time/depth axis and we need to provide a command-line parameter with an override if the information in the trace header is wrong.Version 2.0Morten OfstadMorten Ofstadhttps://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/issues/155Allocation error when using openvds.whl2023-03-28T14:58:41ZSubha RamAllocation error when using openvds.whlCurrently trying to read a .vds from SDMS using vds = openvds.open(URL,connection_string).
Get the following error:
RuntimeError: Error on downloading VolumeDataLayout object: bad allocation.
Any suggestions ?Currently trying to read a .vds from SDMS using vds = openvds.open(URL,connection_string).
Get the following error:
RuntimeError: Error on downloading VolumeDataLayout object: bad allocation.
Any suggestions ?https://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/issues/194allow limiting OpenMP/ThreadPool num of threads at runtime (via omp_num_threads)2023-07-12T13:55:36ZFilip Brzękallow limiting OpenMP/ThreadPool num of threads at runtime (via omp_num_threads)Hello,
It seems, that setting `OMP_NUM_THREADS=<int>` doesn't seem to have an effect, due to constants and limiting logic `src/OpenVDS/VDS/WaveletOpenMP.h`
and
```c++
#define WAVELET_OPENMP_SSE_THREAD_COUNT 4
#define WAVELET_OPENMP_MEM...Hello,
It seems, that setting `OMP_NUM_THREADS=<int>` doesn't seem to have an effect, due to constants and limiting logic `src/OpenVDS/VDS/WaveletOpenMP.h`
and
```c++
#define WAVELET_OPENMP_SSE_THREAD_COUNT 4
#define WAVELET_OPENMP_MEMORY_THREAD_COUNT 2
namespace Wavelet {
inline int Wavelet_GetEffectiveOpenMPThreadCount(int wantedThreadCount)
{
return std::max(1, std::min(omp_get_num_procs() - 2, wantedThreadCount));
}
}
```
and how that's used here
```log
src/OpenVDS/VDS/WaveletAdaptiveLLDecompress.cpp:537: const int threadCount = Wavelet_GetEffectiveOpenMPThreadCount(WAVELET_OPENMP_SSE_THREAD_COUNT);
src/OpenVDS/VDS/WaveletAdaptiveLLDecompress.cpp:666: const int threadCount = Wavelet_GetEffectiveOpenMPThreadCount(WAVELET_OPENMP_SSE_THREAD_COUNT);
src/OpenVDS/VDS/WaveletDecompress.cpp:636: WaveletTransform_InverseTransform_SSE(Wavelet_GetEffectiveOpenMPThreadCount(WAVELET_OPENMP_SSE_THREAD_COUNT), tempBuffer.data(), tempBufferSize, source, m_transformIterations, m_bandSize, m_transformMask, m_allocatedSizeX, m_allocatedSizeXY, m_integerInfo);
```
which always defaults to `omp_get_num_procs`, which is not ideal if the underlying machine is shared between workloads, it's spawning threads either based on `WAVELET_OPENMP_SSE_THREAD_COUNT 4` or `num_procs - 2`, whereas we would like to control max allowed by `OMP_NUM_THREADS`.
Is this something that can be improved? Or there are some designs for WaveletAdaptive implementation, that must have at least 4 compute threads.
context: Our recent observation yielded ~200+ Open VDSCopy threads on a 100+ core machine, which is of a shared nature, causing some other problems and unpredictable bursts of load when VDSCopy is invoked.
EDIT: seems the rest of the threads might be coming from threadPool, can we have a runtime limitation for this as well?
```log
src/OpenVDS/IO/IOManagerInMemory.cpp:11: , m_threadPool(std::thread::hardware_concurrency())
src/OpenVDS/VDS/VolumeDataRequestProcessor.cpp:1721: , m_threadPool(std::thread::hardware_concurrency())
```
I can submit a PR if you like.
Thanks,
Filiphttps://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/issues/170Allow VDSCopy to overwrite existing SDMS dataset: `--allow-overwrite`2023-03-15T08:22:49ZFilip BrzękAllow VDSCopy to overwrite existing SDMS dataset: `--allow-overwrite`Hello,
first of all, thank you very much for the great `3.1` release, and re-implementation of `IOManagers`, for SDMS, it's been very helpful as `sdapi` was troublesome.
While examining new IOManagers with `OPENVDS_DMS_CURL=1`, I have ...Hello,
first of all, thank you very much for the great `3.1` release, and re-implementation of `IOManagers`, for SDMS, it's been very helpful as `sdapi` was troublesome.
While examining new IOManagers with `OPENVDS_DMS_CURL=1`, I have noticed a change in the behavior, that prevents us from writing bulk trace data (VDS content) into the previously created dataset (with the metadata we require), that doesn't yet have any data loaded.
```shell
OPENVDS_DMS_CURL=1 AWS_REGION=us-east-1 VDSCopy ./data/syntethic_data.wavelet.vds sd://osdu/<test-project>/demo-1
[CURL http respons error 409. Automatic rety https://<REDACTED>/api/seismic-store/v3/dataset/tenant/osdu/subproject/<REDACTED>/dataset/demo-1?path=%2F]
...
[Could not create VDS sd://osdu/<REDACTED>/gsi-demo-1] Seismic dms lock failed: Http error respons: 409 -> https://<REDACTED>/api/seismic-store/v3/dataset/tenant/osdu/subproject/<REDACTED>/dataset/demo-1?path=%2F
- [seismic-store-service] The dataset sd://osdu/<REDACTED>/demo-1 already exists[seismic-store-service]
```
when it's run through old DMS flow (using `sdapi`), it's happy to ignore 409, and proceed to write it, command for the reference, but it's results in `seg-fault` at the end (it was reported here #123)
```
AWS_REGION=us-east-1 VDSCopy ./data/syntethic_data.wavelet.vds sd://osdu/<test-project>/demo-1
```
Is it possible to add `--allow-overwrite` similar to the flag available in `VDSUploader.sh` in HueSpace SDK, which would ignore 409, when the dataset was created previously?
Rationale: we want to have control over how the dataset is created in SDMS, for data-lineage reasons, for which we need to create it ourselves, and then populate sd location with VDS content.
Regards,
Filip
PS. Is there a way to submit a feature request for `VDSUploader.sh` as well? If so what's the best channel? We've been exploring both tools for loading bulk data to OSDU, and we're seeing some gaps e.g. in S3 auth (only profile/dedicated role auth flow available), and no control over the dataset name when loading to SDMS, it generates random name, which prevents from targeting previously created dataset.https://community.opengroup.org/osdu/platform/domain-data-mgmt-services/seismic/open-vds/-/issues/171Angular interpolation does not return original values2023-06-15T16:21:27ZAlena ChaikouskayaAngular interpolation does not return original valuesHi,
I've been trying to understand openvds interpolation behavior and noticed the following.
Interpolation documentation says that
> The sampled value will be exactly equal to the original at the voxel center, regardless of the interpol...Hi,
I've been trying to understand openvds interpolation behavior and noticed the following.
Interpolation documentation says that
> The sampled value will be exactly equal to the original at the voxel center, regardless of the interpolation method used.
But I observe on my synthetic file [test.vds](/uploads/629b6b4d6052de8a6d2562395cff3721/test.vds) that this doesn't hold. For the voxel middle points 4 methods return same data (as I would expect), but angular interpolation returns something different.
```
#include <OpenVDS/OpenVDS.h>
#include <OpenVDS/VolumeDataLayout.h>
#include <OpenVDS/VolumeDataAccess.h>
#include <iostream>
#include <map>
int main(int argc, char *argv[]) {
/*
| xlines-ilines | 1 | 3 | 5 |
|---------------|--------------------|--------------------|--------------------|
| 10 | 100, 101, 102, 103 | 108, 109, 110, 111 | 116, 117, 118, 119 |
| 11 | 104, 105, 106, 107 | 112, 113, 114, 115 | 120, 121, 122, 123 |
*/
std::string url = "file://test.vds";
std::string connectionString = "";
OpenVDS::Error error;
OpenVDS::VDSHandle handle = OpenVDS::Open(url, connectionString, error);
OpenVDS::VolumeDataAccessManager accessManager = OpenVDS::GetAccessManager(handle);
OpenVDS::VolumeDataLayout const *layout = accessManager.GetVolumeDataLayout();
int sampleCount0 = layout->GetDimensionNumSamples(0);
int traceCount = 1;
// Angular is correct only for (1.5, 0.5)
float inlineValue = 2.5; // choose from 0.5, 1.5 and 2.5
float xlineValue = 1.5; // choose from 0.5 and 1.5
std::vector<float> buffer(traceCount * sampleCount0);
float tracePos[traceCount][6];
for (int trace = 0; trace < traceCount; trace++)
{
tracePos[trace][0] = 0;
tracePos[trace][1] = xlineValue;
tracePos[trace][2] = inlineValue;
tracePos[trace][3] = 0;
tracePos[trace][4] = 0;
tracePos[trace][5] = 0;
}
std::map<std::string, OpenVDS::InterpolationMethod> interpolations{
{"Nearest", OpenVDS::InterpolationMethod::Nearest},
{"Linear", OpenVDS::InterpolationMethod::Linear},
{"Cubic", OpenVDS::InterpolationMethod::Cubic},
{"Triangular", OpenVDS::InterpolationMethod::Triangular},
{"Angular", OpenVDS::InterpolationMethod::Angular}
};
for (const auto& interpolation : interpolations) {
auto request = accessManager.RequestVolumeTraces(
buffer.data(),
buffer.size() * sizeof(float),
OpenVDS::Dimensions_12, // I understand it doesn't matter if it is Dimensions_12 or Dimensions_012
0,
0,
tracePos,
traceCount,
interpolation.second,
0
);
request.get()->WaitForCompletion();
std::cout << "Interpolation " << interpolation.first <<": " ;
for (float f: buffer) {
std::cout << f << ' ';
}
std::cout << "\n" << std::flush;
}
}
```
(my openvds version is some 3.1-ish build, but I do not see anything about changes to angular interpolation in release notes, so I assume it's the same)
Am I doing something wrong?