我需要一个Viewport3D,只是为了使用Petzold.Media3D.ViewportInfo进行几何计算。我希望不必将其放置在Window或以其他方式呈现。
我尝试通过实例化Viewport3D并使用以下C#方法设置一些属性来完成此操作:
很不幸,它没有起作用。我认为原因是视口的
有什么办法可以让WPF根据
我尝试将
我尝试通过实例化Viewport3D并使用以下C#方法设置一些属性来完成此操作:
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
都为零(这些是只读属性,因此我无法手动设置它们)。 (注意:我已经使用实际呈现的Viewport3D
测试了完全相同的方法,它可以正常工作,因此我知道问题不在于我的转换器方法。)有什么办法可以让WPF根据
Width
和Height
设置来分配控件的ActualWidth
和ActualHeight
吗?我尝试将
HorizontalAlignment
和VerticalAlignment
设置为Left
和Top
,并且还调整了MinWidth
和MinHeight
,但是这些属性对ActualWidth
或ActualHeight
没有任何影响。