我需要一个Viewport3D
用于进行几何计算的唯一目的Petzold.Media3D.ViewportInfo
。我宁愿不必将它放在 a 中Window
或以其他方式渲染它。
我试图通过Viewport3D
使用以下 C# 方法实例化 a 并设置一些属性来完成此操作:
private Viewport3D CreateViewport(MainSettings settings)
{
var cameraPosition = new Point3D(0, 0, settings.CameraHeight);
var cameraLookDirection = new Vector3D(0, 0, -1);
var cameraUpDirection = new Vector3D(0, 1, 0);
var camera = new PerspectiveCamera
{
Position = cameraPosition,
LookDirection = cameraLookDirection,
UpDirection = cameraUpDirection
};
var viewport = new Viewport3D
{
Camera = camera,
Width = settings.ViewportWidth,
Height = settings.ViewportHeight
};
return viewport;
}
稍后,我尝试使用此视口使用此方法将鼠标位置转换为 3D 位置:
public Point3D? Point2dToPoint3d(Point point)
{
var range = new LineRange();
var isValid = ViewportInfo.Point2DtoPoint3D(_viewport, point, out range);
if (isValid)
return range.PointFromZ(0);
else
return null;
}
不幸的是,它不起作用。我认为原因是视口的ActualWidth
和ActualHeight
都是零(这些是只读属性,所以我不能手动设置它们)。(注意:我已经用实际的 render 测试了完全相同的方法Viewport3D
,并且效果很好,所以我知道问题不在于我的转换器方法。)
知道如何让 WPF根据and设置分配控件的ActualWidth
and吗?ActualHeight
Width
Height
我尝试将HorizontalAlignment
and分别设置为 and ,我也弄乱了VerticalAlignment
and Left
,但是这些属性都没有对or产生任何影响。Top
MinWidth
MinHeight
ActualWidth
ActualHeight