I am using HelixToolkit to display 3D Models in WPF. The loading works fine but the model is not zoomed properly though I am using ZoomExtentWhenLoaded="True" (I expect it to be zoomed to fit into my window). The Model is provided in the ViewModel and added to the viewport via Binding.
Here's my code:
The View
<h:HelixViewport3D ZoomExtentsWhenLoaded="True">
<h:HelixViewport3D.Camera>
<PerspectiveCamera/>
</h:HelixViewport3D.Camera>
<h:DefaultLights/>
<ModelVisual3D Content="{Binding CurrentModel}" />
</h:HelixViewport3D>
and parts of the 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;
}
}
...
I tried to use an attached property instead of ZoomExtentsWhenLoaded="True" and trigger ZoomExtents() from there, but cannot seem to find the right event that is actually triggered, when I change the model. How can I get ZoomExtentsWhenLoaded to work properly? Or is it the wrong property after all? How can I set zoom and transformation to fit the model into my window? Thank you for your help!