Viewport3D
を使用して幾何学的計算を行うという唯一の目的のためにが必要Petzold.Media3D.ViewportInfo
です。に配置しWindow
たり、レンダリングしたりする必要はありません。
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
正常に機能したため、コンバーターメソッドに問題がないことはわかっています。)
と設定に基づいてコントロールのActualWidth
とをWPFに割り当てる方法はありますか?ActualHeight
Width
Height
とをそれぞれHorizontalAlignment
とVerticalAlignment
に設定してみましたが、ともいじりましたが、これらのプロパティはいずれもまたはに影響を与えませんでした。Left
Top
MinWidth
MinHeight
ActualWidth
ActualHeight