Potrzebuję Viewport3D
wyłącznie w celu wykonywania obliczeń geometrycznych przy użyciu Petzold.Media3D.ViewportInfo
. Wolałbym nie umieszczać go w postaci Window
lub w inny sposób renderować go.Czy jest możliwe, aby formant WPF miał ActualWidth i ActualHeight, jeśli nigdy nie był renderowany?
ja próbuje osiągnąć poprzez utworzenie wystąpienia Viewport3D
i ustawienie kilku właściwości, stosując następujące metody 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;
}
Później, ja próbuje wykorzystać tę rzutnię do konwertowania lokalizację myszy w Lokalizacja 3D przy użyciu tej metody:
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;
}
Niestety, to nie działa. Myślę, że powodem jest, że ActualWidth
i ActualHeight
z rzutni są zerem (i są to właściwości tylko do odczytu, więc nie mogę ich ustawić ręcznie). (Uwaga:. Ja testowałem dokładnie ten sam sposób o rzeczywistym renderowane Viewport3D
, i to działało dobrze, więc wiem, że problem nie jest z mojej metody konwertera)
jakiś pomysł jak mogę uzyskać WPF przypisać ActualWidth
i ActualHeight
sterowania na podstawie ustawień Width
i Height
?
Próbowałem ustawienie HorizontalAlignment
i VerticalAlignment
do Left
i Top
, odpowiednio, i ja również pomieszane z MinWidth
i MinHeight
, ale żadna z tych właściwości miał żadnego wpływu na ActualWidth
lub ActualHeight
.
Działa jak wdzięk, dzięki. – devuxer
Fajnie, cieszę się, że to działa. Nauczyłem się też czegoś nowego tutaj. :) – gehho