Я использую HelixToolkit для отображения 3D-моделей в WPF. Загрузка работает нормально, но модель не масштабируется должным образом, хотя я использую ZoomExtentWhenLoaded="True" (я ожидаю, что она будет увеличена, чтобы соответствовать моему окну). Модель предоставляется в ViewModel и добавляется в область просмотра через Binding.
Вот мой код:
Вид
<h:HelixViewport3D ZoomExtentsWhenLoaded="True">
<h:HelixViewport3D.Camera>
<PerspectiveCamera/>
</h:HelixViewport3D.Camera>
<h:DefaultLights/>
<ModelVisual3D Content="{Binding CurrentModel}" />
</h:HelixViewport3D>
и части ViewModel
Model3DGroup _currentModel;
public Model3DGroup CurrentModel
{
get { return _currentModel; }
set
{
_currentModel = value;
OnPropertyChanged(nameof(CurrentModel));
}
}
private void OnModelSelectionChanged(object sender, EventArgs args)
{
...
if (SelectedModel == null)
return;
var model = LoadModelFromFile(SelectedModel.Path);
CurrentModel = model;
}
private Model3DGroup LoadModelFromFile(string objPath, string texturePath = "")
{
try
{
ObjReader objReader = new ObjReader();
var model = objReader.Read(objPath);
ApplyTexture(model, texturePath);
return model;
}
catch (Exception e)
{
...
}
return null;
}
private void ApplyTexture(Model3DGroup model, string texture)
{
...
Material material;
if (!string.IsNullOrEmpty(texture))
{
material = MaterialHelper.CreateImageMaterial(texture);
}
else
{
material = MaterialHelper.CreateMaterial(Colors.LightBlue);
}
foreach (var m in model.Children)
{
var mGeo = m as GeometryModel3D;
mGeo.Material = material;
}
}
...
Я попытался использовать прикрепленное свойство вместо ZoomExtentsWhenLoaded="True" и запустить ZoomExtents() оттуда, но не могу найти правильное событие, которое фактически запускается при изменении модели. Как я могу заставить ZoomExtentsWhenLoaded работать правильно? Или это все-таки неправильное свойство? Как настроить масштабирование и трансформацию, чтобы модель подошла к моему окну? Спасибо за помощь!