4#ifndef vtkWebAssemblySessionHelper_h
5#define vtkWebAssemblySessionHelper_h
7#include <emscripten/val.h>
9#include "vtkABINamespace.h"
16VTK_ABI_NAMESPACE_BEGIN
29using namespace emscripten;
32thread_local const val Uint8Array = val::global(
"Uint8Array");
33thread_local const val Uint32Array = val::global(
"Uint32Array");
34thread_local const val JSON = val::global(
"JSON");
35thread_local const val Array = val::global(
"Array");
38std::map<std::string, std::function<bool(
const vtkDataArray*)>> IsJSArraySameTypeAsVtkDataArray = {
39 {
"Uint8Array", [](
const vtkDataArray* dataArray) ->
bool {
return dataArray->GetDataType() == VTK_TYPE_UINT8; }},
40 {
"Uint8ClampedArray", [](
const vtkDataArray* dataArray) ->
bool {
return dataArray->GetDataType() == VTK_TYPE_UINT8; }},
41 {
"Uint16Array", [](
const vtkDataArray* dataArray) ->
bool {
return dataArray->GetDataType() == VTK_TYPE_UINT16; }},
42 {
"Uint32Array", [](
const vtkDataArray* dataArray) ->
bool {
return dataArray->GetDataType() == VTK_TYPE_UINT32; }},
43 {
"Int8Array", [](
const vtkDataArray* dataArray) ->
bool {
return dataArray->GetDataType() == VTK_TYPE_INT8; }},
44 {
"Int16Array", [](
const vtkDataArray* dataArray) ->
bool {
return dataArray->GetDataType() == VTK_TYPE_INT16; }},
45 {
"Float32Array", [](
const vtkDataArray* dataArray) ->
bool {
return dataArray->GetDataType() == VTK_TYPE_FLOAT32; }},
46 {
"Float64Array", [](
const vtkDataArray* dataArray) ->
bool {
return dataArray->GetDataType() == VTK_TYPE_FLOAT64; }},
47 {
"Int32Array", [](
const vtkDataArray* dataArray) ->
bool {
return dataArray->GetDataType() == VTK_TYPE_INT32; }},
48 {
"BigInt64Array", [](
const vtkDataArray* dataArray) ->
bool {
return dataArray->GetDataType() == VTK_TYPE_INT64; }},
49 {
"BigUint64Array", [](
const vtkDataArray* dataArray) ->
bool {
return dataArray->GetDataType() == VTK_TYPE_UINT64; }},
66 const auto jsonString = JSON.call<val>(
"stringify", inputJson->JsonValue).as<std::string>();
67 const auto length = jsonString.length();
68 char* result =
new char[
length + 1];
69 snprintf(result, length + 1,
"%s", jsonString.c_str());
75 result->
JsonValue = JSON.call<val>(
"parse", std::string(inputString));
82struct CopyJSArrayToVTKDataArray
84 template <
typename ArrayT>
85 void operator()(ArrayT* dataArray,
const emscripten::val& jsArray)
87 const auto length = jsArray[
"length"].as<std::size_t>();
88 auto memoryView = emscripten::val{ typed_memory_view(length, dataArray->GetPointer(0)) };
89 memoryView.call<
void>(
"set", jsArray);
vtkSessionJsonParseFunc ParseJson
int InteractorManagesTheEventLoop
vtkSessionJsonStringifyFunc StringifyJson
emscripten::val JsonValue
Appends types/TypeLists to TypeList TList and stores the result in Result.
This header file provides the C API for working with standalone/remote visualization applications.
struct vtkSessionImpl * vtkSession
struct vtkSessionJsonImpl * vtkSessionJson
vtkTypeList::Append< vtkArrayDispatch::AOSArrays, vtkBitArray >::Result Arrays