HelixToolkit ZoomExtentsWhenLoaded and Binding - PullRequest
       45

HelixToolkit ZoomExtentsWhenLoaded and Binding

0 голосов
/ 26 февраля 2020

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

...