使用 Emscripten 从 C++ 调用 TypeScript 方法

问题描述 投票:0回答:0

以下是我的 TypeScript 代码:

export class VtkWasmRenderComponent extends EmscriptenWasmComponent implements AfterViewInit, OnDestroy {
 .....
 .....
 .....

  vtkCameraChanged(cameraChangeEvent: CameraChangeEvent) {
    if (cameraChangeEvent === this.lastCameraChangeEvent) return;
    this.lastCameraChangeEvent = cameraChangeEvent;
    this.cameraChange.next(cameraChangeEvent);
  }
}

在我的 C++ 文件中,我有以下内容:

using namespace emscripten;
/*
extern "C" {
  extern void vtkCameraChanged(CameraChangeEvent positionChange);
}
*/

void vtkCallbackFunc(vtkObject* caller, long unsigned int evId,
                     void* clientData, void* /*callData*/)
{
  // Note the use of reinterpret_cast to cast the caller and callData to the
  // expected types.
  auto interactor = reinterpret_cast<vtkRenderWindowInteractor*>(caller);
  std::cout << "  Event Id: " << std::endl;
  auto renderer = reinterpret_cast<vtkRenderer*>(clientData);
   CameraChangeEvent positionChange;
    positionChange.position = renderer->GetActiveCamera()->GetPosition();
    positionChange.viewAngle = renderer->GetActiveCamera()->GetViewAngle();
    positionChange.clippingRange = renderer->GetActiveCamera()->GetClippingRange();
    positionChange.focalPoint = renderer->GetActiveCamera()->GetFocalPoint();
    positionChange.parallelProjection = renderer->GetActiveCamera()->GetParallelProjection();
    positionChange.parallelProjection = renderer->GetActiveCamera()->GetParallelProjection();
    positionChange.viewUp = renderer->GetActiveCamera()->GetViewUp();
    positionChange.parallelScale = renderer->GetActiveCamera()->GetParallelScale();
    val vtkWasm = val::global("VtkWasmRenderComponent").new_();
    vtkWasm.call<void>("vtkCameraChanged", positionChange); // calling the vtkCameraChange function
    
};

使用 emscripten 从 C++ 文件调用 TypeScript 文件中的

vtkCameraChange
方法的正确方法是什么?我已经按照文档中所述使用了 val,但是,它似乎不起作用。

javascript c++ typescript vtk emscripten
© www.soinside.com 2019 - 2024. All rights reserved.