HelixToolkit ZoomExtentsWhen Loaded and Binding

问题描述 投票:0回答:1

我正在使用HelixToolkit在WPF中显示3D模型。加载工作正常,但是虽然我使用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才能正常工作?还是毕竟是错误的属性?如何设置缩放和变换以使模型适合我的窗口?谢谢您的帮助!

我正在使用HelixToolkit在WPF中显示3D模型。加载工作正常,但是虽然我使用ZoomExtentWhenLoaded =“ True”,但模型无法正确缩放(我希望将其缩放以适合我的...

wpf 3d helix-3d-toolkit
1个回答
0
投票

ZoomToExtentsWhenLoaded属性是ViewPort的属性,从WPF UserControl的角度来看,当“ Loaded”时它将为空。 ViewPort的内容是一个ModelVisual3D,它绑定到您已在ViewModel中公开的Model3DGroup,并且只有在控件加载后才进行更新。

© www.soinside.com 2019 - 2024. All rights reserved.