以下是我的 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,但是,它似乎不起作用。