FWIW…
I added a temporary wrapper class to my C++/CLI project to avoid #including vtkTransform.h directly. The code is below. I set the compiler option for that wrapper class to be non-managed (“No Common Language RunTime Support”). Then all my managed code uses this wrapper class. YMMV on the methods you have to expose through the wrapper… I exposed just the ones I needed. In the end, when this is fixed in VTK 9.3 (or whatever), I’ll just revert back from using vtkTransformWrapper instances to vtkTransform instances.
vtkTransformWrapper.h:
#pragma once
class vtkTransform;
class vtkProp3D;
class vtkCamera;
class vtkTransformWrapper
{
public:
vtkTransformWrapper();
~vtkTransformWrapper();
void Delete();
static vtkTransformWrapper* New();
void Translate(double x, double y, double z);
void Scale(double x, double y, double z);
void PostMultiply();
void RotateWXYZ(double angle, double x, double y, double z);
vtkTransform* GetTransform();
void SetPropUserTransform(vtkProp3D* prop);
void ApplyCameraTransform(vtkCamera* cam);
protected:
vtkTransform* _theTransform = nullptr;
};
vtkTransformWrapper.cpp
#include "stdafx.h"
#include "vtkTransformWrapper.h"
#include "vtkTransform.h"
#include "vtkProp3D.h"
#include "vtkCamera.h"
vtkTransformWrapper::vtkTransformWrapper()
{
_theTransform = vtkTransform::New();
}
vtkTransformWrapper::~vtkTransformWrapper()
{
if (_theTransform != nullptr)
{
_theTransform->Delete();
_theTransform = nullptr;
}
}
void vtkTransformWrapper::Delete()
{
delete this;
}
vtkTransformWrapper* vtkTransformWrapper::New()
{
return new vtkTransformWrapper();
}
void vtkTransformWrapper::Translate(double x, double y, double z)
{
if (_theTransform != nullptr)
{
_theTransform->Translate(x, y, z);
}
}
void vtkTransformWrapper::Scale(double x, double y, double z)
{
if (_theTransform != nullptr)
{
_theTransform->Scale(x, y, z);
}
}
void vtkTransformWrapper::PostMultiply()
{
if (_theTransform != nullptr)
{
_theTransform->PostMultiply();
}
}
void vtkTransformWrapper::RotateWXYZ(double angle, double x, double y, double z)
{
if (_theTransform != nullptr)
{
_theTransform->RotateWXYZ(angle, x, y, z);
}
}
vtkTransform* vtkTransformWrapper::GetTransform()
{
return _theTransform;
}
void vtkTransformWrapper::SetPropUserTransform(vtkProp3D* prop)
{
prop->SetUserTransform(_theTransform);
}
void vtkTransformWrapper::ApplyCameraTransform(vtkCamera* cam)
{
cam->ApplyTransform(_theTransform);
}