Necesito un Viewport3D
con el único propósito de hacer cálculos geométricos usando Petzold.Media3D.ViewportInfo
. Preferiría no tener que colocarlo en un Window
o hacerlo de otra forma.¿Es posible que un control WPF tenga un Ancho real y una Altura real si nunca se ha procesado?
Estoy intentando lograr esto creando una instancia de un Viewport3D
y fijando algunas características con el siguiente método de 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;
}
Más tarde, estoy de intentar utilizar este visor para convertir la ubicación del ratón a una Ubicación 3D con este método:
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;
}
Lamentablemente, no está funcionando. Creo que la razón es que ActualWidth
y ActualHeight
de la ventana gráfica son cero (y estas son propiedades de solo lectura, por lo que no puedo configurarlas manualmente). (Nota:. He probado el mismo método exacto con una real prestado Viewport3D
, y ha funcionado muy bien, así que sé que el problema no es con mi método de convertidor)
alguna idea de cómo puedo conseguir WPF para asignar el ActualWidth
y ActualHeight
de un control basado en las configuraciones Width
y Height
?
I intentado fijar la HorizontalAlignment
y VerticalAlignment
a Left
y Top
, respectivamente, y también he metido con el MinWidth
y MinHeight
, pero ninguna de estas propiedades tenido ningún efecto sobre la ActualWidth
o ActualHeight
.
Funciona como un encanto, gracias. – devuxer
Genial, me alegra que funcione. También aprendí algo nuevo aquí. :) – gehho