Ho bisogno di un Viewport3D
per il solo scopo di fare calcoli geometrici utilizzando Petzold.Media3D.ViewportInfo
. Preferirei non doverlo posizionare in un Window
o altrimenti renderlo.E 'possibile che un controllo WPF abbia un ActualWidth e ActualHeight se non è mai stato reso?
Sto tentando di raggiungere questo istanziando un Viewport3D
e impostando alcune proprietà utilizzando il seguente metodo di 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;
}
Più tardi, sto cercando di utilizzare questa finestra per convertire la posizione del mouse ad un Posizione 3D utilizzando questo metodo:
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;
}
Sfortunatamente, non funziona. Penso che il motivo sia che lo ActualWidth
e il ActualHeight
del viewport sono entrambi zero (e queste sono proprietà di sola lettura, quindi non posso impostarle manualmente). (Nota:. Ho testato lo stesso metodo esatto con un vero e proprio reso Viewport3D
, ed ha funzionato benissimo, quindi so che il problema non è con il mio metodo convertitore)
Qualsiasi idea di come posso ottenere WPF per assegnare il ActualWidth
e ActualHeight
di un controllo basato sulle impostazioni Width
e Height
?
Ho provato a regolare il HorizontalAlignment
e VerticalAlignment
a Left
e Top
, rispettivamente, e sono anche pasticciato con il MinWidth
e MinHeight
, ma nessuna di queste proprietà avuto alcun effetto sul ActualWidth
o ActualHeight
.
Funziona come un incanto, grazie. – devuxer
Fantastico, sono contento che funzioni. Anche imparato qualcosa di nuovo qui. :) – gehho