Я использую 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 работать должным образом? Или это неправильное свойство в конце концов? Как я могу настроить масштабирование и трансформацию, чтобы подогнать модель к моему окну? Спасибо за вашу помощь!