我正在使用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”,但模型无法正确缩放(我希望将其缩放以适合我的...
ZoomToExtentsWhenLoaded属性是ViewPort的属性,从WPF UserControl的角度来看,当“ Loaded”时它将为空。 ViewPort的内容是一个ModelVisual3D,它绑定到您已在ViewModel中公开的Model3DGroup,并且只有在控件加载后才进行更新。