WPF Helix如何在代码中"zoom extent" viewport3d?
WPF Helix how to "zoom extent" viewport3d in code?
所以我的 "view" 程序集中有这个 xaml 代码:
<helix:HelixViewport3D ZoomExtentsWhenLoaded="True"
ShowCoordinateSystem="True"
IsMoveEnabled="False"
Margin="5,5,5,0">
<helix:HelixViewport3D.Camera>
<OrthographicCamera LookDirection="1,1,-1"
Position="{Binding CameraPosition}"
UpDirection="0,0,1">
</OrthographicCamera>
</helix:HelixViewport3D.Camera>
<ModelVisual3D Content="{Binding Lights}"/>
<local:ScatterPlotVisual3D Points="{Binding Data}"
SolutionPoints="{Binding Solution}"
SurfaceBrush="{Binding SurfaceBrush}"/>
</helix:HelixViewport3D>
在 "view-model" 程序集中,我正在将一些数据加载到 ScatterPlotVisual3D 中,它会创建新图(显示一些点、边界框、标签等):
private Model3D CreateModel()
{
var plotModel = new Model3DGroup();
if (Points == null && SolutionPoints == null) return plotModel;
List<Point3D> allPoints = new List<Point3D>();
if (Points != null && Points.Length != 0)
{
plotModel.Children.Add(CreatePointsModel(Points, Brushes.Green));
allPoints.AddRange(Points);
}
if (SolutionPoints != null && SolutionPoints.Length != 0)
{
plotModel.Children.Add(CreatePointsModel(SolutionPoints, Brushes.Red));
allPoints.AddRange(SolutionPoints);
}
CreateBoundaryAxis(plotModel, allPoints);
return plotModel;
}
所以我需要做的是在加载数据时强制 HelixViewport3D 进入 "doing" ZoomExtents()(或任何其他类似的缩放相机以适应模型的方式)。
问题:我无法调用 ZoomExtents(),因为我没有任何对 XAML
中声明的 helix:HelixViewport3D 的引用
您可以在 C# 代码中创建对 Helixviewport 的引用,方法是在 xaml:
中为其分配一个名称
<helix:HelixViewport3D Name="NameYouChoose"
ZoomExtentsWhenLoaded="True"
ShowCoordinateSystem="True"
IsMoveEnabled="False"
Margin="5,5,5,0">
然后在 C# 代码中,只需在子项更新后调用以下命令即可。
NameYouChoose.ZoomExtents()
我刚刚将事件添加到我的 ScatterPlotVisual3D 并将 xaml 中的此事件分配给视图的私有函数,该函数可以访问 HelixViewport3D 并在其上调用 ZoomExtents()。现在我在加载数据时调用我的事件
所以我的 "view" 程序集中有这个 xaml 代码:
<helix:HelixViewport3D ZoomExtentsWhenLoaded="True"
ShowCoordinateSystem="True"
IsMoveEnabled="False"
Margin="5,5,5,0">
<helix:HelixViewport3D.Camera>
<OrthographicCamera LookDirection="1,1,-1"
Position="{Binding CameraPosition}"
UpDirection="0,0,1">
</OrthographicCamera>
</helix:HelixViewport3D.Camera>
<ModelVisual3D Content="{Binding Lights}"/>
<local:ScatterPlotVisual3D Points="{Binding Data}"
SolutionPoints="{Binding Solution}"
SurfaceBrush="{Binding SurfaceBrush}"/>
</helix:HelixViewport3D>
在 "view-model" 程序集中,我正在将一些数据加载到 ScatterPlotVisual3D 中,它会创建新图(显示一些点、边界框、标签等):
private Model3D CreateModel()
{
var plotModel = new Model3DGroup();
if (Points == null && SolutionPoints == null) return plotModel;
List<Point3D> allPoints = new List<Point3D>();
if (Points != null && Points.Length != 0)
{
plotModel.Children.Add(CreatePointsModel(Points, Brushes.Green));
allPoints.AddRange(Points);
}
if (SolutionPoints != null && SolutionPoints.Length != 0)
{
plotModel.Children.Add(CreatePointsModel(SolutionPoints, Brushes.Red));
allPoints.AddRange(SolutionPoints);
}
CreateBoundaryAxis(plotModel, allPoints);
return plotModel;
}
所以我需要做的是在加载数据时强制 HelixViewport3D 进入 "doing" ZoomExtents()(或任何其他类似的缩放相机以适应模型的方式)。
问题:我无法调用 ZoomExtents(),因为我没有任何对 XAML
您可以在 C# 代码中创建对 Helixviewport 的引用,方法是在 xaml:
中为其分配一个名称<helix:HelixViewport3D Name="NameYouChoose"
ZoomExtentsWhenLoaded="True"
ShowCoordinateSystem="True"
IsMoveEnabled="False"
Margin="5,5,5,0">
然后在 C# 代码中,只需在子项更新后调用以下命令即可。
NameYouChoose.ZoomExtents()
我刚刚将事件添加到我的 ScatterPlotVisual3D 并将 xaml 中的此事件分配给视图的私有函数,该函数可以访问 HelixViewport3D 并在其上调用 ZoomExtents()。现在我在加载数据时调用我的事件