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に割り当てる方法はありますか?ActualHeightWidthHeight
とをそれぞれHorizontalAlignmentとVerticalAlignmentに設定してみましたが、ともいじりましたが、これらのプロパティはいずれもまたはに影響を与えませんでした。LeftTopMinWidthMinHeightActualWidthActualHeight